Forenputze

Applies changes to the user interface of The-West's XenForo forum including design changes, addition of useful links like "Forum read"-buttons and other features.

  1. // ==UserScript==
  2. // @name Forenputze
  3. // @description Applies changes to the user interface of The-West's XenForo forum including design changes, addition of useful links like "Forum read"-buttons and other features.
  4. // @namespace fktext.bplaced.net/forenputze
  5. // @include http*://forum.the-west.*/*
  6. // @include http*://forum.beta.the-west.*/*
  7. // @exclude http*://forum.the-west.*/admin.php*
  8. // @exclude http*://forum.beta.the-west.*/admin.php*
  9. // @version 1.48
  10. // @grant none
  11. // @author stayawayknight
  12. // ==/UserScript==
  13. //************************************
  14. // Great thanks to WojcieszyPL (@.the-west.pl) for translating the script into Polish!
  15. //************************************
  16. //Add new JS source
  17. function contentEval(source) {
  18. if ('function' == typeof source) {
  19. source = '(' + source + ')();';
  20. }
  21. var script = document.createElement('script');
  22. script.setAttribute('type', 'application/javascript');
  23. script.textContent = source;
  24. document.body.appendChild(script);
  25. document.body.removeChild(script);
  26. }
  27. Forenputze = function () {
  28. Forenputze = {
  29. initialized: false
  30. };
  31. //************************************
  32. //General settings
  33. Forenputze.name = 'Forenputze';
  34. Forenputze.version = '1.48';
  35. Forenputze.lang = 'net';
  36. Forenputze.conversationsStorageKey = 'forenputze_conversations';
  37. Forenputze.collapseStorageKey = 'forenputze_collapse';
  38. Forenputze.collapseCookieExpireDays = 365;
  39. Forenputze.collapseCookieName = 'xf_express';
  40. Forenputze.mainPage = 'index.php';
  41. Forenputze.dzikiLink = 'https://dzikitw.wordpress.com/';
  42. //************************************
  43. //************************************
  44. //Language
  45. Forenputze.langs = {
  46. de: {
  47. read: 'Gelesen markieren',
  48. markAllRead: 'Alle Foren als gelesen markieren',
  49. gameLogin: 'Login im Spiel',
  50. login: 'Login',
  51. registration: 'Registrieren',
  52. conversations: 'Unterhaltungen',
  53. settings: 'Grundeinstellungen',
  54. logout: 'Logout',
  55. scrollUp: 'Nach oben springen',
  56. goToLastPost: 'Zum letzten Beitrag gehen',
  57. registered: 'Registriert',
  58. confirmConversationCheck: 'Du hast neue ungelesene private Nachrichten. Soll die Unterhaltungsübersicht geöffnet werden?',
  59. dziki: 'DzikiTW',
  60. collapse: 'Zuklappen',
  61. expand: 'Aufklappen',
  62. forum: 'Forum'
  63. },
  64. net: {
  65. read: 'Mark as read',
  66. markAllRead: 'Mark all forums as read',
  67. gameLogin: 'Login into the game',
  68. login: 'Login',
  69. registration: 'Register',
  70. conversations: 'Conversations',
  71. settings: 'Basic settings',
  72. logout: 'Logout',
  73. scrollUp: 'Back to top',
  74. goToLastPost: 'Go to last post',
  75. registered: 'Registered',
  76. confirmConversationCheck: 'You have new unread private messages. Do you want to open the conversation overview?',
  77. dziki: 'DzikiTW',
  78. collapse: 'Collapse',
  79. expand: 'Expand',
  80. forum: 'Forum'
  81. },
  82. pl: {
  83. read: 'Oznacz jako przeczytane',
  84. markAllRead: 'Oznacz wszystkie fora jako przeczytane',
  85. gameLogin: 'Zaloguj się do gry',
  86. login: 'Zaloguj się',
  87. registration: 'Rejestracja',
  88. conversations: 'Prywatne wiadomości',
  89. settings: 'Podstawowe ustawienia',
  90. logout: 'Wyloguj się',
  91. scrollUp: 'Powrót do góry',
  92. goToLastPost: 'Idź do ostatniego postu',
  93. registered: 'Zarejestrowany',
  94. confirmConversationCheck: 'Masz nową prywatną wiadomość. Chcesz otworzyć podgląd rozmowy?',
  95. dziki: 'DzikiTW',
  96. collapse: 'Zwiń',
  97. expand: 'Rozwiń',
  98. forum: 'Forum'
  99. }
  100. };
  101. //************************************
  102. //************************************
  103. //Main function, runs the other functions
  104. Forenputze.run = function () {
  105. Forenputze.resolveLang();
  106. Forenputze.changeHomeLinks();
  107. Forenputze.addLinks();
  108. Forenputze.formatLogo();
  109. Forenputze.addPageUp();
  110. Forenputze.removeShareSections();
  111. Forenputze.changeReadIconColor();
  112. Forenputze.highlightLastPost();
  113. Forenputze.addLastPostButton();
  114. Forenputze.addForumReadButton();
  115. Forenputze.setCollapseCookieTime();
  116. Forenputze.addForumCollapse();
  117. Forenputze.formatPosts();
  118. Forenputze.changeDesign();
  119. Forenputze.checkConversations();
  120. };
  121. //************************************
  122. //************************************
  123. Forenputze.resolveLang = function () {
  124. var tld = getTLD();
  125. if (Forenputze.langs[tld]) {
  126. Forenputze.lang = tld;
  127. }
  128. };
  129. //************************************
  130. //Functions to adjust the forum ui
  131. //Change links that lead to TW to forum links
  132. Forenputze.changeHomeLinks = function () {
  133. //Logo:
  134. $('#logo').find('a').attr('href', Forenputze.mainPage);
  135. //Home:
  136. $('.homeCrumb').find('a').attr('href', Forenputze.mainPage);
  137. //Navigation:
  138. $('.navTab.home.PopupClosed').find('a').attr('href', Forenputze.mainPage);
  139. };
  140. //Adds a logout button to the Quick link list
  141. Forenputze.addLinks = function () {
  142. //Get quick links bar:
  143. var quickLinksBar = $('.quickLinksBar');
  144. //Add link to DzikiTW for PL players
  145. if (Forenputze.lang == 'pl') {
  146. var dzikiMenu = $('<li class="section"></li>');
  147. dzikiMenu.append('<li><a target="_blank" href="' + Forenputze.dzikiLink + '" class="primaryContent"><i style="padding-right:7px;" class="fa fa-star fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].dziki + '</a></li>')
  148. quickLinksBar.append(dzikiMenu);
  149. } //Check whether logged in
  150.  
  151. if (!isLoggedIn()) {
  152. //Extend menu for guests
  153. var registerLink = $('#adm_right2.navTab.login').find('a').attr('href');
  154. var ownMenu = $('<ul></ul>');
  155. ownMenu.append($('<li><a href="index.php?login" class="primaryContent OverlayTrigger"><i style="padding-right:7px;" class="fa fa-sign-in fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].login + '</a></li>'));
  156. ownMenu.append($('<li><a target="_blank" href="' + registerLink + '" class="primaryContent"><i style="padding-right:7px;" class="fa fa-user fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].registration + '</a></li>'));
  157. quickLinksBar.append(ownMenu);
  158. return;
  159. } //When cookie set, add game login link
  160.  
  161. if (getCookie('ig_conv_last_site') != '') {
  162. var gameLogin = $('<li><a class="primaryContent" target="_blank" href="' + getCookie('ig_conv_last_site') + '"><i class="fa fa-gamepad fa-lg fa-fw" style="padding-right:7px;"></i>' + Forenputze.langs[Forenputze.lang].gameLogin + '</a><li>');
  163. quickLinksBar.find('.section').find('ul').prepend(gameLogin);
  164. } //Extend menu for users
  165. //Create own menu section
  166.  
  167. var ownMenu = $('<li class="section"></li>');
  168. //Create forum link to mark all forums als read
  169. var forumReadLink = $('<a href="" class="primaryContent"><i style="padding-right:7px;" class="fa fa-pencil fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].markAllRead + '</a></li>');
  170. forumReadLink.click(function () {
  171. //Send ajax request to mark all forums as read
  172. XenForo.ajax('index.php?forums/-/mark-read', {
  173. '_xfConfirm': 1
  174. }, function (data) {
  175. //Redirect needed?
  176. if (data._redirectStatus == 'ok') {
  177. //Redirect/reload page
  178. location.href = data._redirectTarget;
  179. }
  180. });
  181. });
  182. ownMenu.append($('<li></li>').append(forumReadLink));
  183. ownMenu.append($('<li><a href="index.php?conversations" class="primaryContent"><i style="padding-right:7px;" class="fa fa-inbox fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].conversations + '</a></li>'));
  184. ownMenu.append($('<li><a href="index.php?account/preferences" class="primaryContent"><i style="padding-right:7px;" class="fa fa-cog fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].settings + '</a></li>'));
  185. ownMenu.append($('<li><a href="index.php?logout" class="primaryContent OverlayTrigger"><i style="padding-right:7px;" class="fa fa-sign-out fa-lg fa-fw"></i>' + Forenputze.langs[Forenputze.lang].logout + '</a></li>'));
  186. quickLinksBar.append(ownMenu);
  187. };
  188. //Resize main logo
  189. Forenputze.formatLogo = function () {
  190. $('#header').css('background', 'rgba(0,0,0,0) url("styles/west_mx/xenforo/headbg.png") no-repeat scroll center top');
  191. $('#header').css('background-size', '100%');
  192. $('#header').css('height', '250px');
  193. $('#headerProxy').css('height', '255px');
  194. };
  195. //Add a page up button to the lower bar of the page
  196. Forenputze.addPageUp = function () {
  197. //Wait till everything is loaded
  198. var container = $('.breadBoxBottom').find('fieldset.breadcrumb');
  199. var pageUpButton = $('<a title="' + Forenputze.langs[Forenputze.lang].scrollUp + '" class="fa fa-arrow-up fa-lg fa-fw"></a>');
  200. //Set CSS properties
  201. pageUpButton.css('cursor', 'pointer');
  202. pageUpButton.css('color', '#371902');
  203. pageUpButton.css('display', 'block');
  204. pageUpButton.css('float', 'right');
  205. pageUpButton.css('font-size', '18px');
  206. pageUpButton.css('height', '24px');
  207. pageUpButton.css('line-height', '24px');
  208. pageUpButton.css('margin-right', '5px');
  209. //Add class for recognition
  210. pageUpButton.addClass('page-up-button');
  211. //Add click listener
  212. pageUpButton.click(function () {
  213. window.scrollTo(0, 0);
  214. });
  215. if (container.find('.sidebarCollapse').exists()) {
  216. container.find('.sidebarCollapse').after(pageUpButton);
  217. } else {
  218. container.find('.OverlayTrigger.jumpMenuTrigger').after(pageUpButton);
  219. }
  220. };
  221. //Removes the share section above each thread
  222. Forenputze.removeShareSections = function () {
  223. //Overall share section with facebook and twitter
  224. $('.sharePage').remove();
  225. //Follow us section on the right hand side
  226. $('.userList:first div.primaryContent').parent().remove();
  227. //**Thanks to stewue (@forum.the-west.de)**
  228. };
  229. //Saturate the non-read forum icons to create a bigger difference betweeen read and unread elements
  230. Forenputze.changeReadIconColor = function () {
  231. var icons = $('.nodeInfo').not('.unread, .linkNodeInfo, .pageNodeInfo').find('span.nodeIcon');
  232. //Usual:
  233. icons.css('filter', 'saturate(20%)');
  234. //Chrome, Opera, Safari:
  235. icons.css('-webkit-filter', 'saturate(20%)');
  236. };
  237. //Make the "Latest" text bold
  238. Forenputze.highlightLastPost = function () {
  239. $('.lastThreadTitle').find('span').css('font-weight', 'bold');
  240. };
  241. //Add a "mark read" button to each forum
  242. Forenputze.addForumReadButton = function () {
  243. //Check whehther logged in
  244. if (!isLoggedIn()) {
  245. return;
  246. }
  247. $('.nodeInfo.forumNodeInfo.primaryContent.unread').each(function (i, obj) {
  248. //Get link and add mark-read option
  249. var link = $(this).find('.nodeTitle').find('a').attr('href');
  250. link += '-/mark-read';
  251. //Add link near topic
  252. $(this).find('.nodeTitle').append('&nbsp;').append($('<a class="OverlayTrigger" style="font-size: 10px;" href="' + link + '">[' + Forenputze.langs[Forenputze.lang].read + ']</a>'));
  253. //Add link to forum icon
  254. $(this).find('span.nodeIcon').wrap($('<a class="OverlayTrigger" href="' + link + '"></a>'));
  255. });
  256. };
  257. //Add a "go to last post" button to each thread in the overview
  258. Forenputze.addLastPostButton = function () {
  259. $('.discussionListItem').each(function (index, obj) {
  260. //Get latest post link
  261. var link = $(this).find('.listBlock.lastPost').find('.muted').find('a').attr('href');
  262. if ((typeof link === 'undefined') || !isLoggedIn()) {
  263. return;
  264. } //Add button
  265.  
  266. $(this).find('.title').append('&nbsp;').append($('<a title="' + Forenputze.langs[Forenputze.lang].goToLastPost + '" href="' + link + '" class="fa fa-arrow-right fa-lg fa-fw"></a>'));
  267. });
  268. };
  269. //Adds onclick listeners to the category collapse buttons that ensure that the remembering cookie lasts one year and do not expire with the session
  270. Forenputze.setCollapseCookieTime = function () {
  271. //Function for persisting the cookie
  272. persist = function () {
  273. setCookie(Forenputze.collapseCookieName, getCookie(Forenputze.collapseCookieName), Forenputze.collapseCookieExpireDays);
  274. };
  275. //Add onclick listeners to persist the cookie always when a category is clicked
  276. $('.CatTrigger').click(function () {
  277. persist();
  278. });
  279. //Persist cookie for the first time
  280. if (getCookie(Forenputze.collapseCookieName) && getCookie(Forenputze.collapseCookieName) != '') {
  281. persist();
  282. }
  283. };
  284. //Implement collapse possibility for forums
  285. Forenputze.addForumCollapse = function () {
  286. //Functions to collapse and expand forums:
  287. //Collapses a forum with animation, given by the forum's DOM node
  288. collapseAnim = function (forum) {
  289. forum.children().first().slideUp();
  290. forum.find('.collapsed_forum_header').show();
  291. };
  292. //Collapses a forum fastly without animation, given by the forum's DOM node
  293. collapse = function (forum) {
  294. forum.children().first().hide();
  295. forum.find('.collapsed_forum_header').show();
  296. };
  297. //Expands a forum with animation, given by the forum's DOM node
  298. expandAnim = function (forum) {
  299. //Remove button header
  300. forum.children().first().slideDown();
  301. forum.find('.collapsed_forum_header').hide();
  302. };
  303. //Begin of the executive part
  304. //Read forums that are saved as collapsed from the local storage und parse it
  305. var collapsedForums = localStorage.getItem(Forenputze.collapseStorageKey);
  306. if (collapsedForums != null) {
  307. collapsedForums = JSON.parse(collapsedForums);
  308. }
  309. $('.node.forum.level_2').each(function () {
  310. var node_id = $(this).attr('class').match(/node_(\d+)/) [1];
  311. //Create collapse button
  312. var button_collapse = $('<span class="fa fa-minus fa-lg fa-fw" title="' + Forenputze.langs[Forenputze.lang].collapse + '"></span>');
  313. //Styles
  314. button_collapse.css('width', '9px');
  315. button_collapse.css('height', '9px');
  316. button_collapse.css('padding', '3px');
  317. button_collapse.css('font-size', '12px');
  318. button_collapse.css('border-radius', '50%');
  319. button_collapse.css('color', '#ffeecc');
  320. button_collapse.css('background-color', '#371902');
  321. button_collapse.css('margin-left', '8px');
  322. button_collapse.css('cursor', 'pointer');
  323. //Add collapse functionality to the collapse button
  324. button_collapse.click({
  325. forum: $(this),
  326. id: node_id
  327. }, function (event) {
  328. collapseAnim(event.data.forum);
  329. var stored = localStorage.getItem(Forenputze.collapseStorageKey);
  330. if (stored == null) {
  331. stored = {
  332. };
  333. } else {
  334. stored = JSON.parse(stored);
  335. }
  336. stored[event.data.id] = true;
  337. localStorage.setItem(Forenputze.collapseStorageKey, JSON.stringify(stored));
  338. });
  339. $(this).find('.nodeTitle').append(button_collapse);
  340. //Add forum header for collapsed forum and expand button
  341. var forumTitle = $(this).find('.nodeTitle').children().first().text();
  342. var unread = $(this).children().first().hasClass('unread');
  343. //Exact match with sheriff icon: margin-left: 55px
  344. var forumHeader = $('<span class="collapsed_forum_header" style="font-size: 12px; margin-left: 8px;"></span>');
  345. //Add forum title to the header and make it bold when unread
  346. if (unread) {
  347. forumHeader.append($('<i>' + Forenputze.langs[Forenputze.lang].forum + ': <b>' + forumTitle + '</b></i>'));
  348. } else {
  349. forumHeader.append($('<i>' + Forenputze.langs[Forenputze.lang].forum + ': ' + forumTitle + '</i>'));
  350. } //Create expand button
  351.  
  352. var button_expand = $('<span class="fa fa-plus fa-lg fa-fw" title="' + Forenputze.langs[Forenputze.lang].expand + '"></span>');
  353. //Styles
  354. button_expand.css('width', '9px');
  355. button_expand.css('height', '9px');
  356. button_expand.css('padding', '3px');
  357. button_expand.css('font-size', '12px');
  358. button_expand.css('border-radius', '50%');
  359. button_expand.css('color', '#ffeecc');
  360. button_expand.css('background-color', '#371902');
  361. button_expand.css('margin-left', '5px');
  362. button_expand.css('cursor', 'pointer');
  363. //Add expand functionality to the expand button
  364. button_expand.click({
  365. forum: $(this),
  366. id: node_id
  367. }, function (event) {
  368. expandAnim(event.data.forum);
  369. var stored = localStorage.getItem(Forenputze.collapseStorageKey);
  370. if (stored == null) {
  371. return;
  372. }
  373. stored = JSON.parse(stored);
  374. delete stored[event.data.id];
  375. localStorage.setItem(Forenputze.collapseStorageKey, JSON.stringify(stored));
  376. });
  377. forumHeader.append(button_expand);
  378. //Hide collapse header by default
  379. forumHeader.hide();
  380. //Append forum header to the ui
  381. $(this).append(forumHeader);
  382. //Are there collapsed forums and is the current forum saved as collapsed?
  383. if ((collapsedForums != null) && collapsedForums[node_id]) {
  384. //Collapse forum in UI
  385. collapse($(this));
  386. }
  387. });
  388. };
  389. //Formats the posts so that they become smaller
  390. Forenputze.formatPosts = function () {
  391. //Replace long usernames with ellipsis
  392. $('.username').each(function () {
  393. $(this).attr('title', $(this).text());
  394. $(this).css('text-overflow', 'ellipsis').css('white-space', 'nowrap');
  395. });
  396. //Increase the width of user profile section every post a little bit
  397. $('.messageUserInfo').css('padding-left', '5px').css('width', '160px');
  398. //Removes the "agreement" section in user profiles in posts
  399. var userInfo = $('.extraUserInfo');
  400. userInfo.each(function () {
  401. $(this).find('.pairsJustified').eq(0).find('dt').text(Forenputze.langs[Forenputze.lang].registered + ':');
  402. $(this).find('.pairsJustified').eq(2).remove();
  403. });
  404. //Format the pairs in the user vocabulary for better readability
  405. var pairs = userInfo.find('.pairsJustified');
  406. pairs.css('font-size', '12px');
  407. pairs.find('dt').css('font-weight', 100).css('text-transform', 'none');
  408. pairs.find('dd').css('text-transform', 'none');
  409. };
  410. //Do same changes to the design, including a change of the background
  411. Forenputze.changeDesign = function () {
  412. //Wooden background
  413. $('body').css('background-image', 'url(https://westde.innogamescdn.com/images/interface/wood_texture_dark.jpg)');
  414. //Remove footer color
  415. $('footer').find('.footer').find('.pageContent').css('background-color', 'rgba(0, 0, 0, 0.0)');
  416. //Wooden moderator bar
  417. $('#moderatorBar').css('background-image', 'url(https://westde.innogamescdn.com/images/interface/wood_texture_dark.jpg)');
  418. //Moderator items color
  419. $('.modLink').css('background-color', '#ffeecc');
  420. //Searchbar
  421. $('<style>#searchBar::after{color: #ffeecc</style>').appendTo('head');
  422. //Forum content texture
  423. $('#content').find('.pageContent').css('background-image', 'url(https://westde.innogamescdn.com/images/window/forum/external_bg.jpg)');
  424. //Rounded corners
  425. $('#content').find('.pageContent').css('border-radius', '10px');
  426. //Message background
  427. $('<style>.message{background-image: url(https://westde.innogamescdn.com/images/tw2gui/groupframe/groupframe_bg.jpg)</style>').appendTo('head');
  428. //Rounded corners in message user block
  429. $('.messageUserBlock ').css('border-radius', '20px');
  430. //Let buttons look like west buttons
  431. $('<style>.button:not(.bbCodeSpoilerButton){background-color: rgba(0,0,0,0) !important; border: 0px solid #371902; color: #ffe7b1 !important; background-size: 100% 100%; background-image: url(https://westde.innogamescdn.com/images/tw2gui/button/button_normal.png?1)}</style>').appendTo('head');
  432. //Change breadcrumb bars to western bars
  433. $('.breadcrumb').css({
  434. 'background-image': 'url("https://westde.innogamescdn.com/images/tw2gui/window/window2_title.png?13")',
  435. 'background-size': '100% 100%',
  436. 'background-color': 'rgba(0,0,0,0)',
  437. 'box-shadow': 'none',
  438. 'border-radius': '0px',
  439. 'padding-left': '15px',
  440. 'padding-right': '15px',
  441. });
  442. $('.crumb, .sidebarCollapse, .icon-room, .page-up-button').css({
  443. 'color': '#ffeecc',
  444. 'background-color': 'rgba(0,0,0,0)',
  445. 'border-bottom': 'none'
  446. });
  447. $('<style>.breadcrumb .crust .arrow::before{color: #ffeecc}</style>').appendTo('head');
  448. };
  449. Forenputze.checkConversations = function () {
  450. //Init local storage
  451. if (localStorage.getItem(Forenputze.conversationsStorageKey) == null) {
  452. localStorage.setItem(Forenputze.conversationsStorageKey, 0);
  453. }
  454. var numberConversations = parseInt($('#ConversationsMenu_Counter').find('span.Total').text());
  455. var savedConversations = parseInt(localStorage.getItem(Forenputze.conversationsStorageKey));
  456. //Alert neccessary?
  457. if (numberConversations > savedConversations) {
  458. localStorage.setItem(Forenputze.conversationsStorageKey, numberConversations);
  459. if (confirm(Forenputze.langs[Forenputze.lang].confirmConversationCheck)) {
  460. //Navigate
  461. location.href = 'index.php?conversations/';
  462. }
  463. }
  464. localStorage.setItem(Forenputze.conversationsStorageKey, numberConversations);
  465. };
  466. //Checks whether the user is logged (true) in or not (false)
  467. isLoggedIn = function () {
  468. return $('li#adm_right.navTab.login').size() < 1;
  469. };
  470. //Returns the top level domain of the current site
  471. getTLD = function () {
  472. var tld = window.location.hostname;
  473. tld = tld.split('.');
  474. pos = tld.length - 1;
  475. return tld[pos];
  476. };
  477. //Reads a cookie
  478. getCookie = function (c_name) {
  479. if (document.cookie.length > 0) {
  480. c_start = document.cookie.indexOf(c_name + '=');
  481. if (c_start != - 1) {
  482. c_start = c_start + c_name.length + 1;
  483. c_end = document.cookie.indexOf(';', c_start);
  484. if (c_end == - 1) {
  485. c_end = document.cookie.length;
  486. }
  487. return unescape(document.cookie.substring(c_start, c_end));
  488. }
  489. }
  490. return '';
  491. };
  492. //Sets a cookie with name, value and days
  493. setCookie = function (name, value, days) {
  494. var expires;
  495. if (days) {
  496. var date = new Date();
  497. date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  498. expires = '; expires=' + date.toUTCString();
  499. }
  500. else {
  501. expires = '';
  502. }
  503. document.cookie = name + '=' + value + expires + '; path=/';
  504. };
  505. //Query extension to check whether a exception is empty or not
  506. $.fn.exists = function () {
  507. return this.length !== 0;
  508. };
  509. //Run main function
  510. Forenputze.run();
  511. //Let XenForo crawl the overlays
  512. $('body').xfActivate();
  513. };
  514. $(document).ready(function () {
  515. contentEval(Forenputze);
  516. });

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址