SetsMaster

Наборы армии, навыков и оружия - 3 в 1 (by Tamozhnya1 & Demin & перф)

目前为 2017-10-10 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name SetsMaster
  3. // @author Demin
  4. // @namespace Tamozhnya1
  5. // @description Наборы армии, навыков и оружия - 3 в 1 (by Tamozhnya1 & Demin & перф)
  6. // @homepage https://greasyfork.org/users/1602-demin
  7. // @icon http://i.imgur.com/LZJFLgt.png
  8. // @version 3.8
  9. // @encoding utf-8
  10. // @include http://www.heroeswm.ru/*
  11. // @include http://qrator.heroeswm.ru/*
  12. // @include http://178.248.235.15/*
  13. // @include http://www.lordswm.com/*
  14. // @exclude */rightcol.php*
  15. // @exclude */ch_box.php*
  16. // @exclude */chat*
  17. // @exclude */ticker.html*
  18. // @exclude */frames*
  19. // @exclude */brd.php*
  20. // @grant GM_deleteValue
  21. // @grant GM_getValue
  22. // @grant GM_listValues
  23. // @grant GM_setValue
  24. // @grant GM_addStyle
  25. // @grant GM_log
  26. // @grant GM_openInTab
  27. // ==/UserScript==
  28.  
  29. // (c) 2012-2015, demin ( http://www.heroeswm.ru/pl_info.php?id=15091 )
  30. // (c) 2012,2015, Tamozhnya1
  31. // (c) 2017, перф. 10.10.2017 v3.8: *вместо nick привзяка к id_payler из рекордов охоты; *6 строк наборов в инвентаре.
  32.  
  33. (function() {
  34.  
  35. var version = '3.8';
  36.  
  37.  
  38. var hide_perks = true;
  39. //var hide_perks = false;
  40.  
  41. var refreshing_pages = false;
  42. //var refreshing_pages = true;
  43.  
  44.  
  45. if (typeof GM_deleteValue != 'function') {
  46. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  47. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  48. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  49.  
  50. this.GM_addStyle=function (key) {
  51. var style = document.createElement('style');
  52. style.textContent = key;
  53. document.querySelector("head").appendChild(style);
  54. }
  55. }
  56. if (typeof GM_listValues != 'function') {
  57. this.GM_listValues=function () {
  58. var values = [];
  59. for (var i=0; i<localStorage.length; i++) {
  60. values.push(localStorage.key(i));
  61. }
  62. return values;
  63. }
  64. }
  65.  
  66.  
  67. var script_num = 124512;
  68. var script_name = "SetsMaster: Наборы армии, навыков и оружия - 3 в 1 (by Tamozhnya1 & Demin)";
  69.  
  70. var url_cur = location.href;
  71. var url = 'http://'+location.hostname+'/';
  72.  
  73.  
  74. var GlobalCultureName = url.match('lordswm') ? "en-US" : "ru-RU",
  75. Strings = {
  76. "ru-RU" : {
  77. Army : "Армия",
  78. Save : "Сохранить",
  79. Add : "Добавить",
  80. SetName : "Наименование набора",
  81. Delete : "Удалить",
  82. Talents : "Навыки",
  83. SavePerkSetAlert : 'Сначала выберите навыки и нажмите "Принять"',
  84. Weapon : "Оружие",
  85. RemoveAll : "Снять все",
  86. },
  87. "en-US" : {
  88. Army : "Army",
  89. Save : "Save",
  90. Add : "Add",
  91. SetName : "Set name",
  92. Delete : "Delete",
  93. Talents : "Talents",
  94. SavePerkSetAlert : 'Please select skills and click on "Accept"',
  95. Weapon : "Weapon",
  96. RemoveAll : "Un-equip all",
  97. }
  98. },
  99. LocalizedString = Strings[GlobalCultureName];
  100.  
  101. var nick = "_";
  102. if (document.body.innerHTML.match (/pl_hunter_stat\.php\?id=(\d+)/)) { nick = RegExp.$1 + "_"; }
  103.  
  104. if ( !(document.querySelector("body") && nick) ) { return; }
  105.  
  106. var frak, frak_class, temp_nick = nick;
  107. //nick = encodeURIComponent(nick);
  108.  
  109. if ( location.pathname=='/home.php' ) {
  110. frak = /\/i\/(r\d+)\.gif/.exec( document.querySelector("body").innerHTML );
  111. if ( frak ) {
  112. frak = frak[1] + "_";
  113. GM_setValue( nick+"frak", frak );
  114. }
  115. }
  116. /*else if ( location.pathname=='/pl_info.php' ) {
  117. var temp_regexp = new RegExp(temp_nick.slice(0, -1)+'.\{30,150\}\\/i\\/(r\\d+)\\.gif');
  118. frak = temp_regexp.exec( document.querySelector("body").innerHTML );
  119. if ( frak ) {
  120. frak = frak[1] + "_";
  121. GM_setValue( nick+"frak", frak );
  122. }
  123. }*/
  124. else if ( location.pathname=='/castle.php' ) {
  125. function frak_and_class(frak, temp_fract) {
  126. for (var i=0, temp_fract_len=temp_fract.length, temp_fr; i<temp_fract_len; i++) {
  127. temp_fr = temp_fract[i].value;
  128. if ( !temp_fr ) { frak = false; break; }
  129.  
  130. frak += 1;
  131. if ( temp_fr != frak ) {
  132. break;
  133. } else if ( i+1 == temp_fract_len ) {
  134. frak += 1;
  135. }
  136. }
  137. return frak;
  138. }
  139.  
  140. frak = frak_and_class(-1, document.querySelectorAll("select[name='fract'] > option"));
  141. frak_class = frak_and_class(-2, document.querySelectorAll("select[name='classid'] > option"));
  142.  
  143. if ( frak!==false && frak_class!==false && frak>=0 ) {
  144. if ( frak_class < 0 ) frak_class = 0;
  145. frak = "r" + ( frak_class * 100 + frak ) + "_";
  146. GM_setValue( nick+"frak", frak );
  147. } else {
  148. frak = false;
  149. }
  150. }
  151.  
  152. if ( !frak ) frak = GM_getValue( nick+"frak" );
  153. if ( !frak ) { return; }
  154.  
  155. var menuId = "menuSets";
  156. /************************************************************************************************************/
  157. armySet = {
  158. oid : 2,
  159. id : "armySet",
  160. name : "<a href='army.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Army + "</a>",
  161. currentSetName : nick + frak + "currentArmySet",
  162. currentSetNumber : undefined,
  163. sets : new Array(),
  164. setObjects : new Array(),
  165. menuItems : {},
  166. currentMenuItem : undefined,
  167. menu : undefined,
  168. savedSetIdsConst : nick + frak + "savedArmySetIds",
  169. savedSetConst : nick + frak + "savedArmySet",
  170. refreshingPages : "home.php;army.php;pl_info.php",
  171. army_now : new Array(),
  172.  
  173. getSets : function () {
  174. for (var i = 0; i < this.setObjects.length; i++) {
  175. var setObject = this.setObjects[i];
  176. if (setObject) {
  177. var setName = setObject.name;
  178. var army = setObject.army;
  179.  
  180. var setTitle = "";
  181. for (var j = 0; j < army.length; j++) {
  182. setTitle += (army[j] == "" ? "0" : army[j]) + "+";
  183. }
  184. setTitle = setTitle.substring(0, setTitle.length - 1);
  185.  
  186. var data = "";
  187. for (var j = 0; j < army.length; j++) {
  188. data = "countv" + (j + 1) + "=" + (army[j] == "" ? "0" : army[j]) + (data == "" ? "" : "&") + data;
  189. }
  190. this.sets[i] = {
  191. number : parseInt(setObject.oid),
  192. name : setName,
  193. title : setTitle,
  194. method : "POST",
  195. url : "army_apply.php",
  196. data : data,
  197. contentType : "application/x-www-form-urlencoded"
  198. };
  199. }
  200. }
  201. },
  202. init : function () {
  203. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  204. var savedSetIdsStr = GM_getValue(this.savedSetIdsConst);
  205. var setIds = new Array();
  206. if (savedSetIdsStr) {
  207. setIds = savedSetIdsStr.split("|");
  208. }
  209. for (var i = 0; i < setIds.length; i++) {
  210. if (setIds[i] == "") {
  211. continue;
  212. }
  213. var setStr = GM_getValue(this.savedSetConst + setIds[i]);
  214. if (!setStr) {
  215. continue;
  216. }
  217. var setData = setStr.split("|");
  218. this.setObjects[i] = {
  219. oid : setIds[i],
  220. name : setData[7],
  221. fraction : setData[8],
  222. army : new Array()
  223. };
  224. for (var j = 0; j < 7; j++) {
  225. this.setObjects[i].army[j] = setData[j];
  226. }
  227. }
  228. if (/army.php$/.test(location.href)) {
  229. this.drawSetsTable();
  230. }
  231. },
  232. drawSetsTable : function () {
  233. var div = addElement("center", document.querySelector("body"));
  234. addElement("br", div);
  235. var htmlTable = addElement("table", div, {
  236. bgcolor : "#959595",
  237. bordercolor : "#f5c137",
  238. border : "1px"
  239. });
  240. this.drawTableHeader(htmlTable);
  241. for (var i = 0; i < this.setObjects.length; i++) {
  242. if (this.setObjects[i]) {
  243. this.drawSetsRow(htmlTable, this.setObjects[i]);
  244. }
  245. }
  246. var saveButton = addElement("input", div, { type : "button", value : LocalizedString.Save });
  247. saveButton.addEventListener("click", this.saveSets, false);
  248. var addButton = addElement("input", div, { type : "button", value : LocalizedString.Add });
  249. addButton.addEventListener("click", this.addSet, false);
  250. },
  251. drawTableHeader : function (htmlTable) {
  252. var flash = document.querySelector("object > param[value*='recruitarmy.swf']");
  253. flash = flash.parentNode.querySelector("param[name='FlashVars']");
  254. var flashVars = flash.value.substr(8);
  255. var sets = flashVars.split(";M");
  256.  
  257. var tr = addElement("tr", htmlTable);
  258. var th = addElement("td", tr);
  259.  
  260. th.style.fontWeight = "bold";
  261. th.innerHTML = LocalizedString.SetName;
  262. for (var i = 0; i < sets.length; i++) {
  263. var set = sets[i].split("|");
  264. th = addElement("td", tr);
  265. th.style.fontWeight = "bold";
  266. this.army_now.push(Number(sets[i].split(":")[1].substr(57,3)));
  267. if (url.match('lordswm')) {
  268. th.innerHTML = set[2].split("#")[1];
  269. } else {
  270. th.innerHTML = set[2].split("#")[0];
  271. }
  272. }
  273. while ( this.army_now.length != 7 ) { this.army_now.push(""); }
  274. },
  275. drawSetsRow : function (htmlTable, setObject) {
  276. var tr = addElement("tr", htmlTable, {
  277. oid : setObject.oid
  278. });
  279. var td = addElement("td", tr);
  280. var input = addElement("input", td, {
  281. value : setObject.name,
  282. size : 22
  283. });
  284. for (var i = 0; i < setObject.army.length; i++) {
  285. td = addElement("td", tr);
  286. input = addElement("input", td, { value : setObject.army[i], size : 5 });
  287. }
  288. td = addElement("td", tr);
  289. var delButton = addElement("input", td, { type : "button", value : "x", title : LocalizedString.Delete });
  290. delButton.addEventListener("click", this.deleteSet, false);
  291. },
  292. saveSets : function () {
  293. var table = this.previousSibling;
  294. var setIdsStr = "";
  295. for (var i = 1; i < table.rows.length; i++) {
  296. var setStr = "";
  297. var row = table.rows[i];
  298. var oid = row.getAttribute("oid");
  299. setIdsStr = setIdsStr + "|" + oid;
  300. for (var j = 1; j <= 7; j++) {
  301. setStr = setStr + "|" + row.cells[j].firstChild.value;
  302. }
  303. setStr = setStr + "|" + row.cells[0].firstChild.value;
  304. setStr = setStr + "|" + "";
  305. GM_setValue(armySet.savedSetConst + oid, setStr.substr(1));
  306. }
  307. if (setIdsStr && setIdsStr != "") {
  308. GM_setValue(armySet.savedSetIdsConst, setIdsStr.substr(1));
  309.  
  310. // udalit' udalennye komplekty
  311. if (typeof GM_listValues == 'function') {
  312. var clear_d = GM_listValues();
  313. var clear_d_len = clear_d.length;
  314. var num_id_regexp = new RegExp(armySet.savedSetConst + '(\\d+)');
  315. var num_id;
  316. for (var i = clear_d_len; i--; ) {
  317. num_id = num_id_regexp.exec(clear_d[i]);
  318. if (num_id && !setIdsStr.match(num_id[1])) {
  319. GM_deleteValue(clear_d[i]);
  320. }
  321. }
  322. }
  323. } else {
  324. GM_deleteValue(armySet.savedSetIdsConst);
  325. GM_deleteValue(armySet.currentSetName);
  326.  
  327. // udalit' udalennye komplekty
  328. if (typeof GM_listValues == 'function') {
  329. var clear_d = GM_listValues();
  330. var clear_d_len = clear_d.length;
  331. var num_id_regexp = new RegExp(armySet.savedSetConst + '(\\d+)');
  332. var num_id;
  333. for (var i = clear_d_len; i--; ) {
  334. num_id = num_id_regexp.exec(clear_d[i]);
  335. if (num_id) {
  336. GM_deleteValue(clear_d[i]);
  337. }
  338. }
  339. }
  340. }
  341. },
  342. addSet : function () {
  343. var table = this.previousSibling.previousSibling;
  344.  
  345. var setTitle = "";
  346. for (var j = 0, j_len = armySet.army_now.length; j < j_len; j++) {
  347. setTitle += (armySet.army_now[j] == "" ? "0" : armySet.army_now[j]) + "+";
  348. }
  349. setTitle = setTitle.slice(0, -1);
  350.  
  351. armySet.drawSetsRow(table, {
  352. oid : (new Date()).getTime(),
  353. name : setTitle,
  354. // army : ["", "", "", "", "", "", ""]
  355. army : armySet.army_now
  356. });
  357. },
  358. deleteSet : function () {
  359. var table = this.parentNode.parentNode.parentNode;
  360. var row = this.parentNode.parentNode;
  361. table.removeChild(row);
  362. },
  363. }
  364. /***********************************************************************************************************/
  365. skillSet = {
  366. oid : 1,
  367. id : "skillSet",
  368. name : "<a href='skillwheel.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Talents + "</a>",
  369. currentSetName : nick + frak + "currentSkillSet",
  370. currentSetNumber : undefined,
  371. sets : new Array(),
  372. setObjects : new Array(),
  373. menuItems : {},
  374. currentMenuItem : undefined,
  375. menu : undefined,
  376. refreshingPages : "skillwheel.php;pl_info.php",
  377.  
  378. getSets : function () {
  379. var setRefs = document.querySelectorAll("a[href^='skillwheel.php?setuserperk']");
  380. for(var i = 0; i < setRefs.length; i++) {
  381. this.sets[i] = { number : i, name : setRefs[i].innerHTML, title : '', method : "GET", url : setRefs[i].href }
  382. setRefs[i].addEventListener("click", markCurrentEventHandler, false);
  383. setRefs[i].setAttribute("number", i);
  384. setRefs[i].setAttribute("oid", this.oid);
  385. }
  386. },
  387. init : function () {
  388. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  389. }
  390. }
  391. /************************************************************************************************************/
  392. weaponSet = {
  393. oid : 0,
  394. id : "weaponSet",
  395. name : "<a href='inventory.php' style='color: #f5c137; text-decoration: none;'>" + LocalizedString.Weapon + "</a>",
  396. currentSetName : nick + "currentWeaponSet",
  397. currentSetNumber : undefined,
  398. sets : new Array(),
  399. menuItems : {},
  400. currentMenuItem : undefined,
  401. menu : undefined,
  402. refreshingPages : "home.php;inventory.php;pl_info.php",
  403.  
  404. getSets : function () {
  405. this.sets[0] = { number : 0, name : LocalizedString.RemoveAll, method : "GET", url : "inventory.php?all_off=100" }
  406. for (var i = 1; i <= 6; i++) {
  407. var setName = GM_getValue(nick + "weaponSet" + i);
  408. if (setName) {
  409. this.sets[i] = { number : i, name : setName, method : "GET", url : "inventory.php?all_on=" + i, headers : null }
  410. }
  411. }
  412. },
  413. init : function () {
  414. this.currentSetNumber = GM_getValue(this.currentSetName, -1);
  415. if (/inventory.php$/.test(location.href)) {
  416. var a = document.querySelector("a[href^='inventory.php?all_off=']");
  417. if ( a ) {
  418. a.addEventListener("click", markCurrentEventHandler, false);
  419. a.setAttribute("number", 0);
  420. a.setAttribute("oid", this.oid);
  421.  
  422. var all_on = document.querySelectorAll("a[href^='inventory.php?all_on=']");
  423. var FilledSets = new Array();
  424. for (var i = 0; i < all_on.length; i++) {
  425. a = all_on[i];
  426. a.addEventListener("click", markCurrentEventHandler, false);
  427. var setNumber = parseInt(a.href.substr(a.href.indexOf("all_on=") + 7, 1));
  428. a.setAttribute("number", setNumber);
  429. a.setAttribute("oid", this.oid);
  430. GM_setValue(nick + "weaponSet" + setNumber, a.innerHTML);
  431. FilledSets[setNumber] = setNumber;
  432. }
  433. for (var i = 1; i <= 6; i++) {
  434. if (!FilledSets[i]) {
  435. GM_deleteValue(nick + "weaponSet" + i);
  436. }
  437. }
  438. }
  439. }
  440. }
  441. }
  442.  
  443. /************************************************************************************************************/
  444. var setObjects = new Array();
  445. setObjects[weaponSet.oid] = weaponSet;
  446. setObjects[armySet.oid] = armySet;
  447. setObjects[skillSet.oid] = skillSet;
  448. var timer;
  449.  
  450. main();
  451.  
  452. function main() {
  453. var menuId = "menuSetsTable";
  454. var logobEngChild = document.querySelector("img[width='101'][height='26']");
  455. if (!logobEngChild) {
  456. return;
  457. }
  458. var styleObject = { borderColor : "#f5c137", background : "#6b6b69", color : "#f5c137" }
  459. if (document.querySelector("img[src*='i/top_ny']")) {
  460. styleObject.background = "#003399";
  461. }
  462. var offSet = -55;
  463. for (var i = 0; i < setObjects.length; i++) {
  464. if (!setObjects[i]) {
  465. continue;
  466. }
  467. var currentSetObject = setObjects[i];
  468. if (currentSetObject.init) {
  469. currentSetObject.init();
  470. }
  471. currentSetObject.getSets();
  472.  
  473. if (i > 0) {
  474. offSet += $(menuId + (i - 1) + "Header").clientWidth;
  475. }
  476. var menuHeaderStyleObject = {
  477. position : "absolute",
  478. margin : "2px 0px 0px " + offSet + "px",
  479. background : styleObject.background,
  480. color : styleObject.color,
  481. border : "1px solid " + styleObject.borderColor,
  482. "font-weight" : "bold",
  483. padding : "2px 6px 4px 5px",
  484. "z-index" : (url_cur.match('photo_pl_photos') ? "0" : "2")
  485. }
  486. var menuHeader = addElement("div", logobEngChild.parentNode, { id : menuId + i + "Header", headerId : menuId + i + "Header", menuId : menuId + i }, menuHeaderStyleObject);
  487. var aLevel1 = addElement("b", menuHeader, {}, "color: #f5c137;");
  488. // aLevel1.style.cursor = "pointer";
  489. aLevel1.innerHTML = currentSetObject.name;
  490. currentSetObject.menu = aLevel1;
  491.  
  492. var menuContent = addElement("div", menuHeader, { id : menuId + i, headerId : menuId + i + "Header", menuId : menuId + i }, "position: relative; padding: 6px 3px 2px 3px; white-space: nowrap;");
  493. menuHeader.addEventListener("mouseover", showMenu, false);
  494. menuHeader.addEventListener("mouseout", hideMenu, false);
  495. menuContent.addEventListener("mouseover", showMenuCont, false);
  496. menuContent.addEventListener("mouseout", hideMenu, false);
  497.  
  498. for (var j = 0; j < currentSetObject.sets.length; j++) {
  499. var currentSet = currentSetObject.sets[j];
  500. if (!currentSet) {
  501. continue;
  502. }
  503. var liLevel2 = addElement(url_cur.match('photo_pl_photos') ? "div" : "li", menuContent, { type: "disc", title: currentSetObject.title || "" });
  504. var aLevel2 = addElement("b", liLevel2, currentSet, "color: #f5c137;");
  505. aLevel2.style.cursor = "pointer";
  506. aLevel2.innerHTML = currentSet.name;
  507. aLevel2.addEventListener("click", applySet, false);
  508.  
  509. aLevel2.setAttribute("oid", currentSetObject.oid);
  510. if (currentSet.number == currentSetObject.currentSetNumber) {
  511. markCurrent(aLevel2);
  512. }
  513. currentSetObject.menuItems[j] = aLevel2;
  514. }
  515. $(menuId + i).style.width = ($(menuId + i).clientWidth + 20) + "px";
  516. $(menuId + i).style.display = "none";
  517. }
  518.  
  519. if ( hide_perks ) {
  520. hide_perks = document.querySelectorAll("a[href='skillwheel.php'] > font");
  521. var temp_i;
  522. for ( var i in hide_perks ) {
  523. temp_i = hide_perks[i];
  524. if ( temp_i && temp_i.innerHTML && ( temp_i.innerHTML.indexOf("Ў")!=-1 || temp_i.innerHTML.indexOf("&#9660;")!=-1 ) ) {
  525. while ( temp_i.tagName != 'TD' ) { temp_i = temp_i.parentNode; }
  526. temp_i.style.display = 'none';
  527.  
  528. // восстанавливаем отступ
  529. var temp_td = document.createElement('td');
  530. temp_td.height = "6px";
  531. temp_i.parentNode.appendChild(temp_td);
  532.  
  533. break;
  534. }
  535. }
  536. }
  537. }
  538. function showMenu() {
  539. var menu = $(this.getAttribute("menuId"));
  540. timer = setTimeout(function () {
  541. if (menu) {
  542. menu.style.display = "block";
  543. }
  544. }, 100);
  545. }
  546. function showMenuCont() {
  547. var menu = $(this.getAttribute("menuId"));
  548. if (menu) {
  549. menu.style.display = "block";
  550. }
  551. }
  552. function hideMenu() {
  553. if (timer) {
  554. clearTimeout(timer);
  555. }
  556. var menu = $(this.getAttribute("menuId"));
  557. if (menu) {
  558. menu.style.display = "none";
  559. }
  560. }
  561. function markCurrentEventHandler(e) {
  562. var obj = setObjects[this.getAttribute("oid")];
  563. var menuItemToMark = obj.menuItems[this.getAttribute("number")];
  564. markCurrent(menuItemToMark);
  565. }
  566. function markCurrent(el) {
  567. var obj = setObjects[el.getAttribute("oid")];
  568. GM_setValue(obj.currentSetName, el.getAttribute("number"));
  569. el.style.color = '#0f0';
  570. if (obj.currentMenuItem && obj.currentMenuItem != el) {
  571. obj.currentMenuItem.style.color = "#f5c137";
  572. }
  573. obj.currentMenuItem = el;
  574. }
  575. function applySet() {
  576. markCurrent(this);
  577. var obj = setObjects[parseInt(this.getAttribute("oid"))];
  578. var _this = this;
  579. var title = this.innerHTML;
  580. this.innerHTML += " " + getLoadGif();
  581. var objXMLHttpReqSM = new XMLHttpRequest();
  582. objXMLHttpReqSM.open(this.getAttribute("method"), this.getAttribute("url"), true);
  583. objXMLHttpReqSM.onreadystatechange = function () {
  584. if (objXMLHttpReqSM.readyState == 2) {
  585. objXMLHttpReqSM.abort();
  586. _this.innerHTML = title;
  587. if(refreshing_pages && obj.refreshingPages) {
  588. var pages = obj.refreshingPages.split(';');
  589. for(var i = 0; i < pages.length; i++) {
  590. if(location.href.indexOf(pages[i]) > -1) {
  591. window.location.href = window.location.href;
  592. }
  593. }
  594. }
  595. }
  596. };
  597.  
  598. var contentType = this.getAttribute("contentType");
  599. if (contentType) {
  600. objXMLHttpReqSM.setRequestHeader('Content-type', contentType);
  601. }
  602. objXMLHttpReqSM.send(this.getAttribute("data"));
  603.  
  604. return false;
  605. }
  606. function addElement(type, parent, data, style) {
  607. var el = document.createElement(type);
  608. if (parent) {
  609. parent.appendChild(el);
  610. }
  611. if (data) {
  612. for (var key in data) {
  613. el.setAttribute(key, data[key]);
  614. }
  615. }
  616. if (style && el.id) {
  617. var styleStr = "";
  618. if (typeof(style) == "string") {
  619. styleStr = style;
  620. } else {
  621. for (var key in style) {
  622. styleStr += key + ": " + style[key] + "; ";
  623. }
  624. }
  625. GM_addStyle("#" + el.id + "{" + styleStr + "}");
  626. }
  627. return el;
  628. }
  629. function getLoadGif() {
  630. return '<img border="0" align="absmiddle" height="11" src="data:image/gif;base64,' +
  631. 'R0lGODlhEAAQAMQAAP///+7u7t3d3bu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREQAR' +
  632. 'AAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05F' +
  633. 'VFNDQVBFMi4wAwEAAAAh+QQFBwAQACwAAAAAEAAQAAAFdyAkQgGJJOWoQgIjBM8jkKsoPEzgyMGs' +
  634. 'CjPDw7ADpkQBxRDmSCRetpRA6Rj4kFBkgLC4IlUGhbNQIwXOYYWCXDufzYPDMaoKGBoKb886OjAK' +
  635. 'dgZAAgQkfCwzAgsDBAUCgl8jAQkHEAVkAoA1AgczlyIDczUDA2UhACH5BAUHABAALAAAAAAPABAA' +
  636. 'AAVjICSO0IGIATkqIiMKDaGKC8Q49jPMYsE0hQdrlABCGgvT45FKiRKQhWA0mPKGPAgBcTjsspBC' +
  637. 'AoH4gl+FmXNEUEBVAYHToJAVZK/XWoQQDAgBZioHaX8igigFKYYQVlkCjiMhACH5BAUHABAALAAA' +
  638. 'AAAQAA8AAAVgICSOUGGQqIiIChMESyo6CdQGdRqUENESI8FAdFgAFwqDISYwPB4CVSMnEhSej+Fo' +
  639. 'gNhtHyfRQFmIol5owmEta/fcKITB6y4choMBmk7yGgSAEAJ8JAVDgQFmKUCCZnwhACH5BAUHABAA' +
  640. 'LAAAAAAQABAAAAViICSOYkGe4hFAiSImAwotB+si6Co2QxvjAYHIgBAqDoWCK2Bq6A40iA4yYMgg' +
  641. 'NZKwGFgVCAQZotFwwJIF4QnxaC9IsZNgLtAJDKbraJCGzPVSIgEDXVNXA0JdgH6ChoCKKCEAIfkE' +
  642. 'BQcAEAAsAAAAABAADgAABUkgJI7QcZComIjPw6bs2kINLB5uW9Bo0gyQx8LkKgVHiccKVdyRlqjF' +
  643. 'SAApOKOtR810StVeU9RAmLqOxi0qRG3LptikAVQEh4UAACH5BAUHABAALAAAAAAQABAAAAVxICSO' +
  644. '0DCQKBQQonGIh5AGB2sYkMHIqYAIN0EDRxoQZIaC6bAoMRSiwMAwCIwCggRkwRMJWKSAomBVCc5l' +
  645. 'UiGRUBjO6FSBwWggwijBooDCdiFfIlBRAlYBZQ0PWRANaSkED1oQYHgjDA8nM3kPfCmejiEAIfkE' +
  646. 'BQcAEAAsAAAAABAAEAAABWAgJI6QIJCoOIhFwabsSbiFAotGMEMKgZoB3cBUQIgURpFgmEI0EqjA' +
  647. 'CYXwiYJBGAGBgGIDWsVicbiNEgSsGbKCIMCwA4IBCRgXt8bDACkvYQF6U1OADg8mDlaACQtwJCEA' +
  648. 'IfkEBQcAEAAsAAABABAADwAABV4gJEKCOAwiMa4Q2qIDwq4wiriBmItCCREHUsIwCgh2q8MiyEKO' +
  649. 'DK7ZbHCoqqSjWGKI1d2kRp+RAWGyHg+DQUEmKliGx4HBKECIMwG61AgssAQPKA19EAxRKz4QCVIh' +
  650. 'ACH5BAUHABAALAAAAAAQABAAAAVjICSOUBCQqHhCgiAOKyqcLVvEZOC2geGiK5NpQBAZCilgAYFM' +
  651. 'ogo/J0lgqEpHgoO2+GIMUL6p4vFojhQNg8rxWLgYBQJCASkwEKLC17hYFJtRIwwBfRAJDk4Obwsi' +
  652. 'dEkrWkkhACH5BAUHABAALAAAAQAQAA8AAAVcICSOUGAGAqmKpjis6vmuqSrUxQyPhDEEtpUOgmgY' +
  653. 'ETCCcrB4OBWwQsGHEhQatVFhB/mNAojFVsQgBhgKpSHRTRxEhGwhoRg0CCXYAkKHHPZCZRAKUERZ' +
  654. 'MAYGMCEAIfkEBQcAEAAsAAABABAADwAABV0gJI4kFJToGAilwKLCST6PUcrB8A70844CXenwILRk' +
  655. 'IoYyBRk4BQlHo3FIOQmvAEGBMpYSop/IgPBCFpCqIuEsIESHgkgoJxwQAjSzwb1DClwwgQhgAVVM' +
  656. 'IgVyKCEAIfkECQcAEAAsAAAAABAAEAAABWQgJI5kSQ6NYK7Dw6xr8hCw+ELC85hCIAq3Am0U6JUK' +
  657. 'jkHJNzIsFAqDqShQHRhY6bKqgvgGCZOSFDhAUiWCYQwJSxGHKqGAE/5EqIHBjOgyRQELCBB7EAQH' +
  658. 'fySDhGYQdDWGQyUhADs=">';
  659. }
  660.  
  661. function $(id) { return document.querySelector("#"+id); }
  662.  
  663. function addEvent(elem, evType, fn) {
  664. if (elem.addEventListener) {
  665. elem.addEventListener(evType, fn, false);
  666. }
  667. else if (elem.attachEvent) {
  668. elem.attachEvent("on" + evType, fn);
  669. }
  670. else {
  671. elem["on" + evType] = fn;
  672. }
  673. }
  674.  
  675. })();