1function openDisclaimerAll() {
2    let embeds = document.getElementsByClassName("externalembed_embed"); //get all the embeds on the page
3    for (let i = 0; i < embeds.length; i++) {
4        openDisclaimer(embeds[i]); //for every embed, process it
5    }
6}
7
8function openDisclaimer(element) {
9    let jsonData = JSON.parse(element.attributes.getNamedItem("data-json").value); //get the data passed from the server associated with the embed
10
11    if (localStorage.getItem("externalembed_tosaccepted_" + jsonData.domain) === "true") { //if they have already accepted the TOS for the given domain:
12        element.classList.remove("externalembed_tosRejected_" + jsonData.domain);
13        element.innerHTML = renderIframe(jsonData); //render the embed and load content
14
15    } else {
16        if (localStorage.getItem("externalembed_tosaccepted_" + jsonData.domain) === "false") { //if the user has chosen to reject content from the domain, let them know and give them the option to re-view the terms:
17            let tosMessage = "<p>You have chosen not to view emedded content from: " + jsonData.domain + "</p><button class=\'externalembed_accept\' onclick=\'localStorage.removeItem(\"externalembed_tosaccepted_" + jsonData.domain + "\" );openDisclaimerAll()\'>View Terms</button>";
18            element.innerHTML = "<div class='externalembed_disclaimer externalembed_disclaimer_" + jsonData.type + "'>" + tosMessage + "</div>";
19            element.classList.add("externalembed_tosRejected");
20            element.style.width = "";
21            element.style.height = "";
22        } else { //the user hasn't said if they have accepted / rejected the embedded content
23            element.classList.remove("externalembed_tosRejected");
24            element.style.height = jsonData.height;
25            let tosMessage = "<p>" + jsonData.disclaimer + "</p><button class=\'externalembed_accept\' onclick=\'localStorage.setItem(\"externalembed_tosaccepted_" + jsonData.domain + "\",  \"true\");openDisclaimerAll()\'>Accept</button><button class=\'externalembed_reject\' onclick=\'localStorage.setItem(\"externalembed_tosaccepted_" + jsonData.domain + "\", \"false\");openDisclaimerAll()\'>Reject</button>";
26            if (jsonData.type !== 'other') {
27                element.innerHTML = generateThumbnail(jsonData) + "<div class='externalembed_disclaimer externalembed_disclaimer_" + jsonData.type + "'>" + tosMessage + "</div>";
28                //generate a thumbnail with the TOS accept and reject buttons
29            } else {
30                element.innerHTML = "<div class='externalembed_disclaimer externalembed_disclaimer_" + jsonData.type + "'>" + tosMessage + "</div>";
31                //generate a disclaimer without a background image
32            }
33
34        }
35    }
36}
37
38// Produce the iframe to load the embedded content using the data passed from the server
39function renderIframe(jsonData) {
40    if (jsonData.type === 'youtube_video' || jsonData.type === 'youtube_playlist') {
41        return '' +
42            '<div class="' + jsonData.size + '">' +
43            '<div class="externalembed_iframe_container">' +
44            '<iframe ' +
45            'title="Embedded content from: ' + jsonData.domain +
46            '" class="externalembed_iframe' +
47            '" src="' + jsonData.request +
48            '" ></iframe></div></div>';
49    } else {
50        return '' +
51            '<div style="width: ' + jsonData.width + 'px; height: ' + jsonData.height + 'px;">' +
52            '<div class="externalembed_iframe_container externalembed_other">' +
53            '<iframe ' +
54            'title="Embedded content from: ' + jsonData.domain +
55            '" class="externalembed_iframe' +
56            '" src="' + jsonData.request +
57            '" ></iframe></div></div>';
58    }
59}
60
61// Decode the thumbnail from the server and render it as an image
62function generateThumbnail(json) {
63    return '<img alt = "YouTube Thumbnail" src = "data:image/png;base64,' +
64        json.thumbnail +
65        '">'
66}
67
68openDisclaimerAll(); //run the script
69