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