Em-8ER Forums Dashboard

Tune-up for em8er.com forums

  1. // ==UserScript==
  2. // @name Em-8ER Forums Dashboard
  3. // @namespace https://jadex.eu
  4. // @version 2.2.1
  5. // @description Tune-up for em8er.com forums
  6. // @author Liam "Xeevis" Aqil
  7. // @icon https://en.gravatar.com/userimage/18934912/675229e8cc8aa43609d290393fcb84b9.png
  8. // @match https://forums.em8er.com/*
  9. // @license MIT
  10. // @grant GM_addStyle
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @grant GM_deleteValue
  14. // @grant GM_listValues
  15. // @run-at document-start
  16. // ==/UserScript==
  17.  
  18. uw = unsafeWindow;
  19.  
  20. uw.bg = GM_getValue("bg", "on") == "on" ? true : false;
  21. uw.bg_type = GM_getValue("bg_type", "slideshow");
  22. uw.collapse_sigs = GM_getValue("collapse_sigs", "off") == "on" ? true : false;
  23. uw.msg_color = GM_getValue("msg_color", "#010203");
  24. uw.msg_bg_color = GM_getValue("msg_bg_color", "#010203");
  25. uw.msg_bg_color_transparent = GM_getValue("msg_bg_color_transparent", "off") == "on" ? true : false;
  26. uw.tweaks = GM_getValue("tweaks", "off") == "on" ? true : false;
  27.  
  28. var styles = "";
  29.  
  30. if (uw.msg_color != "#010203") {
  31. styles += `body { color: ${uw.msg_color} !important }\n`;
  32. }
  33.  
  34. if (uw.msg_bg_color_transparent) {
  35. uw.msg_bg_color = "transparent";
  36. }
  37.  
  38. if (uw.msg_bg_color != "#010203") {
  39. styles += `.messageList .message { background-color: ${uw.msg_bg_color} !important }\n`;
  40. }
  41.  
  42. if (uw.collapse_sigs) {
  43. styles += `.efd_quoteContainer { background-color: transparent !important } .efd_quoteContainer.expanded .efd_quote { max-height: none !important } .efd_quote { max-height: 95px !important } .efd_quoteExpand { top: 30px !important }\n`;
  44. }
  45.  
  46. GM_addStyle(styles);
  47.  
  48. document.addEventListener("DOMContentLoaded",
  49. function () {
  50. registerMenuCommand(Configuration);
  51. uw.$("#AccountMenu ul.col2:first").append("<li><a class='efd_configuration' href='#'><i class='fa fa-cog' aria-hidden='true'></i> EF Dashboard</a></li>");
  52. uw.$("#copyright").append("<a class='efd_configuration' href='#'><i class='fa fa-cog' aria-hidden='true'></i> Ember Forums Dashboard</a>");
  53.  
  54. var bs = uw.$.backstretch;
  55.  
  56. if (!uw.bg) {
  57. bs("destroy");
  58. }
  59.  
  60. switch (uw.bg_type) {
  61. case 'static':
  62. bs("show", 1);
  63. bs("pause");
  64. break;
  65. case 'random':
  66. bs("show", Math.floor(Math.random() * ($('body').data("backstretch").images.length + 1)));
  67. bs("pause");
  68. break;
  69. }
  70.  
  71. if (uw.collapse_sigs) {
  72. GM_addStyle(`.efd_quoteExpand { background: linear-gradient(to bottom, rgba(32, 32, 32, 0) 0%, ${$(".messageList .message").css("background-color")} 80%) !important }`);
  73. $(".signature > aside").wrapAll(function () {
  74. return `<div class ="bbCodeQuote efd_bbCodeQuote"><blockquote class ="quoteContainer efd_quoteContainer"><div class ="quote efd_quote"></div><div class ="quoteExpand quoteCut efd_quoteExpand">Expand signature...</div></blockquote></div>`;
  75. });
  76. }
  77.  
  78. if (tweaks)
  79. {
  80. // Home should link to Em8er.com main site
  81. uw.$("li.navTab.home > a").attr("href", "https://em8er.com/");
  82.  
  83. // Fix logo width and replace with better image
  84. uw.$("li.navTab.xbNavLogo img").width(189).attr("src", "https://i.imgur.com/75GrQ0Z.png");
  85.  
  86. // Fix pager appearance on DevTracker and add one to the bottom
  87. var pager = uw.$(".pageContent > .PageNav").wrapAll(function () {
  88. return `<div class="pageNavLinkGroup"></div>`;
  89. }).parent().clone().insertAfter('ol.messageList');
  90. }
  91.  
  92. });
  93.  
  94. function Configuration() {
  95. var efd_overlay = XenForo.createOverlay(null, $(`
  96. <div class="xenOverlay">
  97. <form id="efd_form">
  98. <div class="section">
  99. <h2 class="heading h1">Ember Forums Dashboard</h2>
  100. <h3 class="primaryContent">Settings</h3>
  101. <div class="secondaryContent">
  102. <dl class="ctrlUnit sectionLink">
  103. <dd>
  104. <ul>
  105. <li>
  106. <label for="bg">
  107. <input type="checkbox" name="bg" id="bg">
  108. Show background as...
  109. </label>
  110. <ul>
  111. <li>
  112. <select name="bg_type" id="bg_type" class="textCtrl autoSize">
  113. <option value="slideshow">Fading Slideshow</option>
  114. <option value="static">Static Image</option>
  115. <option value="random">Random Image</option>
  116. </select>
  117. </li>
  118. </ul>
  119. </li>
  120. <li>
  121. <label for="collapse_sigs">
  122. <input type="checkbox" name="collapse_sigs" id="collapse_sigs">
  123. Collapse signatures
  124. </label>
  125. <p class="hint">This setting will collapse large signatures under expander which needs to be clicked.</p>
  126. </li>
  127. <li>
  128. <label for="tweaks">
  129. <input type="checkbox" name="tweaks" id="tweaks">
  130. Enable UI tweaks
  131. </label>
  132. <p class="hint">Cumulative collection of popular suggestions that change certain aspects of the forums.</p>
  133. </li>
  134. </ul>
  135. </dd>
  136. </dl>
  137. </div>
  138. <h3 class="primaryContent">Theme</h3>
  139. <div class="secondaryContent">
  140. <dl class="ctrlUnit sectionLink">
  141. <dd>
  142. <ul>
  143. <li>
  144. Message font color: <input class ="textCtrl" name="msg_color" type="color" value="${msg_color}" />
  145. </li>
  146. <li>
  147. Message background color: <input class ="textCtrl" name="msg_bg_color" type="color" value="${msg_bg_color}" />
  148. <label for="msg_bg_color_transparent">
  149. <input type="checkbox" name="msg_bg_color_transparent" id="msg_bg_color_transparent">
  150. Translucent
  151. </label>
  152. </li>
  153. <li class ="presets">Presets:
  154. <button type="button" class ="button" data-msg_color="#010203" data-msg_bg_color="#010203">Default</button>
  155. <button type="button" class ="button" data-msg_color="#b9babc" data-msg_bg_color="#36393e">Discord</button>
  156. <button type="button" class ="button" data-msg_color="#dcdcdc" data-msg_bg_color="#161c1c">Firefall</button>
  157. </li>
  158. </ul>
  159. </dd>
  160. </dl>
  161. </div>
  162. <div class="sectionFooter overlayOnly">
  163. <div class="muted" style="float: left">
  164. <a class="concealed">Developed by Xeevis<span></span></a>
  165. </div>
  166. <button class ="button primary">Save and reload</button>
  167. <button type="button" id="reset_efd" class="button secondary">Reset to defaults</button>
  168. </div>
  169. </div>
  170. </form>
  171. </div>`), { noCache: false });
  172.  
  173. $(".efd_configuration").click(function () { efd_overlay.load(); return false; });
  174. $("#bg").prop("checked", bg);
  175. $("#collapse_sigs").prop("checked", collapse_sigs);
  176. $("#tweaks").prop("checked", tweaks);
  177. $("#msg_bg_color_transparent").prop("checked", msg_bg_color_transparent);
  178. $(`#bg_type option[value="${bg_type}"]`).prop("selected", true);
  179.  
  180. $(".presets > button").click(function () {
  181. $("input[name='msg_color']").val($(this).data("msg_color"));
  182. $("input[name='msg_bg_color']").val($(this).data("msg_bg_color"));
  183. });
  184.  
  185. $("#reset_efd").click(function () {
  186. window.postMessage("efd_reset", "https://forums.em8er.com");
  187. location.reload();
  188. });
  189.  
  190. $("#efd_form").submit(function (e) {
  191. e.preventDefault();
  192.  
  193. var fields = $(this).serializeArray();
  194.  
  195. fields = fields.concat(
  196. $("#efd_form input[type=checkbox]:not(:checked)").map(
  197. function () {
  198. return {
  199. "name": this.name,
  200. "value": "off"
  201. };
  202. }).get());
  203.  
  204. window.postMessage(fields, "https://forums.em8er.com");
  205. location.reload();
  206. });
  207. }
  208.  
  209. window.addEventListener("message", parseData, false);
  210.  
  211. function parseData(event) {
  212. var data = event.data;
  213.  
  214. if (data.includes("efd_reset")) {
  215. var keys = GM_listValues();
  216.  
  217. for (var i = 0; i < keys.length; i++) {
  218. GM_deleteValue(keys[i]);
  219. }
  220. return;
  221. }
  222.  
  223. if (event.origin == "https://forums.em8er.com") {
  224. for (var j = 0; j < data.length; j++) {
  225. var field = data[j];
  226. GM_setValue(field.name, field.value);
  227. }
  228. }
  229. }
  230.  
  231. function registerMenuCommand(Configuration) {
  232. var funcText = Configuration.toString();
  233. var funcName = funcText.replace(/^function\s+(\w+)\s*\((.|\n|\r)+$/, "$1");
  234. var script = document.createElement("script");
  235. script.textContent = funcText + "\n\n";
  236. script.textContent += "jQuery(document).ready(function() {" + funcName + "(jQuery);});";
  237. document.body.appendChild(script);
  238. }