1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5
5<script> 6 // Browserify/webpack-era dependencies (e.g. object-hash) expect 7 // node's `global`; webpack 4 shimmed it, Vite does not. Vite's 8 // `define` doesn't reach pre-bundled deps, so shim it at runtime. 9 window.global = window; 10 </script>
10 11 <meta http-equiv="cache-control" content="max-age=0" /> 12 <meta http-equiv="cache-control" content="no-cache" /> 13 <meta http-equiv="expires" content="0" /> 14 <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 15 <meta http-equiv="pragma" content="no-cache" /> 16 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 17 18 <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png"> 19 <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png"> 20 <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png"> 21 <link rel="manifest" href="/favicon/site.webmanifest"> 22 <link rel="mask-icon" href="/favicon/safari-pinned-tab.svg" color="#000000"> 23 <meta name="msapplication-TileColor" content="#ffffff"> 24 <meta name="theme-color" content="#ffffff"> 25 <title>Open Supply Hub</title> 26 <meta property="og:title" content="Open Supply Hub"> 27 <meta name="description" content="Open Supply Hub (OS Hub) is an accessible, collaborative, supply chain mapping platform, used and populated by stakeholders across sectors and supply chains."> 28 <meta property="og:description" content="Open Supply Hub (OS Hub) is an accessible, collaborative, supply chain mapping platform, used and populated by stakeholders across sectors and supply chains."> 29 <meta property="og:url" content="https://opensupplyhub.org"> 30 <meta property="og:site_name" content="Open Supply Hub"> 31 <meta property="og:image" content="/images/preview.png"> 32 33 <meta name="twitter:card" content="summary_large_image"> 34 <meta name="twitter:site" content="@OpenSupplyHub"> 35 <meta name="twitter:title" content="Open Supply Hub"> 36 <meta name="twitter:description" content="Open Supply Hub (OS Hub) is an accessible, collaborative, supply chain mapping platform, used and populated by stakeholders across sectors and supply chains."> 37 <meta name="twitter:image" content="/images/preview.png"> 38 39 <!-- Environment Variables --> 40
40<script src="/web/environment.js"></script>
40 41 <!-- Google Analytics --> 42
42<script> 43 if (window.ENVIRONMENT && 44 window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY && 45 window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY !== "") { 46 // Initially disable tracking until we check that the user has accepted the notification 47 // 48 // See: https://developers.google.com/analytics/devguides/collection/analyticsjs/user-opt-out 49 // 50 // We will later delete this key and start Google Analytics tracking in the application code 51 // if it is verified that the user has selected "Accept" for the Google Analytics tracking 52 // notification. See: /src/react/src/util/analytics/consent.js 53 // 54 // Set for every environment to ensure it is always set. 55 var disableGAKey = 'ga-disable-' + window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY; 56 window[disableGAKey] = true; 57 } 58 </script>
58 59
59<script async id="analytics"></script>
59 60
60<script> 61 if (window.ENVIRONMENT && 62 window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY && 63 window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY !== "") { 64 // Import the Google Analytics script. This must occur AFTER the GA key is disabled. 65 var rootGtagUrl = "https://www.googletagmanager.com/gtag/js?id=" 66 var analyticsKey = window.ENVIRONMENT.REACT_APP_GOOGLE_ANALYTICS_KEY; 67 document.getElementById('analytics').src = rootGtagUrl + analyticsKey; 68 } 69 </script>
69 70 <!-- End Google Analytics --> 71 <!-- 72 Rollbar Configuration 73 https://docs.rollbar.com/docs/browser-js 74 --> 75
75<script> 76 if (window.ENVIRONMENT && 77 window.ENVIRONMENT.REACT_APP_ROLLBAR_CLIENT_SIDE_ACCESS_TOKEN && 78 window.ENVIRONMENT.ENVIRONMENT !== 'local') { 79 var _rollbarConfig = { 80 accessToken: window.ENVIRONMENT.REACT_APP_ROLLBAR_CLIENT_SIDE_ACCESS_TOKEN, 81 captureUncaught: true, 82 captureUnhandledRejections: true, 83 captureIp: false, 84 payload: { 85 environment: window.ENVIRONMENT.ENVIRONMENT, 86 javascript: { 87 code_version: "%REACT_APP_GIT_COMMIT%" 88 } 89 } 90 }; 91 92 // Rollbar Snippet 93 !function(r){function e(n){if(o[n])return o[n].exports;var t=o[n]={exports:{},id:n,loaded:!1};return r[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}var o={};return e.m=r,e.c=o,e.p="",e(0)}([function(r,e,o){"use strict";var n=o(1),t=o(4);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdnjs.cloudflare.com/ajax/libs/rollbar.js/2.4.6/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";function n(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}function t(r,e){this.options=r,this._rollbarOldOnError=null;var o=s++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}function a(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var t=new p(e);return n(function(){e.captureUncaught&&(t._rollbarOldOnError=r.onerror,i.captureUncaughtExceptions(r,t,!0),i.wrapGlobals(r,t,!0)),e.captureUnhandledRejections&&i.captureUnhandledRejections(r,t,!0);var n=e.autoInstrument;return e.enabled!==!1&&(void 0===n||n===!0||"object"==typeof n&&n.network)&&r.addEventListener&&(r.addEventListener("load",t.captureLoad.bind(t)),r.addEventListener("DOMContentLoaded",t.captureDomContentLoaded.bind(t))),r[o]=t,t})()}}function l(r){return n(function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)})}var i=o(2),s=0,d=o(3),c=function(r,e){return new t(r,e)},p=function(r){return new d(c,r)};t.prototype.loadFull=function(r,e,o,t,a){var l=function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,t,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(t=n.args||[],i=0;i<t.length;++i)if(l=t[i],"function"==typeof l){l(e);break}}"function"==typeof a&&a(e)},i=!1,s=e.createElement("script"),d=e.getElementsByTagName("script")[0],c=d.parentNode;s.crossOrigin="",s.src=t.rollbarJsUrl,o||(s.async=!0),s.onload=s.onreadystatechange=n(function(){if(!(i||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){s.onload=s.onreadystatechange=null;try{c.removeChild(s)}catch(r){}i=!0,l()}}),c.insertBefore(s,d)},t.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var u="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<u.length;++f)t.prototype[u[f]]=l(u[f]);r.exports={setupShim:a,Rollbar:p}},function(r,e){"use strict";function o(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}}function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),o&&o.apply(r,n)}
93function t(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){t="[unhandledrejection] error getting `detail` from event"}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}function a(r,e,o){if(r){var n,t,a="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n<a.length;++n)t=a[n],r[t]&&r[t].prototype&&l(e,r[t].prototype,o)}}function l(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports={captureUncaughtExceptions:o,captureUnhandledRejections:t,wrapGlobals:a}},function(r,e){"use strict";function o(r,e){this.impl=r(e,this),this.options=e,n(o.prototype)}function n(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}o.prototype._swapAndProcessMessages=function(r,e){this.impl=r(this.options);for(var o,n,t;o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=o},function(r,e){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){r=r||{};for(var o,n,t=r.globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]); 94 // End Rollbar Snippet 95 } 96 </script>
96 97 <!-- 98 Dark Visitors 99 https://darkvisitors.com/docs/analytics 100 --> 101
101<script> 102 if ( 103 window.ENVIRONMENT && 104 window.ENVIRONMENT.DARK_VISITORS_PROJECT_KEY && 105 window.ENVIRONMENT.ENVIRONMENT !== 'local' 106 ) { 107 const script = document.createElement('script'); 108 script.src = 'https://darkvisitors.com/tracker.js?project_key=' + window.ENVIRONMENT.DARK_VISITORS_PROJECT_KEY; 109 script.defer = true; 110 document.head.appendChild(script); 111 } 112 </script>
112 113 <!-- End Dark Visitors --> 114
114<script type="module" crossorigin src="/assets/index-Slv0gJYa.js"></script>
114 115 <link rel="stylesheet" crossorigin href="/assets/index-y5saDvbW.css"> 116 </head> 117 <body> 118 <div id="root"></div> 119
119<script type="text/javascript"> 120 var head = document.getElementsByTagName('head')[0]; 121 122 // Save the original method 123 var insertBefore = head.insertBefore; 124 125 // Remove the default Google Font download initiated by the `ReactLeafletGoogleLayer` component. 126 head.insertBefore = function (newElement, referenceElement) { 127 128 if ( 129 newElement.href && 130 (newElement.href.indexOf( 131 'https://fonts.googleapis.com/css?family=Roboto', 132 ) === 0 || 133 newElement.href.indexOf( 134 'https://fonts.googleapis.com/css?family=Google+Sans+Text', 135 ) === 0) 136 ) { 137 return; 138 } 139 140 insertBefore.call(head, newElement, referenceElement); 141 }; 142 </script>
142 143 </body> 144</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.