PageRenderTime 56ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/js/main.js

https://github.com/dave--/agotmap
JavaScript | 425 lines | 376 code | 25 blank | 24 comment | 32 complexity | 68774f23f339b0a0bf87718ae11dbe8f MD5 | raw file
  1. $(window).load(function(){
  2. var $board = $('.board'),
  3. setShortLink = function (href) {
  4. var characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
  5. string = '',
  6. charCnt = 20,
  7. uri;
  8. for (var i = 0; i < charCnt; i += 1) {
  9. string += characters[Math.floor(Math.random() * characters.length)];
  10. }
  11. uri = 'http://tinyurl.com/create.php?source=indexpage&url=' + encodeURIComponent(href) + '&alias=' + string;
  12. $('body').append('<img src="' + uri + '" style="height: 1px; width: 1px; position: absolute; z-index: -999; opacity: 0;" />');
  13. $('#shortlink').html('http://tinyurl.com/' + string);
  14. },
  15. setBoard = function (conf) {
  16. var value,
  17. htmlString = '';
  18. // wildling token
  19. htmlString += '<div class="wildlingmarker pos-wilding-' + conf.wildlings + '"></div>';
  20. // round token
  21. htmlString += '<div class="round pos-round-' + conf.round + '"></div>';
  22. // Influence Tracks
  23. // Iron Throne
  24. value = conf.ironThroneOrder.split('\n');
  25. for(var i = 0; i < value.length; i += 1) {
  26. htmlString += '<div class="token-' + value[i].toLowerCase() + ' pos-throne-' + (i + 1) + '"></div>';
  27. }
  28. // Fiefdom
  29. value = conf.fiefdomOrder.split('\n');
  30. for(var i = 0; i < value.length; i += 1) {
  31. htmlString += '<div class="token-' + value[i].toLowerCase() + ' pos-fiefdom-' + (i + 1) + '"></div>';
  32. }
  33. // King's Court
  34. value = conf.kingsCourtOrder.split('\n');
  35. for(var i = 0; i < value.length; i += 1) {
  36. htmlString += '<div class="token-' + value[i].toLowerCase() + ' pos-court-' + (i + 1) + '"></div>';
  37. }
  38. // Supply
  39. value = conf.supply.split('\n');
  40. for(var i = 0; i < value.length; i += 1) {
  41. htmlString += '<div class="supply-' + value[i].toLowerCase().split(': ')[0] + ' pos-supply-' + value[i].split(': ')[1] + '"></div>';
  42. }
  43. // Victory
  44. value = conf.victory.split('\n');
  45. for(var i = 0; i < value.length; i += 1) {
  46. htmlString += '<div class="victory-' + value[i].toLowerCase().split(': ')[0] + ' pos-victory-' + value[i].split(': ')[1] + '"></div>';
  47. }
  48. // Garrisons
  49. value = conf.garrisons.split('\n');
  50. for(var i = 0; i < value.length; i += 1) {
  51. htmlString += '<div class="garrison pos-' + value[i].toLowerCase().split(': ')[0].toLowerCase().replace(/ - port$/, '-harbor').replace(/([' ]|^the )/g, '') + '" data-value="' + value[i].split(': ')[1] + '"></div>';
  52. }
  53. // VSB and Raven token
  54. htmlString += '<div class="vsb-token ' + (conf.vsbUsed ? 'used' : 'unused') + '"></div>';
  55. htmlString += '<div class="raven-token ' + (conf.ravenUsed ? 'used' : 'unused') + '"></div>';
  56. // Units
  57. for(var house in conf.units) {
  58. if (conf.units[house].length > 0) {
  59. foo = conf.units;
  60. value = conf.units[house]
  61. .replace(/ (routed-)?kn(,|\n|$)/ig, ' $1knight$2')
  62. .replace(/ (routed-)?fm(,|\n|$)/ig, ' $1footman$2')
  63. .replace(/ (routed-)?se(,|\n|$)/ig, ' $1siege$2')
  64. .replace(/ (routed-)?sh(,|\n|$)/ig, ' $1ship$2')
  65. .split('\n');
  66. for(var i = 0; i < value.length; i += 1) {
  67. var valueSplitted = value[i].split(': '),
  68. area = valueSplitted[0].toLowerCase().replace(/ - port$/, '-harbor').replace(/([' ]|^the )/g, ''),
  69. units = valueSplitted[1].split(', ');
  70. for(var j = 0; j < units.length; j += 1) {
  71. htmlString += '<div class="' + units[j].toLowerCase() + '-' + house + ' pos-' + area + ' unit"></div>';
  72. }
  73. }
  74. }
  75. }
  76. // Orders
  77. for(var house in conf.orders) {
  78. if (conf.orders[house].length > 0) {
  79. value = conf.orders[house]
  80. .replace(/ cp(\n|$)/ig, ' power-1$1')
  81. .replace(/ cp\*(\n|$)/ig, ' power-2$1')
  82. .replace(/ m-1(\n|$)/ig, ' march-0$1')
  83. .replace(/ m\+0(\n|$)/ig, ' march-1$1')
  84. .replace(/ m(\+1)?\*?(\n|$)/ig, ' march-2$2')
  85. .replace(/ r(aid)?(\n|$)/ig, ' raid-1$2')
  86. .replace(/ r(aid)?\*(\n|$)/ig, ' raid-2$2')
  87. .replace(/ d(efend)?(\+1)?(\n|$)/ig, ' defend-1$3')
  88. .replace(/ d(efend)?(\+2)?\*?(\n|$)/ig, ' defend-2$3')
  89. .replace(/ s(upport)?(\n|$)/ig, ' support-1$2')
  90. .replace(/ s(upport)?(\+1)?\*?(\n|$)/ig, ' support-2$3')
  91. .split('\n');
  92. for(var i = 0; i < value.length; i += 1) {
  93. var valueSplitted = value[i].split(': '),
  94. area = valueSplitted[0].toLowerCase().replace(/ - port$/, '-harbor').replace(/([' ]|^the )/g, '');
  95. htmlString += '<div class="order-' + valueSplitted[1].toLowerCase() + ' pos-' + area + '"></div>';
  96. }
  97. }
  98. }
  99. // Power Tokens on the board
  100. for(var house in conf.powertokens) {
  101. if (conf.powertokens[house].length > 0) {
  102. value = conf.powertokens[house].split('\n');
  103. for(var i = 0; i < value.length; i += 1) {
  104. var area = value[i].toLowerCase().replace(/ - port$/, '-harbor').replace(/([' ]|^the )/g, '');
  105. htmlString += '<div class="powertoken-' + house + ' pos-' + area + '"></div>';
  106. }
  107. }
  108. }
  109. for(var house in conf.availablePowertokens) {
  110. htmlString += '<div class="tokenCounts-' + house + ' powertoken-' + house + '">';
  111. // available Power Tokens
  112. htmlString += '<div class="availablePowertokens">';
  113. htmlString += conf.availablePowertokens[house];
  114. htmlString += '</div>';
  115. // left Power Tokens
  116. htmlString += '<div class="leftPowertokens">';
  117. htmlString += conf.maxPowertokens - conf.availablePowertokens[house] - (conf.powertokens[house].length > 0 ? conf.powertokens[house].split('\n').length : 0);
  118. htmlString += '</div>';
  119. htmlString += '</div>';
  120. }
  121. // housecard tracking
  122. for(var house in conf.housecards) {
  123. var housecards = conf.housecards[house].split('\n');
  124. for (var i = 0; i < housecards.length; i += 1) {
  125. $('[name="housecard-' + i + '-' + house + '"] + label').html(housecards[i]);
  126. }
  127. }
  128. $(':not(input)', $board).remove();
  129. $(htmlString).appendTo($board);
  130. },
  131. getConf = function () {
  132. var conf = {
  133. "wildlings": $('[name="wildlings"]').val(),
  134. "round": $('[name="round"]').val(),
  135. "ironThroneOrder": $('[name="ironThroneOrder"]').val(),
  136. "fiefdomOrder": $('[name="fiefdomOrder"]').val(),
  137. "kingsCourtOrder": $('[name="kingsCourtOrder"]').val(),
  138. "garrisons": $('[name="garrisons"]').val(),
  139. "supply": $('[name="supply"]').val(),
  140. "victory": $('[name="victory"]').val(),
  141. "vsbUsed": $('[name="vsb-used"]').attr('checked'),
  142. "ravenUsed": $('[name="raven-used"]').attr('checked'),
  143. "units": {
  144. "baratheon": $('[name="units-baratheon"]').val(),
  145. "greyjoy": $('[name="units-greyjoy"]').val(),
  146. "lannister": $('[name="units-lannister"]').val(),
  147. "martell": $('[name="units-martell"]').val(),
  148. "stark": $('[name="units-stark"]').val(),
  149. "tyrell": $('[name="units-tyrell"]').val()
  150. },
  151. "orders": {
  152. "baratheon": $('[name="orders-baratheon"]').val(),
  153. "greyjoy": $('[name="orders-greyjoy"]').val(),
  154. "lannister": $('[name="orders-lannister"]').val(),
  155. "martell": $('[name="orders-martell"]').val(),
  156. "stark": $('[name="orders-stark"]').val(),
  157. "tyrell": $('[name="orders-tyrell"]').val()
  158. },
  159. "powertokens": {
  160. "baratheon": $('[name="powertokens-baratheon"]').val(),
  161. "greyjoy": $('[name="powertokens-greyjoy"]').val(),
  162. "lannister": $('[name="powertokens-lannister"]').val(),
  163. "martell": $('[name="powertokens-martell"]').val(),
  164. "stark": $('[name="powertokens-stark"]').val(),
  165. "tyrell": $('[name="powertokens-tyrell"]').val()
  166. },
  167. "housecards": {
  168. "baratheon": $('[name="housecards-baratheon"]').val(),
  169. "greyjoy": $('[name="housecards-greyjoy"]').val(),
  170. "lannister": $('[name="housecards-lannister"]').val(),
  171. "martell": $('[name="housecards-martell"]').val(),
  172. "stark": $('[name="housecards-stark"]').val(),
  173. "tyrell": $('[name="housecards-tyrell"]').val()
  174. },
  175. "housecardTracking": {
  176. "baratheon": [
  177. $('[name="housecard-0-baratheon"]').is(':checked'),
  178. $('[name="housecard-1-baratheon"]').is(':checked'),
  179. $('[name="housecard-2-baratheon"]').is(':checked'),
  180. $('[name="housecard-3-baratheon"]').is(':checked'),
  181. $('[name="housecard-4-baratheon"]').is(':checked'),
  182. $('[name="housecard-5-baratheon"]').is(':checked'),
  183. $('[name="housecard-6-baratheon"]').is(':checked')
  184. ],
  185. "greyjoy": [
  186. $('[name="housecard-0-greyjoy"]').is(':checked'),
  187. $('[name="housecard-1-greyjoy"]').is(':checked'),
  188. $('[name="housecard-2-greyjoy"]').is(':checked'),
  189. $('[name="housecard-3-greyjoy"]').is(':checked'),
  190. $('[name="housecard-4-greyjoy"]').is(':checked'),
  191. $('[name="housecard-5-greyjoy"]').is(':checked'),
  192. $('[name="housecard-6-greyjoy"]').is(':checked')
  193. ],
  194. "lannister": [
  195. $('[name="housecard-0-lannister"]').is(':checked'),
  196. $('[name="housecard-1-lannister"]').is(':checked'),
  197. $('[name="housecard-2-lannister"]').is(':checked'),
  198. $('[name="housecard-3-lannister"]').is(':checked'),
  199. $('[name="housecard-4-lannister"]').is(':checked'),
  200. $('[name="housecard-5-lannister"]').is(':checked'),
  201. $('[name="housecard-6-lannister"]').is(':checked')
  202. ],
  203. "martell": [
  204. $('[name="housecard-0-martell"]').is(':checked'),
  205. $('[name="housecard-1-martell"]').is(':checked'),
  206. $('[name="housecard-2-martell"]').is(':checked'),
  207. $('[name="housecard-3-martell"]').is(':checked'),
  208. $('[name="housecard-4-martell"]').is(':checked'),
  209. $('[name="housecard-5-martell"]').is(':checked'),
  210. $('[name="housecard-6-martell"]').is(':checked')
  211. ],
  212. "stark": [
  213. $('[name="housecard-0-stark"]').is(':checked'),
  214. $('[name="housecard-1-stark"]').is(':checked'),
  215. $('[name="housecard-2-stark"]').is(':checked'),
  216. $('[name="housecard-3-stark"]').is(':checked'),
  217. $('[name="housecard-4-stark"]').is(':checked'),
  218. $('[name="housecard-5-stark"]').is(':checked'),
  219. $('[name="housecard-6-stark"]').is(':checked')
  220. ],
  221. "tyrell": [
  222. $('[name="housecard-0-tyrell"]').is(':checked'),
  223. $('[name="housecard-1-tyrell"]').is(':checked'),
  224. $('[name="housecard-2-tyrell"]').is(':checked'),
  225. $('[name="housecard-3-tyrell"]').is(':checked'),
  226. $('[name="housecard-4-tyrell"]').is(':checked'),
  227. $('[name="housecard-5-tyrell"]').is(':checked'),
  228. $('[name="housecard-6-tyrell"]').is(':checked')
  229. ]
  230. },
  231. "availablePowertokens": {
  232. "baratheon": $('[name="availablePowertokens-baratheon"]').val(),
  233. "greyjoy": $('[name="availablePowertokens-greyjoy"]').val(),
  234. "lannister": $('[name="availablePowertokens-lannister"]').val(),
  235. "martell": $('[name="availablePowertokens-martell"]').val(),
  236. "stark": $('[name="availablePowertokens-stark"]').val(),
  237. "tyrell": $('[name="availablePowertokens-tyrell"]').val()
  238. },
  239. "maxPowertokens": $('[name="maxPowertokens"]').val()
  240. }
  241. return conf;
  242. },
  243. setConf = function (conf) {
  244. $('[name="wildlings"]').val(conf.wildlings);
  245. $('[name="round"]').val(conf.round);
  246. $('[name="ironThroneOrder"]').val(conf.ironThroneOrder);
  247. $('[name="fiefdomOrder"]').val(conf.fiefdomOrder);
  248. $('[name="kingsCourtOrder"]').val(conf.kingsCourtOrder);
  249. $('[name="garrisons"]').val(conf.garrisons);
  250. $('[name="supply"]').val(conf.supply);
  251. $('[name="victory"]').val(conf.victory);
  252. $('[name="vsb-used"]').attr('checked', conf.vsbUsed);
  253. $('[name="raven-used"]').attr('checked', conf.ravenUsed);
  254. $('[name="units-baratheon"]').val(conf.units.baratheon);
  255. $('[name="units-greyjoy"]').val(conf.units.greyjoy);
  256. $('[name="units-lannister"]').val(conf.units.lannister);
  257. $('[name="units-martell"]').val(conf.units.martell);
  258. $('[name="units-stark"]').val(conf.units.stark);
  259. $('[name="units-tyrell"]').val(conf.units.tyrell);
  260. $('[name="orders-baratheon"]').val(conf.orders.baratheon);
  261. $('[name="orders-greyjoy"]').val(conf.orders.greyjoy);
  262. $('[name="orders-lannister"]').val(conf.orders.lannister);
  263. $('[name="orders-martell"]').val(conf.orders.martell);
  264. $('[name="orders-stark"]').val(conf.orders.stark);
  265. $('[name="orders-tyrell"]').val(conf.orders.tyrell);
  266. $('[name="powertokens-baratheon"]').val(conf.powertokens.baratheon);
  267. $('[name="powertokens-greyjoy"]').val(conf.powertokens.greyjoy);
  268. $('[name="powertokens-lannister"]').val(conf.powertokens.lannister);
  269. $('[name="powertokens-martell"]').val(conf.powertokens.martell);
  270. $('[name="powertokens-stark"]').val(conf.powertokens.stark);
  271. $('[name="powertokens-tyrell"]').val(conf.powertokens.tyrell);
  272. $('[name="housecards-baratheon"]').val(conf.housecards.baratheon);
  273. $('[name="housecards-greyjoy"]').val(conf.housecards.greyjoy);
  274. $('[name="housecards-lannister"]').val(conf.housecards.lannister);
  275. $('[name="housecards-martell"]').val(conf.housecards.martell);
  276. $('[name="housecards-stark"]').val(conf.housecards.stark);
  277. $('[name="housecards-tyrell"]').val(conf.housecards.tyrell);
  278. if (conf.housecardTracking) {
  279. $('[name="housecard-0-baratheon"]').attr('checked', conf.housecardTracking.baratheon[0]);
  280. $('[name="housecard-1-baratheon"]').attr('checked', conf.housecardTracking.baratheon[1]);
  281. $('[name="housecard-2-baratheon"]').attr('checked', conf.housecardTracking.baratheon[2]);
  282. $('[name="housecard-3-baratheon"]').attr('checked', conf.housecardTracking.baratheon[3]);
  283. $('[name="housecard-4-baratheon"]').attr('checked', conf.housecardTracking.baratheon[4]);
  284. $('[name="housecard-5-baratheon"]').attr('checked', conf.housecardTracking.baratheon[5]);
  285. $('[name="housecard-6-baratheon"]').attr('checked', conf.housecardTracking.baratheon[6]);
  286. $('[name="housecard-0-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[0]);
  287. $('[name="housecard-1-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[1]);
  288. $('[name="housecard-2-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[2]);
  289. $('[name="housecard-3-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[3]);
  290. $('[name="housecard-4-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[4]);
  291. $('[name="housecard-5-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[5]);
  292. $('[name="housecard-6-greyjoy"]').attr('checked', conf.housecardTracking.greyjoy[6]);
  293. $('[name="housecard-0-lannister"]').attr('checked', conf.housecardTracking.lannister[0]);
  294. $('[name="housecard-1-lannister"]').attr('checked', conf.housecardTracking.lannister[1]);
  295. $('[name="housecard-2-lannister"]').attr('checked', conf.housecardTracking.lannister[2]);
  296. $('[name="housecard-3-lannister"]').attr('checked', conf.housecardTracking.lannister[3]);
  297. $('[name="housecard-4-lannister"]').attr('checked', conf.housecardTracking.lannister[4]);
  298. $('[name="housecard-5-lannister"]').attr('checked', conf.housecardTracking.lannister[5]);
  299. $('[name="housecard-6-lannister"]').attr('checked', conf.housecardTracking.lannister[6]);
  300. $('[name="housecard-0-martell"]').attr('checked', conf.housecardTracking.martell[0]);
  301. $('[name="housecard-1-martell"]').attr('checked', conf.housecardTracking.martell[1]);
  302. $('[name="housecard-2-martell"]').attr('checked', conf.housecardTracking.martell[2]);
  303. $('[name="housecard-3-martell"]').attr('checked', conf.housecardTracking.martell[3]);
  304. $('[name="housecard-4-martell"]').attr('checked', conf.housecardTracking.martell[4]);
  305. $('[name="housecard-5-martell"]').attr('checked', conf.housecardTracking.martell[5]);
  306. $('[name="housecard-6-martell"]').attr('checked', conf.housecardTracking.martell[6]);
  307. $('[name="housecard-0-stark"]').attr('checked', conf.housecardTracking.stark[0]);
  308. $('[name="housecard-1-stark"]').attr('checked', conf.housecardTracking.stark[1]);
  309. $('[name="housecard-2-stark"]').attr('checked', conf.housecardTracking.stark[2]);
  310. $('[name="housecard-3-stark"]').attr('checked', conf.housecardTracking.stark[3]);
  311. $('[name="housecard-4-stark"]').attr('checked', conf.housecardTracking.stark[4]);
  312. $('[name="housecard-5-stark"]').attr('checked', conf.housecardTracking.stark[5]);
  313. $('[name="housecard-6-stark"]').attr('checked', conf.housecardTracking.stark[6]);
  314. $('[name="housecard-0-tyrell"]').attr('checked', conf.housecardTracking.tyrell[0]);
  315. $('[name="housecard-1-tyrell"]').attr('checked', conf.housecardTracking.tyrell[1]);
  316. $('[name="housecard-2-tyrell"]').attr('checked', conf.housecardTracking.tyrell[2]);
  317. $('[name="housecard-3-tyrell"]').attr('checked', conf.housecardTracking.tyrell[3]);
  318. $('[name="housecard-4-tyrell"]').attr('checked', conf.housecardTracking.tyrell[4]);
  319. $('[name="housecard-5-tyrell"]').attr('checked', conf.housecardTracking.tyrell[5]);
  320. $('[name="housecard-6-tyrell"]').attr('checked', conf.housecardTracking.tyrell[6]);
  321. }
  322. $('[name="availablePowertokens-baratheon"]').val(conf.availablePowertokens.baratheon);
  323. $('[name="availablePowertokens-greyjoy"]').val(conf.availablePowertokens.greyjoy);
  324. $('[name="availablePowertokens-lannister"]').val(conf.availablePowertokens.lannister);
  325. $('[name="availablePowertokens-martell"]').val(conf.availablePowertokens.martell);
  326. $('[name="availablePowertokens-stark"]').val(conf.availablePowertokens.stark);
  327. $('[name="availablePowertokens-tyrell"]').val(conf.availablePowertokens.tyrell);
  328. $('[name="maxPowertokens"]').val(conf.maxPowertokens);
  329. };
  330. // inital setting of the board
  331. try {
  332. var hash = location.hash;
  333. if (hash.indexOf('#') === 0) {
  334. hash = hash.substr(1);
  335. }
  336. if (hash.length > 0) {var conf;
  337. try {
  338. // try to see if we already have JSON (from older versions of the link)
  339. conf = JSON.parse(decodeURIComponent(hash));
  340. } catch (e) {
  341. // nope, lets do the decode and decompress routine
  342. conf = JSON.parse(LZString.decompress(Base64.urlSafeDecode(hash)));
  343. }
  344. setBoard(conf);
  345. setConf(conf);
  346. } else {
  347. throw 'No Conf in hash';
  348. }
  349. } catch (e) {
  350. setBoard(getConf());
  351. };
  352. // setting hash on form change
  353. $('.navContent :input').on('change', function () {
  354. var hash = Base64.urlSafeEncode(LZString.compress(JSON.stringify(getConf())));
  355. location.hash = hash;
  356. });
  357. // setting board and form on hash change
  358. $(window).on('hashchange', function () {
  359. var hash = location.hash;
  360. if (hash.indexOf('#') === 0) {
  361. hash = hash.substr(1);
  362. }
  363. var conf;
  364. try {
  365. // try to see if we already have JSON (from older versions of the link)
  366. conf = JSON.parse(decodeURIComponent(hash));
  367. } catch (e) {
  368. // nope, lets do the decode and decompress routine
  369. conf = JSON.parse(LZString.decompress(Base64.urlSafeDecode(hash)));
  370. }
  371. setConf(conf);
  372. setBoard(getConf());
  373. setShortLink(location.href);
  374. });
  375. // click listener for powertoken change
  376. $('body').on('click', function (e) {
  377. var $target = $(e.target);
  378. if ($target.hasClass('availablePowertokens')) {
  379. e.preventDefault();
  380. var $input = $('[name="available' + $target.parent().attr('class').replace(/.*powertoken-([^ ]*)/, 'Powertokens-\$1') + '"]');
  381. $input.val($input.val() - 1)
  382. .trigger('change');
  383. } else if ($target.hasClass('leftPowertokens')) {
  384. e.preventDefault();
  385. var $input = $('[name="available' + $target.parent().attr('class').replace(/.*powertoken-([^ ]*)/, 'Powertokens-\$1') + '"]');
  386. $input.val(+$input.val() + 1)
  387. .trigger('change');
  388. } else if ($target.hasClass('vsb-token')) {
  389. e.preventDefault();
  390. var $input = $('[name="vsb-used"]');
  391. $input.attr('checked', !$target.hasClass('used'))
  392. .trigger('change');
  393. } else if ($target.hasClass('raven-token')) {
  394. e.preventDefault();
  395. var $input = $('[name="raven-used"]');
  396. $input.attr('checked', !$target.hasClass('used'))
  397. .trigger('change');
  398. }
  399. });
  400. });