您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays Corsi, Fenwick, and Shot data in real-time.
当前为
// ==UserScript== // @name Fancy Stats // @namespace http://some.homepage.orsomething/ // @version 1.1009 // @description Displays Corsi, Fenwick, and Shot data in real-time. // @grant none // @match http://www.nhl.com/scores/htmlreports/* // @match http://www.nhl.com/ice/gamestats.htm* // @match http://www.japersrink.com/* // @match http://www.stanleycupofchowder.com/* // @match http://www.diebytheblade.com/* // @match http://www.canescountry.com/* // @match http://www.jacketscannon.com/* // @match http://www.wingingitinmotown.com/* // @match http://www.litterboxcats.com/* // @match http://www.habseyesontheprize.com/* // @match http://www.inlouwetrust.com/* // @match http://www.lighthousehockey.com/* // @match http://www.blueshirtbanter.com/* // @match http://www.silversevensens.com/* // @match http://www.broadstreethockey.com/* // @match http://www.pensburgh.com/* // @match http://www.rawcharge.com/* // @match http://www.pensionplanpuppets.com/* // @match http://www.anaheimcalling.com/* // @match http://www.matchsticksandgasoline.com/* // @match http://www.secondcityhockey.com/* // @match http://www.milehighhockey.com/* // @match http://www.defendingbigd.com/* // @match http://www.coppernblue.com/* // @match http://www.jewelsfromthecrown.com/* // @match http://www.hockeywilderness.com/* // @match http://www.ontheforecheck.com/* // @match http://www.fiveforhowling.com/* // @match http://www.fearthefin.com/* // @match http://www.stlouisgametime.com/* // @match http://www.nucksmisconduct.com/* // @match http://www.arcticicehockey.com/* // @copyright 2012+, You // ==/UserScript== var gameEvents; var xInit=60,yInit=60,xMaxInit=320,yMaxInit=240, fontSize=16; var xscale,yscale,y2scale,scaleFactor=1,average=5; var visitor,home; var cbHash; var graph; var PAGE; var RTSS_PAGE = "http://www.nhl.com/ice/gamestats.htm?fetchKey=20152ALLSATAll&sort=gameDate&viewName=teamRTSSreports"; window.document.onload = begin(); function Curve(c,v,y2){ this.color = (typeof(c)==='undefined') ? "#000000" : c; this.vertline = (typeof(c)==='undefined') ? false : v; this.y2axis = (typeof(c)==='undefined') ? false : y2; } function Team(){ this.fullname=""; this.nickname=""; this.score=0; this.fenwick=new Curve(); this.dFenwick=new Curve(); this.corsi=new Curve(); this.dCorsi=new Curve(); this.shots=new Curve(); this.dShots=new Curve(); this.goals=new Curve('#000000',true); this.penalties=new Curve('#000000',true); } function begin(){ if(document.URL.indexOf("www.nhl.com/scores/htmlreports")>0){ if(window.top != window.self){ document.body.style.display='none'; respondToSizingMessage = function(e) { //if(e.origin == 'http://origin-domain.com') { // e.data is the string sent by the origin with postMessage. if(e.data == 'sizing?') { var h = document.getElementById('cbtable').offsetHeight; h += document.getElementById('graph').height; h += 10; var w = Math.max(document.getElementById('cbtable').offsetWidth, document.getElementById('graph').width)+10; window.top.postMessage('sizing:'+h+','+w, e.origin); } //} }; window.addEventListener('message', respondToSizingMessage, false); } Curve.prototype=new Array; gameEvents=new Array(); visitor=new Team(); home=new Team(); cbHash=new Array(); PAGE=document.URL.substring(document.URL.lastIndexOf("/")+1,document.URL.lastIndexOf(".")); loadxml(); parseEvents(); insertElements(); createCurves(); updateFromCookie(); //Load and display Fenwick data by default //curves.push(home.fenwick); //curves.push(visitor.fenwick); //drawGrid(Math.max(home.fenwick.length,visitor.fenwick.length)); //plotCurve(home.fenwick); //plotCurve(visitor.fenwick); } else if(document.URL.indexOf("www.nhl.com/ice/gamestats.htm")>0){ if( window.top != window.self && document.URL.indexOf("teamRTSSreports")>0 ){ document.getElementById("fullPage").style.display = 'none'; document.getElementById("c_copyright").style.display = 'none'; document.getElementById("c_drippan").style.display = 'none'; document.getElementById("dripTopAd").style.display = 'none'; document.getElementById("masthead").style.display = 'none'; document.getElementById("drippan").style.display = 'none'; document.getElementById("leagueSiteMenu").style.display = 'none'; var rows = document.getElementById("statsLegend").previousSibling.tBodies[0].childNodes; var t = document.createElement("table"); t.setAttribute('class','data'); var tb = document.createElement('tbody'); t.appendChild(tb); for(var i=0; i<Math.min(15,rows.length); i++){ var row = rows[i].childNodes; var tr = document.createElement('tr'); tr.appendChild(row[0].cloneNode(true)); tr.appendChild(row[2].cloneNode(true)); tr.appendChild(row[3].cloneNode(true)); tr.appendChild(row[8].cloneNode(true)); tb.appendChild(tr); } document.getElementById("pageBody").insertBefore(t,document.getElementById("fullPage")); } } else { //create an iframe element that will load the game report var d = document.createElement("div"); d.id = 'div'; d.style.position = "fixed"; d.style.right = "10px"; d.style.zIndex = "100000"; var ss = document.createElement("style"); ss.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(ss); var toggle = document.createElement("button"); toggle.textContent = 'Toggle Graph'; toggle.onclick=function(){ if(document.getElementById('frame').style.display == 'none'){ document.getElementById('frame').style.display = ''; document.getElementById('resizeBtn').style.display = ''; //document.getElementById('cookieBtn').style.display = ''; document.getElementById('switchBtn').style.display = ''; ss.innerHTML = ".l-page-wrap{margin:0 !important;}"; } else { document.getElementById('frame').style.display = 'none'; document.getElementById('resizeBtn').style.display = 'none'; //document.getElementById('cookieBtn').style.display = 'none'; document.getElementById('switchBtn').style.display = 'none'; ss.innerHTML = ""; } return; }; d.appendChild(toggle); //d.appendChild(document.createElement("br")); //document.body.insertBefore(d, document.body.firstChild); /* toggle = document.createElement("button"); toggle.textContent = 'Clear Cookie'; toggle.id='cookieBtn'; toggle.onclick=function(){ eraseCookie('myCookie'+PAGE); eraseCookie('mySize'); eraseCookie('myColors'+PAGE); eraseCookie('myAverage'+PAGE); }; d.appendChild(toggle); */ //d.appendChild(document.createElement("br")); //document.body.insertBefore(d, document.body.firstChild); toggle = document.createElement("button"); toggle.textContent = 'Resize'; toggle.id='resizeBtn'; toggle.style.display='none'; toggle.onclick=function(){ frame.contentWindow.postMessage('sizing?', '*'); }; d.appendChild(toggle); toggle = document.createElement("button"); toggle.textContent = 'Switch Game'; toggle.style.display='none'; toggle.id='switchBtn'; toggle.onclick=function(){ document.getElementById('frame').src=RTSS_PAGE; }; d.appendChild(toggle); d.appendChild(document.createElement("br")); //var sp=document.createElement('span'); //var inp=document.createElement('input'); //var t=document.createTextNode('Width:'); //inp.type='text'; //inp.size=3; //inp.setAttribute('id','average'); //sp.setAttribute('class','curves visitor'); //inp.value='400'; //inp.onchange=function(){ // document.getElementById("frame").width=document.getElementById('graph').width; // document.getElementById("div").width=this.value;}; //sp.appendChild(t); //sp.appendChild(inp); //d.appendChild(sp); document.body.insertBefore(d, document.body.firstChild); handleSizingResponse = function(e) { //if(e.origin == 'http://remote-domain.com') { var action = e.data.split(':')[0]; if(action == 'sizing') { var f = document.getElementById("frame"); f.height=e.data.split(':')[1].split(",")[0]; f.width=e.data.split(':')[1].split(",")[1]; } else { console.log("Unknown message: "+e.data); } //} }; window.addEventListener('message', handleSizingResponse, false); var frame = document.createElement("iframe"); frame.id='frame'; frame.height = "500"; frame.width = "400"; frame.style.right = "10px"; frame.setAttribute('style',"background-color:white;float:right"); frame.style.display = 'none'; frame.src = RTSS_PAGE; d.appendChild(frame); } } function loadxml(){ //var req=new XMLHttpRequest(); //req.open("GET","PL020467.HTM",false); //req.send(); //var txt=req.responseText; //var txt=document.firstChild.getElementsByTagName("body")[0].outerHTML; var txt=document.body.outerHTML; txt=txt.replace(/<img(.*?)>/ig,""); txt=txt.replace(/<head([\s\S]*?)<\/head>/ig,""); txt=txt.replace(/<html(.*?)>/ig,"<xmlnode>"); txt=txt.replace("</html>","</xmlnode>"); txt=txt.replace(/<xmlfile(.*?)>/ig,""); txt=txt.replace("</xmlfile>",""); txt=txt.replace(/<body(.*?)>/ig,""); txt=txt.replace("</body>",""); txt=txt.replace(/<br>/g,"<br/>"); txt=txt.replace(/ /g,""); txt=txt.replace(/<style([\s\S]*?)<\/style>/ig,""); txt=txt.replace(/<font([\s\S]*?)<\/font>/ig,""); txt=txt.replace(/<script([\s\S]*?)<\/script>/ig,""); //doc=document.createDocumentFragment(); var gamexml=document.createElement("div"); gamexml.id="xml"; gamexml.innerHTML=txt; gamexml.hidden=true; document.firstChild.insertBefore(gamexml,document.body); //var kid=txt.firstChild; //events=parser.parseFromString(txt,"text/xml"); //alert(xml.firstChild.hasChildren); //xmlDoc=document.implementation.createDocument("","",null); //xmlDoc.async=false; //xmlDoc.load("PL020420.HTM"); } function parseEvents(){ var nodes=document.getElementById("xml").children; getTeam(visitor,document.getElementById("Visitor").firstElementChild.children[2].firstElementChild.textContent); getTeam(home,document.getElementById("Home").firstElementChild.children[2].firstElementChild.textContent); for(var i=0; i<nodes.length; i++){ if(nodes[i].nodeName.toLowerCase()!="table"){ continue; } var rows=nodes[i].firstElementChild.children; for(var j=0; j<rows.length; j++){ if(!(rows[j].nodeName.toLowerCase()=="tr" && rows[j].className=="evenColor")){ continue; } var period=parseFloat(rows[j].children[1].innerHTML); var status=rows[j].children[2].innerHTML; var time=rows[j].children[3].childNodes[0].nodeValue; time=time.replace(/\"/g,""); var min=parseFloat(time.replace(/:.*[0-9]/g,"")); var sec=parseFloat(time.replace(/.*[0-9]:/g,"")); time=((period-1)*20 + min + sec/60); var event=rows[j].children[4].innerHTML; var description=rows[j].children[5].innerHTML; if(description.substring(0,3)==visitor.nickname){ description=visitor.nickname; } else if(description.substring(0,3)==home.nickname) { description=home.nickname; } var arr=new Array(time,event,description,status); gameEvents.push(arr); } } } function insertElements(){ addStyle(); var container = document.createElement('div'); container.setAttribute('id','fancystats'); document.firstChild.insertBefore(container,document.body); var cbtable = document.createElement('table'); cbtable.id='cbtable'; var cbb = document.createElement('tbody'); cbtable.appendChild(cbb); cbtable.align='center'; container.appendChild(cbtable); var tr = cbb.appendChild(document.createElement('tr')); var td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.corsi, visitor.nickname+' Corsi')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.corsi, home.nickname+' Corsi')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.fenwick, visitor.nickname+' Fenwick')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.fenwick, home.nickname+' Fenwick')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.shots, visitor.nickname+' Shots')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.shots, home.nickname+' Shots')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.dCorsi, visitor.nickname+' dCorsi',visitor.nickname+' Corsi Rate')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.dCorsi, home.nickname+' dCorsi',home.nickname+' Corsi Rate')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.dFenwick, visitor.nickname+' dFenwick',visitor.nickname+' Fenwick Rate')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.dFenwick, home.nickname+' dFenwick',home.nickname+' Fenwick Rate')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.dShots, visitor.nickname+' dShots',visitor.nickname+' Shot Rate')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.dShots, home.nickname+' dShots',home.nickname+' Shot Rate')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(visitor.goals, visitor.nickname+' Goals')); td = tr.appendChild(document.createElement('td')); td.appendChild(createCB(home.goals, home.nickname+' Goals')); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); var sel=document.createElement('select'); sel.setAttribute('id','visitorColor'); //sel.setAttribute('class','curves visitor'); var opt=document.createElement('option'); opt.setAttribute('value',visitor.fenwick.color); opt.innerHTML='Color:'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#000000'); opt.innerHTML='black'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#FF0000'); opt.innerHTML='red'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#0000FF'); opt.innerHTML='blue'; sel.appendChild(opt); sel.onchange=function(){return changeColors();}; //document.firstChild.insertBefore(sel,document.body); td.appendChild(sel); td = tr.appendChild(document.createElement('td')); sel=document.createElement('select'); sel.setAttribute('id','homeColor'); //sel.setAttribute('class','curves home'); opt=document.createElement('option'); opt.setAttribute('value',home.fenwick.color); opt.innerHTML='Color:'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#000000'); opt.innerHTML='black'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#FF0000'); opt.innerHTML='red'; sel.appendChild(opt); opt=document.createElement('option'); opt.setAttribute('value','#0000FF'); opt.innerHTML='blue'; sel.appendChild(opt); sel.onchange=function(){return changeColors();}; //document.firstChild.insertBefore(sel,document.body); td.appendChild(sel); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); var sp=document.createElement('span'); var inp=document.createElement('input'); var t=document.createTextNode('Scale Graph:'); inp.type='text'; inp.size=2; inp.setAttribute('id','graphSize'); sp.setAttribute('class','curves visitor'); inp.value='1'; inp.onchange=function(){return changeSize();}; sp.appendChild(t); sp.appendChild(inp); //document.firstChild.insertBefore(sp,document.body); td.appendChild(sp); tr = cbb.appendChild(document.createElement('tr')); td = tr.appendChild(document.createElement('td')); sp=document.createElement('span'); inp=document.createElement('input'); t=document.createTextNode('Time for Rates(min):'); inp.type='text'; inp.size=2; inp.setAttribute('id','average'); sp.setAttribute('class','curves visitor'); inp.value='5'; inp.onchange=function(){return changeAverage();}; sp.appendChild(t); sp.appendChild(inp); //document.firstChild.insertBefore(sp,document.body); td.appendChild(sp); var d=document.createElement('div'); var canvas=document.createElement("canvas"); d.setAttribute('class','graph'); canvas.id="graph"; d.appendChild(canvas); //document.firstChild.insertBefore(d,document.body); container.appendChild(d); } function createCB(arr,id,t){ t=typeof t !== 'undefined' ? t : id; var sp=document.createElement('span'); var cb=document.createElement('input'); var tx=document.createTextNode(t); var cls=id.split(" ")[0].toLowerCase(); sp.setAttribute('class',"curves "+cls); cb.type='checkbox'; cb.setAttribute('id',id.replace(" ","-")); cb.onclick=function(){ return updateGraph(); }; sp.appendChild(cb); sp.appendChild(tx); //document.firstChild.insertBefore(sp,document.body); cbHash.push([id.replace(" ","-"),arr]); return sp; } function addStyle(){ var css = document.createElement("style"); var hd=document.firstChild.getElementsByTagName("head")[0]; css.type = "text/css"; css.innerHTML = ".curves{position:relative;} "+ ".home{float:left;} "+ ".visitor{display:block;left:50px;} "+ ".graph{text-align:center;}"; hd.appendChild(css); } function createCurves(){ for(var i=0; i<gameEvents.length; i++){ var time=gameEvents[i][0]; var event=gameEvents[i][1]; var team=gameEvents[i][2]; //Fenwick and Corsi lines if(event=='SHOT' || event=='MISS' || event=='BLOCK' || event=='GOAL'){ if(event!='BLOCK'){ (team==home.nickname) ? home.fenwick.push([time,home.fenwick.length+1]) : visitor.fenwick.push([time,visitor.fenwick.length+1]); if(event!='MISS'){ (team==home.nickname) ? home.shots.push([time,home.shots.length+1]) : visitor.shots.push([time,visitor.shots.length+1]); } } (team==home.nickname) ? home.corsi.push([time,home.corsi.length+1]) : visitor.corsi.push([time,visitor.corsi.length+1]); //Vertical line for goals if(event=='GOAL'){ (team==home.nickname) ? home.goals.push([time,home.goals.length+1]) : visitor.goals.push([time,visitor.goals.length+1]); } checkCurveTimes(home.fenwick); checkCurveTimes(home.corsi); checkCurveTimes(home.shots); checkCurveTimes(visitor.fenwick); checkCurveTimes(visitor.corsi); checkCurveTimes(visitor.shots); } //Vertical line for penalties if(event=='PENL'){ (team==home.nickname) ? home.penalties.push([time,home.penalties.length+1]) : visitor.penalties.push([time,visitor.penalties.length+1]); } } //Make sure that the lines continue until the end of game time var endTime=gameEvents[gameEvents.length-1][0]; home.fenwick.push([endTime,home.fenwick.length+1]); home.corsi.push([endTime,home.corsi.length+1]); home.shots.push([endTime,home.shots.length+1]); visitor.fenwick.push([endTime,visitor.fenwick.length+1]); visitor.corsi.push([endTime,visitor.corsi.length+1]); visitor.shots.push([endTime,visitor.shots.length+1]); //Adjust the fenwick/corsi curves. Sometimes mulitple events //occur at the same second. When the derivative is taken, it //throws an error bc division by t(n)-t(n-1)=0 is INF //Calculate rolling average Fenwick and Corsi lines avgCurve(home.fenwick,home.dFenwick); avgCurve(home.corsi,home.dCorsi); avgCurve(home.shots,home.dShots); avgCurve(visitor.fenwick,visitor.dFenwick); avgCurve(visitor.corsi,visitor.dCorsi); avgCurve(visitor.shots,visitor.dShots); } function checkCurveTimes(arr){ if(arr.length<2){ return; } if(arr[arr.length-1][0]==arr[arr.length-2][0]){ var n=arr.pop(); arr[arr.length-1][1]=n[1]; } } function avgCurve(c,dc){ //clear the old dCurve values while(dc[0] != undefined){ dc.pop(); } dc.color=c.color; dc.y2axis=true; var arr=new Curve(); var dt=1/60; var numpts=c[c.length-1][0]/dt; var avg=average/dt; var cTime=0; arr.push([0,0]); for(var i=0;i<numpts;i++){ var time=dt*i if(time>=c[cTime][0]){ cTime++; } if(cTime==0){ arr.push([time,0]); //arr.push([time,(time)*c[0][1]/c[cTime][0]]); }else{ arr.push([time, c[cTime-1][1]]); //arr.push([time, c[cTime-1][1]+(time-c[cTime-1][0])*(c[cTime][1]-c[cTime-1][1])/(c[cTime][0]-c[cTime-1][0])]); } } for(var i=avg;i<numpts;i++){ dc.push([ (arr[i][0]+arr[i-avg][0])/2, (arr[i][1]-arr[i-avg][1])/(arr[i][0]-arr[i-avg][0]) ]); } } function updateGraph(){ var i,curveMax=0,curveY2Max=0; var curves=new Array(); var cookieVal=''; eraseCookie('myCookie'+PAGE); //Update the array containing all the curves to be plotted for(i=0;i<cbHash.length;i++){ var cb=document.getElementById(cbHash[i][0]); var arr=cbHash[i][1]; if(cb.checked){ curves.push(arr); cookieVal=cookieVal+cb.id+'/'; } } createCookie('myCookie'+PAGE,cookieVal); //Find the max value of the plotted curves for(i=0;i<curves.length;i++){ if(curves[i].vertline){ continue; } if(curves[i].y2axis){ for(var j=0;j<curves[i].length;j++){ curveY2Max=Math.max(curveY2Max,curves[i][j][1]); } }else{ curveMax=Math.max(curveMax,curves[i][curves[i].length-1][1]); } } drawGrid(curveMax,curveY2Max); for(i=0;i<curves.length;i++){ if(curves[i].vertline){ plotVertLine(curves[i]); }else{ plotCurve(curves[i]); } } } function drawGrid(fmax,f2max){ var graph=document.getElementById("graph"); var ctx=graph.getContext("2d"); var tmax=gameEvents[gameEvents.length-1][0],dtic=10*scaleFactor,dt=20,df=10,df2=0.5; var y0=yInit, x0=xInit, ymax=yMaxInit*scaleFactor, xmax=xMaxInit*scaleFactor; var showY2=(f2max>0); var flipY2=false; if(fmax==0 && f2max>0){ flipY2=true; showY2=false; fmax=f2max; df=df2; } var ny=Math.max(Math.floor(fmax/df),Math.floor(f2max/df2))+1; var dx=xmax/(Math.ceil(tmax/dt)); var dy=ymax/(ny); xscale=dx/dt; yscale=dy/df; y2scale=dy/df2; graph.width=xmax+2*x0; graph.height=ymax+2*y0; ctx.rect(x0,y0,xmax,ymax); //Draw labels ctx.font=""+fontSize+"px Ariel"; for(var i=0;i<ny;i++){//Draw y-axis labels var t=df*(i+1); var wid=x0-dtic-ctx.measureText(df*(i+1)).width; var heig=ymax+y0-dy*(i+1)+fontSize/2; //ctx.fillText(t,wid,heig); ctx.fillText(df*(i+1), x0-dtic-ctx.measureText(df*(i+1)).width,ymax+y0-dy*(i+1)+fontSize/2); if(showY2){ ctx.fillText(df2*(i+1),x0+xmax+5,ymax+y0-dy*(i+1)+fontSize/2); } } for(var i=0;i<Math.ceil(tmax/dt);i++){//Draw x-axis labels ctx.fillText(dt*(i+1),x0+dx*(i+1)-ctx.measureText(dt*(i+1)).width/2,ymax+y0+dtic+fontSize); } ctx.font=""+fontSize*1.5+"px Ariel"; ctx.fillText("Time (min)",x0+xmax/2-ctx.measureText("Time (min)").width/2,y0+ymax+dtic+fontSize+fontSize*1.5); ctx.stroke(); var vscore = document.getElementById("Visitor").firstElementChild.children[1].firstElementChild.firstElementChild.firstElementChild.firstElementChild.children[1].textContent; var hscore = document.getElementById("Home").firstElementChild.children[1].firstElementChild.firstElementChild.firstElementChild.firstElementChild.children[1].textContent; var scoreText = visitor.nickname+" "+vscore+" | "+home.nickname+" "+hscore; ctx.fillText(scoreText,x0+xmax/2-ctx.measureText(scoreText).width/2,y0-dtic); ctx.stroke(); var txt=(flipY2)?"Rate of Events (#/min)":"Events (#)" ctx.rotate(-90*Math.PI/180); ctx.fillText(txt,-(y0+ymax/2+ctx.measureText(txt).width/2),x0-dtic-fontSize-dtic/scaleFactor); ctx.stroke; if(showY2){ ctx.rotate(Math.PI); ctx.fillText("Rate of Events (#/min)",y0+ymax/2-ctx.measureText("Rate of Events (#/min)").width/2,-(x0+xmax+dtic+ctx.measureText('10').width/1.5+dtic/scaleFactor)); ctx.stroke; } //Flip the orientation of the canvas so that we can plot //the stuff with the correct origin and stuff. ctx.setTransform(1,0,0,-1,0,0); ctx.translate(0,-graph.height); ctx.moveTo(x0-dtic,y0+ymax);//Draw y-axis tick marks ctx.lineTo(x0+xmax,y0+ymax); for(var i=0;i<ny;i++){ ctx.moveTo(x0-dtic,y0+i*dy); ctx.lineTo(x0+xmax,y0+i*dy); for(var j=0;j<4;j++){ ctx.moveTo(x0-dtic/2,y0+i*dy+dy/4*j); ctx.lineTo(x0,y0+i*dy+dy/4*j); } } ctx.moveTo(x0+xmax,y0-dtic);//Draw x-axis tick marks ctx.lineTo(x0+xmax,y0+ymax); for(var i=0;i<Math.ceil(tmax/dt);i++){ ctx.moveTo(x0+i*dx,y0-dtic); ctx.lineTo(x0+i*dx,y0+ymax); for(var j=0;j<4;j++){ ctx.moveTo(x0+i*dx+dx/4*j,y0-dtic/2); ctx.lineTo(x0+i*dx+dx/4*j,y0); } } ctx.stroke(); } function plotCurve(arr){ var graph=document.getElementById("graph"); var ctx=graph.getContext("2d"); var y0=yInit,x0=xInit,ymax=yMaxInit*scaleFactor,xmax=xMaxInit*scaleFactor,yPrev; ctx.beginPath(); ctx.setTransform(1,0,0,-1,0,0); ctx.translate(0,-graph.height); ctx.strokeStyle=arr.color; ctx.moveTo(x0,y0); yPrev=y0; for(var i=0; i<arr.length; i++){ if(arr.y2axis){ ctx.lineTo(x0+arr[i][0]*xscale,yPrev); ctx.lineTo(x0+arr[i][0]*xscale,y0+arr[i][1]*y2scale); yPrev=y0+arr[i][1]*y2scale; }else{ ctx.lineTo(x0+arr[i][0]*xscale,yPrev); ctx.lineTo(x0+arr[i][0]*xscale,y0+arr[i][1]*yscale); yPrev=y0+arr[i][1]*yscale; } } ctx.stroke(); //ctx.strokeStyle="#000000"; } function plotVertLine(arr){ var graph=document.getElementById("graph"); var ctx=graph.getContext("2d"); var y0=yInit,x0=xInit,ymax=yMaxInit*scaleFactor,xmax=xMaxInit*scaleFactor; ctx.beginPath(); ctx.setTransform(1,0,0,-1,0,0); ctx.translate(0,-graph.height); ctx.strokeStyle=arr.color; for(var i=0; i<arr.length; i++){ var dashes=50; var dl=ymax/(2*dashes-1); for(var j=0;j<2*dashes;j++){ if(j%2==0){ ctx.moveTo(x0+arr[i][0]*xscale,y0+dl*j); }else{ ctx.lineTo(x0+arr[i][0]*xscale,y0+dl*j); } } } ctx.stroke(); ctx.strokeStyle="#000000"; } function updateFromCookie(){ var cookie=readCookie('myCookie'+PAGE); if(cookie!=null){ eraseCookie('myCookie'+PAGE); var arr=cookie.split("/"); for(var i=0;i<arr.length;i++){ if(arr[i]=='') continue; var cb=document.getElementById(arr[i]); if(cb != null) cb.setAttribute('checked','true'); } } cookie=readCookie('myColors'+PAGE); if(cookie!=null){ arr=cookie.split("/"); if(arr.length==2){ document.getElementById('homeColor').value=arr[0]; document.getElementById('visitorColor').value=arr[1]; } changeColors(); } cookie=readCookie('mySize'); if(cookie!=null){ document.getElementById('graphSize').value=cookie; scaleFactor=cookie; } cookie=readCookie('myAverage'+PAGE); if(cookie!=null){ document.getElementById('average').value=cookie; average=cookie; avgCurve(home.fenwick,home.dFenwick); avgCurve(home.corsi,home.dCorsi); avgCurve(home.shots,home.dShots); avgCurve(visitor.fenwick,visitor.dFenwick); avgCurve(visitor.corsi,visitor.dCorsi); avgCurve(visitor.shots,visitor.dShots); } updateGraph(); } function getTeam(team,t){ var fullname=new Array("ANAHEIM DUCKS", "BOSTON BRUINS", "BUFFALO SABRES", "CALGARY FLAMES", "CAROLINA HURRICANES", "CHICAGO BLACKHAWKS", "COLORADO AVALANCHE", "COLUMBUS BLUE JACKETS", "DALLAS STARS", "DETROIT RED WINGS", "EDMONTON OILERS", "FLORIDA PANTHERS", "LOS ANGELES KINGS", "MINNESOTA WILD", "MONTREAL CANADIENS", "NASHVILLE PREDATORS", "NEW JERSEY DEVILS", "NEW YORK ISLANDERS", "NEW YORK RANGERS", "OTTAWA SENATORS", "PHILADELPHIA FLYERS", "PHOENIX COYOTES", "PITTSBURGH PENGUINS", "ST. LOUIS BLUES", "SAN JOSE SHARKS", "TAMPA BAY LIGHTNING", "TORONTO MAPLE LEAFS", "VANCOUVER CANUCKS", "WASHINGTON CAPITALS", "WINNIPEG JETS"); var nickname=new Array("ANA", "BOS", "BUF", "CGY", "CAR", "CHI", "COL", "CBJ", "DAL", "DET", "EDM", "FLA", "L.A", "MIN", "MTL", "NSH", "N.J", "NYI", "NYR", "OTT", "PHI", "PHX", "PIT", "STL", "S.J", "T.B", "TOR", "VAN", "WSH", "WPG"); var colors=new Array("#FF6600",//"ANAHEIM DUCKS", "#000000",//"BOSTON BRUINS", "#FFCC00",//"BUFFALO SABRES", "#FF3300",//"CALGARY FLAMES", "#CC0000",//"CAROLINA HURRICANES", "#FF3300",//"CHICAGO BLACKHAWKS", "#3366FF",//"COLORADO AVALANCHE", "#000066",//"COLUMBUS BLUE JACKETS", "#000000",//"DALLAS STARS", "#FF0000",//"DETROIT RED WINGS", "#FF6600",//"EDMONTON OILERS", "#A31919",//"FLORIDA PANTHERS", "#000000",//"LOS ANGELES KINGS", "#197519",//"MINNESOTA WILD", "#FF0000",//"MONTREAL CANADIENS", "#CC9900",//"NASHVILLE PREDATORS", "#CC0000",//"NEW JERSEY DEVILS", "#0000FF",//"NEW YORK ISLANDERS", "#0000CC",//"NEW YORK RANGERS", "#CC0000",//"OTTAWA SENATORS", "#FF6600",//"PHILADELPHIA FLYERS", "#800000",//"PHOENIX COYOTES", "#996600",//"PITTSBURGH PENGUINS", "#0066FF",//"SAINT LOUIS BLUES", "#006666",//"SAN JOSE SHARKS", "#0000FF",//"TAMPA BAY LIGHTNING", "#0000FF",//"TORONTO MAPLE LEAFS", "#0000CC",//"VANCOUVER CANUCKS", "#FF0000",//"WASHINGTON CAPITALS", "#000033");//"WINNIPEG JETS" for(var i=0;i<30;i++){ //alert(team.indexOf(fullname[i])); if(t.indexOf(fullname[i])>=0){ team.nickname=nickname[i]; team.fullname=fullname[i]; team.fenwick.color=colors[i]; team.fenwick.name="fenwick"+nickname[i]; team.corsi.color=colors[i]; team.corsi.name="corsi"+nickname[i]; team.shots.color=colors[i]; team.shots.name="shots"+nickname[i]; team.goals.name="goals"+nickname[i]; team.penalties.name="penalties"+nickname[i]; team.goals.color=colors[i]; return; } } alert('team: '+t+'not found'); return; } function changeColors(){ var homeColor=document.getElementById('homeColor').value; var visitorColor=document.getElementById('visitorColor').value; home.fenwick.color=homeColor; home.corsi.color=homeColor; home.shots.color=homeColor; home.dFenwick.color=homeColor; home.dCorsi.color=homeColor; home.dShots.color=homeColor; home.goals.color=homeColor; visitor.fenwick.color=visitorColor; visitor.corsi.color=visitorColor; visitor.shots.color=visitorColor; visitor.dFenwick.color=visitorColor; visitor.dCorsi.color=visitorColor; visitor.dShots.color=visitorColor; visitor.goals.color=visitorColor; eraseCookie('myColors'+PAGE); createCookie('myColors'+PAGE,homeColor+"/"+visitorColor); updateGraph(); } function changeSize(){ var s=document.getElementById('graphSize').value; if(isNaN(s)){ return; } createCookie('mySize',''+s); scaleFactor=s; updateGraph(); window.postMessage('sizing:'+document.body.scrollHeight+','+document.body.scrollWidth, "*"); //alert('Frames:'+window.top.frames); } function changeAverage(){ var avg=document.getElementById('average').value; if(isNaN(avg)){ return; } average=avg; createCookie('myAverage'+PAGE,''+avg); avgCurve(home.fenwick,home.dFenwick); avgCurve(home.corsi,home.dCorsi); avgCurve(home.shots,home.dShots); avgCurve(visitor.fenwick,visitor.dFenwick); avgCurve(visitor.corsi,visitor.dCorsi); avgCurve(visitor.shots,visitor.dShots); updateGraph(); } function createCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }