"use strict"; // P A C K A G E S const html = require("choo/html"); const local = require("app-root-path").require; const request = require("request-promise-native"); // V A R I A B L E S const fetchMetadata = local("app/helpers/fetch-metadata"); const { generateGitHubFeed } = local("app/helpers/github"); const logSlackError = local("app/helpers/slack"); // P R O G R A M module.exports = exports = (socket, action) => { if (typeof socket !== "object" && typeof action !== "object") return; switch(true) { case (action.message === "fetch metadata"): fetchMetadata(action, socket); break; case (action.message === "landed on homepage"): generateGitHubFeed(result => { socket.send(JSON.stringify({ html: result, message: "updated html", selector: "#github-feed" })); }); break; case (action.message === "landed on playground"): generateContent(1, result => { socket.send(JSON.stringify({ html: result, message: "updated html", selector: "#playground-loader" })); }); break; case (action.message === "request for playground, example 1"): generateContent(1, result => { socket.send(JSON.stringify({ html: result, message: "updated html", selector: "#playground-loader" })); }); break; case (action.message === "request for playground, example 2"): generateMemeCreator(socket); break; case (action.message === "request for playground, example 3"): generateContent(3, result => { socket.send(JSON.stringify({ html: result, message: "updated html", selector: "#playground-loader" })); }); break; case (action.message === "subscribe"): newsletterSubscribe(action, socket); break; default: console.log(action); // eslint-disable-line break; } }; // H E L P E R S function generateContent(exampleNumber, displayTrendingContent) { if (exampleNumber === 1) { return getTrendingContent().then(response => { if (!response || !response.success || response.success !== true || !response.data) return ""; const rawContentCollection = []; const renderedContentCollection = []; const trendingContentData = response.data; for (const data of trendingContentData) { rawContentCollection.push(fetchMetadata({ claim: data.url, method: "resolve", example: exampleNumber })); } Promise.all(rawContentCollection).then(collection => { for (const part of collection) { try { renderedContentCollection.push(` `); } catch (err) { return; // TODO: Return nice error message } } renderedContentCollection.push(` `); displayTrendingContent(renderedContentCollection.join("")); }); }); } if (exampleNumber === 3) { const approvedUrls = [ "LBRY#3db81c073f82fd1bb670c65f526faea3b8546720", "correlation-can-imply-causation#173412f5b1b7aa63a752e8832406aafd9f1ecb4e", "thanos-is-the-protagonist-how-infinity#2a7f5db2678177435b1dee6c9e38e035ead450b6", "epic-arcade-mode-duos-nickatnyte-molt#d81bac6d49b1f92e58c37a5f633a27a45b43405e", "political-correctness-a-force-for-good-a#b4668c0bd096317b44c40738c099b6618095e75f", "10-secrets-hidden-inside-famous-logos#007789cc45cbb4255cf02ba77cbf84ca8e3d7561", "ever-wonder-how-bitcoin-and-other#1ac47b8b3def40a25850dc726a09ce23d09e7009", "bankrupt-pan-am#784b3c215a6f06b663fc1aa292bcb19f29c489bb", "minecraft-in-real-life-iron-man#758dd6497cdfc401ae1f25984738d024d47b50af", "ethan-shows-kyle-warframe-skyvault#8a7401b88d5ed0376d98f16808194d4dcb05b284" ]; const rawContentCollection = []; const renderedContentCollection = []; for (const url of approvedUrls) rawContentCollection.push(fetchMetadata({ claim: url, method: "resolve", example: exampleNumber })); return Promise.all(rawContentCollection).then(collection => { for (const part of collection) { if ( part && part.value && part.value.stream.metadata.thumbnail && part.channel_name ) { renderedContentCollection.push(` `); } } renderedContentCollection.push(` `); displayTrendingContent(renderedContentCollection.join("")); }); } } function generateMemeCreator(socket) { const images = [ { alt: "Carl Sagan", src: "/assets/media/images/carlsagan2.jpg" }, { alt: "Doge", src: "/assets/media/images/doge-meme.jpg" }, { alt: "LBRY Logo With Green Background", src: "/assets/media/images/lbry-green.png" } ]; const memePlaceholderData = { bottomLine: { placeholder: "Top line", value: "that I made" }, description: { placeholder: "Description", value: "Check out this image I published to LBRY via lbry.tech" }, topLine: { placeholder: "Top line", value: "This is an example meme" }, title: { placeholder: "Title", value: "Dank Meme Supreme da Cheese" } }; const renderedImages = []; for (const image of images) renderedImages.push(``); const memeCreator = html`