PageRenderTime 52ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/calfSystem.js

http://fallenswordhelper.googlecode.com/
JavaScript | 366 lines | 267 code | 35 blank | 64 comment | 64 complexity | 5b73d54358105040427c704c83bab537 MD5 | raw file
  1. // System functions
  2. var System = {
  3. init: function() {
  4. Date.prototype.toFormatString = System.formatDate;
  5. Number.prototype.padZero = System.padZero;
  6. String.prototype.repeat = System.repeatString;
  7. if (!String.trim) {
  8. String.prototype.trimLeft = System.trimLeft;
  9. String.prototype.trimRight = System.trimRight;
  10. String.prototype.trim = System.trim;
  11. }
  12. Array.prototype.filterBy = System.filterBy;
  13. System.server = document.location.protocol + "//" + document.location.host + "/";
  14. System.browserVersion = parseInt(navigator.userAgent.match(/(Firefox|Minefield|IceWeasel)\/(\d+)/i)[2],10);
  15. var imgurls = System.findNode("//img[contains(@src, '/skin/')]");
  16. if (!imgurls) return; //login screen or error loading etc.
  17. var idindex = imgurls.src.indexOf("/skin/");
  18. System.imageServer = imgurls.src.substr(0,idindex);
  19. System.imageServerHTTP = "http://72.29.91.222";
  20. Array.prototype.removeDuplicates = System.removeDuplicates;
  21. },
  22. getValueJSON: function(name) {
  23. var resultJSON=GM_getValue(name);
  24. var result;
  25. if (resultJSON) {
  26. var reviver = function (key, value) {
  27. if (typeof value === 'string') {
  28. var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
  29. if (a) {
  30. return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
  31. }
  32. }
  33. return value;
  34. };
  35. result = JSON.parse(resultJSON, reviver);
  36. }
  37. return result;
  38. },
  39. setValueJSON: function(name, value) {
  40. GM_setValue(name, JSON.stringify(value));
  41. },
  42. findNode: function(xpath, doc) {
  43. var nodes=System.findNodes(xpath, doc);
  44. if (!nodes) return null;
  45. return (nodes[0]);
  46. },
  47. findNodes: function(xpath, doc) {
  48. if (!doc) {
  49. doc=document;
  50. }
  51. var nodes=[];
  52. var findQ = document.evaluate(xpath, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  53. if (findQ.snapshotLength===0) return null;
  54. for (var i=0; i<findQ.snapshotLength; i++) {
  55. nodes.push(findQ.snapshotItem(i));
  56. }
  57. return nodes;
  58. },
  59. findNodeText: function(xpath, doc) {
  60. var node=System.findNode(xpath, doc);
  61. if (!node) return null;
  62. return node.textContent;
  63. },
  64. findNodeInt: function(xpath, doc) {
  65. var node=System.findNode(xpath, doc);
  66. if (!node) return null;
  67. return System.intValue(node.textContent);
  68. },
  69. createDocument: function(details) {
  70. var doc=document.createElement("HTML");
  71. doc.innerHTML=details;
  72. return doc;
  73. },
  74. //~ createDocument: function(str) { // chrome extension must use this createDocument (which not work under Firefox :( )
  75. //~ if (document.documentElement.nodeName != 'HTML') {
  76. //~ return new DOMParser().parseFromString(str, 'application/xhtml+xml');
  77. //~ }
  78. //~ // FIXME
  79. //~ var html = str.replace(/<script(?:[ \t\r\n][^>]*)?>[\S\s]*?<\/script[ \t\r\n]*>|<\/?(?:i?frame|html|script|object)(?:[ \t\r\n][^<>]*)?>/gi, ' ')
  80. //~ var htmlDoc = document.implementation.createHTMLDocument ?
  81. //~ document.implementation.createHTMLDocument('fsh') :
  82. //~ document.implementation.createDocument(null, 'html', null)
  83. //~ var range = document.createRange()
  84. //~ range.selectNodeContents(document.documentElement)
  85. //~ htmlDoc.documentElement.appendChild(range.createContextualFragment(html))
  86. //~ return htmlDoc
  87. //~ },
  88. formatDateTime: function(aDate) {
  89. var result=aDate.toDateString();
  90. result += " ";
  91. var hh=aDate.getHours();
  92. if (hh<10) hh = "0" + hh;
  93. var mm=aDate.getMinutes();
  94. if (mm<10) mm = "0" + mm;
  95. result += hh + ":" + mm;
  96. return result;
  97. },
  98. formatDate: function(dateFormat) {
  99. if (!this.valueOf()) return;
  100. var months = ['January', 'February', 'March', 'April', 'May', 'June',
  101. 'July', 'August', 'September', 'October', 'November', 'December'];
  102. var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  103. var theDate=this;
  104. var h;
  105. return dateFormat.replace(/(yyyy|MMMM|MMM|MM|dddd|ddd|dd|hh|HH|mm|ss|a)/g,
  106. function($1) {
  107. switch ($1) {
  108. case 'yyyy': return theDate.getFullYear();
  109. case 'MMMM': return months[theDate.getMonth()];
  110. case 'MMM': return months[theDate.getMonth()].substr(0, 3);
  111. case 'MM': return (theDate.getMonth() + 1).padZero(2);
  112. case 'dddd': return days[theDate.getDay()];
  113. case 'ddd': return days[theDate.getDay()].substr(0, 3);
  114. case 'dd': return theDate.getDate().padZero(2);
  115. case 'HH': return theDate.getHours().padZero(2);
  116. case 'hh': return ((h = theDate.getHours() % 12) ? h : 12).padZero(2);
  117. case 'mm': return theDate.getMinutes().padZero(2);
  118. case 'ss': return theDate.getSeconds().padZero(2);
  119. case 'a': return theDate.getHours() < 12 ? 'am' : 'pm';
  120. }
  121. }
  122. );
  123. },
  124. padZero: function(zeroes) {
  125. var s=this.toString();
  126. var result="0".repeat(zeroes-s.length) + s;
  127. return result;
  128. },
  129. filterBy: function(property, value) {
  130. return this.filter(function(element, index, array) {return element[property]==value;});
  131. },
  132. repeatString: function(times) {
  133. var s = '';
  134. for (var i=0; i<times; i++) {
  135. s += this;
  136. }
  137. return s;
  138. },
  139. saveValueForm: function(oForm, name) {
  140. var formElement = System.findNode("//input[@name='" + name + "']", oForm);
  141. if (formElement.getAttribute("type")=="checkbox") {
  142. GM_setValue(name, formElement.checked);
  143. } else if (formElement.getAttribute("type")=="radio") {
  144. var radioElements = System.findNodes("//input[@name='" + name + "']", 0, oForm);
  145. for (var i=0; i<radioElements.length; i++) {
  146. var radioElement = radioElements[i];
  147. if (radioElement.checked) {
  148. GM_setValue(name, radioElement.value);
  149. }
  150. }
  151. } else {
  152. GM_setValue(name, formElement.value);
  153. }
  154. },
  155. setDefault: function(name, value) {
  156. if (GM_getValue(name)==undefined) GM_setValue(name, value);
  157. },
  158. xmlhttp: function(theUrl, func, theCallback) {
  159. theUrl=theUrl.replace(System.server, "");
  160. if (theUrl.indexOf("http://")<0)
  161. theUrl = System.server + theUrl;
  162. GM_xmlhttpRequest({
  163. method: 'GET',
  164. url: theUrl,
  165. callback: theCallback,
  166. headers: {
  167. "User-Agent" : navigator.userAgent,
  168. "Referer": document.location,
  169. "Cookie" : document.cookie
  170. },
  171. onload: function(responseDetails) {
  172. if (func) {
  173. func.call(this, responseDetails.responseText, this.callback);
  174. }
  175. }
  176. });
  177. },
  178. intValue: function(theText) {
  179. if (!theText) return 0;
  180. return parseInt(theText.replace(/,/g,""),10);
  181. },
  182. getIntFromRegExp: function(theText, rxSearch) {
  183. var matches = theText.match(rxSearch);
  184. if (matches) {
  185. result = parseInt(matches[1],10);
  186. } else {
  187. result = 0;
  188. }
  189. return result;
  190. },
  191. addCommas: function(nStr) {
  192. var x, x1, x2;
  193. nStr += '';
  194. x = nStr.split('.');
  195. x1 = x[0];
  196. x2 = x.length > 1 ? '.' + x[1] : '';
  197. var rgx = /(\d+)(\d{3})/;
  198. while (rgx.test(x1)) {
  199. x1 = x1.replace(rgx, '$1' + ',' + '$2');
  200. }
  201. return x1 + x2;
  202. },
  203. trim: function() {
  204. return this.trimLeft().trimRight();
  205. },
  206. trimLeft: function() {
  207. return this.replace(/^\s+/,"");
  208. },
  209. trimRight: function() {
  210. return this.replace(/\s+$/,"");
  211. },
  212. removeDuplicates: function (removeBy){
  213. var temp=new Array();
  214. if (removeBy) {
  215. Helper.sortBy = removeBy;
  216. this.sort();
  217. for(i=0;i<this.length;i++) {
  218. var first = this[i];
  219. var second = (this[i+1]?this[i+1]:"abc");
  220. if(i != this.length && first[removeBy]==second[removeBy]) {continue;}
  221. temp[temp.length]=this[i];
  222. }
  223. } else {
  224. this.sort();
  225. for(i=0;i<this.length;i++) {
  226. var first = this[i];
  227. var second = (this[i+1]?this[i+1]:"abc");
  228. if(i != this.length && first==second) {continue;}
  229. temp[temp.length]=this[i];
  230. }
  231. }
  232. return temp;
  233. },
  234. convertTextToHtml: function(inputText) {
  235. return inputText.
  236. replace(/</g,"&lt").
  237. replace(/>/g,"&gt").
  238. replace(/\n/g,"<br>").
  239. replace(/\[\/([a-z])]/g,"<\/\$1>").
  240. replace(/\[([a-z])\]/g,"<\$1>");
  241. },
  242. generateLiveTable: function(dataArray, outputElement, itemProperty) {
  243. throw new Exception("Not ready yet!");
  244. /*if (!dataArray) return;
  245. var result='<table id="Helper:LiveTableOutput"><tr>' +
  246. '<th align="left" sortkey="guildId" sortType="number">Guild</th>' +
  247. '<th sortkey="name">Name</th>' +
  248. '<th sortkey="level" sortType="number">Level</th></tr>';
  249. var item, color;
  250. for (var i=0; i<dataArray[itemProperty].length;i++) {
  251. item=dataArray[itemProperty][i];
  252. result+='<tr class="HelperTableRow' + (1 + i % 2) +'">' +
  253. '<td><a href="index.php?cmd=guild&amp;subcmd=view&amp;guild_id=' + player.guildId + '">'+
  254. '<img width="16" border="0" height="16" src="' + System.imageServerHTTP + '/guilds/' + player.guildId + '_mini.jpg"></a></td>'+
  255. '<td><a href="index.php?cmd=profile&player_id='+player.id+'">'+ player.name+'</a></td>' +
  256. '<td align="right">' + player.level + '</td>' +
  257. '</tr>';
  258. }
  259. result+='</table>';
  260. outputElement.innerHTML=result;
  261. var theTable=document.getElementById('Helper:OnlinePlayersTable');
  262. for (var i=0; i<theTable.rows[0].cells.length; i++) {
  263. var cell=theTable.rows[0].cells[i];
  264. cell.style.textDecoration="underline";
  265. cell.style.cursor="pointer";
  266. cell.addEventListener('click', Helper.sortOnlinePlayersTable, true);
  267. }*/
  268. },
  269. sortLiveTable: function(evt) {
  270. throw new Exception("Not ready yet!");
  271. /*Helper.onlinePlayers=System.getValueJSON("onlinePlayers");
  272. var headerClicked = evt.target.getAttribute("sortKey");
  273. var sortType = evt.target.getAttribute("sortType");
  274. if (!sortType) sortType="string";
  275. GM_log(headerClicked);
  276. // GM_log(Helper.sortBy);
  277. GM_log(sortType);
  278. // numberSort
  279. if (Helper.sortAsc==undefined) Helper.sortAsc=true;
  280. if (Helper.sortBy && Helper.sortBy==headerClicked) {
  281. Helper.sortAsc=!Helper.sortAsc;
  282. }
  283. Helper.sortBy=headerClicked;
  284. switch(sortType) {
  285. case "string":
  286. Helper.onlinePlayers.players.sort(Helper.stringSort);
  287. break;
  288. case "number":
  289. Helper.onlinePlayers.players.sort(Helper.numberSort);
  290. break;
  291. }
  292. System.generateOnlinePlayersTable();*/
  293. },
  294. parseDate: function(textDate) {
  295. timeText = textDate.split(" ")[0];
  296. dateText = textDate.split(" ")[1];
  297. dayText = dateText.split("/")[0];
  298. monthText = dateText.split("/")[1];
  299. if (monthText == "Jan") fullMonthText = "January";
  300. if (monthText == "Feb") fullMonthText = "February";
  301. if (monthText == "Mar") fullMonthText = "March";
  302. if (monthText == "Apr") fullMonthText = "April";
  303. if (monthText == "May") fullMonthText = "May";
  304. if (monthText == "Jun") fullMonthText = "June";
  305. if (monthText == "Jul") fullMonthText = "July";
  306. if (monthText == "Aug") fullMonthText = "August";
  307. if (monthText == "Sep") fullMonthText = "September";
  308. if (monthText == "Oct") fullMonthText = "October";
  309. if (monthText == "Nov") fullMonthText = "November";
  310. if (monthText == "Dec") fullMonthText = "December";
  311. yearText = dateText.split("/")[2];
  312. dateAsDate = new Date(fullMonthText + " " + dayText + ", " + yearText + " " + timeText + ":00");
  313. return dateAsDate;
  314. },
  315. toggleVisibilty: function(evt) {
  316. var anItemId=evt.target.getAttribute("linkto");
  317. var anItem=document.getElementById(anItemId);
  318. var currentVisibility=anItem.style.visibility;
  319. anItem.style.visibility=(currentVisibility=="hidden")?"visible":"hidden";
  320. anItem.style.display=(currentVisibility=="hidden")?"block":"none";
  321. if (GM_getValue(anItemId)) {
  322. GM_setValue(anItemId, "");
  323. } else{
  324. GM_setValue(anItemId, "ON");
  325. }
  326. }
  327. };
  328. System.init();