summaryrefslogtreecommitdiffstats
path: root/.config/qutebrowser/greasemonkey/miniflux.js
blob: 4b17b1704f29c8898a6ad7b0bf196350e49ffb0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// ==UserScript==
// @name         custom miniflux
// @match        *://miniflux.rgoncalves.se/*NONE
// @grant        none
// ==/UserScript==

function get_img_content(content) {
    var object = document.createElement("div");
    object.innerHTML = content;

    try {
        url = object.getElementsByTagName("img")[0].src;
    } catch (error) {
        url = undefined;
    }

    return url;
}

function add_entry_images(article) {
    var article_meta = article.getElementsByClassName("item-meta")[0];
    var article_frame = document.createElement("div");
    var article_id = article.getElementsByClassName("item-title")[0]
        .getElementsByTagName("a")[0]
        .href
        .split("/")
        .splice(-1, 1);

    article_meta.appendChild(article_frame);

    fetch(`/v1/entries/${article_id}`)
        .then(res => res.json())
        .then((res) => {
            var url;

            try {
                url = res["enclosures"][0]["url"];
            } catch (error) {
                url = get_img_content(res["content"]);
            }

            if (typeof url === 'undefined') {
                return;
            }

            console.log(url);

            img = document.createElement("img");
            img.src = url;
            img.style.width = "100%";
            img.style.minHeight = "100px";
            img.loading = "lazy";

            article_frame.appendChild(img);
        })
}

function has_displayable_image(article) {
    category = article.getElementsByClassName("category")[0]
        .getElementsByTagName("a")[0]
        .innerText;

    return category === "blog"
        || category === "hn"
        || category === "social"
        || category === "yt";
}

details = document.getElementsByTagName("details");

for (let detail of details) {
    detail.open = true;
}

articles = document.getElementsByTagName("article");

for (let article of articles) {
    if (! has_displayable_image(article)) {
        continue;
    }

    add_entry_images(article);
}
remember that computers suck.