NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @id Lichess_Topbar_Menu@https://github.com/mawekuwe/UserScripts // @name Lichess Topbar Menu // @namespace https://github.com/mawekuwe/UserScripts // @description Restore the topbar menu // @author mawekuwe // @copyright 2015+, mawekuwe // @license GNU GPLv3 // @homepage https://github.com/mawekuwe/UserScripts/tree/master/Lichess_Topbar_Menu // @homepageURL https://github.com/mawekuwe/UserScripts/tree/master/Lichess_Topbar_Menu // @downloadURL https://github.com/mawekuwe/UserScripts/raw/master/Lichess_Topbar_Menu/Lichess_Topbar_Menu.user.js // @updateURL https://github.com/mawekuwe/UserScripts/raw/master/Lichess_Topbar_Menu/Lichess_Topbar_Menu.user.js // @supportURL https://github.com/mawekuwe/UserScripts/issues // @contributionURL // @version 1.7 // @grant none // @run-at document-end // @include http://*.lichess.org/* // @icon https://raw.githubusercontent.com/ornicar/lila/master/public/images/favicon-32-white.png // ==/UserScript== // changelog // version 1.7 // Moved PING on Topbar // version 1.6 // Disabled topmenu since the official one is back // Fix font-size in #tournament // version 1.5 // css Text-transform Small fix // version 1.4 // Added function to highlight the current menu entry // Added ability to hide TV ads in homepage from some users.(thanks to robertmaxrees from #jquery) // Menu entries are now internationalized (thanks to RaulJose from lichess.org) // Small bug fix with forum part (thanks to RaulJose from lichess.org) // version 1.3 // Added background color menu for light/dark theme. // Added the new hierarchy menu and the previous one as optional. (Switch the setting to true or false) // Forum part: Uses the full width of the site when you are on the forum which involves hiding the useless and empty sidebar and the logo. // Tournament part: Added feature to always be rated selected when make new tournament. // version 1.2 // Added submenus for categories Forum // settings var oldmenu = false; // false/true; Change it to true if you want the previous old topbar menu hierarchy var streamOnAir = false; // turn it to true if you want to remove ads about stream from particular user. See line ~190 var newTounrnamentRated = true; // Turn it to true if you want always set a rated tournament. See line ~170 function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } addGlobalStyle( // CSS Menu part '#nav li {display:block;float:left;list-style-type:none;width:auto;}' + '/*#primary_nav_wrap {}*/' + // UPPERCASE for topbar or every submenu? '#primary_nav_wrap > ul {text-transform: uppercase !important;}' + '#primary_nav_wrap > ul > li > ul {text-transform: none !important;}' + // '#primary_nav_wrap ul {list-style:none;position:relative;float:left;margin:0;padding:0}' + '#primary_nav_wrap ul a {display:block;text-decoration:none;line-height:32px;padding:0 15px;}' + '#primary_nav_wrap ul li {position:relative;float:left; margin:0;padding:0}' + '/*#primary_nav_wrap ul li.current-menu-item {background:#ddd}*/' + '#primary_nav_wrap ul ul {display:none;position:absolute;top:100%;left:0;padding:0}' + 'body.dark #primary_nav_wrap ul ul {background-color:#252525 !important;}' + 'body.dark #primary_nav_wrap ul li:hover {background-color:#2B2B2B !important;}' + 'body.dark #primary_nav_wrap a.current-menu-item {font-weight: bolder !important;}' + 'body.light #primary_nav_wrap ul ul {background-color:#d7d7d7 !important;}' + 'body.light #primary_nav_wrap ul li:hover {background-color:white !important;}' + 'body.light #primary_nav_wrap a.current-menu-item {font-weight: bolder !important;}' + '#primary_nav_wrap ul ul li {float:none;width:200px}' + '#primary_nav_wrap ul ul a {line-height:120%;padding:10px 15px}' + '#primary_nav_wrap ul ul ul {top:0;left:100%}' + '#primary_nav_wrap ul li:hover > ul{display:block}' + // TV history '#tv_history div.content {height: 250px !important;}' + // tournament '#tournament a.user_link span[data-icon] {font-size: 1.0em !important;}' + '#tournament a.user_link {text-decoration: none !important;}' + // ping '#top .ping {text-decoration: none;font-size: 13px;height: 24px;line-height: 24px;padding: 0 8px;}' + '#top .ping::after {content: " ms"}' ); // Topbar Menu // thanks to RaulJose for internationalized menu entries. /* if (oldmenu) { // if false this code is not executed $("#top").append( '<div><nav id="primary_nav_wrap" class="user_show">' + '<ul>' + ' <li class="topmenu"><a class="link blank_if_play" href="/">' + $("#fpmenu div.menu > section:eq(0) > *:eq(0)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/?any#hook">' + $("#fpmenu div.menu > section:eq(0) > *:eq(1)").text() + '</a></li>' + ' <!--<li class="dropmenu" style=""><a class="link blank_if_play" href="/games">Games</a></li>-->' + ' <li class="dropmenu" style=""><a href="/">trans.tournament()</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/training">' + $("#fpmenu div.menu > section:eq(1) > *:eq(1)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/training/opening">' + $("#fpmenu div.menu > section:eq(1) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/training/coordinate">' + $("#fpmenu div.menu > section:eq(1) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/video">' + $("#fpmenu div.menu > section:eq(1) > *:eq(4)").text() + '</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/tournament">' + $("#fpmenu div.menu > section:eq(0) > *:eq(2)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/simul">' + $("#fpmenu div.menu > section:eq(0) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/player">' + $("#fpmenu div.menu > section:eq(2) > *:eq(1)").text() + '</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/team">' + $("#fpmenu div.menu > section:eq(2) > *:eq(2)").text() + '</a></li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/forum">' + $("#fpmenu div.menu > section:eq(2) > *:eq(3)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/general-chess-discussion">General Chess Discussion</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/game-analysis">Game analysis</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/lichess-feedback">Lichess Feedback</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/off-topic-discussion">Off-Topic Discussion</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/tv">' + $("#fpmenu div.menu > section:eq(0) > *:eq(4)").text() + '</a></li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/qa">' + $("#fpmenu div.menu > section:eq(2) > *:eq(4)").text() + '</a></li>' + ' <li class="topmenu"><a class="link blank_if_play" href="/editor">' + $("#fpmenu div.menu > section:eq(3) > *:eq(1)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/analysis">' + $("#fpmenu div.menu > section:eq(3) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/paste">' + $("#fpmenu div.menu > section:eq(3) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/games/search">' + $("#fpmenu div.menu > section:eq(3) > *:eq(4)").text() + '</a></li>' + ' </ul>' + ' </li>' + '</ul>' + '</nav></div>'); } else { // New-menu only if false. $("#top").append( '<div><nav id="primary_nav_wrap" class="user_show">' + '<ul>' + ' <li class="topmenu link blank_if_play"><a class="link blank_if_play" href="/">' + $("#fpmenu div.menu > section:eq(0) > *:eq(0)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/?any#hook">' + $("#fpmenu div.menu > section:eq(0) > *:eq(1)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/tournament">' + $("#fpmenu div.menu > section:eq(0) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/simul">' + $("#fpmenu div.menu > section:eq(0) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/tv">' + $("#fpmenu div.menu > section:eq(0) > *:eq(4)").text() + '</a></li>' + ' <!--<li class="dropmenu"><a class="link blank_if_play" href="/games">Games</a></li>-->' + ' <!--<li class="dropmenu" style=""><a href="/">trans.tournament()</a></li>-->' + ' </ul>' + ' </li>' + ' <li class="topmenu link blank_if_play" style="cursor: default !important;"><a class="link blank_if_play" style="cursor: default !important;">' + $("#fpmenu div.menu > section:eq(1) > *:eq(0)").text() + '</a>' + // Learn ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/training">' + $("#fpmenu div.menu > section:eq(1) > *:eq(1)").text() + '</a></li>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/training/opening">' + $("#fpmenu div.menu > section:eq(1) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/training/coordinate">' + $("#fpmenu div.menu > section:eq(1) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu" style=""><a class="link blank_if_play" href="/video">' + $("#fpmenu div.menu > section:eq(1) > *:eq(4)").text() + '</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu link blank_if_play" style="cursor: default !important;"><a class="link blank_if_play" style="cursor: default !important;">' + $("#fpmenu div.menu > section:eq(2) > *:eq(0)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/player">' + $("#fpmenu div.menu > section:eq(2) > *:eq(1)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/team">' + $("#fpmenu div.menu > section:eq(2) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum">' + $("#fpmenu div.menu > section:eq(2) > *:eq(3)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/general-chess-discussion">General Chess Discussion</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/game-analysis">Game analysis</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/lichess-feedback">Lichess Feedback</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/forum/off-topic-discussion">Off-Topic Discussion</a></li>' + ' </ul>' + ' </li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/qa">' + $("#fpmenu div.menu > section:eq(2) > *:eq(4)").text() + '</a></li>' + ' </ul>' + ' </li>' + ' <li class="topmenu link blank_if_play" style="cursor: default !important;"><a class="link blank_if_play" style="cursor: default !important;">' + $("#fpmenu div.menu > section:eq(3) > *:eq(0)").text() + '</a>' + ' <ul>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/editor">' + $("#fpmenu div.menu > section:eq(3) > *:eq(1)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/analysis">' + $("#fpmenu div.menu > section:eq(3) > *:eq(2)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/paste">' + $("#fpmenu div.menu > section:eq(3) > *:eq(3)").text() + '</a></li>' + ' <li class="dropmenu"><a class="link blank_if_play" href="/games/search">' + $("#fpmenu div.menu > section:eq(3) > *:eq(4)").text() + '</a></li>' + ' </ul>' + ' </li>' + '</ul>' + '</nav></div>'); } */ $(document).ready(function() { $("#primary_nav_wrap [href]").each(function() { if (this.href == window.location.href) { $(this).addClass("current-menu-item"); } }); }); // Forum part if (window.location.pathname.indexOf("/forum") > -1) { $( "div#lichess:has(div#lichess_forum)" ).addClass( "nomargin-left" ).attr("style", "margin-left: 0px !important;"); //OK $( "#site_header" ).hide(); // .hide instead of .remove // thanks to RaulJose } // Tournament part // always rated selected if (window.location.pathname === '/tournament/new') { //document.evaluate("//select[@name='system']",document,null,9,null).singleNodeValue.selectedIndex=0; //document.evaluate("//select[@name='variant']",document,null,9,null).singleNodeValue.selectedIndex=0; document.evaluate("//select[@name='mode']",document,null,9,null).singleNodeValue.selectedIndex=1; //0=casual 1=rated //document.evaluate("//select[@name='clockTime']",document,null,9,null).singleNodeValue.selectedIndex=0; //document.evaluate("//select[@name='clockIncrement']",document,null,9,null).singleNodeValue.selectedIndex=1; //document.evaluate("//select[@name='minutes']",document,null,9,null).singleNodeValue.selectedIndex=3; //document.evaluate("//select[@name='minPlayers']",document,null,9,null).singleNodeValue.selectedIndex=0; } // Hide TV ads from some users. // thanks to robertmaxrees from #jquery if (streamOnAir) { if (window.location.pathname === '/') { if ($('#streams_on_air a span').length) { // Case sensitive var myArray = ["JohnDoe", "JaneDoe", "Jupeq"], hasValue = myArray.some(function(currentValue) { return $('#streams_on_air a span:contains(' + currentValue + ')').length > 0; }); if (hasValue) { $("#streams_on_air").remove(); console.log('#streams_on_air removed'); } } } } //////////////////////////// // Ping on topbar is back // //////////////////////////// // remove the separator $(".auth.fright > .links.dropdown > span.sep").remove(); // move PING on Topbar var ping = $('.ping').detach(); ping.addClass("fright").insertAfter('#themepicker'); // Remove text "PING " but can't keep "ms" then I add it with css "content:" $(".ping") .contents() .filter(function() { //return this.nodeType == 3; //Node.TEXT_NODE return this.nodeType !== 1; }).remove();