| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | 
							- <script>
 
- /**
 
-   * To auto-embed hub URLs in interact links if given in a RESTful fashion
 
-  */
 
- function getJsonFromUrl(url) {
 
-   var query = url.split('?');
 
-   if (query.length < 2) {
 
-     // No queries so just return false
 
-     return false;
 
-   }
 
-   query = query[1];
 
-   // Collect REST params into a dictionary
 
-   var result = {};
 
-   query.split("&").forEach(function(part) {
 
-     var item = part.split("=");
 
-     result[item[0]] = decodeURIComponent(item[1]);
 
-   });
 
-   return result;
 
- }
 
- // Parse a Binder URL, converting it to the string needed for JupyterHub
 
- function binder2Jupyterhub(url) {
 
-   newUrl = {};
 
-   console.log(url)
 
-   parts = url.split('v2/gh/')[1];
 
-   // Grab the base repo information
 
-   repoinfo = parts.split('?')[0];
 
-   var [org, repo, ref] = repoinfo.split('/');
 
-   newUrl['repo'] = ['https://github.com', org, repo].join('/');
 
-   newUrl['branch'] = ref
 
-   // Grab extra parameters passed
 
-   params = getJsonFromUrl(url);
 
-   if (params['filepath'] !== undefined) {
 
-     newUrl['subPath'] = params['filepath']
 
-   }
 
-   return jQuery.param(newUrl);
 
- }
 
- // Filter out potentially unsafe characters to prevent xss
 
- function safeUrl(url)
 
- {
 
-    return String(encodeURIComponent(url))
 
-             .replace(/&/g, '&')
 
-             .replace(/"/g, '"')
 
-             .replace(/'/g, ''')
 
-             .replace(/</g, '<')
 
-             .replace(/>/g, '>');
 
- }
 
- function addParamToInternalLinks(hub) {
 
-   var links = $("a").each(function() {
 
-     var href = this.href;
 
-     // If the link is an internal link...
 
-     if (href.search("{{ site.url }}") !== -1 || href.startsWith('/') || href.search("127.0.0.1:") !== -1) {
 
-       // Assume we're an internal link, add the hub param to it
 
-       var params = getJsonFromUrl(href);
 
-       if (params !== false) {
 
-         // We have REST params, so append a new one
 
-         params['hub'] = hub;
 
-       } else {
 
-         // Create the REST params
 
-         params = {'hub': hub};
 
-       }
 
-       // Update the link
 
-       var newHref = href.split('?')[0] + '?' + jQuery.param(params);
 
-       this.setAttribute('href', decodeURIComponent(newHref));
 
-     }
 
-   });
 
-   return false;
 
- }
 
- // Update interact links
 
- function updateInteractLink() {
 
-     // hack to make this work since it expects a ? in the URL
 
-     rest = getJsonFromUrl("?" + location.search.substr(1));
 
-     hubUrl = rest['hub'];
 
-     if (hubUrl !== undefined) {
 
-       // Sanitize the hubUrl
 
-       hubUrl = safeUrl(hubUrl);
 
-       // Add HTTP text if omitted
 
-       if (hubUrl.indexOf('http') < 0) {hubUrl = 'http://' + hubUrl;}
 
-       link = $("a.interact-button")[0];
 
-       if (link !== undefined) {
 
-           // Update the interact link URL
 
-           var href = link.getAttribute('href');
 
-           var hub_type = '{{ site.hub_type }}';
 
-           if (hub_type === 'binder') {
 
-             // If binder links exist, we need to re-work them for jupyterhub
 
-             if (hubUrl.indexOf('http%3A%2F%2Flocalhost') > -1) {
 
-               // If localhost, assume we're working from a local Jupyter server and remove `/hub`
 
-               first = [hubUrl, 'git-sync'].join('/')
 
-             } else {
 
-               first = [hubUrl, 'hub', 'user-redirect', 'git-sync'].join('/')
 
-             }
 
-             href = first + '?' + binder2Jupyterhub(href);
 
-           } else {
 
-             // If JupyterHub links, we only need to replace the hub url
 
-             href = href.replace("{{ site.hub_url }}", hubUrl);
 
-             if (hubUrl.indexOf('http%3A%2F%2Flocalhost') > -1) {
 
-               // Assume we're working from a local Jupyter server and remove `/hub`
 
-               href = href.replace("/hub/user-redirect", "");
 
-             }
 
-           }
 
-           link.setAttribute('href', decodeURIComponent(href));
 
-           // Add text after interact link saying where we're launching
 
-           hubUrlNoHttp = decodeURIComponent(hubUrl).replace('http://', '').replace('https://', '');
 
-           $("a.interact-button").after($('<div class="interact-context">on ' + hubUrlNoHttp + '</div>'));
 
-       }
 
-       // Update internal links so we retain the hub url
 
-       addParamToInternalLinks(hubUrl);
 
-     }
 
- }
 
- runWhenDOMLoaded(updateInteractLink)
 
- document.addEventListener('turbolinks:load', updateInteractLink)
 
- </script>
 
 
  |