您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Visual Improvements to the desktop version of Sim Companies
// ==UserScript== // @name Sim Companies Visual Improvements // @namespace https://www.simcompanies.com/company/Andrew%20Corp/ // @version 0.2.1.1 // @description Visual Improvements to the desktop version of Sim Companies // @author Andrew Corp // @Translater to German Sperlingsfedern // @match https://*.simcompanies.com/* // @grant GM_addStyle // @grant GM.setValue // @grant GM.getValue // @require https://code.jquery.com/jquery-latest.js // @run-at document-idle // ==/UserScript== /* globals jQuery, $, waitForKeyElements, await */ /* jshint esversion:6 */ // Customize text and colors (ideal for different languages) // New in 0.2: Some settings are now accessible on your profile settings page, // you will have to F5 the page (until I get more kinks worked out) to get // it to load var textMap = "Karte"; var textMapShort = "M"; var textWarehouse = "Lager"; var textWarehouseShort = "WH"; var textSearch = "Suche"; var textSearchShort = "S"; var textChat = "Chat"; var textChatShort = "C"; var textExchange = "Börse"; var textExchangeShort = "EX"; var showLibraryinTopBar = JSON.parse(await (GM.getValue("showLibraryinTopBar", true))); var textLibrary = "Bibliothek"; var textLibraryShort = "Lib"; var showEncyclopediainTopBar = JSON.parse(await (GM.getValue("showEncyclopediainTopBar", true))); var textEncyclopedia = "Enzyklopädie"; var textEncyclopediaShort = "Enc"; var nonLiveTopBarColor = "#0018A3"; var nonLiveTopBarTextColor = "#FFF"; var hideIncomingBadge = JSON.parse(await (GM.getValue("hideIncomingBadge", false))); var noticeableCollections = JSON.parse(await (GM.getValue("noticeableCollections", false))); /** * A utility function for userscripts that detects and handles AJAXed content. * Source: https://github.com/CoeJoder/waitForKeyElements.js * @example * waitForKeyElements("div.comments", (element) => { * element.innerHTML = "This text inserted by waitForKeyElements()."; * }); * * waitForKeyElements(() => { * const iframe = document.querySelector('iframe'); * if (iframe) { * const iframeDoc = iframe.contentDocument || iframe.contentWindow.document; * return iframeDoc.querySelectorAll("div.comments"); * } * return null; * }, callbackFunc); * * @param {(string|function)} selectorOrFunction - The selector string or function. * @param {function} callback - The callback function; takes a single DOM element as parameter. * If returns true, element will be processed again on subsequent iterations. * @param {boolean} [waitOnce=true] - Whether to stop after the first elements are found. * @param {number} [interval=300] - The time (ms) to wait between iterations. * @param {number} [maxIntervals=-1] - The max number of intervals to run (negative number for unlimited). */ function waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals) { if (typeof waitOnce === "undefined") { waitOnce = true; } if (typeof interval === "undefined") { interval = 300; } if (typeof maxIntervals === "undefined") { maxIntervals = -1; } var targetNodes = (typeof selectorOrFunction === "function") ? selectorOrFunction() : document.querySelectorAll(selectorOrFunction); var targetsFound = targetNodes && targetNodes.length > 0; if (targetsFound) { targetNodes.forEach(function(targetNode) { var attrAlreadyFound = "data-userscript-alreadyFound"; var alreadyFound = targetNode.getAttribute(attrAlreadyFound) || false; if (!alreadyFound) { var cancelFound = callback(targetNode); if (cancelFound) { targetsFound = false; } else { targetNode.setAttribute(attrAlreadyFound, true); } } }); } if (maxIntervals !== 0 && !(targetsFound && waitOnce)) { maxIntervals -= 1; setTimeout(function() { waitForKeyElements(selectorOrFunction, callback, waitOnce, interval, maxIntervals); }, interval); } } waitForKeyElements (".fa-map", moveTheMenu); //waitForKeyElements (".company-info", SCVIsettingsPanel); //window.addEventListener('popstate', function(e) { // console.log(window.location.href); // alert('test'); //}); (function() { 'use strict'; GM_addStyle ( ` #__AmCharts_React_1__ { height: 600px !important; } #__AmCharts_React_2__ { height: 600px !important; } #__AmCharts_React_3__ { height: 600px !important; } #__AmCharts_React_4__ { height: 600px !important; } #__AmCharts_React_5__ { height: 600px !important; } a > .fa-map, a > .fa-boxes, a > .fa-search, a > .fa-comment-alt, a > .fa-exchange-alt, a > .fa-book, a > .fa-bookmark { font-size: 24px !important; } @media screen and (min-width: 1000px) { .vi-wide { display: inline; } .vi-narrow { display: none; } } @media screen and (max-width: 999px) { .vi-wide { display: none; } .vi-narrow { display: inline; } } a[href$='/messages/'] > span.badge, a[href$='/headquarters/warehouse/'] > span.badge { left: 35px !important; } ` ); if (hideIncomingBadge) { GM_addStyle ( ` a[href$='/headquarters/warehouse/'] > span.badge { visibility: hidden; } ` ); } if (noticeableCollections) { GM_addStyle ( ` .anim-ghost { color: black; font-weight: 600; font-size: x-large; -webkit-text-stroke-width: thin; -webkit-text-stroke-color: white; animation-duration: 2s; } ` ); } })(); function moveTheMenu (jNode) { $( "<span class='vi-wide'>"+textMap+"</span><span class='vi-narrow'>"+textMapShort+"</span>" ).insertAfter( "a > .fa-map" ); $( "<span class='vi-wide'>"+textWarehouse+"</span><span class='vi-narrow'>"+textWarehouseShort+"</span>" ).insertAfter( "a > .fa-boxes" ); $( "<span class='vi-wide'>"+textSearch+"</span><span class='vi-narrow'>"+textSearchShort+"</span>" ).insertAfter( "a > .fa-search" ); $( "<span class='vi-wide'>"+textChat+"</span><span class='vi-narrow'>"+textChatShort+"</span>" ).insertAfter( "a > .fa-comment-alt" ); $( "<span class='vi-wide'>"+textExchange+"</span><span class='vi-narrow'>"+textExchangeShort+"</span>" ).insertAfter( "a > .fa-exchange-alt" ); var bottomMenu = $(".fa-map").parent().parent().detach(); bottomMenu.addClass("movedTopMenu"); bottomMenu.insertAfter(".fa-bars"); SCVIsettingsPanel(); var topButtonAClass = ""; var topButtonIClass = ""; if (window.location.href.indexOf("/landscape/") != -1) { topButtonAClass=$(".movedTopMenu a").next().attr("class"); topButtonIClass=$(".movedTopMenu a").next().children("i").attr("class").replace(/fa-([a-z]*)/,""); } else { topButtonAClass=$(".movedTopMenu a").attr("class"); topButtonIClass=$(".movedTopMenu a").children("i").attr("class").replace(/fa-([a-z]*)/,""); } if (showLibraryinTopBar) { $(".movedTopMenu").append("<a class='"+topButtonAClass+"' href='/newspaper/'><i class='"+topButtonIClass+" fa-book' type='book'> </i><span class='vi-wide'>"+textLibrary+"</span><span class='vi-narrow'>"+textLibraryShort+"</span>"); } if (showEncyclopediainTopBar) { $(".movedTopMenu").append("<a class='"+topButtonAClass+"' href='/encyclopedia/'><i class='"+topButtonIClass+" fa-bookmark' type='bookmark'> </i><span class='vi-wide'>"+textEncyclopedia+"</span><span class='vi-narrow'>"+textEncyclopediaShort+"</span>"); } // hide bottom bar now that we got rid of everything in it -- Removing it breaks going from the map to the homepage $(".chat-notifications").next().hide(); if (window.location.href.indexOf("www.simcompanies") == -1) { $(".fa-bars").parent().parent().css("background-color", nonLiveTopBarColor); $( "a > .fa-map" ).parent().css({"color": nonLiveTopBarTextColor, "background-color": nonLiveTopBarColor}); $( "a > .fa-boxes" ).parent().css({"color": nonLiveTopBarTextColor, "background-color": nonLiveTopBarColor}); $( "a > .fa-search" ).parent().css({"color": nonLiveTopBarTextColor, "background-color": nonLiveTopBarColor}); $( "a > .fa-comment-alt" ).parent().css({"color": nonLiveTopBarTextColor, "background-color": nonLiveTopBarColor}); $( "a > .fa-exchange-alt" ).parent().css({"color": nonLiveTopBarTextColor, "background-color": nonLiveTopBarColor}); } } function SCVIsettingsPanel (jNode) { $(".company-info").append("<div><label>Andrew's <a href='https://greasyfork.org/en/scripts/432355-sim-companies-visual-improvements' target='_blank'>Sim Companies Visual Improvements</a> settings:</input></label></div>"); $(".company-info").append("<div><label><input type='checkbox' name='hideIncomingBadge'> Hide incoming count</input></label></div>"); if (hideIncomingBadge) { $("input[name='hideIncomingBadge']").prop("checked", true); } $("input[name='hideIncomingBadge']").change(function() { if ($(this).is(':checked')) { GM.setValue("hideIncomingBadge", true); } else { GM.setValue("hideIncomingBadge", false); } }); $(".company-info").append("<div><label><input type='checkbox' name='showLibraryinTopBar'> Show Library in Top Bar</input></label></div>"); if (showLibraryinTopBar) { $("input[name='showLibraryinTopBar']").prop("checked", true); } $("input[name='showLibraryinTopBar']").change(function() { if ($(this).is(':checked')) { GM.setValue("showLibraryinTopBar", true); } else { GM.setValue("showLibraryinTopBar", false); } }); $(".company-info").append("<div><label><input type='checkbox' name='showEncyclopediainTopBar'> Show Encyclopedia in Top Bar</input></label></div>"); if (showEncyclopediainTopBar) { $("input[name='showEncyclopediainTopBar']").prop("checked", true); } $("input[name='showEncyclopediainTopBar']").change(function() { if ($(this).is(':checked')) { GM.setValue("showEncyclopediainTopBar", true); } else { GM.setValue("showEncyclopediainTopBar", false); } }); $(".company-info").append("<div><label><input type='checkbox' name='noticeableCollections'> Make the collections stand out</input></label></div>"); if (noticeableCollections) { $("input[name='noticeableCollections']").prop("checked", true); } $("input[name='noticeableCollections']").change(function() { if ($(this).is(':checked')) { GM.setValue("noticeableCollections", true); } else { GM.setValue("noticeableCollections", false); } }); $(".company-info").append("<div><label><input type='button' name='applySettings' value='Apply SCVI Setting Changes'></input></label></div>"); $("input[name='applySettings']").click(function() { location.reload(); }); }