diff --git a/frontend/package.json b/frontend/package.json index 1b0bc31..a9967ba 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,5 +1,6 @@ { "name": "frontend", + "homepage": ".", "version": "0.1.0", "private": true, "dependencies": { @@ -28,6 +29,7 @@ "format": "eslint --fix 'src/**/*.js'" }, "devDependencies": { + "@ungap/url-search-params": "^0.1.2", "enzyme": "^3.7.0", "enzyme-adapter-react-16": "^1.7.0", "eslint-config-airbnb-base": "^12.1.0", diff --git a/frontend/src/api.js b/frontend/src/api.js index 022b38d..f57336f 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -1,9 +1,10 @@ const envVars = window.gitbasepg || { SERVER_URL: '', SELECT_LIMIT: 100 }; -const serverUrl = envVars.SERVER_URL || window.location.origin; +const serverUrl = envVars.SERVER_URL; const selectLimit = envVars.SELECT_LIMIT; -const apiUrl = url => `${serverUrl}${url}`; +// if serverUrl is unset, this replaces the leading / in order to work behind proxies with a path other than /. +const apiUrl = url => `${serverUrl}${url}`.replace(/^\/+/g, ''); function statusError(resp) { return new Error(resp.statusText || `${resp.status} Error`); @@ -101,9 +102,11 @@ function query(sql, signal) { } function queryExport(sql) { - const url = new URL(apiUrl('/export')); - url.searchParams.append('query', sql); - return url.toString(); + const rawUrl = apiUrl('/export'); + const params = new URLSearchParams(); + params.append('query', sql); + const url = `${rawUrl}?${params.toString()}`; + return url; } /* Returns an array in the form: diff --git a/frontend/src/fonts.less b/frontend/src/fonts.less index 900401e..4f48547 100644 --- a/frontend/src/fonts.less +++ b/frontend/src/fonts.less @@ -6,32 +6,32 @@ * -------------------------- */ @font-face { font-family: 'Hack'; - src: url('/fonts/hack-regular.woff2') format('woff2'), - url('/fonts/hack-regular.woff') format('woff'); + src: url('./fonts/hack-regular.woff2') format('woff2'), + url('./fonts/hack-regular.woff') format('woff'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Hack'; - src: url('/fonts/hack-bold.woff2') format('woff2'), - url('/fonts/hack-bold.woff') format('woff'); + src: url('./fonts/hack-bold.woff2') format('woff2'), + url('./fonts/hack-bold.woff') format('woff'); font-weight: 700; font-style: normal; } @font-face { font-family: 'Hack'; - src: url('/fonts/hack-italic.woff2') format('woff2'), - url('/fonts/hack-italic.woff') format('woff'); + src: url('./fonts/hack-italic.woff2') format('woff2'), + url('./fonts/hack-italic.woff') format('woff'); font-weight: 400; font-style: italic; } @font-face { font-family: 'Hack'; - src: url('/fonts/hack-bolditalic.woff2') format('woff2'), - url('/fonts/hack-bolditalic.woff') format('woff'); + src: url('./fonts/hack-bolditalic.woff2') format('woff2'), + url('./fonts/hack-bolditalic.woff') format('woff'); font-weight: 700; font-style: italic; } @@ -49,7 +49,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format('woff2'); unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; @@ -60,7 +60,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format('woff2'); unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; } @@ -70,7 +70,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format('woff2'); unicode-range: U+1F00-1FFF; } @@ -80,7 +80,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format('woff2'); unicode-range: U+0370-03FF; } @@ -90,7 +90,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; } @@ -100,7 +100,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format('woff2'); unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; @@ -111,7 +111,7 @@ font-style: normal; font-weight: 400; src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), - url(/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format('woff2'); + url(./fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2 diff --git a/frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2 b/frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2 similarity index 100% rename from frontend/public/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2 rename to frontend/src/fonts/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2 diff --git a/frontend/public/fonts/hack-bold.woff b/frontend/src/fonts/hack-bold.woff similarity index 100% rename from frontend/public/fonts/hack-bold.woff rename to frontend/src/fonts/hack-bold.woff diff --git a/frontend/public/fonts/hack-bold.woff2 b/frontend/src/fonts/hack-bold.woff2 similarity index 100% rename from frontend/public/fonts/hack-bold.woff2 rename to frontend/src/fonts/hack-bold.woff2 diff --git a/frontend/public/fonts/hack-bolditalic.woff b/frontend/src/fonts/hack-bolditalic.woff similarity index 100% rename from frontend/public/fonts/hack-bolditalic.woff rename to frontend/src/fonts/hack-bolditalic.woff diff --git a/frontend/src/fonts/hack-bolditalic.woff2 b/frontend/src/fonts/hack-bolditalic.woff2 new file mode 100644 index 0000000..46ff1c4 Binary files /dev/null and b/frontend/src/fonts/hack-bolditalic.woff2 differ diff --git a/frontend/public/fonts/hack-italic.woff b/frontend/src/fonts/hack-italic.woff similarity index 100% rename from frontend/public/fonts/hack-italic.woff rename to frontend/src/fonts/hack-italic.woff diff --git a/frontend/public/fonts/hack-italic.woff2 b/frontend/src/fonts/hack-italic.woff2 similarity index 100% rename from frontend/public/fonts/hack-italic.woff2 rename to frontend/src/fonts/hack-italic.woff2 diff --git a/frontend/public/fonts/hack-regular.woff b/frontend/src/fonts/hack-regular.woff similarity index 100% rename from frontend/public/fonts/hack-regular.woff rename to frontend/src/fonts/hack-regular.woff diff --git a/frontend/public/fonts/hack-regular.woff2 b/frontend/src/fonts/hack-regular.woff2 similarity index 100% rename from frontend/public/fonts/hack-regular.woff2 rename to frontend/src/fonts/hack-regular.woff2 diff --git a/frontend/src/setupTests.js b/frontend/src/setupTests.js index 299b25e..bf8bba8 100644 --- a/frontend/src/setupTests.js +++ b/frontend/src/setupTests.js @@ -20,6 +20,7 @@ global.localStorage = new LocalStorage( global.window = document.defaultView; global.window.localStorage = global.localStorage; +global.window.URLSearchParams = require('@ungap/url-search-params'); initButtonStyles(); diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 70f29a9..1052a34 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -12,6 +12,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.3.tgz#3918b73ceed484e58367be5acb79d1775239e393" integrity sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg== +"@ungap/url-search-params@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@ungap/url-search-params/-/url-search-params-0.1.2.tgz#8ba8c0527543fe675d1c29ae0a2daca842e8ee4f" + integrity sha512-WVk5+lJ+AoNLh2sIDMhnEAgLsVQuI067hWLJCzirErH1GYiy1gs09q4+XZxYWSvdAsslKsaO4q1iXXMx2c72dA== + abab@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"