您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
On a work page, show the full, untruncated text of the work's title, instead of the default ellipsized behavior
// ==UserScript== // @name LibraryThing full title on work pages // @namespace https://gf.qytechs.cn/en/users/11592-max-starkenburg // @description On a work page, show the full, untruncated text of the work's title, instead of the default ellipsized behavior // @include http*://*librarything.tld/work/* // @grant none // @version 7 // ==/UserScript== // A BIG thank you to brightcopy (http://www.librarything.com/profile/brightcopy) for his guidance and help with this script! // For some reason the script runs twice, and this line prevents this. Solution from Brock Adams at http://stackoverflow.com/a/5877034/752122 if (window.self == window.top) { var headsummary = document.getElementsByClassName("headsummary")[0]; var truncatedTitle = headsummary.getElementsByTagName("h1")[0]; var truncText = truncatedTitle.firstChild.textContent; // Don't bother with all the stuff below if the title isn't even truncated if (truncText.indexOf("…") > -1) { // Get full work's title (plus some extra junk we'll clean up later). var fullTitleText = document.getElementsByTagName("title")[0].textContent; // The value from <meta propery="og:title"> is cleaner in some respects, but it breaks if the title contains a // double-quote, and it also only displays the "work" title, not the "book" title. // Get the @href of the <link ref="canonical" ...> element, which we'll use for some later tests var links = document.getElementsByTagName("link"); var link = ''; for (var i = 0; i < links.length; i++) { if (links[i].getAttribute("rel") == "canonical") { link = links[i].href; break; } } // Get the site's word(s) for "by " and the text of the primary author, if it exists var by = '', primaryAuthor = ''; var h2 = headsummary.getElementsByTagName("h2")[0]; if (h2) { by = h2.firstChild.nodeValue; if (by == null) by = h2.getElementsByTagName("span")[0].textContent + " "; // Important to include the space (" ") for the non-English/translated cases. primaryAuthor = h2.getElementsByTagName("a")[0].textContent; } var byAuth = by + primaryAuthor; // Still unsure how to deal with certain "phantom-author" works (e.g. http://librarything.com/work/12853038/editions/88121268) // which put a " by " in <title> even when their is no author assigned. // Make a variable to tell if we're on book view or not var navLinks = document.getElementsByClassName("workleftnav")[0].getElementsByTagName("a"); var bookView = 0; for (var i = 0; i < navLinks.length; i++) { if (navLinks[i].href.indexOf("/details/") > -1) { bookView++; } } if (bookView == 0) { // If we're not on book view, the work sub-pages put an extra prefix in the fullTitleText, which needs to be removed. // Thanks to brightcopy for clueing me in to a much more efficient/robust way of doing this than I was doing before. if (fullTitleText.indexOf(truncText.substr(0, truncText.length - 5)) != 0) { // 5 for good measure to get rid of the ellipsis fullTitleText = fullTitleText.substr(fullTitleText.indexOf(":") + 1); if (fullTitleText.indexOf(" ") == 0) fullTitleText = fullTitleText.substr(1); // Making this conditional in case one of the translations does something like "Editions:Title" } } else { // Ugggghhh. Some languages use different translations of "by" on the book view vs. work view. // Some even re-order the author and title. if (link.indexOf("www.") != 7) { // Don't bother with these if you're in the majority of LT users if (link.indexOf("fi.") == 7 && fullTitleText.indexOf(" (tekijä: ") > -1) byAuth = "(tekijä: " + primaryAuthor + ")"; else if (link.indexOf("tr.") == 7 && fullTitleText.indexOf(", ") > -1) byAuth = ", " + primaryAuthor; else if (link.indexOf("ru.") == 7) byAuth = primaryAuthor; else if (link.indexOf("jp.") == 7 && fullTitleText.indexOf("著者:") > -1) byAuth = "著者: " + primaryAuthor; else if (link.indexOf("pir.") == 7 && fullTitleText.indexOf(" by the scurvy dog ") > -1) byAuth = "by the scurvy dog " + primaryAuthor; else if (link.indexOf("lat.") == 7 && fullTitleText.indexOf(" ab ") > -1) byAuth = "ab " + primaryAuthor; else if (link.indexOf("bg.") == 7 && fullTitleText.indexOf(" от ") > -1) byAuth = "от " + primaryAuthor; else if (link.indexOf("cn2.") == 7 && fullTitleText.indexOf(" 作者 ") > -1) byAuth = "作者 " + primaryAuthor; else if (link.indexOf("lv.") == 7 && fullTitleText.indexOf("», ") > -1) byAuth = "», " + primaryAuthor; else if (link.indexOf("il.") == 7 && fullTitleText.indexOf(" של ") > -1) byAuth = "של " + primaryAuthor; // Part of this looks all messed up, due to the RTL factor, but somehow it works! else if (link.indexOf("ir.") == 7) byAuth = ''; // Not sure why Persian doesn't work similarly to Hebrew. Handling it separately below. else if (link.indexOf("si.") == 7 && fullTitleText.indexOf(", napisal(a) ") > -1) byAuth = ", napisal(a) " + primaryAuthor; else if (link.indexOf("ind.") == 7 && fullTitleText.indexOf(" oleh ") > -1) byAuth = "oleh " + primaryAuthor; else if (link.indexOf("ge.") == 7 && fullTitleText.indexOf("-ს მიერ") > -1) byAuth = primaryAuthor + "-ს მიერ"; else if (link.indexOf("glg.") == 7 && fullTitleText.indexOf(" por ") > -1) byAuth = "por " + primaryAuthor; } } // Ugh. Various language-specific quirks on the book view only. if (bookView) { // On the cz and hu sites, the construction of <title> is "Author: Title" or "Author : Title" instead of "Title by Author". if (link.indexOf("cz.") == 7 || link.indexOf("hu.") == 7) { if (primaryAuthor.length != 0 || (primaryAuthor.length == 0 && (fullTitleText.indexOf(":") == 0 || fullTitleText.indexOf(":") == 1))) { // Added condition for phantom-author cases; fullTitleText = fullTitleText.substr(fullTitleText.indexOf(primaryAuthor + ":") + 2); } byAuth = ""; } // On the lv site, the construction of <title> is "«Title», Author" instead of "Title by Author". if (link.indexOf("lv.") == 7) fullTitleText = fullTitleText.substr(1); } // Remove the "by So-and-So | LibraryThing part of the fullTitleText byAuth = byAuth + " | "; if (fullTitleText.indexOf(byAuth) > 10) { // Sometimes it just doesn't work, in which case don't bother with the replacement (hence the above conditional) // e.g. where did the comma come from after the author's name in the <title> of http://www.librarything.com/work/3621315/ ? fullTitleText = fullTitleText.split(byAuth).slice(0, -1).join(byAuth); // There's gotta be a better way to deal with the Persian "by" text. Not sure why it works here in // split/slice/join, but not when trying to put the RTL text in the assignment of byAuth. Any ideas? if (bookView && link.indexOf("ir.") == 7 && fullTitleText.indexOf("توسط " + primaryAuthor) > -1) { // The last condition for certain author-less books fullTitleText = fullTitleText.split("توسط " + primaryAuthor).slice(0,-1).join("توسط " + primaryAuthor); } // Replace the truncated text of the h1 with the full value, and we're done! truncatedTitle.firstChild.nodeValue = fullTitleText; } } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址