Skip to content

Releases

1.1.0

Choose a tag to compare

@benoit74 benoit74 released this 10 Nov 13:41
1f90e42

Added

  • Add author biographies and portraits from Wikipedia with --with-author-details (#31)
  • Add support for sources without popularity: the source declares it, config.json carries the flag, and the UI hides flames and the most popular book and falls back to alphabetical sorting (#14)
  • Wikisource: add the library mission to the about page (#18)
  • Use book cover component with fallback images everywhere (#22)
  • Hide the "Collections" navigation item and homepage shelves when the ZIM only has a single collection (#3)
  • Revisit book grid for a better design and less rendering issues (#46)
  • Wikisource: select books by page name with --wikisource-pages, stable across feed updates unlike --books positions (#73)
  • Cache optimized EPUB and HTML images under an S3 bucket (--optimization-cache), keyed by the input image content so Project Gutenberg's frequent file rebuilds no longer defeat the cache (#32)
  • One More Library: add the onemorelibrary source (aliases OML), scraping public-domain EPUB/PDF books with --categories and --oml-ids filters (#94)
  • Show Creative Commons licenses as a localized name linking to the license, instead of the raw value of the source (e.g. a bare http://creativecommons.org/licenses/by-sa/3.0 for Wikisource). The scraper reduces license URIs, short codes and names to an identifier (licenseId in the book JSON) shared by all sources (#17)
  • UI: bring back the interface language switcher (config.json now carries the distinct book languages and a stable ZIM name). A ZIM built with a single language defaults its interface to that language instead of the browser's; a multi-language ZIM still defaults to the browser's. The switcher is a searchable, translate-icon-triggered list of native + English language names, with the browser and ZIM languages pinned first, and persists the choice per ZIM instead of globally (#35)
  • UI: only offer a language in the interface switcher once its translation is at least 80% complete, counted per source (common + that source's own namespace) rather than combined across every source, so a barely-started translation isn't offered and adding a new source's untranslated strings can't silently drop an already-translated language from unrelated ZIMs (#113)
  • UI: filter books, authors and collections by book language from a single control in the breadcrumbs bar, applied everywhere (books list, authors list, collections, home's popular/selected sections, author and collection detail pages). Author and collection previews now carry a per-language book count/popularity breakdown so filtered counts stay accurate without extra fetches (#101)
  • Index the full text of each book in its search entry, from one format per book (HTML, then EPUB, then PDF), with --index-format to force one (#43)
  • Wikisource: add book descriptions, sourced from each work's Wikidata item, since the ws-export OPDS feed carries none (#21)
  • Add a proper per-source ZIM illustration and HTML favicon set: each source ships one SVG mark, rasterized at export time into the ZIM illustration metadata and a minimal favicon.svg/.ico, apple-touch-icon.png and web app manifest icon set, wired into both the Vue UI and the no-JS fallback pages with paths relative to the page so they resolve under kiwix-serve (#110)
  • Add an info panel listing the explicit filters (collections, books, language, formats) used to build the ZIM (#4)

Changed

  • UI: when --languages is passed, the language filter is hidden if a single language was requested, and otherwise only lists the requested languages, even if some books also carry other languages (#148)
  • Gutenberg: do not force HTML format when other formats are requested (#152)
  • Gutenberg: scrape only the catalog entries typed Text. The dump also lists ~1250 audio recordings, images and datasets whose info page is all the mirror has; they used to be downloaded, fail in every format, and be dropped again with 1128 "could not be downloaded in any format" warnings in every run's log (#129)
  • UI: upgrade to Vuetify 4, migrating to the Material Design 3 typography classes, grid alignment utility classes, and restoring the CSS reset the new version dropped (#26)
  • UI: replace book grid borders with rounded card backgrounds, highlighted on hover, in book grid, book list, book carousel and author carousel (#61, #82)
  • Gutenberg: replace --with-author-details with --with-author-bio and --with-author-portrait (#66)
  • Author details: fetch biographies and portraits in the language the ZIM is built in, resolved through Wikipedia's interlanguage links, and keep the English picture when the localized article has none (#65, #84)
  • Gutenberg: prefer the cover declared by the downloaded EPUB over Project Gutenberg's ~200px cover.medium.jpg thumbnail, which yields sharper covers without an extra download; the thumbnail stays as fallback (#68)
  • Fine tune UI display (margins, ...) (#85)
  • UI: blur background content behind ZimInfoDialog (#87)
  • Rename the ambiguous Creator.name/first_name/last_name to display_name (the formatted string shown to readers) and sort_name (the last name alone, used only to sort, never displayed), dropping the unused decomposed first/last name fields; the JSON/UI name field is now displayName (#64)
  • UI: when the application fails to start, explain that reloading is unlikely to help and point to the more limited No-JavaScript interface instead (#119)
  • One More Library and Open Textbook Library: emit one broad collection per book instead of hundreds of leaf categories. OML uses the category above the book's own, OTL resolves every subject to its root through the published subject tree because textbook records often omit the ancestors; document the collection policy, give both sources dedicated category icons, and drop the OTL subject translations that no longer correspond to an emitted collection (#117)
  • UI: stop loading the whole books catalog to display a page of it. books.json is now a manifest carrying bookCountByLanguage, and the catalog is chunked into books-pages/{sort}/{n}.json — one page set per sort criterion the UI offers (popularity, title, author), each cut in the direction the UI sorts it by default, which is the only direction its sort control offers. The books list, home's selected books and the collections sidebar total render from the pages they actually show, fetch the next one as the reader scrolls, and switch directory with a spinner when the reader sorts; a language filter is applied to the pages as they arrive, so no view merges the catalog any more and only the page set being browsed stays in memory (#140)
  • Slim BookPreview's embedded author and description down to a minimal reference and short excerpt, cutting books.json/collections/*.json/authors/*.json bloat (#138)
  • Gutenberg: merge History LCC shelves C, D, E and F into a single shelf, and stop splitting the Language and literature shelf by sub-class for single-language ZIMs (#47)

Fixed

  • HTML reader: isolate reader buttons from book stylesheets (#164)
  • UI: fix the EPUB reader failing to open in kiwix-android, kiwix-desktop and kiwix-apple, which hand blob: iframe navigations (how foliate-js renders each section) off to an external app instead of letting the in-page viewer handle them; patch foliate-js to write section content into the iframe's document directly instead of navigating it (#169)
  • UI: fix contrast in the EPUB reader table of contents pane in light mode (#158)
  • UI: fix asymmetric left and right margins of the books grid in collections view on mobile (#156)
  • UI: implement progressive loading with infinite scroll in author and collection book carousels (#155)
  • Fix the HTML reader's book-information icon showing an exclamation mark instead of an "i" (#147)
  • UI: cap the book-language filter dropdown's height with a scrollbar instead of letting it grow unbounded, and add the same type-to-filter search box the interface-language switcher already had (#145)
  • Gutenberg: stop a corrupted book file (an HTML error page served with a 200 status, a truncated transfer) from dropping the whole book. Downloaded EPUB/PDF content is validated before it is stored, an unreadable EPUB costs its format instead of the book, and a readable EPUB that cannot be optimized is kept unoptimized instead of re-raising into the pipeline's generic handler (#135)
  • UI: fix breadcrumbs always ellipsizing the second item regardless of available space, and let every item (including the current page's, which can be an arbitrarily long book title or author name) ellipsize instead of overflowing when space is tight, on both desktop and mobile (#143)
  • Keep the original extension when appending .webp to converted image output filenames, so two source images sharing a basename but differing only in extension (e.g. 001.jpg and 001.png) no longer collide on the same ZIM path and silently drop one of the two (#133)
  • UI: make the empty state message readable in both themes by using the normal text color inside the tinted alert, rounding its corners, and switching the info accent to the existing palette blues (the dark theme also gets its own info/error/success/warning colors instead of reusing the light ones) (#123)
  • Wikisource: ignore non-image metadata covers in EPUBs and use declared-only covers so books without a cover fall back to the placeholder instead of extracting the site logo (#16)
  • Remove leftover common translation keys (uiLanguage, chooseLanguage, anyCatalog, search, mainLanguages, otherLanguages, navigateTo, sortBy) from removed features, which were counting against every translator's completion percentage for no reason (#112)
  • UI: switch layout disposition to RTL when an RTL language is selected, and convert physical margins/paddings to logical properties (#86)
  • Resolve ZIM language metadata for ISO 639-3 codes with no ISO 639-1 equivalent (e.g. grc/Ancient Greek) wi...
Read more

1.0.0

Choose a tag to compare

@benoit74 benoit74 released this 25 Sep 14:27
6487452

Initial version of papers scraper, successor of gutenberg scraper with support for multiple sources and a brand new Vue.JS UI