diff --git a/browse/static/css/arXiv.css b/browse/static/css/arXiv.css index c482064e1..f921acc63 100644 --- a/browse/static/css/arXiv.css +++ b/browse/static/css/arXiv.css @@ -1270,6 +1270,66 @@ p.tagline { } /*END alphaXiv CSS*/ +/*BEGIN Ploutos CSS*/ +.ploutos-section { + margin-bottom: 2rem; +} +.ploutos-title { + display: flex; + gap: 5px; +} +.ploutos-summary { + text-transform: capitalize; + text-align: center; +} +.ploutos-objects { + display: flex; + flex-wrap: wrap; + gap: 10px; +} +.ploutos-object { + background: linear-gradient(rgb(54, 43, 85) 0%, rgb(52, 37, 73) 100%); + color: rgb(195, 181, 221); + border-radius: 5px; + padding: 0 15px; + width: 200px; +} +.ploutos-object h4 { + display: flex; + align-items: center; + justify-content: center; + gap: 5px; + color: white; + line-height: 25px; +} +.ploutos-object .icon { + width: 100%; + height: 60px; + object-fit: scale-down; +} +.ploutos-object p { + line-height: 15px; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + line-clamp: 2; + overflow: hidden; +} +.ploutos-section a:visited, .ploutos-section a:link, .ploutos-section a:hover { + color: unset !important; + text-decoration: none !important; +} +.ploutos-section a.cta { + text-decoration: none; + background: linear-gradient(266.45deg,#dc70b5,#9d2d70 105.59%); + border: 0; + border-radius: 7.5px; + transition: none; + color: #fff !important; + padding: 4px 15px +} +/*END Ploutos CSS*/ + /*BEGIN Spaces CSS*/ .spaces-summary { diff --git a/browse/static/js/ploutos.js b/browse/static/js/ploutos.js new file mode 100644 index 000000000..5b2c88ca8 --- /dev/null +++ b/browse/static/js/ploutos.js @@ -0,0 +1,156 @@ +// Labs integration for displaying streams, code and articles from ploutos.dev + + (function () { + const container = document.getElementById("ploutos-output") + const containerAlreadyHasContent = container.innerHTML.trim().length > 0 + + const PLOUTOS_ICON = ' '; + const ARXIV_ICON = 'data:image/png;base64, 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'; + const STREAM_ICON = 'data:image/png;base64, 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'; + const NOTEBOOK_ICON = STREAM_ICON; + + // This script is invoked every time the Labs toggle is toggled, even when + // it's toggled to disabled. So this check short-circuits the script if the + // container already has content. + if (containerAlreadyHasContent) { + container.innerHTML = "" + container.setAttribute("style", "display:none") + return + } else { + container.setAttribute("style", "display:block") + } + + // Get the arXiv paper ID from the URL, e.g. "2103.17249" + // (this can be overridden for testing by passing a override_paper_id query parameter in the URL) + const params = new URLSearchParams(document.location.search) + const arxivPaperId = params.get("override_paper_id") || window.location.pathname.split('/').reverse()[0] + if (!arxivPaperId) return + + const apiHost = "https://apis.ploutos.dev"; + const siteHost = "https://world.ploutos.dev"; + + const sections = [ + ['arxiv', '/fsc/arxiv/read/'], + ['streams', '/fsc/stream/by_arxiv/read/'], + ['notebooks', '/fsc/notebook/by_arxiv/read/'], + ]; + + function loadSection(section) { + const [name, url] = section; + return fetch(`${apiHost}${url}`, { + method: "post", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + arxiv_id: arxivPaperId, + }) + }).then(async (response) => { + if (!response.ok) { + render(name, []); + return; + } + const objects = await response.json(); + render(name, Array.isArray(objects) ? objects : [objects]); + }).catch((err) => { + console.error(`Unable to fetch data from ${url}`, err); + render(name, []); + }); + } + + // Fetch + (async () => { + return await Promise.all(sections.map(loadSection)); + })() + + // Generate HTML, sanitize it to prevent XSS, and inject into the DOM + function render(section, objects) { + if (!container.hasChildNodes()) { + container.insertAdjacentHTML("beforeend", `

${PLOUTOS_ICON} Ploutos World

`); + } + + const element = container.querySelector(`.ploutos-objects-${section}`); + + element.innerHTML = window.DOMPurify.sanitize(` + ${summary(section, objects)} + ${renderObjects(section, objects)} + `, { ADD_ATTR: ['target'] }) + } + + function summary(section, objects) { + let name = section; + switch (section) { + case 'arxiv': + name = 'Audio Summary'; + break + case 'streams': + name = 'Author Stream'; + break; + case 'notebooks': + name = 'Notebook Demo'; + break; + } + if (objects.length > 1) { + return `

${name} (${objects.length})

` + } else { + return `

${name}

` + } + } + + function renderObjects(section, objects) { + if (objects.length === 0) { + switch (section) { + case 'streams': + return `

No stream scheduled yet.

Notify Me When Scheduled

`; + case 'arxiv': + return `

Audio summary not available yet.

Generate & Notify Me

`; + case 'notebooks': + return `

No notebook demo linked yet.

Add Demo on Ploutos

`; + } + } + + return `
${objects.map(object => renderObject(section, object)).join("\n")}
` + } + + function renderObject(section, object) { + let path, name, tooltip, details; + switch (section) { + case 'arxiv': + path = `/?article=${object.arxiv_id}`; + icon = ARXIV_ICON; + name = 'Listen to Audio Summary'; + tooltip = '5-min AI-narrated overview'; + details = [object.authors.join(', ') || '', object.published_datetime, `Plays: ${object.view_count || 0}`]; + break; + case 'streams': + path = `/?stream=${object.stream_id}`; + icon = STREAM_ICON; + name = 'Watch Now'; + tooltip = 'Hear the authors discuss the paper'; + details = [[object.speakers.map((s) => s.fullname).join(', '), object.uni_name].join(' ') || '', object.schedule_datetime, `Views: ${object.view_count || 0}`]; + break; + case 'notebooks': + path = `/?notebook=${object.publish_details.publish_token}`; + icon = NOTEBOOK_ICON; + name = 'Run demo'; + tooltip = 'Executable code in the browser'; + details = [object.owner?.fullname, object.publish_details.publish_date]; + break; + } + + if (!path) { + return; + } + + return ` +
+ +

${name}

+ icon + ${details.map((detail) => `

${detail}

`).join('\n')} +
+
+ ` + } +})(); diff --git a/browse/static/js/toggle-labs.js b/browse/static/js/toggle-labs.js index d32996f39..3915ccdeb 100644 --- a/browse/static/js/toggle-labs.js +++ b/browse/static/js/toggle-labs.js @@ -34,7 +34,8 @@ $(document).ready(function() { "core-recommender": { "url": "https://static.arxiv.org/js/core/core-recommender.js?20200716.1", "container": "#coreRecommenderOutput" - } + }, + "ploutos": $('#ploutos-toggle').data('script-url') }; var pwcEnabled = true; @@ -133,6 +134,12 @@ $(document).ready(function() { }).fail(function() { console.error("failed to load huggingface script (on cookie check)", arguments) }); + } else if (key === "ploutos-toggle") { + $.cachedScript(scripts["ploutos"]).done(function(script, textStatus) { + console.log(textStatus); + }).fail(function() { + console.error("failed to load ploutos script (on cookie check)", arguments) + }); } } } @@ -247,9 +254,14 @@ $(document).ready(function() { }).fail(function() { console.error("failed to load huggingface script (on lab toggle)", arguments) }); + } else if ($(this).attr("id") == "ploutos-toggle") { + $.cachedScript(scripts["ploutos"]).done(function(script, textStatus) { + console.log(textStatus, "ploutos (on lab toggle)"); + }).fail(function() { + console.error("failed to load ploutos script (on lab toggle)", arguments) + }); } - // TODO: clean this up if (cookie_val == 'disabled') { if ($(this).attr("id") == "core-recommender-toggle") { diff --git a/browse/templates/abs/labs_tabs.html b/browse/templates/abs/labs_tabs.html index 1aa51130f..b5aae2491 100644 --- a/browse/templates/abs/labs_tabs.html +++ b/browse/templates/abs/labs_tabs.html @@ -211,6 +211,22 @@

Code, Data and Media Associated with this Article

ScienceCast (What is ScienceCast?) + +
+
+ +
+
+ Ploutos World (What is Ploutos?) +
+
@@ -221,6 +237,7 @@

Code, Data and Media Associated with this Article

+