summaryrefslogtreecommitdiff
path: root/haunt/static/js/local.js
blob: 51e0ea1426994b4bfe77f4bb9e43213b1a06e504 (plain)
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");