Repository: laxyapahuja/bunken Branch: main Commit: 2be1c35fc41c Files: 4 Total size: 6.0 KB Directory structure: gitextract_4v1j_yh4/ ├── README.md ├── manifest.json └── support/ └── goodreads/ ├── content.js └── script.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # bunken (文献) A chrome extension to download ebooks directly from Goodreads. Fetches ebooks from [LibGen](http://libgen.is), [LibGen Fiction](http://libgen.is/fiction), [Memory Of The World](http://library.memoryoftheworld.org) & [OpenLibrary](https://openlibrary.org). ⚠️ Users are advised to exercise caution and use this Chrome extension at their own risk, as I disclaim any liability for the outcomes or actions resulting from its utilization.  ## How to install 1. Clone this repository. 2. Open chrome extensions panel by visiting `chrome://extensions`. 3. Turn developer mode on. 4. Click on Load Unpacked. 5. Select the folder containing the repository with the root directory. 6. Visit any books' page on Goodreads. The ebooks should load under Related Books section. 7. Choose different sources according to your needs. ## How to contribute Help contribute by using it, finding bugs and opening issues. Pull requests are also appreciated! API repository available at [laxyapahuja/bunken-api](https://github.com/laxyapahuja/bunken-api). ================================================ FILE: manifest.json ================================================ { "name": "bunken", "version": "3.1", "manifest_version": 3, "action": { "default_icon": "./icon.png", "default_title": "bunken" }, "icons": { "300": "./icon.png" }, "content_scripts": [{ "matches": ["https://www.goodreads.com/book/show/*"], "js": ["support/goodreads/content.js"], "run_at": "document_end" }], "web_accessible_resources": [{ "resources": ["support/goodreads/script.js"], "matches": ["*://*.goodreads.com/*"] }], "permissions": [ "tabs" ], "host_permissions": [ "*://libgen.is/*", "*://goodreads.com/*", "*://api.bunken.tk/*" ] } ================================================ FILE: support/goodreads/content.js ================================================ let s = document.createElement('script'); s.src = chrome.runtime.getURL('support/goodreads/script.js'); document.head.appendChild(s); ================================================ FILE: support/goodreads/script.js ================================================ const API = 'https://api.bunken.tk/' let isRedesign = !document.querySelector("[property='books:isbn']") let bookJSON = isRedesign ? JSON.parse(document.querySelector('[type="application/ld+json"]').innerText) : {} let ebookElement = document.createElement('div') let ebookResultsElement; let relatedElement = isRedesign ? document.querySelector('.BookActions') : document.querySelector('[id^="relatedWorks-"]') let bookTitle = document.querySelector("[property='og:title']").getAttribute("content"); let ISBNCode = isRedesign ? bookJSON.isbn : document.querySelector("[property='books:isbn']").getAttribute("content"); let authorName = isRedesign ? bookJSON.author[0].name : document.getElementsByClassName('authorName')[0].innerText function insertAfter(referenceNode, newNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } function ebookElementInflator(results) { ebookResultsElement.innerHTML = '' results.forEach(book => { let resultElement = document.createElement('div') resultElement.className = 'elementList' let bookElement = document.createElement('div') let bookLinkElement = document.createElement('a') bookLinkElement.href = book.link bookLinkElement.textContent = book.title bookLinkElement.className = 'actionLinkLite bookPageGenreLink' bookLinkElement.target = "_blank" bookElement.appendChild(bookLinkElement) resultElement.appendChild(bookElement) if (book.downloads != null) { book.downloads.forEach(download => { let downloadElement = document.createElement('div') let downloadLinkElement = document.createElement('a') downloadLinkElement.href = download.link downloadLinkElement.textContent = download.format downloadLinkElement.style.color = 'blue' downloadElement.appendChild(downloadLinkElement) resultElement.appendChild(downloadElement) }) } let authorElement = document.createElement('div') authorElement.textContent = book.author resultElement.appendChild(authorElement) let clearElement = document.createElement('div') clearElement.className = 'clear' resultElement.appendChild(clearElement) ebookResultsElement.appendChild(resultElement) }) } function sourceSelect() { let e = document.getElementById("source"); let value = e.options[e.selectedIndex].value; search(value) } function setupUI() { let template = `