-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.bracket.min.js
1 lines (1 loc) · 12.5 KB
/
jquery.bracket.min.js
1
(function(n){var e=function(t){function r(e,t,r){var i=n('<input type="text">');i.val(t),e.html(i),i.focus(),i.blur(function(){r(i.val())}),i.keydown(function(n){var e=n.keyCode||n.which;(9===e||13===e||27===e)&&(n.preventDefault(),r(i.val(),27!==e))})}function i(n,e){n.append(e)}function s(n){return!isNaN(parseFloat(n))&&isFinite(n)}function a(n){p=0,b.render(),w&&x&&(w.render(),x.render()),o(C),n&&(m.results[0]=b.results(),w&&x&&(m.results[1]=w.results(),m.results[2]=x.results()),t.save&&t.save(m,t.userData))}function o(e){var t=function(t,r){var i=t,s=e.find(".team[index="+i+"]");if(r)var a=r;else var a="highlight";return{highlight:function(){s.each(function(){n(this).addClass(a),n(this).hasClass("win")&&n(this).parent().find(".connector").addClass(a)})},deHighlight:function(){s.each(function(){n(this).removeClass(a),n(this).parent().find(".connector").removeClass(a)})}}},r=x||b,i=r.winner(),s=r.loser(),a=null,o=null;i&&s&&(a=new t(i.idx,"highlightWinner"),o=new t(s.idx,"highlightLoser"),a.highlight(),o.highlight()),e.find(".team").mouseover(function(){var e=n(this).attr("index");track=new t(e),track.highlight(),n(this).mouseout(function(){track.deHighlight(),n(this).unbind("mouseout")})})}function c(n){var e=n.el,t=e.find(".team.win");t.append('<div class="bubble">1st</div>');var r=e.find(".team.lose");return r.append('<div class="bubble">2nd</div>'),!0}function l(n){var e=n.el,t=e.find(".team.win");t.append('<div class="bubble third">3rd</div>');var r=e.find(".team.lose");return r.append('<div class="bubble fourth">4th</div>'),!0}function u(n,e,r){var i=e.teams;e.results;var s=Math.log(2*i.length)/Math.log(2),a=i.length;n.el.height();for(var o,u=0;s>u;u++){o=n.addRound();for(var h=0;a>h;h++){var d=null;if(0===u&&(d=function(){var n=i[h],e=h;return[{source:function(){return{name:n[0],idx:2*e}}},{source:function(){return{name:n[1],idx:2*e+1}}}]}),u===s-1&&r){var f=o.addMatch(d,c);f.setAlignCb(function(n){n.css("top",""),n.css("position","absolute"),t.skipConsolationRound?n.css("top",f.el.height()/2-n.height()/2+"px"):n.css("bottom",-n.height()/2+"px")})}else o.addMatch(d)}a/=2}if(r&&(n.final().connectorCb(function(){return null}),i.length>1&&!t.skipConsolationRound)){var v=n.final().round().prev().match(0).loser,p=n.final().round().prev().match(1).loser,g=o.addMatch(function(){return[{source:v},{source:p}]},l);g.setAlignCb(function(e){var t=n.el.height()/2;g.el.css("height",t+"px");var r=e.height();e.css("top",r+"px")}),g.connectorCb(function(){return null})}}function h(n,e,t){var r=t.teams;t.results;var i=Math.log(2*r.length)/Math.log(2)-1,s=r.length/2;e.el.height();for(var a=0;i>a;a++){for(var o=0;2>o;o++)for(var c=e.addRound(),l=0;s>l;l++){var u=null;(0!==o%2||0===a)&&(u=function(){if(0===o%2&&0===a)return[{source:n.round(0).match(2*l).loser},{source:n.round(0).match(2*l+1).loser}];var t=l;return 0===a%2&&(t=s-l-1),[{source:e.round(2*a).match(l).winner},{source:n.round(a+1).match(t).loser}]});var h=c.addMatch(u),d=h.el.find(".teamContainer");if(h.setAlignCb(function(){d.css("top",h.el.height()/2-d.height()/2+"px")}),i-1>a||1>o){var f=null;0===o%2&&(f=function(n,e){var t=n.height()/4,r=0,i=0;return 0===e.winner().id?i=t:1===e.winner().id?(r=2*-t,i=t):i=2*t,{height:r,shift:i}}),h.connectorCb(f)}}s/=2}}function d(n,e,r){var i=n.addRound(),s=i.addMatch(function(){return[{source:e.winner},{source:r.winner}]},function(t){var i=!1;if(null!=t.winner().name&&t.winner().name===r.winner().name){if(2==n.size())return;var s=n.addRound(function(){var e=null!=t.winner().name&&t.winner().name===r.winner().name;return i===!1&&e&&(i=!0,C.css("width",parseInt(C.css("width"))+140+"px")),!e&&i&&(i=!1,n.dropRound(),C.css("width",parseInt(C.css("width"))-140+"px")),e}),a=s.addMatch(function(){return[{source:t.first},{source:t.second}]},c);return t.connectorCb(function(n){return{height:0,shift:n.height()/2}}),a.connectorCb(function(){return null}),a.setAlignCb(function(n){var t=e.el.height()+r.el.height();a.el.css("height",t+"px");var i=(e.el.height()/2+e.el.height()+r.el.height()/2)/2-n.height();n.css("top",i+"px")}),!1}return c(t)});s.setAlignCb(function(n){var i=e.el.height()+r.el.height();t.skipConsolationRound||(i/=2),s.el.css("height",i+"px");var a=(e.el.height()/2+e.el.height()+r.el.height()/2)/2-n.height();n.css("top",a+"px")});var a,o;if(!t.skipConsolationRound){var u=r.final().round().prev().match(0).loser,h=i.addMatch(function(){return[{source:u},{source:r.loser}]},l);h.setAlignCb(function(n){var t=(e.el.height()+r.el.height())/2;h.el.css("height",t+"px");var i=n.height()/2,i=(e.el.height()/2+e.el.height()+r.el.height()/2)/2+n.height()/2-t;n.css("top",i+"px")}),s.connectorCb(function(){return null}),h.connectorCb(function(){return null})}e.final().connectorCb(function(n){var t=n.height()/4,i=(e.el.height()/2+e.el.height()+r.el.height()/2)/2-n.height()/2,s=i-e.el.height()/2;return 0===e.winner().id?(o=s+2*t,a=t):1===e.winner().id?(o=s,a=3*t):(o=s+t,a=2*t),o-=n.height()/2,{height:o,shift:a}}),r.final().connectorCb(function(n){var t=n.height()/4,i=(e.el.height()/2+e.el.height()+r.el.height()/2)/2-n.height()/2,s=i-e.el.height()/2;return 0===r.winner().id?(o=s,a=3*t):1===r.winner().id?(o=s+2*t,a=t):(o=s+t,a=2*t),o+=n.height()/2,{height:-o,shift:-a}})}function f(n){function e(n,t){return n instanceof Array?e(n[0],t+1):t}return e(n,0)}function v(n,e){return e>0&&(n=v([n],e-1)),n}var p,g="lr"==t.dir?"right":"left";if(!t)throw Error("Options not set");if(!t.el)throw Error("Invalid jQuery object as container");if(!t.init&&!t.save)throw Error("No bracket data or save callback given");if(void 0===t.userData&&(t.userData=null),!(!t.decorator||t.decorator.edit&&t.decorator.render))throw Error("Invalid decorator input");t.decorator||(t.decorator={edit:r,render:i});var m;t.init||(t.init={teams:[["",""]],results:[]}),m=t.init;var b,w,x,C=n('<div class="jQBracket '+t.dir+'"></div>').appendTo(t.el.empty()),k=function(e,r,i,o,c){function l(e,t,r){var i=parseInt(n(".round:first").css("margin-right"))/2,s=!0;0>e&&(s=!1,e=-e),2>e&&(e=0);var a=n('<div class="connector"></div>').appendTo(r);a.css("height",e),a.css("width",i+"px"),a.css(g,-i-2+"px"),t>=0?a.css("top",t+"px"):a.css("bottom",-t+"px"),s?a.css("border-bottom","none"):a.css("border-top","none");var o=n('<div class="connector"></div>').appendTo(a);return o.css("width",i+"px"),o.css(g,-i+"px"),s?o.css("bottom","0px"):o.css("top","0px"),a}function u(){if(s(r[0].score)&&s(r[1].score)){if(r[0].score>r[1].score)return r[0];if(r[0].score<r[1].score)return r[1]}return{source:null,name:null,id:-1,score:null}}function h(){if(s(r[0].score)&&s(r[1].score)){if(r[0].score>r[1].score)return r[1];if(r[0].score<r[1].score)return r[0]}return{source:null,name:null,id:-1,score:null}}function d(e,r,i){var o,c=p,l=n('<span id="result-'+c+'"></span>');r.name&&i?(s(r.score)||(r.score=0),o=r.score):o="--",l.append(o),p++;var d=r.name?r.name:"--",f=n('<div class="team"></div>'),v=n("<b></b>").appendTo(f);return 0===e&&f.attr("id","team-"+c),t.decorator.render(v,d,o),s(r.idx)&&f.attr("index",r.idx),null===r.name?f.addClass("na"):u().name===r.name?f.addClass("win"):h().name===r.name&&f.addClass("lose"),f.append(l),null!==r.name&&i&&t.save&&t.save&&(v.click(function(){function i(){function o(o,c){o&&(t.init.teams[~~(r.idx/2)][r.idx%2]=o),a(!0),s.click(i);var l=t.el.find("#team-"+(r.idx+1)+" b:first");l.length&&c===!0&&0===e&&n(l).click()}s.unbind(),t.decorator.edit(s,r.name,o)}var s=n(this);i()}),r.name&&l.click(function(){function e(){t.unbind();var i;i=s(r.score)?t.text():"0";var o=n('<input type="text">');o.val(i),t.html(o),o.focus().select(),o.keydown(function(e){s(n(this).val())?n(this).removeClass("error"):n(this).addClass("error");var t=e.keyCode||e.which;if(9===t||13===t||27===t){if(e.preventDefault(),n(this).blur(),27===t)return;var r=C.find("span[id=result-"+(c+1)+"]");r&&r.click()}}),o.blur(function(){var n=o.val();n&&s(n)||s(r.score)?n&&s(n)||!s(r.score)||(n=r.score):n="0",t.html(n),s(n)&&i!==parseInt(n)&&(r.score=parseInt(n),a(!0)),t.click(e)})}var t=n(this);e()})),f}var f=null,v=null,m=n('<div class="match"></div>'),b=n('<div class="teamContainer"></div>');return r[0].id=0,r[1].id=1,r[0].name=r[0].source().name,r[1].name=r[1].source().name,r[0].score=o?o[0]:null,r[1].score=o?o[1]:null,r[0].name&&r[1].name||!s(r[0].score)&&!s(r[1].score)||(console.log("ERROR IN SCORE DATA: "+r[0].source().name+": "+r[0].score+", "+r[1].source().name+": "+r[1].score),r[0].score=r[1].score=null),{el:m,id:i,round:function(){return e},connectorCb:function(n){f=n},connect:function(n){var e,t,r=b.height()/4,s=m.height()/2;if(n&&null!==n){var a=n(b,this);if(null===a)return;e=a.shift,t=a.height}else 0===i%2?0===this.winner().id?(e=r,t=s):1===this.winner().id?(e=3*r,t=s-2*r):(e=2*r,t=s-r):0===this.winner().id?(e=3*-r,t=-s+2*r):1===this.winner().id?(e=-r,t=-s):(e=2*-r,t=-s+r);b.append(l(t,e,b))},winner:u,loser:h,first:function(){return r[0]},second:function(){return r[1]},setAlignCb:function(n){v=n},render:function(){m.empty(),b.empty(),r[0].name=r[0].source().name,r[1].name=r[1].source().name,r[0].idx=r[0].source().idx,r[1].idx=r[1].source().idx;var n=!1;!r[0].name&&""!==r[0].name||!r[1].name&&""!==r[1].name||(n=!0),u().name?b.removeClass("np"):b.addClass("np"),b.append(d(e.id,r[0],n)),b.append(d(e.id,r[1],n)),m.appendTo(e.el),m.append(b),this.el.css("height",e.bracket.el.height()/e.size()+"px"),b.css("top",this.el.height()/2-b.height()/2+"px"),v&&v(b);var t=!1;"function"==typeof c&&(t=c(this)),t||this.connect(f)},results:function(){return[r[0].score,r[1].score]}}},y=function(e,t,r,i,s){var a=[],o=n('<div class="round"></div>');return{el:o,bracket:e,id:r,addMatch:function(n,t){var s=a.length;if(null!==n)var o=n();else var o=[{source:e.round(r-1).match(2*s).winner},{source:e.round(r-1).match(2*s+1).winner}];var c=new k(this,o,s,i?i[s]:null,t);return a.push(c),c},match:function(n){return a[n]},prev:function(){return t},size:function(){return a.length},render:function(){o.empty(),("function"!=typeof s||s())&&(o.appendTo(e.el),n.each(a,function(n,e){e.render()}))},results:function(){var e=[];return n.each(a,function(n,t){e.push(t.results())}),e}}},R=function(e,t){var r=[];return{el:e,addRound:function(n){var e=r.length,i=null;e>0&&(i=r[e-1]);var s=new y(this,i,e,t?t[e]:null,n);return r.push(s),s},dropRound:function(){r.pop()},round:function(n){return r[n]},size:function(){return r.length},"final":function(){return r[r.length-1].match(0)},winner:function(){return r[r.length-1].match(0).winner()},loser:function(){return r[r.length-1].match(0).loser()},render:function(){e.empty();for(var n=0;r.length>n;n++)r[n].render()},results:function(){var e=[];return n.each(r,function(n,t){e.push(t.results())}),e}}},M=m.results;M=v(M,4-f(M)),m.results=M;var T=1>=M.length;if(t.save){var A=n('<div class="tools"></div>').appendTo(C),j=n('<span class="increment">+</span>').appendTo(A);if(j.click(function(){var n,r=m.teams.length;for(n=0;r>n;n++)m.teams.push(["",""]);new e(t)}),m.teams.length>1&&1===m.results.length||m.teams.length>2&&3===m.results.length){var E=n('<span class="decrement">-</span>').appendTo(A);E.click(function(){m.teams.length>1&&(m.teams=m.teams.slice(0,m.teams.length/2),new e(t))})}if(1===m.results.length&&m.teams.length>1){var I=n('<span class="doubleElimination">de</span>').appendTo(A);I.click(function(){m.teams.length>1&&3>m.results.length&&(m.results.push([],[]),new e(t))})}else if(3===m.results.length&&m.teams.length>1){var I=n('<span class="singleElimination">se</span>').appendTo(A);I.click(function(){3===m.results.length&&(m.results=m.results.slice(0,1),new e(t))})}}if(T)var D=n('<div class="bracket"></div>').appendTo(C);else var z=n('<div class="finals"></div>').appendTo(C),D=n('<div class="bracket"></div>').appendTo(C),N=n('<div class="loserBracket"></div>').appendTo(C);var Q=50*m.teams.length;D.css("height",Q),T&&2>=m.teams.length&&!t.skipConsolationRound&&(Q+=30,C.css("height",Q)),N&&N.css("height",D.height()/2);var O;return O=T?Math.log(2*m.teams.length)/Math.log(2):2*(Math.log(2*m.teams.length)/Math.log(2)-1)+1,t.save?C.css("width",140*O+40):C.css("width",140*O+10),b=new R(D,M&&M[0]?M[0]:null,m.teams),T||(w=new R(N,M&&M[1]?M[1]:null,null),x=new R(z,M&&M[2]?M[2]:null,null)),u(b,m,T),T||(h(b,w,m),d(x,b,w,m)),a(!1),{data:function(){return t.init}}},t={init:function(t){var r=this;t.el=this,t.dir=t.dir||"lr",t.skipConsolationRound=t.skipConsolationRound||!1,"lr"!=t.dir&&"rl"!=t.dir&&n.error('Direction must be either: "lr" or "rl"');var i=new e(t);return n(this).data("bracket",{target:r,obj:i}),i},data:function(){var e=n(this).data("bracket");return e.obj.data()}};n.fn.bracket=function(e){return t[e]?t[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?(n.error("Method "+e+" does not exist on jQuery.bracket"),void 0):t.init.apply(this,arguments)}})(jQuery);