LinuxDo VScode style

Make LinuxDo Looklike VScode

当前为 2024-11-26 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name LinuxDo VScode style
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2.1
  5. // @description Make LinuxDo Looklike VScode
  6. // @author Yearly
  7. // @match https://linux.do/*
  8. // @icon data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTExLjcgMTguNy02LjkgNS4yLTIuOC0xTDkgMTYgMiA5LjFsMi44LS45IDYuOSA1LjJMMjMuMSAyLjEgMzAgNC45djIyLjJMMjMuMiAzMFptMy42LTIuNyA3LjkgNS45VjEwLjFaIiBzdHlsZT0iZmlsbDojMDA3YWNjIi8+PC9zdmc+
  9. // @license MIT
  10. // @run-at document-start
  11. // @grant GM_addStyle
  12. // @noframes
  13. // ==/UserScript==
  14.  
  15. (function() {
  16.  
  17. // thin header
  18. GM_addStyle(`
  19. .d-header {
  20. height: 2.5em !important;
  21. }
  22. .d-header .extra-info-wrapper .title-wrapper {
  23. display: flex;
  24. flex-direction: row;
  25. }
  26. .d-header div.title-wrapper > h1.header-title {
  27. width: auto;
  28. font-size: large;
  29. }
  30. .d-header #site-logo {
  31. height: 2em !important;
  32. }
  33. .d-header .d-header-icons .icon img.avatar {
  34. height: 2em !important;
  35. }`);
  36.  
  37. // code font
  38.  
  39. GM_addStyle(`
  40. body {
  41. font-family: 'Consolas', 'Courier New', monospace;
  42. }
  43.  
  44. .d-header {
  45. background-color: #222 !important;
  46. }
  47.  
  48.  
  49. .topic-list .topic-list-item {
  50. border-bottom: 1px solid #3c3c3c !important;
  51. }
  52.  
  53. .topic-list .topic-list-item:hover {
  54. background-color: #2a2d2e !important;
  55. }
  56.  
  57. #d-sidebar > div.sidebar-footer-wrapper > div.sidebar-footer-container{
  58. padding: 0em 0.5em;
  59. background: #0374c7;
  60. }
  61.  
  62. #d-sidebar > div.sidebar-footer-wrapper > div.sidebar-footer-container button.btn svg{
  63. --primary: #eee;
  64. color: #eee;
  65. }
  66.  
  67. #reply-control {
  68. background-color: #252526 !important;
  69. }
  70.  
  71. .d-editor-textarea-wrapper {
  72. background-color: #1e1e1e !important;
  73. }
  74.  
  75. .d-editor-preview-wrapper {
  76. background-color: #252526 !important;
  77. border-left: 1px solid #3c3c3c !important;
  78. }
  79.  
  80. .sidebar-wrapper > #d-sidebar > div.sidebar-footer-wrapper .sidebar-footer-container:before {
  81. border-bottom: solid 1px #8888;
  82. background:none;
  83. }
  84.  
  85. #main-outlet-wrapper > div.sidebar-wrapper > #d-sidebar{
  86. border-right: 1px solid #8888;
  87. }
  88. `);
  89.  
  90. /*
  91. GM_addStyle(`
  92. html,
  93. body,
  94. #main,
  95. #ember3,
  96. #main-outlet-wrapper{
  97. max-height:100%;
  98. height:100%;
  99. }
  100. #main-outlet{
  101. height:calc(100% - 2em);
  102.  
  103. overflow-x: visible;
  104. overflow-y: auto;
  105. }
  106. `);
  107. */
  108.  
  109. GM_addStyle(`
  110. html,
  111. body {
  112. font-family: 'Consolas', 'Courier New', 'Lucida Console', 'Monaco', 'Source Code Pro', 'Fira Code', 'Ubuntu Mono', 'Menlo', 'DejaVu Sans Mono', monospace !important;
  113. --d-font-family--monospace: 'Consolas', 'Courier New', 'Lucida Console', 'Monaco', 'Source Code Pro', 'Fira Code', 'Ubuntu Mono', 'Menlo', 'DejaVu Sans Mono', monospace !important;
  114. --heading-font-family: 'Consolas', 'Courier New', 'Lucida Console', 'Monaco', 'Source Code Pro', 'Fira Code', 'Ubuntu Mono', 'Menlo', 'DejaVu Sans Mono', monospace !important;
  115. --font-family: 'Consolas', 'Courier New', 'Lucida Console', 'Monaco', 'Source Code Pro', 'Fira Code', 'Ubuntu Mono', 'Menlo', 'DejaVu Sans Mono', monospace !important;
  116. }
  117.  
  118. :root {
  119. --secondary: #000 !important;
  120. --tertiary: #99d6ff !important;
  121. --tertiary-med-or-tertiary: #0e639c !important;
  122. --tertiary-low-or-tertiary-high: #0e639c !important;
  123. --tertiary-low: #0e639c !important;
  124. --love: #0e639c !important;
  125. --success: #0e639c !important;
  126. --quaternary: #0e639c !important;
  127. --tertiary-hover: #0e639c !important;
  128. --primary-low: #333 !important;
  129. --primary: #eee !important;
  130. --d-max-width: 100% !important;
  131. }
  132.  
  133. #main-outlet-wrapper {
  134. font-size: 14px;
  135. }
  136.  
  137. #main-outlet {
  138. --primary-low: #000;
  139. }
  140.  
  141. table.topic-list .topic-excerpt {
  142. color: #bb7;
  143. }
  144.  
  145. table.topic-list a.title.raw-link.raw-topic-link {
  146. color: #39f;
  147. }
  148.  
  149. table.topic-list tr.topic-list-item {
  150. border-bottom: none !important;
  151. }
  152.  
  153. .topic-list td.topic-list-data.posters {
  154. height: auto;
  155. padding: 0.33em;
  156. width: 110px;
  157. opacity: 0.2;
  158. }
  159.  
  160. .topic-list td.topic-list-data.posters:hover {
  161. opacity: 1;
  162. }
  163.  
  164. body > #d-splash > img.preloader-image {
  165. filter: invert(80%);
  166. }
  167.  
  168. ul>li {
  169. margin-left: 2em;
  170. }
  171.  
  172. #main-outlet-wrapper {
  173. max-width: 100% !important;
  174. }
  175.  
  176. body.has-sidebar-page header.d-header>div.wrap {
  177. max-width: 100% !important;
  178. }
  179.  
  180. .topic-body {
  181. width: 100% !important;
  182. }
  183.  
  184. article .topic-map.--op {
  185. max-width: 100%;
  186. }
  187.  
  188. @media screen and (min-width: 925px) {
  189. #main-outlet .container.posts {
  190. grid-template-columns: auto 120px;
  191. }
  192. }
  193. `);
  194.  
  195. var settings = {
  196. icon_vscode_main: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0yOS4wMSA1LjAzLTUuNzY2LTIuNzc2YTEuNzQgMS43NCAwIDAgMC0xLjk4OS4zMzhMMi4zOCAxOS44YTEuMTY2IDEuMTY2IDAgMCAwLS4wOCAxLjY0N3EuMDM3LjA0LjA3Ny4wNzdsMS41NDEgMS40YTEuMTY1IDEuMTY1IDAgMCAwIDEuNDg5LjA2NkwyOC4xNDIgNS43NUExLjE1OCAxLjE1OCAwIDAgMSAzMCA2LjY3MnYtLjA2N2ExLjc1IDEuNzUgMCAwIDAtLjk5LTEuNTc1IiBzdHlsZT0iZmlsbDojMDA2NWE5Ii8+PHBhdGggZD0ibTI5LjAxIDI2Ljk3LTUuNzY2IDIuNzc3YTEuNzQ1IDEuNzQ1IDAgMCAxLTEuOTg5LS4zMzhMMi4zOCAxMi4yYTEuMTY2IDEuMTY2IDAgMCAxLS4wOC0xLjY0N3EuMDM3LS4wNC4wNzctLjA3N2wxLjU0MS0xLjRBMS4xNjUgMS4xNjUgMCAwIDEgNS40MSA5LjAxbDIyLjczMiAxNy4yNEExLjE1OCAxLjE1OCAwIDAgMCAzMCAyNS4zMjh2LjA3MmExLjc1IDEuNzUgMCAwIDEtLjk5IDEuNTciIHN0eWxlPSJmaWxsOiMwMDdhY2MiLz48cGF0aCBkPSJNMjMuMjQ0IDI5Ljc0N2ExLjc0NSAxLjc0NSAwIDAgMS0xLjk4OS0uMzM4QTEuMDI1IDEuMDI1IDAgMCAwIDIzIDI4LjY4NFYzLjMxNmExLjAyNCAxLjAyNCAwIDAgMC0xLjc0OS0uNzI0IDEuNzQgMS43NCAwIDAgMSAxLjk4OS0uMzM5bDUuNzY1IDIuNzcyQTEuNzUgMS43NSAwIDAgMSAzMCA2LjZ2MTguOGExLjc1IDEuNzUgMCAwIDEtLjk5MSAxLjU3NloiIHN0eWxlPSJmaWxsOiMxZjljZjAiLz48L3N2Zz4=',
  197.  
  198. icon_vscode_wide: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMTEiIGhlaWdodD0iMzciIHZpZXdCb3g9IjEgLTEgMTAwIDMyIj48dGV4dCB4PSIzNiIgeT0iMjIuNSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI0FBQSIgZm9udC13ZWlnaHQ9IjU1NSI+VlMgQ29kZTwvdGV4dD48cGF0aCBkPSJtMjkgNS01LjgtMi44YTEuNyAxLjcgMCAwIDAtMiAuM0wyLjQgMTkuOGExLjIgMS4yIDAgMCAwLS4xIDEuNmwuMS4xIDEuNSAxLjRhMS4yIDEuMiAwIDAgMCAxLjUuMUwyOC4xIDUuOGExLjIgMS4yIDAgMCAxIDEuOS45di0uMUExLjggMS44IDAgMCAwIDI5IDUiIHN0eWxlPSJmaWxsOiMwNmEiLz48cGF0aCBkPSJtMjkgMjctNS44IDIuOGExLjcgMS43IDAgMCAxLTItLjNMMi40IDEyLjJhMS4yIDEuMiAwIDAgMS0uMS0xLjZsLjEtLjEgMS41LTEuNEExLjIgMS4yIDAgMCAxIDUuNCA5bDIyLjcgMTcuMmExLjIgMS4yIDAgMCAwIDEuOS0uOXYuMWExLjggMS44IDAgMCAxLTEgMS42IiBzdHlsZT0iZmlsbDojMDdjIi8+PHBhdGggZD0iTTIzLjIgMjkuN2ExLjcgMS43IDAgMCAxLTItLjMgMSAxIDAgMCAwIDEuOC0uN1YzLjNhMSAxIDAgMCAwLTEuNy0uNyAxLjcgMS43IDAgMCAxIDItLjNsNS44IDIuOGExLjggMS44IDAgMCAxIC45IDEuNXYxOC44YTEuOCAxLjggMCAwIDEtMSAxLjZaIiBzdHlsZT0iZmlsbDojMTlmIi8+PC9zdmc+',
  199.  
  200. icon_excel:' data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNC40OTQiIHkxPSItMjA5Mi4wODYiIHgyPSIxMy44MzIiIHkyPSItMjA3NS45MTQiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyMTAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzE4NCIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiMxNzQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwNjMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cGF0aCBkPSJNMTkuNiAxNS4zIDguNSAxMy40djE0LjRBMS4yIDEuMiAwIDAgMCA5LjcgMjloMTkuMWExLjIgMS4yIDAgMCAwIDEuMi0xLjJ2LTUuM1oiIHN0eWxlPSJmaWxsOiMxNTMiLz48cGF0aCBkPSJNMTkuNiAzSDkuN2ExLjIgMS4yIDAgMCAwLTEuMiAxLjJ2NS4zTDE5LjYgMTZsNiAxLjlMMzAgMTZWOS41WiIgc3R5bGU9ImZpbGw6IzJhNiIvPjxwYXRoIGQ9Ik04LjUgOS41aDExVjE2aC0xMVoiIHN0eWxlPSJmaWxsOiMxNzQiLz48cGF0aCBkPSJNMTYuNCA4LjJIOC41djE2LjNoOGExLjIgMS4yIDAgMCAwIDEuMi0xLjJWOS40YTEuMiAxLjIgMCAwIDAtMS4zLTEuMiIgc3R5bGU9Im9wYWNpdHk6LjEwMDAwMDAwMTQ5MDExNjEyO2lzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTE1LjggOC44SDguNXYxNi4zaDcuM2ExLjIgMS4yIDAgMCAwIDEuMi0xLjJWMTBhMS4yIDEuMiAwIDAgMC0xLjItMS4yIiBzdHlsZT0ib3BhY2l0eTouMjAwMDAwMDAyOTgwMjMyMjQ7aXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMTUuOCA4LjhIOC41djE1aDcuM2ExLjIgMS4yIDAgMCAwIDEuMi0xLjJWMTBhMS4yIDEuMiAwIDAgMC0xLjItMS4yIiBzdHlsZT0ib3BhY2l0eTouMjAwMDAwMDAyOTgwMjMyMjQ7aXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMTUgOC44SDguNHYxNUgxNWExLjIgMS4yIDAgMCAwIDEuMi0xLjJWMTBBMS4yIDEuMiAwIDAgMCAxNSA4LjgiIHN0eWxlPSJvcGFjaXR5Oi4yMDAwMDAwMDI5ODAyMzIyNDtpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjIgOC44aDEyYTEuMiAxLjIgMCAwIDEgMS4yIDEuMnYxMmExLjIgMS4yIDAgMCAxLTEuMiAxLjJoLTEyQTEuMiAxLjIgMCAwIDEgMiAyMlYxMGExLjIgMS4yIDAgMCAxIDEuMi0xLjIiIHN0eWxlPSJmaWxsOnVybCgjYSkiLz48cGF0aCBkPSJNNS43IDE5LjkgOC4yIDE2bC0yLjMtMy45aDEuOEw5IDE0LjZjLjEuMi4yLjQuMi41cS4xLS4zLjMtLjVsMS4zLTIuNGgxLjdMMTAuMSAxNmwyLjQgMy45aC0xLjhsLTEuNC0yLjdhMi40IDIuNCAwIDAgMS0uMS0uNCAxLjcgMS43IDAgMCAxLS4yLjRsLTEuNSAyLjdaIiBzdHlsZT0iZmlsbDojZmZmIi8+PHBhdGggZD0iTTI4LjggM2gtOS4ydjYuNUgzMFY0LjJBMS4yIDEuMiAwIDAgMCAyOC44IDMiIHN0eWxlPSJmaWxsOiMzYzgiLz48cGF0aCBkPSJNMTkuNiAxNkgzMHY2LjVIMTkuNloiIHN0eWxlPSJmaWxsOiMxNzQiLz48L3N2Zz4='
  201. };
  202.  
  203. GM_addStyle(`
  204. #site-logo {
  205. object-fit: scale-down;
  206. object-position: -999vw;
  207. background-size: cover;
  208. background-repeat: no-repeat;
  209. background-image: url('${settings.icon_vscode_main}');
  210. opacity: 1;
  211. transition: opacity 0.5s ease;
  212. }
  213. #site-logo.logo-big {
  214. background-image: url('${settings.icon_vscode_wide}');
  215. }
  216. #site-logo.logo-mobile {
  217. background-image: url('${settings.icon_vscode_wide}');
  218. }
  219. #site-logo:hover {
  220. object-position: unset;
  221. background-image: none;
  222. }
  223. `);
  224.  
  225. function replaceIcon() {
  226. document.querySelector('link[rel="icon"]').href = settings.icon_vscode_main;
  227. if(!document.title.startsWith("VSCode")){
  228. document.title = "VSCode | " + document.title;
  229. }
  230.  
  231. }
  232. const observer = new MutationObserver(replaceIcon);
  233. observer.observe(document.head, { childList: true, subtree: true });
  234. replaceIcon();
  235.  
  236. document.title = "VSCode | " + document.title;
  237.  
  238.  
  239. function createFooter() {
  240. const footer = document.createElement('div');
  241. footer.style=`
  242. position: sticky;
  243. bottom: 0px;
  244. right: 0px;
  245. background: #333;
  246. color: #eee;
  247. padding: 4px 1.4em 0.5px;
  248. overflow: hidden;
  249. font-size: 12.5px;
  250. z-index: 350;
  251. display: flex;
  252. justify-content: space-between;
  253. align-items: center;
  254. height: 1.8em;
  255. line-height: 1;
  256. width: 100%;
  257. max-width: var(--d-max-width);
  258. border-top: solid 1px #8888;
  259. border-left: solid 2px #333;
  260. margin-left: -2.4em;
  261. margin-right: 0;
  262. user-select: none;
  263. `
  264.  
  265. const leftDiv = document.createElement('div');
  266. const rightDiv = document.createElement('div');
  267.  
  268. footer.appendChild(leftDiv);
  269. footer.appendChild(rightDiv);
  270.  
  271. rightDiv.style = "text-align: right; color: #ddd; fill: #ddd; display: flex; justify-content: space-around; align-items: center; flex-direction: row; flex-wrap: nowrap; gap:1em;";
  272.  
  273. const windowWidth = window.innerWidth;
  274. const windowHeight = window.innerHeight;
  275. const encoding = document.characterSet;
  276. const lines = document.body.textContent.split('\n').length;
  277.  
  278. rightDiv.innerHTML = `
  279. <span>Lines: ${lines}</span>
  280. <span>${windowWidth} x ${windowHeight}</span>
  281. <span>${encoding}</span>
  282. <span>CRLF</span>
  283. <span>HTML</span>
  284. <style>
  285. a.btn-with-svg[href] {
  286. color: #ddd;
  287. fill: #ddd;
  288. display: flex;
  289. justify-content: center;
  290. align-items: center;
  291. gap:0.3em;
  292. }
  293. a.btn-with-svg[href]:hover {
  294. background: #111;
  295. box-shadow: 0 0 0 3px #111;
  296. border-radius: 4px;
  297. }
  298. </style>
  299. <a class="btn-with-svg" href="/chat">
  300. <svg width="1.2em" height="1.2em" fill='#ddd' viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M10 3.2a2 2 0 0 1 3.7 0A7 7 0 0 1 19 10v4.7l1.8 2.7A1 1 0 0 1 20 19h-4.5a3.5 3.5 0 0 1-7 0H4a1 1 0 0 1-.8-1.6L5 14.7V10c0-3.2 2.2-6 5-6.8m.6 15.8a1.5 1.5 0 0 0 2.8 0zM12 5a5 5 0 0 0-5 5v5a1 1 0 0 1-.2.6L6 17h12.1l-1-1.4a1 1 0 0 1-.1-.6v-5a5 5 0 0 0-5-5"/></svg>
  301. </a>
  302. `;
  303.  
  304. leftDiv.style = "color: #ddd; fill: #ddd; display: flex; justify-content: space-around; align-items: center; flex-direction: row; flex-wrap: nowrap; gap:0.3em; ";
  305.  
  306. leftDiv.innerHTML = `
  307. <span></span><span></span>
  308. <a class="btn-with-svg" href="/">
  309. <svg width="1.2em" height="1.2em" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><circle cx="188" cy="67.998" r="28" opacity=".2"/><path d="M224 67.998a36 36 0 1 0-44 35.092v.908a16.02 16.02 0 0 1-15.999 16L92 120a31.8 31.8 0 0 0-16 4.294V103.09a36 36 0 1 0-16 0v49.817a36 36 0 1 0 16 0V152a16.02 16.02 0 0 1 16-16l72.001-.002a32.036 32.036 0 0 0 31.999-32v-.908a36.055 36.055 0 0 0 28-35.092m-176 0a20 20 0 1 1 20 20 20.023 20.023 0 0 1-20-20M88 188a20 20 0 1 1-20-20 20.023 20.023 0 0 1 20 20M188 87.998a20 20 0 1 1 20-20 20.023 20.023 0 0 1-20 20"/></svg>
  310. <span>main</span>
  311. </a>
  312. <a class="btn-with-svg" href="" onclick="location.reload();">
  313. <svg width="1.2em" height="1.2em" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M2.006 8.267.78 9.5 0 8.73l2.09-2.07.76.01 2.09 2.12-.76.76-1.167-1.18a5 5 0 0 0 9.4 1.983l.813.597a6 6 0 0 1-11.22-2.683m10.99-.466L11.76 6.55l-.76.76 2.09 2.11.76.01 2.09-2.07-.75-.76-1.194 1.18a6 6 0 0 0-11.11-2.92l.81.594a5 5 0 0 1 9.3 2.346z"/></svg>
  314. </a>
  315. <span></span><span></span>
  316. <svg width="1.2em" height="1.2em" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M8.6 1c1.6.1 3.1.9 4.2 2 1.3 1.4 2 3.1 2 5.1 0 1.6-.6 3.1-1.6 4.4-1 1.2-2.4 2.1-4 2.4s-3.2.1-4.6-.7-2.5-2-3.1-3.5S.8 7.5 1.3 6c.5-1.6 1.4-2.9 2.8-3.8C5.4 1.3 7 .9 8.6 1m.5 12.9c1.3-.3 2.5-1 3.4-2.1.8-1.1 1.3-2.4 1.2-3.8 0-1.6-.6-3.2-1.7-4.3-1-1-2.2-1.6-3.6-1.7-1.3-.1-2.7.2-3.8 1S2.7 4.9 2.3 6.3c-.4 1.3-.4 2.7.2 4q.9 1.95 2.7 3c1.2.7 2.6.9 3.9.6M7.9 7.5 10.3 5l.7.7-2.4 2.5 2.4 2.5-.7.7-2.4-2.5-2.4 2.5-.7-.7 2.4-2.5-2.4-2.5.7-.7z"/></svg>
  317. <span>0</span>
  318. <span></span><span></span>
  319. <svg width="1.2em" height="1.2em" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26zM8 2.28 2.28 13H13.7zM8.625 12v-1h-1.25v1zm-1.25-2V6h1.25v4z"/></svg>
  320. <span>0</span>
  321. <span></span><span></span>
  322. `;
  323.  
  324. return footer;
  325. }
  326.  
  327. function updateFooter() {
  328. if(!document.querySelector("#main-outlet")) {
  329. setTimeout(updateFooter, 1000);
  330. return;
  331. }
  332.  
  333. const footer = createFooter();
  334.  
  335. const windowWidth = window.innerWidth;
  336. const windowHeight = window.innerHeight;
  337. const encoding = document.characterSet;
  338.  
  339. const lines = document.body.textContent.split('\n').length;
  340.  
  341. document.querySelector("#main-outlet").appendChild(footer);
  342.  
  343. document.querySelector("#main-outlet-wrapper > div.sidebar-wrapper").style.zIndex=366;
  344.  
  345. document.querySelector("#main-outlet-wrapper").style.overflowX = 'clip';
  346.  
  347. }
  348. updateFooter();
  349.  
  350.  
  351. })();