NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name CleanerReads - A goodreads.com Theme
// @description Nothing removed, just muted or moved out of the way.
// @version 1.0.8
// @author icetbr
// @icon https://www.google.com/s2/favicons?sz=64&domain=goodreads.com
// @license MIT
// @namespace https://github.com/icetbr/userscripts
// @updateURL https://openuserjs.org/meta/icetbr/CleanerReads.meta.js
// @downloadURL https://openuserjs.org/src/scripts/icetbr/CleanerReads.user.js
// @match https://www.goodreads.com/*
// @grant none
// ==/UserScript==
var style$1 = /*css*/`
/*****************/
/* SIDEBAR */
/*****************/
.BookPage__leftColumn { grid-column-start: 10; grid-column-end: 13; } /* move to the right */
.Sticky { position: relative !important; top: 15px !important; }
.BookPage__rightColumn { grid-column-start: 3; grid-column-end: 10; grid-row-start: 1; } /* make non sticky */
.BookPage__rightColumn { overflow: unset } /* allows moving content to it */
.BookActions > .BookRatingStars { display: none } /* hide Community Rating (duplicated) */
.BookPageMetadataSection__ratingStats { position: absolute; right: -314px; top: 344px; } /* move to the sidebar */
.RatingStatistics { flex-flow: column wrap; align-items: center; }
/*[Want to read], [Buy o nAmazon]*/
.BookActions { position: absolute; top: 407px; left: 72px; color: var(--color-text-subdued); }
.BookActions__editActivityButton { display: none; }
/* pencil icon */
.Button.Button--secondary.Button--medium.Button--block { margin-left: -4px; }
.Button.Button--secondary.Button--medium.Button--block span:first-child { display: none;}
/* top sticky header as a sidebar */
.SiteHeaderBanner__topFullImageContainer,
.siteHeader__topFullImageContainer /* selector for old goodreads design */
{ position: absolute; transform-origin: top right; right: 0; top: 1140px; transform: rotate(90deg); }
.ResponsiveImage { max-height: 330px; } /* resizes large covers to prevent overlap */
/*****************/
/* TOPBAR */
/*****************/
/* nearly invisible top navbar */
.Header { position: unset; box-shadow: unset; background: unset; color: #00000021; }
input::placeholder { color: #0000005c; }
.Header__siteHeaderBanner { height: unset; }
.PageFrame { padding-top: unset; }
.HeaderSearch__input { border: 0.1rem solid #0000; }
.Icon.ShareIcon svg { fill: #00000021; } /* share icon */
.HeaderSearch__button { opacity: 0.3; }
.Text__title3 { font-size: 1.5rem; } /* Book Series title */
.HeaderSecondaryNav { right: 43px; } /* align second nav icons with cover */
/*****************/
/* MAIN */
/*****************/
/* Book Details */
.ChoiceAwardBadge { margin-top: 10px; }
.BookPageMetadataSection__contributor { display: none; } /* hides Author (duplicated) */
.BookPage__mainContent .TruncatedContent__text--large { max-height: unset; } /* book description always expanded */
.BookPageMetadataSection__genrePlainText { display: none; } /* hides "genre" word */
.BookPageMetadataSection__genres { margin-bottom: -4px; }
.WorkDetails { margin-top: 3.2rem; } /* Literary awards */
.BookDetails .Button__container { top: -4px; left: 376px; }
.BookDetails .FeaturedDetails { margin-bottom: -3rem; overflow: clip; display: flex; } /* flex brings pages count and publish date close together */
.BookDetails + hr.Divider { display: none }
.FeaturedDetails p + p::before { content: ',\\00a0'; } /* spacing in 352 pages, January 19, 2023 */
.BookDetails__list { margin-top: 35px; } /* "This Edition" overlaping when fewer details displayed. Ex: https://www.goodreads.com/book/show/60741407-a-christmas-memory */
/* 1,004 reading · 11.4k want to read */
.AvatarGroup { display: none; }
.SocialSignalsSection { color: var(--color-text-body-light); }
.SocialSignalCard__caption { margin-left: unset; }
.SocialSignalCard { min-height: unset; }
.SocialSignalsSection__container { display: unset; }
.SocialSignalsSection__signal { margin-right: unset; display: inline-block; }
/* About Author */
.PageSection__title { display: none; }
.PageSection { margin-top: 20px; width: 550px;}
.PageSection .DetailsLayoutRightParagraph__widthConstrained { grid-column: span 10; }
/*****************/
/* REVIEWS */
/*****************/
/* My Review */
.ReviewsSection__header { display: none; }
.WriteReviewCTA .Avatar { display: none; }
.WriteReviewCTA__hero { display: none; } /* What do you Think title */
#SocialReviews .Text__title3 { display: none; }
.MyReviewCard { left: -193px; width: 730px;} /* center align review */
.Alert--informational { background-color: unset; }
.Alert { padding: unset; color: #00000021; text-align: center; }
.WriteReviewCTA { padding: unset; width: 600px;}
.ReviewsList__listHeader { margin: unset; }
/* Reviews */
.BookPage__reviewsSection { width: 550px; }
.ReviewsSectionStatistics__histogram { width: unset; }
.ReviewFilters__filterControl { width: unset; }
#CommunityReviews { display: none } /* hide title */
.ReviewsSectionStatistics .ReviewsSectionStatistics__ratingStatistics { display: none; } /* hide starts count, already shown on sidebar */
/* user reviews gravatar to the left, content centered */
#ReviewsSection .ReviewCard { left: -190px; width: 720px;}
.FeaturedPerson__info { width: 515px; }
.TruncatedContent__text--large { max-height: 48rem; }
.TruncatedContent__text--expanded { max-height: none; overflow-y: visible; }
/* user's reviews */
.SocialFooter { display: flex }
.SocialFooter .Button { font-weight: 400; }
.ReviewCard .Text__title4 { font-weight: 400; }
div[data-testid="actions"] { margin-left: 15px; margin-top: -1px; }
/*****************/
/* COMMON */
/*****************/
.Formatted {
overflow-wrap: break-word;
word-wrap: break-word;
word-break: break-word;
hyphens: auto;
}
hr.Divider { width: 532px }
/*****************/
/* BUTTONS */
/*****************/
.BookActions .Button { border-radius: unset; font-weight: unset; }
.BookActions__button { margin: unset; width: 100%;}
.Button--medium { padding: unset; height: 2.5rem; /*! width: 100%; */}
.Button--wtr { background-color: unset; color: unset; }
.Button--wtr:hover { background-color: unset; box-shadow: inset 0 -3px 0 0 var(--color-background-wtr-hover); }
.Button { transition: unset; border: 0; } /* border-radius: unset; font-weight: unset; */
.Button--buy { color: unset; }
.Button--buy:hover { background-color: unset; box-shadow: inset 0 -3px 0 0 var(--color-text-button-transparent-base); }
.Button--medium.Button--rounded { width: 3em; }
.Button--rounded { border-radius: unset; }
.Button--small { height: unset; padding: unset; }
.Button--large { height: unset; padding: unset; }
.Button--block { width: unset; }
.Button--primary:hover {
box-shadow: inset 0 -2px 0 0 var(--color-background-primary-base);
background-color: unset;
}
.Button--primary {
background-color: unset;
color: var(--color-background-primary-base);
border-radius: unset;
}
.Button--buy:active, .Button--buy:focus, .Button--inline.Button--active:active, .Button--inline.Button--active:focus, .Button--inline:active, .Button--inline:focus, .Button--primary:active, .Button--primary:focus, .Button--secondary.Button--active:active, .Button--secondary.Button--active:focus, .Button--secondary:active, .Button--secondary:focus, .Button--signinwithamazon:active, .Button--signinwithamazon:focus, .Button--signinwithapple:active, .Button--signinwithapple:focus, .Button--signinwithfacebook:active, .Button--signinwithfacebook:focus, .Button--tag-inline:active, .Button--tag-inline:focus, .Button--tag-selector:active, .Button--tag-selector:focus, .Button--transparent:active, .Button--transparent:focus, .Button--wtr:active, .Button--wtr:focus {
box-shadow: unset;
}
.ButtonGroup .Button__container:not(:first-child) .Button:active, .ButtonGroup .Button__container:not(:first-child) .Button:focus {
box-shadow: inset 0 -3px 0 0 var(--color-background-wtr-hover);
}
.ButtonGroup .Button__container:not(:first-child) .Button:active, .ButtonGroup .Button__container:not(:first-child) .Button--wtr:focus {
box-shadow: inset 0 -3px 0 0 var(--color-background-wtr-hover);
}
.ButtonGroup .Button__container:not(:first-child) .Button:active, .ButtonGroup .Button__container:not(:first-child) .Button--buy:focus {
box-shadow: inset 0 -3px 0 0 var(--color-text-button-transparent-base);
}
`;
const $ = (selector, parent = document) => parent.querySelector(selector),
el = (name, attrs) => Object.assign(document.createElement(name), attrs),
style = styles => el('style', { type: 'text/css', textContent: styles }),
addStyle = styles => document.body.append(style(styles)),
waitForEl = selector => new Promise(resolve => {
if ($(selector)) return resolve($(selector));
const observer = new MutationObserver(() => {
if (!$(selector)) return;
resolve($(selector));
observer.disconnect();
});
observer.observe(document.body, { childList: true, subtree: true });
return observer;
});
addStyle(style$1);
const pagesRegex = /(.*pages).*/;
$('p[data-testid="pagesFormat"]').innerText = $('p[data-testid="pagesFormat"]').innerText.replace(pagesRegex, '$1');
const dateRegex = /.*((January|February|March|April|May|June|July|August|September|October|November|December).*)/;
$('p[data-testid="publicationInfo"]').innerText = $('p[data-testid="publicationInfo"]').innerText.replace(dateRegex, '$1');
waitForEl('div[data-testid="currentlyReadingSignal"]').then(el => {
el.innerText = el.innerText.replace(' people are currently reading', ' reading ·');
});
waitForEl('div[data-testid="toReadSignal"]').then(el => {
el.innerText = el.innerText.replace(' people', '');
});
alert('\nHello CleanerReader user!\n\n I renamed this Userscript. Please use the new one at https://openuserjs.org/scripts/icetbr/CleanerReads_-_A_Goodreads_Theme')