Advertisement
Guest User

Build batard

a guest
Jun 30th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.87 KB | None | 0 0
  1. <html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <title></title>
  5. <style>
  6. /*
  7. ???? (1)
  8. */
  9.  
  10. * {
  11. /* ???? ??????????????????? */
  12. font-family: "Meiryo";
  13. font-size: 12px;
  14. }
  15.  
  16. body, html {
  17. margin: 0;
  18. }
  19.  
  20. html {
  21. /* ??????????
  22. * ???????????????????16x16???????
  23. * ?????????????????????????????????????? */
  24. background-image: url(handle.png);
  25. background-position: bottom right;
  26. background-repeat: no-repeat;
  27. box-sizing: border-box;
  28. height: 100%;
  29. /* ?? */
  30. /*border: 1px solid rgba(0,0,0,0.1);*/
  31. /* ???????????????????????
  32. * ?????????????????????????????? */
  33. overflow: hidden;
  34. /* ??? */
  35. background-color: transparent;
  36. }
  37.  
  38. #wrapper {
  39. background: rgba(0, 0, 0, 0.35);
  40. box-shadow: 0 0 8px 8px rgba(0, 0, 0, 0.35);
  41. border-radius: 4px;
  42. margin: 12px;
  43. }
  44.  
  45. #combatantTable {
  46. width: 100%;
  47. table-layout: fixed;
  48. border-collapse: collapse;
  49. }
  50.  
  51. /* ????????????????? */
  52. #combatantTableBody * {
  53. color: #E2EBF5;
  54. text-shadow: -1px 0 3px #217AA2, 0 1px 3px #217AA2, 1px 0 3px #217AA2, 0 -1px 3px #217AA2;
  55. font-weight: 300;
  56. /* ??????????…?????? */
  57. overflow: hidden;
  58. white-space: nowrap;
  59. text-overflow: ellipsis;
  60. }
  61.  
  62. #combatantTableBody img {
  63. height: 20px;
  64. /* ????????????????????????? */
  65. }
  66.  
  67. #encounter, #combatantTableHeader *
  68. {
  69. color: #DED7BE;
  70. text-shadow: -1px 0 2px #795516, 0 1px 2px #795516, 1px 0 2px #795516, 0 -1px 2px #795516;
  71. font-weight: 300;
  72. white-space: nowrap;
  73. }
  74.  
  75. /* ????????????? */
  76. #combatantTableHeader tr {
  77. border-bottom: 1px solid #DED7BE;
  78. }
  79. </style>
  80. <script>
  81.  
  82. //
  83. // ?????????????? ActXiv ??????????????????
  84. //
  85. // var ActXiv = {
  86. // "Encounter": {...},
  87. // "Combatant": {
  88. // "PlayerName1": {...},
  89. // "PlayerName2": {...},
  90. // ...
  91. // }
  92. // };
  93. //
  94. // ??????? 1 ???
  95. //
  96. // ??????? onOverlayDataUpdate ??????????????????????????
  97. // ?????????????? detail ???????????????????
  98. //
  99.  
  100. //
  101. // ???? (2)
  102. //
  103.  
  104. // ???????????
  105. var encounterDefine = "Time: {duration} / DPS: {ENCDPS} / {maxhit}";
  106.  
  107. // ???????????? HTML ??????? true
  108. var useHTMLEncounterDefine = false;
  109.  
  110. // ??????
  111. var headerDefine =
  112. [
  113. //{ text: "#", width: "5%", align: "center" },
  114. { text: "Name", width: "10%", align: "left" },
  115. { text: "Job", width: "8%", align: "center" },
  116. { text: "Damage", width: "5%", align: "center", span: 1 },
  117. { text: "DPS", width: "5%", align: "center", span: 1 },
  118. { text: "HPS", width: "5%", align: "center" },
  119. ];
  120.  
  121. // ??????????
  122. var bodyDefine =
  123. [
  124. //{ text: rankingText, width: "5%", align: "center", effect: deadYatsuEffect },
  125. { text: "{name}", width: "10%" },
  126. { html: "<img src='./icons/{JobOrName}.png' onError=\"this.onerror=null;this.src='./icons/error.png';\" />", width: "5%", align: "center" },
  127. { text: "{damage}", width: "5%", align: "center" },
  128. { text: "{encdps}", width: "5%", align: "center" },
  129. { text: "{enchps}", width: "5%", align: "center" },
  130. ];
  131.  
  132. // ????????text ??????????
  133. // ??:
  134. // combatant : ???????????combatant["..."]???????????
  135. // index : ??????????????? 0 ?????? 1 ??????
  136. // ???:
  137. // ?????????
  138. // ACT ????????????????????? parseActFormat ????????????
  139. function rankingText(combatant, index) {
  140. // 1 ??????????
  141. return (index + 1).toString();
  142. }
  143.  
  144. // ?????????effect ???
  145. // ??:
  146. // cell : ??? DOM ??
  147. // combatant : ???????????combatant["..."]???????????
  148. // index: ??????????????? 0 ?????? 1 ??????
  149. // ???: ??
  150. function deadYatsuEffect(cell, combatant, index) {
  151. // ??????????
  152. var deaths = parseInt(combatant["deaths"]);
  153. // ???? 0 ????????
  154. if (deaths > 0) {
  155. // ????
  156. cell.style.color = "#FFA0A0";
  157. cell.style.textShadow = "-1px 0 3px #802020, 0 1px 3px #802020, 1px 0 3px #802020, 0 -1px 3px #802020";
  158. }
  159. }
  160.  
  161. //
  162. // ??????????
  163. //
  164.  
  165. // onOverlayDataUpdate ???????
  166. document.addEventListener("onOverlayDataUpdate", function (e) {
  167. update(e.detail);
  168. });
  169.  
  170. // ???????
  171. function update(data) {
  172. updateEncounter(data);
  173. if (document.getElementById("combatantTableHeader") == null) {
  174. updateCombatantListHeader();
  175. }
  176. updateCombatantList(data);
  177. }
  178.  
  179. // ?????????????
  180. function updateEncounter(data) {
  181. // ????
  182. var encounterElem = document.getElementById('encounter');
  183.  
  184. // ??????
  185. var elementText;
  186. if (typeof encounterDefine === 'function') {
  187. elementText = encounterDefine(data.Encounter);
  188. } else if (typeof encounterDefine === 'string') {
  189. elementText = parseActFormat(encounterDefine, data.Encounter);
  190. } else {
  191. console.log("updateEncounter: Could not update the encounter element due to invalid type.");
  192. return;
  193. }
  194.  
  195. // ??????
  196. if (!useHTMLEncounterDefine) {
  197. encounterElem.innerText = parseActFormat(encounterDefine, data.Encounter);
  198. } else {
  199. encounterElem.innerHTML = parseActFormat(encounterDefine, data.Encounter);
  200. }
  201. }
  202.  
  203. // ????????
  204. function updateCombatantListHeader() {
  205. var table = document.getElementById('combatantTable');
  206. var tableHeader = document.createElement("thead");
  207. tableHeader.id = "combatantTableHeader";
  208. var headerRow = tableHeader.insertRow();
  209.  
  210. for (var i = 0; i < headerDefine.length; i++) {
  211. var cell = document.createElement("th");
  212. // ??????
  213. if (typeof headerDefine[i].text !== 'undefined') {
  214. cell.innerText = headerDefine[i].text;
  215. } else if (typeof headerDefine[i].html !== 'undefined') {
  216. cell.innerHTML = headerDefine[i].html;
  217. }
  218. // ???
  219. cell.style.width = headerDefine[i].width;
  220. cell.style.maxWidth = headerDefine[i].width;
  221. // ??????
  222. if (typeof headerDefine[i].span !== 'undefined') {
  223. cell.colSpan = headerDefine[i].span;
  224. }
  225. // ?????
  226. if (typeof headerDefine[i].align !== 'undefined') {
  227. cell.style["textAlign"] = headerDefine[i].align;
  228. }
  229. headerRow.appendChild(cell);
  230. }
  231.  
  232. table.tHead = tableHeader;
  233. }
  234.  
  235. // ?????????????
  236. function updateCombatantList(data) {
  237. // ???????
  238. var table = document.getElementById('combatantTable');
  239. var oldTableBody = table.tBodies.namedItem('combatantTableBody');
  240. var newTableBody = document.createElement("tbody");
  241. newTableBody.id = "combatantTableBody";
  242.  
  243. // tbody ??????
  244. var combatantIndex = 0;
  245. for (var combatantName in data.Combatant) {
  246. var combatant = data.Combatant[combatantName];
  247. combatant.JobOrName = combatant.Job || combatantName;
  248. var egiSearch = combatant.JobOrName.indexOf("-Egi (");
  249. if (egiSearch != -1) {
  250. combatant.JobOrName = combatant.JobOrName.substring(0, egiSearch);
  251. }
  252. else if (combatant.JobOrName.indexOf("Eos (") == 0) {
  253. combatant.JobOrName = "Eos";
  254. }
  255. else if (combatant.JobOrName.indexOf("Selene (") == 0) {
  256. combatant.JobOrName = "Selene";
  257. }
  258. else if (combatant.JobOrName.indexOf("Carbuncle (") != -1) {
  259. // currently no carbuncle pics
  260. }
  261. else if (combatant.JobOrName.indexOf(" (") != -1) {
  262. combatant.JobOrName = "choco";
  263. }
  264.  
  265.  
  266. var tableRow = newTableBody.insertRow(newTableBody.rows.length);
  267. for (var i = 0; i < bodyDefine.length; i++) {
  268. var cell = tableRow.insertCell(i);
  269. // ??????
  270. if (typeof bodyDefine[i].text !== 'undefined') {
  271. var cellText;
  272. if (typeof bodyDefine[i].text === 'function') {
  273. cellText = bodyDefine[i].text(combatant, combatantIndex);
  274. } else {
  275. cellText = parseActFormat(bodyDefine[i].text, combatant);
  276. }
  277. cell.innerText = cellText;
  278. } else if (typeof bodyDefine[i].html !== 'undefined') {
  279. var cellHTML;
  280. if (typeof bodyDefine[i].html === 'function') {
  281. cellHTML = bodyDefine[i].html(combatant, combatantIndex);
  282. } else {
  283. cellHTML = parseActFormat(bodyDefine[i].html, combatant);
  284. }
  285. cell.innerHTML = cellHTML;
  286. }
  287. // ???
  288. cell.style.width = bodyDefine[i].width;
  289. cell.style.maxWidth = bodyDefine[i].width;
  290. // ?????
  291. if (typeof (bodyDefine[i].align) !== 'undefined') {
  292. cell.style.textAlign = bodyDefine[i].align;
  293. }
  294. // ???????
  295. if (typeof bodyDefine[i].effect === 'function') {
  296. bodyDefine[i].effect(cell, combatant, combatantIndex);
  297. }
  298. }
  299. combatantIndex++;
  300. }
  301.  
  302. // tbody ???????????????????????????
  303. if (oldTableBody != void (0)) {
  304. table.replaceChild(newTableBody, oldTableBody);
  305. }
  306. else {
  307. table.appendChild(newTableBody);
  308. }
  309. }
  310.  
  311. // Miniparse ????????????????????????
  312. function parseActFormat(str, dictionary) {
  313. var result = "";
  314.  
  315. var currentIndex = 0;
  316. do {
  317. var openBraceIndex = str.indexOf('{', currentIndex);
  318. if (openBraceIndex < 0) {
  319. result += str.slice(currentIndex);
  320. break;
  321. }
  322. else {
  323. result += str.slice(currentIndex, openBraceIndex);
  324. var closeBraceIndex = str.indexOf('}', openBraceIndex);
  325. if (closeBraceIndex < 0) {
  326. // parse error!
  327. console.log("parseActFormat: Parse error: missing close-brace for " + openBraceIndex.toString() + ".");
  328. return "ERROR";
  329. }
  330. else {
  331. var tag = str.slice(openBraceIndex + 1, closeBraceIndex);
  332. if (typeof dictionary[tag] !== 'undefined') {
  333. result += dictionary[tag];
  334. } else {
  335. console.log("parseActFormat: Unknown tag: " + tag);
  336. result += "ERROR";
  337. }
  338. currentIndex = closeBraceIndex + 1;
  339. }
  340. }
  341. } while (currentIndex < str.length);
  342.  
  343. return result;
  344. }
  345.  
  346. </script>
  347. </head>
  348. <body>
  349. <div id="wrapper">
  350. <div id="encounter">
  351. No data to show.
  352. <!-- ?????????????? -->
  353. </div>
  354.  
  355. <table id="combatantTable">
  356. <!-- ????????? -->
  357. <!-- ????????????? -->
  358. </table>
  359. </div>
  360. </body>
  361. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement