This guide have some instructions and tips on how to create a new Mangayomi extension on JavaScript extension.
Before starting please have installed the recent desktop version of the mangayomi application preferably or if you want with a tablet too.
+
and you will see :
ApiUrl
field is optional
then click on saveOnce extension is ready you can relocate your code into mangayomi-extension
project in a src
or multisrc
package and create a Pull Request.
Field | Description |
---|---|
name |
Name displayed in the “Sources” tab in Mangayomi. |
baseUrl |
Base URL of the source without any trailing slashes. |
apiUrl |
(Optional, defaults is empty) Api URL of the source with trailing slashes. |
lang |
An ISO 639-1 compliant language code (two letters in lower case in most cases, but can also include the country/dialect part by using a simple dash character). |
id |
Identifier of your source, automatically set in Source . It should only be manually overriden if you need to copy an existing autogenerated ID. |
isManga |
(Optional, defaults to true ) specify source type (false for anime and true for manga) |
dateFormat |
(Optional, defaults is empty) |
iconUrl |
The extension icon URL |
version |
The extension version code. This must be incremented with any change to the code. |
dateFormatLocale |
(Optional, defaults is empty) |
isNsfw |
(Optional, defaults to false ) Flag to indicate that a source contains NSFW content. |
a.k.a. the Browse source entry point in the app (invoked by tapping on the source name).
getPopular
which should return a JSON
{
'list': array of {'url':string,'name':string,'link':string},
hasNextPage: Boolean
}
page
values(starting with page=1
). This continues while hasNextPage
is passed as true
and list
is not empty.a.k.a. the Latest source entry point in the app (invoked by tapping on the “Latest” button beside the source name).
search
will be called and the rest of the flow is similar to what happens with getPopular
.getFilterList
will be called to get all filters and filter types.getDetail
will be called and the results will be cached.getDetail
is called to update an manga’s details from when it was initialized earlier.
title
is a string containing title.description
is a string containing description.author
is a string containing author.genre
contain array of all genres.status
is an “integer” value.
You can refer to this example to see the correspondence:
0=>"ongoing", 1=>"complete", 2=>"hiatus", 3=>"canceled", 4=>"publishingFinished", 5=>unknow
chapters
or episodes
contain all of all manga chapters or anime episodes.name
is a string containing a chapter name.url
is a string containing a chapter url.scanlator
is a string containing a chapter scanlator.dateUpload
is a string containing date expressed in millisecondsSinceEpoch.
dateUpload
and leave it null, the app will use the default date instead, but it’s recommended to always fill it if it’s available.getPageList
will be called and it will return an array of string or an array of map like { url:string,headers:map }
that are used by the reader.getVideoList
will be called and it will return a
array of {'url':string,'originalUrl':string,'quality':string}
that are used by the player.
Return Response
- Simple request
const client = new Client();
const res = await client.get("http://example.com");
console.log(res.body);
- With headers
const client = new Client();
const res = await client.get("http://example.com",{"Referer": "http://example.com"});
console.log(res.body);
- With body
const client = new Client();
const res = await client.post("http://example.com",{"Referer": "http://example.com"},{'name':'test'});
console.log(res.body);
Example:
const htmlString = `
<html lang="en">
<body>
<div><a href='https://github.com/kodjodevf'>author</a></div>
<div class="head">div head</div>
<div class="container">
<table>
<tbody>
<tr>
<td id="td1" class="first1">1</td>
<td id="td2" class="first1">2</td>
<td id="td3" class="first2">3</td>
<td id="td4" class="first2 form">4</td>
<td id="td5" class="second1">one</td>
<td id="td6" class="second1">two</td>
<td id="td7" class="second2">three</td>
<td id="td8" class="second2">four</td>
</tr>
</tbody>
</table>
</div>
<div class="end">end</div>
</body>
</html>`
const document = new Document(htmlString);
console.log(document.selectFirst("a").attr("href")); // https://github.com/kodjodevf
console.log(document.selectFirst("td").text); // 1
See dom_selector
to see available methods.
string: pattern
)string: pattern
)string: pattern
)string: pattern
)string: left
, string: right
)string: code
);string: inputString
)string: plainText
, string: passphrase
)string: encrypted
, string: passphrase
)string: text
, string: iv
, string: secretKeyString
, Boolean: encrypt
)If you need a help or have some questions, ask a community in our Discord server.