Skip to content

feat(russian): add РанобэМир source - #2695

Open
RibatTRW wants to merge 2 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-ranobemir-plugin
Open

RibatTRW wants to merge 2 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-ranobemir-plugin

Conversation

@RibatTRW

@RibatTRW RibatTRW commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a new Russian source, РанобэМир, for issue #2692.

It supports popular/latest listing with pagination and a sort filter, search, novel details with the full chapter list, and chapter text with the collapsible "Ранее в ..." recap block removed. Chapter HTML is sanitized (event handlers, script URLs and script/style tags dropped).

Closes #2692

Domain note: the issue gives https://ranobemir.ru, but that domain does not exist (NXDOMAIN). The real site is https://ranobemir.com, which matches the issue's description: chapter text in plain <p> tags with a details.collapse recap block. ranobe.me was checked and is a different site with no such block.

Notes: the chapter list uses the site's no-JS ?toc view (all chapters); undated "Прогноз" placeholder rows are skipped. The site's robots.txt disallows /novel?q=, which the search uses.

AI disclosure: this plugin was written by an AI agent (Claude), with the pipeline run driven by the agent.

Plugin playground evidence

Run with npm run dev:start; ranobemir plugin, live site.

Popular/latest listing:
Playground: popular listing

Search ("маг"):
Playground: search

Novel detail (Человек–Армия, 247 chapters):
Playground: novel detail

Chapter list:
Playground: chapter list

Chapter 226 text, recap ("Ранее в ...") removed, text starts at the first paragraph:
Playground: chapter text

What Changed

  • Added a standalone plugins/russian/ranobemir.ts plugin (id ranobemir, v1.0.1) for https://ranobemir.com. It supports popular/latest listing with a sort filter, search, novel parsing (cover, genres from ld+json, summary, status, and chapter list in oldest-first order that skips unpublished placeholders), and chapter parsing.
  • Chapter parsing removes the collapsible details.collapse recap block, and strips script/style tags, on* handlers, and javascript:/vbscript:/non-image data: URLs. It returns only the <p> paragraphs.
  • Added the plugin icon at public/static/src/ru/ranobemir/icon.png.

Risk Assessment

✅ Low: A single new standalone plugin with a correct 96x96 icon, no shared code touched, and logic that traces correctly; the main residual uncertainty is the live-site behaviour, which the later check:plugin step covers.

Testing

I ran the repo's live checker on the new plugin against ranobemir.com. popularNovels returned 20 novels, searchNovels returned 2 results, parseNovel returned 3909 chapters, and parseChapter returned 8199 characters of text. The sampled chapter has no details.collapse recap block, so removal of that block was not exercised live. The source pairs the removal with attribute sanitisation, and I did not drive that either. There is no UI change, so no screenshots were taken.

  • Live validation: ✅ go - 4 of 5 scenarios driven live against the product
Scenario Result Live Evidence
Browse popular novels from ranobemir.com ✅ pass live check:plugin popularNovels: PASS, 20 novels
Search for a novel by title ✅ pass live check:plugin searchNovels: PASS, 2 results
Open a novel and list its chapters ✅ pass live check:plugin parseNovel: PASS, 3909 chapters
Read a chapter as plain paragraph HTML ✅ pass live check:plugin parseChapter: PASS, 8199 chars
Recap block (details.collapse) is stripped from a chapter that has one ⏸️ untested no The only chapter I fetched has no recap block, so the removal path never ran. I did not locate a chapter that has one. Providing a chapter URL with a «Ранее в ...» block would let this be driven.

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - 1 info
  • ℹ️ plugins/russian/ranobemir.ts:19 - Intent named ranobemir.ru (NXDOMAIN); the plugin targets ranobemir.com, the live site with the same name, and implements the requested recap (details.collapse) removal. The user's 'maybe ranobe.me' alternative was not adopted; worth confirming the .com choice is intended. New plugin ships at version 1.0.1 rather than 1.0.0 (harmless).
✅ **Test** - passed

✅ No issues found.

  • Live validation: ✅ go - 4 of 5 scenarios driven live against the product
Scenario Result Live Evidence
Browse popular novels from ranobemir.com ✅ pass live check:plugin popularNovels: PASS, 20 novels
Search for a novel by title ✅ pass live check:plugin searchNovels: PASS, 2 results
Open a novel and list its chapters ✅ pass live check:plugin parseNovel: PASS, 3909 chapters
Read a chapter as plain paragraph HTML ✅ pass live check:plugin parseChapter: PASS, 8199 chars
Recap block (details.collapse) is stripped from a chapter that has one ⏸️ untested no The only chapter I fetched has no recap block, so the removal path never ran. I did not locate a chapter that has one. Providing a chapter URL with a «Ранее в ...» block would let this be driven.
  • npm ci
  • npm run check:plugin -- plugins/russian/ranobemir.ts
  • curl of the first chapter of the sample novel, checked for a details.collapse block
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

@greptile-apps

greptile-apps Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds РанобэМир as a Russian source at https://ranobemir.com.

  • Readers can find РанобэМир novels by browsing or searching.
  • Opening a РанобэМир novel shows its details and chapters.
  • Chapter pages return the story text without the recap.

No actionable issues were established. Live checks were reported by the author but were not rerun during this review.

Reviews (1) · Last reviewed commit: "feat(russian): add РанобэМир source" · Reviewed by Greptile

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[RU] RanobeMir

1 participant