/
armycalc.min.js
1 lines (1 loc) · 20.7 KB
/
armycalc.min.js
1
if(!("bind" in Function.prototype)){Function.prototype.bind=function(a){var c=this;if(arguments.length<=1){return function(){return c.apply(a,arguments)}}else{var b=Array.prototype.slice.call(arguments,1);return function(){return c.apply(a,arguments.length===0?b:b.concat(Array.prototype.slice.call(arguments)))}}}}if(!("trim" in String.prototype)){String.prototype.trim=function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}}if(!("indexOf" in Array.prototype)){Array.prototype.indexOf=function(b,a){if(a===undefined){a=0}if(a<0){a+=this.length}if(a<0){a=0}for(var c=this.length;a<c;a++){if(a in this&&this[a]===b){return a}}return -1}}if(!("lastIndexOf" in Array.prototype)){Array.prototype.lastIndexOf=function(b,a){if(a===undefined){a=this.length-1}if(a<0){a+=this.length}if(a>this.length-1){a=this.length-1}for(a++;a-->0;){if(a in this&&this[a]===b){return a}}return -1}}if(!("forEach" in Array.prototype)){Array.prototype.forEach=function(c,b){for(var a=0,d=this.length;a<d;a++){if(a in this){c.call(b,this[a],a,this)}}}}if(!("map" in Array.prototype)){Array.prototype.map=function(d,c){var a=new Array(this.length);for(var b=0,e=this.length;b<e;b++){if(b in this){a[b]=d.call(c,this[b],b,this)}}return a}}if(!("filter" in Array.prototype)){Array.prototype.filter=function(d,e){var a=[],b;for(var c=0,f=this.length;c<f;c++){if(c in this&&d.call(e,b=this[c],c,this)){a.push(b)}}return a}}if(!("every" in Array.prototype)){Array.prototype.every=function(a,c){for(var b=0,d=this.length;b<d;b++){if(b in this&&!a.call(c,this[b],b,this)){return false}}return true}}if(!("some" in Array.prototype)){Array.prototype.some=function(a,c){for(var b=0,d=this.length;b<d;b++){if(b in this&&a.call(c,this[b],b,this)){return true}}return false}}function acAddCSSRule(b,a,c){for(var e=0;e<document.styleSheets.length;e++){var h=document.styleSheets[e];var g=(h.cssRules||h.rules);var j=b.toLowerCase();for(var d=0,f=g.length;d<f;d++){if(g[d].selectorText&&(g[d].selectorText.toLowerCase()==j)){if(c!=null){g[d].style[a]=c;return}else{if(h.deleteRule){h.deleteRule(d)}else{if(h.removeRule){h.removeRule(d)}else{g[d].style.cssText=""}}}}}}var h=document.styleSheets[0]||{};if(h.insertRule){var g=(h.cssRules||h.rules);h.insertRule(b+"{ "+a+":"+c+"; }",g.length)}else{if(h.addRule){h.addRule(b,a+":"+c+";",0)}}}function acGetText(a){txt="";$(a).contents().each(function(){if((this.nodeType==3)&&(!this.isElementContentWhitespace)){txt+=this.wholeText}if((this.nodeType!=3)){txt+="<span class='trans "+$(this).attr("ln")+"'>"+$(this).text()+"</span>"}});return $.trim(txt)}(function(g){g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(a,b){g.fx.step[b]=function(c){if(!c.colorInit){c.start=h(c.elem,b);c.end=e(c.end);c.colorInit=true}c.elem.style[b]="rgb("+[Math.max(Math.min(parseInt((c.pos*(c.end[0]-c.start[0]))+c.start[0]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[1]-c.start[1]))+c.start[1]),255),0),Math.max(Math.min(parseInt((c.pos*(c.end[2]-c.start[2]))+c.start[2]),255),0)].join(",")+")"}});function e(a){var b;if(a&&a.constructor==Array&&a.length==3){return a}if(b=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a)){return[parseInt(b[1]),parseInt(b[2]),parseInt(b[3])]}if(b=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(a)){return[parseFloat(b[1])*2.55,parseFloat(b[2])*2.55,parseFloat(b[3])*2.55]}if(b=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a)){return[parseInt(b[1],16),parseInt(b[2],16),parseInt(b[3],16)]}if(b=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(a)){return[parseInt(b[1]+b[1],16),parseInt(b[2]+b[2],16),parseInt(b[3]+b[3],16)]}if(b=/rgba\(0, 0, 0, 0\)/.exec(a)){return f.transparent}return f[g.trim(a).toLowerCase()]}function h(a,c){var b;do{b=g.curCSS(a,c);if(b!=""&&b!="transparent"||g.nodeName(a,"body")){break}c="backgroundColor"}while(a=a.parentNode);return e(b)}var f={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery);function acClone(b){var a=(this instanceof Array)?[]:{};for(i in b){if(typeof b[i]=="object"){a[i]=acClone(b[i])}else{a[i]=b[i]}}return a}function acSandbox(a,b){new Function("window","with(window){"+a+"}")(b)}function acRuleset(a){this.calc=a;this.loadFromUrl=function(b){that=this;$.ajax({url:b+"info.xml",success:function(c,e,d){that.loadFromXml(b,c)},error:function(e,d,c){that.calc.setError(this.url+" - "+d+" - "+c)},dataType:"xml"})};this.loadFromXml=function(c,b){that=this;b=$(b).children("ruleset");this.calc.langSelect.html();$(b).children("languages").children("language").each(function(){that.calc.langSelect.append("<option value='"+$(this).attr("id")+"'"+($(this).attr("default")=="true"?" selected='true'":"")+">"+$(this).find("name").text()+"</option>");if($(this).attr("default")=="true"){that.calc.setLang($(this).attr("id"))}});this.version=$(b).attr("version");this.uid=$(b).children("uid").text();this.revision=$(b).children("revision").text();this.name=acGetText($(b).children("name"));this.description=acGetText($(b).children("description"));this.costs={};$(b).children("costs").children("cost").each(function(){that.costs[$(this).attr("id")]={name:acGetText($(this).children("name")),"default":parseFloat($(this).children("default").text()),shortname:acGetText($(this).children("shortname")),unit:acGetText($(this).children("unit"))}});this.stats={};$(b).children("stats").children("stat").each(function(){that.stats[$(this).attr("id")]={display:($(this).attr("display")==true?true:false),name:acGetText($(this).children("name")),shortname:acGetText($(this).children("shortname")),"default":parseInt($(this).children("default").text())}});this.defaultArmyName=acGetText($(b).children("defaultArmyName"));this.defaultArmySize={};$(b).children("defaultArmySize").children("cost").each(function(){that.defaultArmySize[$(this).attr("id")]=$(this).text()});this.models={};this.mainmenu={};$(b).children("mainmenu").children("menu").each(function(){menu_id=$(this).attr("id");that.mainmenu[menu_id]={};that.mainmenu[menu_id]["name"]=acGetText($(this).children("name"));that.mainmenu[menu_id]["submenus"]={};$(this).children("menu").each(function(){that.mainmenu[menu_id]["submenus"][$(this).attr("id")]={};that.mainmenu[menu_id]["submenus"][$(this).attr("id")]["name"]=acGetText($(this).children("name"))})});this.errors={};$(b).children("errors").children("error").each(function(){that.errors[$(this).children("uid").text()]={"class":$(this).attr("class"),message:acGetText($(this).children("message"))}});$(b).children("models").find("model").each(function(){model_id=$(this).attr("id");that.models[model_id]={name:acGetText($(this).children("name")),"default":$(this).attr("default")=="true"};that.models[model_id].elements=[];that.models[model_id].elements_by_uid={};that.models[model_id].validator="";$.ajax({model_id:model_id,url:c+$(this).children("validator").attr("src"),success:function(d){that.models[this.model_id].validator=d},error:function(f,e,d){that.calc.setError(this.url+" - "+e+" - "+d)},dataType:"text"});$(this).find("elements").each(function(){that.appendElements(c,this,that.models[model_id].elements,that.models[model_id].elements_by_uid)});that.models[model_id].mainmenu=that.mainmenu;that.models[model_id].defaultArmyName=that.defaultArmyName;that.models[model_id].defaultArmySize=that.defaultArmySize;if($(this).children("defaultArmyName").length){that.models[model_id].defaultArmyName=acGetText($(this).children("defaultArmyName"))}$(this).children("defaultArmySize").children("cost").each(function(){that.models[model_id].defaultArmySize[$(this).attr("id")]=$(this).text()})})};this.appendElements=function(f,c,e,d){that=this;if($(c).attr("src")){$.ajax({url:f+$(c).attr("src"),success:function(g){that.appendElements(f,$(g).children("elements"),e,d)},error:function(j,h,g){that.calc.setError(this.url+" - "+h+" - "+g)},dataType:"xml"})}else{var b={};b.minTotalCount=($(c).attr("minTotalCount")?parseInt($(c).attr("minTotalCount")):0);b.maxTotalCount=($(c).attr("maxTotalCount")?parseInt($(c).attr("maxTotalCount")):null);b.minTotalSize=($(c).attr("minTotalSize")?parseInt($(c).attr("minTotalSize")):0);b.maxTotalSize=($(c).attr("maxTotalSize")?parseInt($(c).attr("maxTotalSize")):null);b.elements={};b.name="";$(c).children("element").each(function(){if($(this).attr("extend")&&($(this).attr("extend") in d)){var h=acClone(d[$(this).attr("extend")])}else{var h={}}if($(this).children("uid").length>0){h.uid=$(this).children("uid").text()}if($(this).children("menu").length>0){h.menu_id=$(this).children("menu").attr("id")}if($(this).children("name").length>0){h.name=acGetText($(this).children("name"))}b.name=b.name+h.name+", ";if($(this).children("description").length>0){h.description=acGetText($(this).children("description"))}if(!("afterAppend" in h)){h.afterAppend=($(this).attr("afterAppend")?$(this).attr("afterAppend"):0)}if(!("beforeRemove" in h)){h.beforeRemove=($(this).attr("beforeRemove")?$(this).attr("beforeRemove"):0)}if(!("elements" in h)){h.elements=[]}function g(l,k,j,m,n){if(!(j in l)){l[j]=m}if(k.attr(j)){if(n){l[j]=parseInt(k.attr(j))}else{l[j]=k.attr(j)}}}g(h,$(this),"minCount",0,true);g(h,$(this),"maxCount",null,true);g(h,$(this),"minSize",1,true);g(h,$(this),"maxSize",null,true);g(h,$(this),"defaultSize",h.minSize,true);g(h,$(this),"size","custom",false);h.cost={};for(id in that.costs){h.cost[id]=that.costs[id]["default"]}$(this).children("cost").each(function(){h.cost[$(this).attr("id")]=parseFloat($(this).text())});if($(this).children("stats").length>0){h.stats={};for(id in that.stats){h.stats[id]=that.stats[id]["default"]}$(this).children("stats").children("stat").each(function(){h.stats[$(this).attr("id")]=parseInt($(this).text())})}$.each($(this).children("elements"),function(k,j){that.appendElements(f,j,h.elements,d)});b.elements[h.uid]=h;d[h.uid]=h});e.push(b)}}}function acInstance(b,a,d,c){var e=this;this.parent=d;this.isArmy=(this.parent==null);this.calc=b;this.army=b.army;this.ruleset=a;this.element=c;this.name=c.name;this._size=parseInt(c.defaultSize);this.size=function(f){if(typeof f==="undefined"){return this._size}this._size=f;this._dom_size.html(this._size);$.each(this.child,function(h,g){$.each(g,function(k,j){if(j.element.size==="inherit"){j.size(f)}})});if((typeof(_focused_element)!=="undefined")&&(_focused_element==this)){$("#acDec").toggle(this.size()!=this.element.minSize);$("#acInc").toggle(this.size()!=this.element.maxSize)}$.each(this._costs_spans,function(h,g){if(e._size*e.element.cost[h]>0){g.text(e._size*e.element.cost[h])}else{g.html(" ")}})};this.stat=function(g,f){if(typeof f==="undefined"){return this._stats[g]}if(g in this._stats){this._stats[g]=f;this._stats_spans[g].text(this._stats[g])}};this._rebuildSubmenu=function(){};this._rebuildListElem=function(){};if(!this.isArmy){this._subul=$("<ul></ul>");this._dom_size=$("<span>"+this._size+"</span>");this._anchor=$("<a href='#'> x "+this.name+"</a>").prepend(this._dom_size);this._costs_spans={};$.each(this.ruleset.costs,function(g,f){e._costs_spans[g]=$("<span class='cst'></span>");e._anchor.append(e._costs_spans[g])});this._stats_spans={};if(this.element.stats){this._stats={};for(id in this.element.stats){this._stats[id]=this.element.stats[id]}$.each(this.ruleset.stats,function(g,f){e._stats_spans[g]=$("<span class='st'>"+e._stats[g]+"</span>");e._anchor.append(e._stats_spans[g])})}this._li=$("<li></li>").append(this._anchor).append(this._subul);this._submenu=$("<ul></ul>");if(this.element.description){this._submenu.append($("<li>"+this.element.description+"</li>"))}$.each(this.element.elements,function(g,f){$.each(f.elements,function(k,j){var h=$("<a href='#'>"+j.name+"</a>");h.click(function(){e.append(k)});e._submenu.append($("<li></li>").append(h))})});b.submenuElem.append(this._submenu);this._submenu.hide();this._anchor.click(function(){e._focus();return false})}else{this._subul=$("#acUnits")}this._errorsul=$("<ul class='errors'></ul>");this.clear=function(){this.child={};var f=this;$.each(this.element.elements,function(h,g){$.each(g.elements,function(k,j){f.child[k]=[]})})};this.clear();this.toggleError=function(g,f){this._errorsul.find("."+g).remove();if(f){this._errorsul.append("<li class='"+g+" "+this.ruleset.errors[g]["class"]+"'>"+this.ruleset.errors[g]["message"]+"</li>")}};this.remove=function(){if(this.parent.child[this.element.uid].length>this.element.minCount){if(this.element.beforeRemove){acSandbox(this.element.beforeRemove,{that:this,army:this.army})}this.clear();this.parent.child[this.element.uid].splice(this.parent.child[this.element.uid].indexOf(this),1);this._li.remove();this._submenu.remove()}else{this.calc.flashMsg("Minimum count of "+this.element.name+" is "+this.element.minCount)}};this.count=function(f){if(typeof f==="undefined"){return this.parent.child[this.element.uid].length}if(f in this.child){return this.child[f].length}return 0};this.append=function(h){var g=null;var j=this;$.each(this.element.elements,function(m,l){if(l.elements[h]){g=l.elements[h];var k=0;$.each(l.elements,function(o,n){k+=j.child[o].length});if(k===l.maxTotalCount){j.calc.flashMsg("Maximum total count of group "+l.name+" reached ("+l.maxTotalCount+")");g=null}}});if(!g){return}if((g.maxCount==null)||(this.child[h].length<g.maxCount)){var f=new acInstance(b,a,this,g);this.child[h].push(f);this._subul.append(f._li);if(g.size==="inherit"){f.size(this._size)}if(g.afterAppend){acSandbox(g.afterAppend,{that:f,army:this.army})}}else{this.calc.flashMsg("Maximum count of "+g.name+" reached ("+g.maxCount+")")}};this._focus=function(){b.submenuElem.children().hide();e._submenu.show();if(typeof(_focused_element)!=="undefined"){_focused_element._anchor.removeClass("focus")}_focused_element=this;_focused_element._anchor.addClass("focus");$("#acUp").toggle(_focused_element._li.prev().length>0);$("#acDown").toggle(_focused_element._li.next().length>0);$("#acDec").toggle((e.element.size==="custom")&&(e.size()!=e.element.minSize));$("#acInc").toggle((e.element.size==="custom")&&(e.size()!=e.element.maxSize));$("#acRem").toggle(true)};$.each(this.element.elements,function(g,f){$.each(f.elements,function(k,j){for(var h=0;h<j.minCount;h++){e.append(k)}})});if(!this.isArmy){this.size(parseInt(c.defaultSize))}}function jsArmyCalc(b,a){calc={};calc.canvas=$(b);calc.canvas.attr("style","");calc.canvas.html("loading calc...");var c=$.ajax({url:a,async:false}).responseText;calc.canvas.html(c);calc.statusElem=calc.canvas.find("#acStatus");calc.submenuElem=calc.canvas.find(".submenu");calc.langSelect=calc.canvas.find("#acLang");calc.langSelect.change(function(){calc.setLang($(this).val())});calc.canvas.find("#acMaximize").click(function(){calc.setFullscreen(true);return false});calc.canvas.find("#acMinimize").click(function(){calc.setFullscreen(false);return false});calc.canvas.find("#acNew").click(function(){calc.newArmy();return false});calc.canvas.find("#acRevalidate").click(function(){calc.revalidate();return false});calc.canvas.find("#acDec").click(function(){_focused_element.size(_focused_element.size()-1);return false}).hide();calc.canvas.find("#acInc").click(function(){_focused_element.size(_focused_element.size()+1);return false}).hide();calc.canvas.find("#acRem").click(function(){_focused_element.remove();return false}).hide();calc.canvas.find("#acUp").click(function(){_focused_element._li.prev().before(_focused_element._li);calc.canvas.find("#acUp").toggle(_focused_element._li.prev().length>0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.canvas.find("#acDown").click(function(){_focused_element._li.next().after(_focused_element._li);calc.canvas.find("#acUp").toggle(_focused_element._li.prev().length>0);calc.canvas.find("#acDown").toggle(_focused_element._li.next().length>0);return false}).hide();calc.army=null;calc.units=[];calc.availableUnits={};calc.closePopup=function(){this.canvas.find("#acPopup").fadeOut();this.canvas.find("#acPopupBg").fadeOut()};calc.popup=function(f,d,e){this.canvas.find("#acPopupTitle").html(f);this.canvas.find("#acPopupContent").html("");this.canvas.find("#acPopupContent").append(d);if(e){this.canvas.find("#acClosePopup").hide()}else{this.canvas.find("#acClosePopup").show()}this.canvas.find("#acPopupBg").fadeIn();this.canvas.find("#acPopup").fadeIn();this.canvas.find("#acClosePopup").click(function(){calc.canvas.find("#acPopup").fadeOut();calc.canvas.find("#acPopupBg").fadeOut();return false})};calc.setStatus=function(d){this.statusElem.text(d)};calc.flashMsg=function(d){this.statusElem.html(d);this.statusElem.stop().css("background-color","#ff0000").animate({backgroundColor:"#000000"},1000)};calc.setLang=function(d){acAddCSSRule(".trans","display","none");if(this.lang){acAddCSSRule("."+this.lang+"","display","none")}this.lang=d;acAddCSSRule("."+d+"","display","inline")};calc.setStatus("no TWR file loaded");calc.setError=function(d){this.statusElem.html('<b style="color:red">'+d+"</b>")};xhrError=function(f,e,d){this.calc.setError(this.url+" - "+e+" - "+d)};calc.calcLoadUnitsXml=function(d){console.log(d)};calc.loadTWR=function(d){this.twrurl=d;this.units=[];this.availableUnits=[];this.setStatus("loading "+d);this.ruleset=new acRuleset(this);this.ruleset.loadFromUrl(d)};calc.revalidate=function(){if(!this.army){this.flashMsg("Please create new army first!");return}if(!this.model.validator){this.flashMsg("This model do not provide a validator!");return}acSandbox(this.model.validator,{army:this.army});this.popup("validation result",this.army._errorsul)};calc.newArmy=function(){that=this;body=$("<div></div>");body.append("<div class='piece'><h3>"+this.ruleset.name+"</h3>"+this.ruleset.description+"</div>");modelSelect=$("<select></select>");for(id in this.ruleset.models){modelSelect.append("<option value='"+id+"'"+(this.ruleset.models[id]["default"]?" selected='true'":"")+">"+this.ruleset.models[id].name+"</option>")}createButton=$("<input type='button' value='create'/>");body.append($("<label>Model</label>").append(modelSelect));for(id in this.ruleset.costs){this.ruleset.costs[id].input=$("<input name='cost["+id+"]' value='0'/>");body.append($("<label>"+this.ruleset.costs[id].name+"</label>").append(this.ruleset.costs[id].input))}createButton.click(function(){calc.closePopup();calc.canvas.find("#acElements").html("");calc.canvas.find("#acUnits").html("");var e=$("<div class='title'></div>");$.each(that.ruleset.costs,function(g,f){e.append("<span class='cst'>"+f.shortname+"</span>")});$.each(that.ruleset.stats,function(g,f){e.append("<span class='st'>"+f.shortname+"</span>")});calc.canvas.find("#acUnitsHeader").html("");calc.canvas.find("#acUnitsHeader").append(e);calc.model=that.ruleset.models[modelSelect.val()];calc.army=new acInstance(that,that.ruleset,null,calc.model);calc.army.maxCosts={};for(id in calc.ruleset.costs){calc.army.maxCosts[id]=that.ruleset.costs[id].input.val()}var d={};$.each(calc.model.mainmenu,function(h,g){d[h]=$("<ul class='submm'></ul>");var f=$("<a href='#'>"+g.name+"</a>");calc.canvas.find("#acElements").append($("<li></li>").append(f).append(d[h]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}));$.each(g.submenus,function(l,k){d[l]=$("<ul class='submm'></ul>");var j=$("<a href='#'>"+k.name+"</a>");d[h].append($("<li></li>").append(j).append(d[l]).hover(function(){$(this).children("ul").show()},function(){$(this).children("ul").hide()}))})});$.each(calc.army.element.elements,function(g,f){$.each(f.elements,function(k,j){if(j.menu_id){var h=$("<a href='#'>"+j.name+"</a>");d[j.menu_id].append($("<li></li>").append(h));h.click(function(){calc.army.append(k);$(".submm").hide()})}})});$.each(d,function(g,f){if($(f).children("li").length==0){$(f).parent().remove()}})});body.append($("<div class='submit'></div>").append(createButton));this.popup("New army - "+this.ruleset.name,body)};calc.setFullscreen=function(d){$("body").toggleClass("acFullscreen",d);this.canvas.toggleClass("acFullscreen",d);this.canvas.find("#acMaximize").toggle(!d);this.canvas.find("#acMinimize").toggle(d);if(d){var e=$(window).height()-80;this.canvas.find(".unitslist").height(e)}else{this.canvas.find(".unitslist").height(200)}};return calc}function goodbye(a){}if(navigator.appName!="Microsoft Internet Explorer"){window.onbeforeunload=goodbye};