var project={"_id":"60305eb8ab233e849937ee0c","id":"5433fdaacb48b96917db7ee3e8e74fc4453bc43c","name":"chess","user":"56a2838637025efe6412eb12","description":"","created":"2021-02-20T00:49:36.296Z","shared":false,"server":"micro","datafiles":[{"file":{"link":"https://s3.amazonaws.com/istarsshare/players.json","type":"URL/API","url":"https://s3.amazonaws.com/istarsshare/players.json","message":{"error":false,"text":""}},"varname":"players","title":"players","activated":true,"name":"datafile","linkedtofile":true,"optional":true,"content":""},{"file":{"link":"https://s3.amazonaws.com/istarsshare/tournaments.json","type":"URL/API","url":"https://s3.amazonaws.com/istarsshare/tournaments.json","message":{"error":false,"text":""}},"varname":"tournaments","title":"tournaments","activated":true,"name":"datafile","linkedtofile":true,"optional":true,"content":""}],"packs":["jquery","Datatables"],"container":"mainpart","js":{"file":{"type":"","url":"","link":"","message":{"error":true,"text":"File not defined"},"depurl":"https://quipslibistars.s3.amazonaws.com/prod/5433fdaacb48b96917db7ee3e8e74fc4453bc43c/script.js"},"title":"Javascript","activated":true,"name":"js","linkedtofile":false,"optional":true,"content":"\n//var pgn = \"\"\n//var board = PGNV.pgnBoard('board', {});\nvar board\n$(\"meta[name='viewport']\").attr(\"content\",\"width=900,initial-scale=1\")\n$(\".view\").click(function(e){\n e.preventDefault()\n \n var pgn=$(this).attr(\"pgn\")\n var white=$(this).attr(\"white\")\n var black=$(this).attr(\"black\")\n \n pgn='[White \"'+white+'\"][Black \"'+black+'\"] '+pgn\n board=PGNV.pgnView('board', {pgn: pgn, theme: 'chesscom', layout: 'left', width: '590px', boardSize: '300px', movesWidth: '280px', scrollable: true, movesHeight: '320px'});\n $(\"#title\").text(white+\" vs \"+black)\n $(\"#date\").text($(this).attr(\"datetime\"))\n $(\"#opening\").text($(this).attr(\"opening\"))\n var missedwhite=JSON.parse($(this).attr(\"checkmateswhite\"))\n var missedblack=JSON.parse($(this).attr(\"checkmatesblack\"))\n if (missedwhite.length>0) {\n $(\"#missedcheckmateswhite\").text(missedwhite[0].player+\" missed a checkmate in round \"+missedwhite[0].round+\" with \"+missedwhite[0].move)\n }\n else {\n $(\"#missedcheckmateswhite\").text(\"\")\n }\n if (missedblack.length>0) {\n $(\"#missedcheckmatesblack\").text(missedblack[0].player+\" missed a checkmate in round \"+missedblack[0].round+\" with \"+missedblack[0].move)\n }\n else {\n $(\"#missedcheckmatesblack\").text(\"\")\n }\n\n\n var missed2white=JSON.parse($(this).attr(\"checkmates2white\"))\n var missed2black=JSON.parse($(this).attr(\"checkmates2black\"))\n if (missed2white.length>0) {\n $(\"#missedcheckmates2white\").text(missed2white[0].player+\" missed a checkmate-in-2 in round \"+missed2white[0].round+\" with \"+missed2white[0].move)\n }\n else {\n $(\"#missedcheckmates2white\").text(\"\")\n }\n if (missed2black.length>0) {\n $(\"#missedcheckmates2black\").text(missed2black[0].player+\" missed a checkmate-in-2 in round \"+missed2black[0].round+\" with \"+missed2black[0].move)\n }\n else {\n $(\"#missedcheckmates2black\").text(\"\")\n }\n\n\n\n $([document.documentElement, document.body]).animate({\n scrollTop: $(\"#board\").offset().top\n }, 200);\n //board = PGNV.pgnView('board', {pgn:pgn});\n})\n\nvar ttable=$(\"#tournaments\").DataTable(\n {\"bPaginate\": true\n \n ,\n \"order\": [[ 5, \"desc\" ]],\n columnDefs: [\n \n { \"visible\": false, \"targets\": 5 }\n ]\n \n\n \n})\n\nvar players=$(\"#players\").DataTable(\n {\"bPaginate\": true\n \n ,\n \n columnDefs: [\n {\n targets: [1,2,3,4,5,6,7,8,9],\n className: 'dt-right'\n },\n { \"visible\": false, \"targets\": 10 }\n ]\n \n\n \n})\nplayers\n .column(10)\n .search( \"TBCstatsall\",false,false )\n .draw();\n \n\n$(\".somegame\").each(function(i,v){\n var fen2 = 'rnb1kbnr/pppp1ppp/4p3/8/5PPq/8/' +\n 'PPPPP2P/RNBQKBNR w KQkq - 0 3';\n fen2=$(this).attr(\"fen\")\n PGNV.pgnBoard($(v).attr(\"id\" ),{showCoords:false,position:fen2});\n\n})\n \n$(\"#games\").DataTable( { \"order\": [[ 5, \"desc\" ]]}\n)\n\n\n$(\"#league button\").click(function(e){\n e.preventDefault()\n $(\"#league button\").removeClass(\"active\")\n var filter=$(this).attr(\"filter\")\n $(this).addClass(\"active\")\n players\n .column(10)\n .search( filter,false,false )\n .draw();\n})"},"css":{"file":{"type":"","url":"","link":"","message":{"error":true,"text":"File not defined"}},"title":"Cascading Style Sheet (CSS)","activated":true,"name":"css","linkedtofile":false,"optional":true,"content":".fa-circle {\n margin-right:6px;\n}\n#boardMoves {\n font-size:14px;\n}\n\n#mycontainer table td,#mycontainer table th {\n font-size:16px !important;\n}\n\n#mycontainer h2 {\n font-size:32px;\n}\n\n\n#mycontainer h5 {\n font-size:20px;\n}\n\n.whiteHeader,.blackHeader{\n line-height:1.5 !important;\n}\n\n.player .fas {\n margin-left:3px;\n}\n"},"jade":{"file":{"type":"","url":"","link":"","message":{"error":true,"text":"File not defined"},"depurl":"https://quipslibistars.s3.amazonaws.com/prod/5433fdaacb48b96917db7ee3e8e74fc4453bc43c/main.jade"},"title":"Jade","activated":true,"name":"jade","linkedtofile":false,"optional":false,"content":"#mycontainer(style=\"width:900px;overflow-x:visible\")\n - tournaments=tournaments.filter(function(d){return d.TBCstats})\n h1.text-center(style=\"font-size:45\") TBC Chess Nerds \n i.fas.fa-chess\n | Team\n br\n \n .row.text-center\n .col\n img(src=\"https://chesstbx.s3-us-west-2.amazonaws.com/chess.png\",width=400)\n //img(src=\" https://png2.cleanpng.com/sh/1dd98f1dfbd4c9c5e7d70f5607204968/L0KzQYm3U8A4N5D6iZH0aYP2gLBuTfNpbaR4ReJyZXPoPbTvhgN0apDmitY2cHH6fn79hfN1d6MygNN3ZD3zcbr1lPVlNZRtfeV8LUXkcYHpV8k0a2M3etU7Lke5RYmCV8k1OWY3SKYDMkG8RYiCVcMveJ9s/kisspng-chess-piece-chessboard-pawn-vector-hand-painted-chess-5aa0b793c22bc2.7658979415204821957953.png\",width=400 )\n .row.text-center\n .col\n h2 Games Played\n - var v=0,m=0\n - tournaments.filter(function(d){return d.TBCstats.games>0}).forEach(function(q){v+=q.TBCstats.games;m+=q.TBCstats.moves})\n h2: span.badge.bg-primary.rounded-pill=v\n .col\n h2 Players\n h2: span.badge.bg-primary.rounded-pill=players.length\n .col\n h2 Moves\n h2: span.badge.bg-primary.rounded-pill=m\n \n br\n .card\n .card-header.text-white.bg-primary: h2(style=\"color:white\") Tournaments so far\n .card-body\n table#tournaments.table.table-condensed\n thead\n tr\n th Name\n th Players\n th Games\n th Duration (min)\n th Clock (min)\n th Starts\n tbody\n - tournaments.sort(function(a,b){return a.startAt-b.startsAt})\n for p in tournaments\n tr\n td\n a(href=\"https://lichess.org/tournament/\"+p.id)=p.fullName\n td=p.TBCstats.players\n td=p.TBCstats.games\n td=p.TBCstats.duration\n td=p.clock.limit/60\n td=(isNaN(p.startsAt)?new Date(p.startsAt).getTime():p.startsAt)\n br\n .card\n .card-header.text-white.bg-primary: h2(style=\"color:white\") Current Player Stats\n .card-body\n p.card-text(style=\"font-size:16px\") Every win gives you 2 points. Every draw gives you 1 point. We only count the points you get in our tournaments.\n | GP is the number of games played. TP is the number of tournaments played\n #league.buttongroup\n button.btn.btn-sm.btn-secondary.active(filter=\"TBCstatsall\") All tournaments\n button.btn.btn-sm.btn-secondary(filter=\"TBCstats_regular\") Regular\n button.btn.btn-sm.btn-secondary(filter=\"TBCstats_beginner\") Beginner\n \n table#players.table.table-condensed\n thead\n tr\n th Player\n th TP\n th GP\n th W\n th D\n th L\n th Pts\n th Pts/GP\n th L10\n th Strk\n th League\n tbody\n for p in players\n for l in [\"TBCstats\",\"TBCstats_beginner\",\"TBCstats_regular\"]\n tr\n td=p.username\n td=p[l].tp\n td=p[l].played\n td=p[l].won\n td=p[l].draw\n td=p[l].lost\n td=p[l].points\n td=(p[l].rating!=\"\"?Math.round(p[l].rating*1000)/1000:\"\")\n td=p[l].L10\n td=p[l].STRK\n td=(l==\"TBCstats\"?l+\"all\":l)\n br\n .card\n .card-header.text-white.bg-primary: h2(style=\"color:white\") Games\n .card-body\n p(style=\"font-size:16px\") Select a game from the list to view.\n p(style=\"font-size:16px\") A \n span.fas.fa-crown(style=\"color:gold\")\n | next to a player means that the player promoted a pawn \n span.fas.fa-chess-pawn \n | to a queen \n span.fas.fa-chess-queen\n | during the game.\n p(style=\"font-size:16px\") A \n span.fas.fa-grin-tears(style=\"color:#6495ed\")\n | next to a player means that the player missed to (early) checkmate his/her opponent which is unfortunate, but funny!\n p(style=\"font-size:16px\") A \n span.fas.fa-surprise(style=\"color:#e9967a\")\n | next to a player means that the player did not see a possibility to checkmate-in-2, which is not easy spot, so surprising!\n \n \n\n\n #boarddiv.text-center\n h2#title\n h5#date\n h5#opening\n p#missedcheckmateswhite(style=\"color:red\")\n p#missedcheckmatesblack(style=\"color:red\")\n p#missedcheckmates2white(style=\"color:red\")\n p#missedcheckmates2black(style=\"color:red\")\n #board(style=\"width: 100px;margin: auto\")\n br\n table#games.table.table-condensed\n thead\n tr\n th # \n th White\n th Black\n th Ending\n th Rounds\n //th Datetime\n th Date\n th View\n //th Opening\n tbody\n - var index=v\n for p,i in tournaments.filter(function(d){return d.TBCstats.games>0})\n for g in p.games\n - var white=(g.players[0].color==\"white\"?g.players[0].player:g.players[0].opponent)\n - var black=(g.players[0].color==\"black\"?g.players[0].player:g.players[0].opponent)\n - var winner=(g.players[0].points==2?g.players[0].color:(g.players[0].points==0?g.players[1].color:\"draw\"))\n tr\n td=index\n td.player\n if winner==\"white\"\n span.fas.fa-circle(style=\"color:magenta\")\n else\n span.far.fa-circle(style=\"color:lightgray\")\n span=white\n if (g.players[0].promoted)\n span.fas.fa-crown(style=\"color:gold\")\n if (g.players[0].checkmates.length>0)\n span.fas.fa-grin-tears(style=\"color:#6495ed\")\n if (g.players[0].checkmates2.length>0)\n span.fas.fa-surprise(style=\"color:#e9967a\")\n \n //span.badge.bg-success.rounded-pill=g.players[0].captured\n td.player\n if winner==\"black\"\n span.fas.fa-circle(style=\"color:magenta\")\n else\n span.far.fa-circle(style=\"color:lightgray\")\n span=black\n if (g.players[1].promoted)\n span.fas.fa-crown(style=\"color:gold\")\n if (g.players[1].checkmates.length>0)\n span.fas.fa-grin-tears(style=\"color:#6495ed\")\n if (g.players[1].checkmates2.length>0)\n span.fas.fa-surprise(style=\"color:#e9967a\")\n //span.badge.bg-success.rounded-pill=g.players[1].captured\n\n td.text-center=(winner==\"draw\"?\"Draw\":((g.players[0].termination==\"Normal\"?(g.pgn.substr(g.pgn.length-5,1)==\"#\"?\"Checkmate\":\"Resigned\"):g.players[0].termination)))\n // .somegame.view(pgn=g.pgn,fen=g.fen,id=\"endgame\"+index,style=\"width:100px;margin:auto\",white=white,black=black,opening=g.opening,datetime=g.players[0].date+\" \"+g.players[0].time) \n //td=g.players[0].date+\" \"+g.players[0].time\n td=g.rounds+\" \"\n a(href=g.imagepath,target=\"_blank\")\n i.fas.fa-photo-video\n td=g.players[0].date\n td\n button.view.btn.btn-sm.btn-info(pgn=g.pgn,white=white,black=black,opening=g.opening,datetime=g.players[0].date+\" \"+g.players[0].time,checkmateswhite=JSON.stringify(g.players[0].checkmates),checkmatesblack=JSON.stringify(g.players[1].checkmates),checkmates2white=JSON.stringify(g.players[0].checkmates2),checkmates2black=JSON.stringify(g.players[1].checkmates2)) View\n //td=g.opening\n - index--\n"},"deploydate":"2021-08-21T12:17:52.209Z","capture":"https://quipslibistars.s3.amazonaws.com/prod/5433fdaacb48b96917db7ee3e8e74fc4453bc43c/capture.png","prod":true,"morejs":[{"url":"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js"},{"url":"https://kit.fontawesome.com/f8cac8be67.js"},{"url":"https://cdn.jsdelivr.net/npm/@mliebelt/pgn-viewer@1.5.1/lib/pgnv.min.js"}],"morecss":[{"url":"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css"}],"libs":[{"_id":"5672b602f36b083214f3e63e","description":"The Write Less, Do More, JavaScript Library","key":"","version":"2.1.1","link":"https://code.jquery.com/jquery-2.1.4.js","name":"jquery","__v":0,"required":true,"haskey":false,"website":"https://jquery.com"},{"_id":"568eb9222043a726661b0ad2","required":false,"description":"A plug-in for the jQuery Javascript Library. It is a highly flexible tool, based upon the foundations of progressive enhancement, and will add advanced interaction controls to any HTML table.","haskey":false,"version":"1.10.10","link":"https://cdn.datatables.net/s/dt/dt-1.10.10/datatables.min.css,https://cdn.datatables.net/s/dt/dt-1.10.10/datatables.min.js","name":"Datatables","__v":0,"website":"https://www.datatables.net"}],"host":"https://quips.anbdata.com","version":"prod"} function loadjquery(url,callback) { if(typeof jQuery=='undefined') { loadScript(url,callback) } else { callback() } } function loadScript(url, callback) { var script = document.createElement("script") script.type = "text/javascript"; if (script.readyState) { //IE script.onreadystatechange = function () { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function () { callback(); }; } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); } (function () { loadjquery("https://code.jquery.com/jquery-2.1.4.js", function () { //jQuery loaded $("#"+project.container).html("") var libs=[] $(project.libs).each(function(i,v){ if (v.name!="jquery") { $(v.link.split(",")).each(function(j,u){ if (u.slice(-2)=="js") { libs.push(u+(v.haskey?"?key="+project[v.name+"key"]:"")) } else { $("head").append("") } }) } }) if (project.morejs) { $(project.morejs).each(function(i,v){ if ((v.url.substring(0,2)=="//")||(v.url.substring(0,8)=="https://")||(v.url.substring(0,7)=="http://")) { libs.push(v.url) } }) } if (project.morecss) { $(project.morecss).each(function(i,v){ $("head").append("") }) } loadlibs(libs.reverse()) }); })(); function loadlibs(libs){ if (libs.length>0) { var l=libs.pop() loadScript(l,function(){ //$.getScript(l,function(res){ loadlibs(libs) }) //.fail(function(e){ // loadlibs(libs) // //}) } else { start() } } function putscriptcontent(content){ var script = document.createElement("script") script.type = "text/javascript"; $(script).text(content) document.getElementsByTagName("head")[0].appendChild(script); } function start(){ //load jade $.getJSON(project.host+"/project/"+project.version+"/"+project.id+"/render?callback=?"+(project.datachange?"&data="+project.datachange:""),function(res){ $("#"+project.container).html(res.html) if (project.css.activated) { if (project.css.linkedtofile) { $("head").append("")} else { $("head").append("")} } if (project.js.activated) { if (project.js.linkedtofile) { $.getScript(project.js.file[(project.prod?"depurl":"url")])} else { putscriptcontent(project.js.content)} if (project.mainjs) { window[project.mainjs]() } } }) }