Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chlodalejandro/parsoid-document
A userscript library for easily handling Parsoid DOM trees.
https://github.com/chlodalejandro/parsoid-document
javascript mediawiki parsoid wiki wikimedia
Last synced: 27 days ago
JSON representation
A userscript library for easily handling Parsoid DOM trees.
- Host: GitHub
- URL: https://github.com/chlodalejandro/parsoid-document
- Owner: ChlodAlejandro
- License: other
- Created: 2022-01-28T23:19:02.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-03-30T00:52:24.000Z (9 months ago)
- Last Synced: 2024-10-18T09:04:25.727Z (2 months ago)
- Topics: javascript, mediawiki, parsoid, wiki, wikimedia
- Language: TypeScript
- Homepage: https://chlodalejandro.github.io/parsoid-document/
- Size: 741 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ParsoidDocument
[![npm version](https://img.shields.io/npm/v/@chlodalejandro/parsoid.svg?style=flat-square)](https://www.npmjs.org/package/@chlodalejandro/parsoid)
[![npm downloads](https://img.shields.io/npm/dm/@chlodalejandro/parsoid.svg?style=flat-square)](http://npm-stat.com/charts.html?package=@chlodalejandro/parsoid)*Originally from [User:Chlod/Scripts/ParsoidDocument](https://en.wikipedia.org/wiki/User:Chlod/Scripts/ParsoidDocument) on the English Wikipedia.*
ParsoidDocument is an ES9+ library which implements a Parsoid-compatible document handler using an HTML5 IFrame. It is not a userscript, but is instead loaded by other userscripts. The IFrame contains the Parsoid document, which can then be modified using standard DOM functions. This is used to perform Parsoid-dependent operations in the browser without having to pull in the entirety of the VisualEditor codebase. The library works even without the existence of MediaWiki `notification` and `Title` modules, although they are helpful in ensuring data stability.
To be fully optimized, this should be implemented as a gadget and loaded through [mw.loader](https://doc.wikimedia.org/mediawiki-core/master/js/#!/api/mw.loader). Note that some APIs used by this library may not be available on older browsers.
## Installation
As a developer, insert the following code in the initialization section of your userscript. **This is the only way to use the library on the English Wikipedia, and for most Wikimedia wikis.**
```js
// The "await" is optional, but ensures that the script has loaded and run before proceeding.
// On the English Wikipedia
await mw.loader.getScript("https://en.wikipedia.org/wiki/User:Chlod/Scripts/ParsoidDocument.js?action=raw&ctype=text/javascript");// On other wikis, you must upload ParsoidDocument.js from the English Wikipedia or this repository
// first, and then change the URL to lead to the correct page. Make sure to keep the
// `?action=raw&ctype=text/javascript` at the end of the URL!
```If it is available as a gadget, you can instead use the following.
```js
mw.loader.load("ext.gadget.ParsoidDocument"); // where ParsoidDocument is the ID of the gadget.
```If your userscript is bundled with Webpack, you can also install the [@chlodalejandro/parsoid](https://npmjs.com/package/@chlodalejandro/parsoid) package. This package also adds typings for ParsoidDocument, in case you're developing with TypeScript or a decent IDE with a type checker.
```shell
npm install @chlodalejandro/parsoid
```## Usage
You can then access ParsoidDocument using the `ParsoidDocument` window global.```js
const parsoid = new ParsoidDocument();parsoid.loadPage("User:Chlod/Scripts/ParsoidDocument");
parsoid.document.body.classList.contains("parsoid-body"); // true// Prints the "data-mw" attribute of all transclusions.
parsoid.document.querySelectorAll("[typeof=\"mw:Transclusion\"]").forEach(v => {
console.log(v.getAttribute("data-mw"));
});// Convert the document, including any modification, to wikitext.
parsoid.toWikitext();
```You can also extend the ParsoidDocument class as any other class.
```js
class MyParsoidHandler extends ParsoidDocument {findAllTransclusions() {
return this.document.querySelectorAll("[typeof=\"mw:Transclusion\"]");
}}
const parsoid = new MyParsoidHandler();
// ...
parsoid.findAllTransclusions();
```
## See also
* [types-mediawiki](https://github.com/wikimedia-gadgets/types-mediawiki) – provides types for the MediaWiki global (`mw`).