12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /* https://stackoverflow.com/a/71604665 */
- const imageUrlToBase64 = async url => {
- const response = await fetch(url);
- const blob = await response.blob();
- return new Promise((onSuccess, onError) => {
- try {
- const reader = new FileReader() ;
- reader.onload = function(){ onSuccess(this.result) } ;
- reader.readAsDataURL(blob) ;
- } catch(e) {
- onError(e);
- }
- });
- };
- /* https://stackoverflow.com/a/48032528 */
- async function replaceAsync(str, regex, asyncFn) {
- const promises = [];
- str.replace(regex, (match, ...args) => {
- const promise = asyncFn(match, ...args);
- promises.push(promise);
- });
- const data = await Promise.all(promises);
- return str.replace(regex, () => data.shift());
- }
- browser.browserAction.onClicked.addListener(async (tab) => {
- try {
- const result = await browser.tabs.executeScript(tab.id, {
- file: "/Readability.js"
- });
- const articleHtml = result[0]["body"];
- const pageUrl = result[0]["url"];
- const baseUrl = result[0]["baseurl"];
- //console.log("Obtained result: ", baseUrl, articleHtml);
- // Replace all URLs with data-urls
- const srcRegexp = /src="(https?:\/\/.+?)"/g;
- const inlinedImageHtml = await replaceAsync(articleHtml, srcRegexp, async function(match, src) {
- let absoluteUrl;
- if (src.startsWith('http://') || src.startsWith('https://')) {
- absoluteUrl = src;
- } else {
- absoluteUrl = baseUrl + "/" + src;
- }
- const dataUrl = await imageUrlToBase64(absoluteUrl);
- return "src=\"" + dataUrl + "\"";
- });
- console.log("All matching done", inlinedImageHtml)
- const url = (await browser.storage.local.get("koreaderurl")).koreaderurl;
- console.log("posting to " + url);
- try {
- await fetch(url, {
- method: 'POST',
- body: inlinedImageHtml
- });
- } catch(error) {
- throw 'KOReader server unreachable, check connection and URL in settings';
- }
- } catch(err) {
- browser.notifications.create({
- 'type': 'basic',
- 'message': 'Could not post article to KOReader: ' + err,
- 'title': 'Firefox2KOReader'
- });
- }
- })
- //browser.tabs.onCreated.addListener(() => {
- // browser.browserAction.disable()
- //})
- //browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
- // console.log("Tab updated!", tab)
- // if (tab.isInReaderMode) {
- // browser.browserAction.enable()
- // } else {
- // browser.browserAction.disable()
- // }
- //
- //})
|