UNPKG

@thebigcrunch/sdk

Version:
269 lines (232 loc) 9.92 kB
// This file needs good browser support because it's included on everyone's websites. // It's also not babeled meaning const, let, async await and other modern features don't work that well // check caniuse before using anything too crazy. var isMobile = false; // Mobile detection for resizing. if ( /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test( navigator.userAgent ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( navigator.userAgent.substr(0, 4) ) ) { isMobile = true; } var wafflebarHeight = 38; var container = document.getElementById("container"); container.style.width = window.innerWidth + "px"; container.style.height = window.innerHeight - wafflebarHeight + "px"; var url = new URLSearchParams(window.location.search); var spaceId = url.get("id"); var fullpage = url.get("fullpage"); var aspect = url.get("aspect") || "cellaspect"; var hideWaffleBar = url.get("disableBar") || false; var lastValue; var lastSpace; var sockets; function draw(value, space, options) { if ( lastSpace && lastSpace.type === TBC.types.visualisation && space.type === TBC.types.visualisation && lastValue === value && lastSpace.layers.length === space.layers.length ) { // Don't redraw vizzies that are the same return; } container.innerHTML = ""; if (sockets) { sockets.close(); } if (space.layers && space.layers.length > 0) { sockets = TBC.renderLayersToElement(space, container, options); } else if (space.type === TBC.types.visualisation) { TBC.renderVisualisationToElement(space, container, options); } else if (space.value === null) { // Don't render empty spaces. Visualizations don't have a value doh. return; } else { TBC.renderCellToElement(space, container, options); } const innerContainer = container.firstChild; const containerBox = innerContainer.getBoundingClientRect(); // Fudge 10% stretch mode. // If the container is within 10% of the container stretch it so that there aren't any borders around it. if ( containerBox.width + containerBox.width * 0.1 >= window.innerWidth && containerBox.height + containerBox.height * 0.1 >= window.innerHeight && !options && fullpage === "true" ) { draw(value, space, { fit: "stretch" }); } } function updateWaffleBar(space, user) { if (!space) { // This happens when the user callback comes back first. return; } document.getElementById("SpaceLink").href = TBC.getWebViewLink(space); if (user && user.profilePicture) { document.getElementById( "ProfilePicture" ).src = TBC.getProfilePictureUrl(user); } document.getElementById("ProfilePictureLink").href = TBC.getUserProfileUrl( user ); document.getElementById("LinkText").value = TBC.getWebViewLink(space); document.getElementById("Embed").href = TBC.getWebViewLink(space); document.getElementById("Weblink").href = TBC.getWebViewLink(space); if (!space.name || space.name === "") { document.getElementById("SpaceName").innerText = "Untitled"; } else { document.getElementById("SpaceName").innerText = space.name; } } let user = undefined; function crunch() { var options = { fit: aspect, odo: true }; TBC.crunch( spaceId, (value, space) => { updateWaffleBar(space, user); document.getElementById("error").style.display = "none"; draw(value, space, options); lastValue = value; lastSpace = space; }, () => { document.getElementById("error").style.display = "block"; }, user => { user = user; updateWaffleBar(lastSpace, user); } ); } // Only resize on mobile. // SIMON HACKED THIS! XXX //if (!isMobile) { window.addEventListener("resize", function() { var options = { fit: aspect }; container.style.width = window.innerWidth + "px"; container.style.height = window.innerHeight - wafflebarHeight + "px"; // Need to maintain aspect ratio here. if (container.querySelector("iframe") === null) { draw(lastValue, lastSpace, options); } }); //} WebFont.load({ google: { families: [ "Slabo", "Indie Flower", "Inconsolata", "Macondo", "Monoton", "Roboto Slab", "Roboto" ] }, active: () => { var options = { fit: aspect }; // Vizzies don't need to redraw when fonts are loaded because they're in an iframe. if (lastSpace && lastSpace.type !== TBC.types.visualisation) draw(lastValue, lastSpace, options); } }); function analytics() { const dnt = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack; if (dnt != "1" && dnt != "yes") { (function(i, s, o, g, r, a, m) { i["GoogleAnalyticsObject"] = r; (i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments); }), (i[r].l = 1 * new Date()); (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]); a.async = 1; a.src = g; m.parentNode.insertBefore(a, m); })( window, document, "script", "//www.google-analytics.com/analytics.js", "ga" ); ga("create", CONFIG.gaCode, "auto"); ga("send", "pageview"); } else { console.debug( "Respecting Do-Not-Track, not loading analytics. See https://bigcrunch.io/google-analytics-dnt/" ); } } // Display something while fonts are loading. crunch(); analytics(); function copyText(id, buttonId) { const previousText = document.getElementById(buttonId).textContent; const textToCopy = document.getElementById(id); textToCopy.select(); document.getElementById(buttonId).textContent = "Copied"; document.execCommand("copy"); setTimeout(() => { document.getElementById(buttonId).textContent = previousText; }, 1000); } (function onLoad() { if (!hideWaffleBar) { document.getElementById("WaffleBar").style.display = "flex"; document.body.classList.add("body-border"); } document .getElementById("ShareButton") .addEventListener("click", function() { document.getElementById("ShareModal").style.display = "flex"; document .getElementById("container") .classList.add("blur-container"); }); document.getElementById("ModalClose").addEventListener("click", function() { document.getElementById("ShareModal").style.display = "none"; document.getElementById("container").classList.remove("blur-container"); }); document.getElementById("CopyLinkText").addEventListener("click", () => { copyText("LinkText", "CopyLinkText"); }); // Social buttons document.getElementById("Facebook").addEventListener("click", function() { window.open( `https://www.facebook.com/sharer/sharer.php?u=${TBC.getWebViewLink( lastSpace )}`, "", "height=400,width=550,centerscreen=yes" ); }); document.getElementById("LinkedIn").addEventListener("click", function() { window.open( `https://linkedin.com/shareArticle?url=${TBC.getWebViewLink( lastSpace )}`, "", "height=500,width=500,centerscreen=yes" ); }); document.getElementById("Twitter").addEventListener("click", function() { window.open( `https://twitter.com/share?url=${TBC.getWebViewLink(lastSpace)}`, "", "height=500,width=500,centerscreen=yes" ); }); })();