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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
/*
* local.js -- Fetch and display local comments.
* Copyright © 2022 Jakob L. Kreuze <zerodaysfordays@sdf.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*/
function getData(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onload = function(data) {
callback(data);
}
xhr.onerror = function(error) {
throw new Error(`Request failed: ${error}`);
}
}
function makeComment(comment) {
const strip = (uri) => {
const sep = "://";
return uri.substring(uri.indexOf(sep) + sep.length);
};
const element = (type, attributes) => {
let res = document.createElement(type);
for (const attribute in attributes) {
res.setAttribute(attribute, attributes[attribute]);
}
return res;
};
// Create the h-card section.
let avatar = element("img", {
"class": "u-photo",
"src": `https://www.gravatar.com/avatar/${comment.iconHash}?s=200`
});
let authorName = element("a", {
"class": "p-name u-url",
"href": comment.authorUrl
});
authorName.textContent = comment.authorName;
let authorURI = element("a", {
"class": "author_url",
"href": comment.author.url
});
authorURI.textContent = strip(comment.author.url);
let hCardContainer = element("div", {
"class": "p-author h-card author"
});
hCardContainer.appendChild(avatar);
hCardContainer.appendChild(authorName);
hCardContainer.appendChild(authorURI);
// Create the content section.
let contentContainer = element("div", {
"class": "e-content p-name comment-content",
});
contentContainer.textContent = comment.content;
// Create the metaline section.
let pubTime = comment.published;
let time = element("time", {
"class": "dt-published",
"datetime": pubTime,
});
time.textContent = (new Date(pubTime)).toString();
let linkBack = element("a", {
"class": "u-url",
"href": comment.url
});
linkBack.appendChild(time);
let metalineContainer = element("div", {
"class": "metaline"
});
metalineContainer.appendChild(linkBack);
// Put it all together.
let wrapper = element("li", {
"class": "p-comment h-cite comment",
});
wrapper.appendChild(hCardContainer);
wrapper.appendChild(contentContainer);
wrapper.appendChild(metalineContainer);
return wrapper;
}
getData("http://localhost:8081/api/challenge", (b64data) => {
console.log("Here2");
document.getElementById("captcha").src = 'data:image/png;base64,' + b64data;
});
console.log("Here1");
|