diff --git a/add-on/_locales/de_DE/messages.json b/add-on/_locales/de_DE/messages.json index 95a89ed78..56bd5776b 100644 --- a/add-on/_locales/de_DE/messages.json +++ b/add-on/_locales/de_DE/messages.json @@ -3,6 +3,14 @@ "message": "IPFS Begleiter", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "Weiterleitung", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "Browser-Erweiterung, die den Zugriff auf IPFS-Ressourcen vereinfacht", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 8da28d39a..b4301c218 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -3,6 +3,14 @@ "message": "IPFS Companion", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "redirect", "description": "A label in Node status section of Browser Action pop-up" @@ -16,7 +24,7 @@ "description": "Redirect state in Node status section of Browser Action pop-up" }, "panel_statusGatewayAddress": { - "message": "gateway", + "message": "HTTP Gateway", "description": "A label in Node status section of Browser Action pop-up" }, "panel_statusGatewayVersion": { diff --git a/add-on/_locales/fr_FR/messages.json b/add-on/_locales/fr_FR/messages.json index 25de8ac27..97caf0e87 100644 --- a/add-on/_locales/fr_FR/messages.json +++ b/add-on/_locales/fr_FR/messages.json @@ -3,6 +3,14 @@ "message": "Compagnon IPFS", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "rediréger", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "Extension de navigateur qui simplifie l’accès aux ressources de IPFS", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/_locales/it_IT/messages.json b/add-on/_locales/it_IT/messages.json index fed80a557..3c8e006cb 100644 --- a/add-on/_locales/it_IT/messages.json +++ b/add-on/_locales/it_IT/messages.json @@ -3,6 +3,14 @@ "message": "IPFS Companion", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "reindirizza", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "Estensione per il browser che semplifica l'accesso alle risorse IPFS", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/_locales/pl_PL/messages.json b/add-on/_locales/pl_PL/messages.json index 52dfafc24..c934b61d0 100644 --- a/add-on/_locales/pl_PL/messages.json +++ b/add-on/_locales/pl_PL/messages.json @@ -3,6 +3,14 @@ "message": "Asystent IPFS", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "przekierowanie", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "Rozszerzenie przeglądarki ułatwiające dostęp do zasobów IPFS", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/_locales/ro_RO/messages.json b/add-on/_locales/ro_RO/messages.json index 7350560bf..caeaa0993 100644 --- a/add-on/_locales/ro_RO/messages.json +++ b/add-on/_locales/ro_RO/messages.json @@ -3,6 +3,14 @@ "message": "Companionul IPFS", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "redirecționat", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "Extensie a browserului care simplifică accesul la resursele IPFS", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/_locales/zh_CN/messages.json b/add-on/_locales/zh_CN/messages.json index ecb3e1012..fffb570c1 100644 --- a/add-on/_locales/zh_CN/messages.json +++ b/add-on/_locales/zh_CN/messages.json @@ -3,6 +3,14 @@ "message": "IPFS 伙伴", "description": "A pop-up title when user hovers on Browser Action button" }, + "panel_headerIpfsNodeEmbedded": { + "message": "Embedded", + "description": "Label for an embedded IPFS node" + }, + "panel_headerIpfsNodeExternal": { + "message": "External", + "description": "Label for an external IPFS node" + }, "panel_statusGatewayRedirect": { "message": "重定向", "description": "A label in Node status section of Browser Action pop-up" @@ -264,4 +272,4 @@ "message": "简化IPFS资源访问的浏览器扩展", "description": "Extension description in the Manifest file" } -} \ No newline at end of file +} diff --git a/add-on/src/popup/browser-action/context-actions.js b/add-on/src/popup/browser-action/context-actions.js index 35f1e93d4..86981b547 100644 --- a/add-on/src/popup/browser-action/context-actions.js +++ b/add-on/src/popup/browser-action/context-actions.js @@ -3,6 +3,7 @@ const browser = require('webextension-polyfill') const html = require('choo/html') +const navItem = require('./nav-item') module.exports = function contextActions ({ isIpfsContext, @@ -18,32 +19,29 @@ module.exports = function contextActions ({ if (!isIpfsContext) return null return html` -
-
-
-
${browser.i18n.getMessage('panelCopy_currentIpfsAddress')}
-
-
-
-
-
${browser.i18n.getMessage('panel_copyCurrentPublicGwUrl')}
-
-
- ${isIpfsOnline && isPinned ? null : html` -
-
-
${browser.i18n.getMessage('panel_pinCurrentIpfsAddress')}
-
-
- `} - ${isIpfsOnline && isPinned ? html` -
-
-
${browser.i18n.getMessage('panel_unpinCurrentIpfsAddress')}
-
-
- ` : null} -
+
+ ${navItem({ + text: browser.i18n.getMessage('panelCopy_currentIpfsAddress'), + onClick: onCopyIpfsAddr + })} + ${navItem({ + text: browser.i18n.getMessage('panel_copyCurrentPublicGwUrl'), + onClick: onCopyPublicGwAddr + })} + ${isIpfsOnline && isPinned ? null : ( + navItem({ + text: browser.i18n.getMessage('panel_pinCurrentIpfsAddress'), + disabled: isPinning, + onClick: onPin + }) + )} + ${isIpfsOnline && isPinned ? ( + navItem({ + text: browser.i18n.getMessage('panel_unpinCurrentIpfsAddress'), + disabled: isUnPinning, + onClick: onUnPin + }) + ) : null}
` } diff --git a/add-on/src/popup/browser-action/gateway-status.js b/add-on/src/popup/browser-action/gateway-status.js index 85f12125a..2fa8ca3e4 100644 --- a/add-on/src/popup/browser-action/gateway-status.js +++ b/add-on/src/popup/browser-action/gateway-status.js @@ -12,35 +12,29 @@ module.exports = function gatewayStatus ({ redirectEnabled }) { return html` -
- - -
+ ` } diff --git a/add-on/src/popup/browser-action/header.js b/add-on/src/popup/browser-action/header.js new file mode 100644 index 000000000..6127cc742 --- /dev/null +++ b/add-on/src/popup/browser-action/header.js @@ -0,0 +1,36 @@ +'use strict' +/* eslint-env browser, webextensions */ + +const browser = require('webextension-polyfill') +const html = require('choo/html') + +module.exports = function header ({ isIpfsOnline }) { + return html` +
+
+ +
+

IPFS node

+
+
+ +
+ +
+
+
+
+ +
+
+
+ ` +} diff --git a/add-on/src/popup/browser-action/index.html b/add-on/src/popup/browser-action/index.html index d3d18964d..fb8050224 100644 --- a/add-on/src/popup/browser-action/index.html +++ b/add-on/src/popup/browser-action/index.html @@ -1,177 +1,12 @@ - - - - - - - -
- - - - + + + + + + +
+ + + diff --git a/add-on/src/popup/browser-action/mdc.switch.css b/add-on/src/popup/browser-action/mdc.switch.css new file mode 100644 index 000000000..13212b3cb --- /dev/null +++ b/add-on/src/popup/browser-action/mdc.switch.css @@ -0,0 +1,172 @@ +/*! + Material Components for the web + Copyright (c) 2017 Google Inc. + License: Apache-2.0 +*/ +/** + * The css property used for elevation. In most cases this should not be changed. It is exposed + * as a variable for abstraction / easy use when needing to reference the property directly, for + * example in a `will-change` rule. + */ +/** + * The default duration value for elevation transitions. + */ +/** + * The default easing value for elevation transitions. + */ +/** + * Applies the correct CSS rules to an element to give it the elevation specified by $z-value. + * The $z-value must be between 0 and 24. + * If $color has an alpha channel, it will be ignored and overridden. To increase the opacity of the shadow, use + * $opacity-boost. + */ +/** + * Returns a string that can be used as the value for a `transition` property for elevation. + * Calling this function directly is useful in situations where a component needs to transition + * more than one property. + * + * ```scss + * .foo { + * transition: mdc-elevation-transition-rule(), opacity 100ms ease; + * will-change: $mdc-elevation-property, opacity; + * } + * ``` + */ +/** + * Applies the correct css rules needed to have an element transition between elevations. + * This mixin should be applied to elements whose elevation values will change depending on their + * context (e.g. when active or disabled). + */ +.mdc-switch { + display: inline-block; + position: relative; } + .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background::before { + background-color: #469ea2; } + .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob { + background-color: #469ea2; } + .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob::before { + background-color: #9e9e9e; } + .mdc-switch--theme-dark .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background::before, + .mdc-theme--dark .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background::before { + background-color: #fff; } + .mdc-switch--theme-dark .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob, + .mdc-theme--dark .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob { + background-color: #bdbdbd; } + .mdc-switch--theme-dark .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob::before, + .mdc-theme--dark .mdc-switch .mdc-switch__native-control:enabled:not(:checked) ~ .mdc-switch__background .mdc-switch__knob::before { + background-color: #f1f1f1; } + .mdc-switch .mdc-switch__native-control:enabled:checked ~ .mdc-switch__background::before { + /* @alternate */ + background-color: #469ea2; } + .mdc-switch .mdc-switch__native-control:enabled:checked ~ .mdc-switch__background .mdc-switch__knob { + /* @alternate */ + background-color: #469ea2; } + .mdc-switch .mdc-switch__native-control:enabled:checked ~ .mdc-switch__background .mdc-switch__knob::before { + /* @alternate */ + background-color: #469ea2; } + .mdc-switch__native-control { + position: absolute; + top: -14px; + left: -14px; + width: 48px; + height: 48px; + display: inline-block; + margin-top: -3px; + -webkit-transition: -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + opacity: 0; + cursor: pointer; + z-index: 2; } + .mdc-switch__native-control:checked { + -webkit-transform: translateX(14px); + transform: translateX(14px); } + .mdc-switch__background { + display: block; + position: relative; + width: 34px; + height: 14px; + border-radius: 7px; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .mdc-switch__background::before { + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + -webkit-transition: opacity 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 7px; + opacity: .38; + content: ""; } + .mdc-switch--theme-dark .mdc-switch__background::before, + .mdc-theme--dark .mdc-switch__background::before { + opacity: .3; } + .mdc-switch__background .mdc-switch__knob { + -webkit-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + display: block; + position: absolute; + top: -3px; + left: 0; + width: 20px; + height: 20px; + -webkit-transform: translateX(0); + transform: translateX(0); + -webkit-transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 10px; + z-index: 1; } + .mdc-switch__background .mdc-switch__knob::before { + position: absolute; + top: -14px; + left: -14px; + width: 48px; + height: 48px; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 24px; + opacity: .2; + content: ""; } + +.mdc-switch__native-control:checked ~ .mdc-switch__background::before { + opacity: .5; } + +.mdc-switch__native-control:checked ~ .mdc-switch__background .mdc-switch__knob { + -webkit-transform: translateX(14px); + transform: translateX(14px); + -webkit-transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1); + transition: transform 90ms cubic-bezier(0.4, 0, 0.2, 1), background-color 90ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 90ms cubic-bezier(0.4, 0, 0.2, 1); } + .mdc-switch__native-control:checked ~ .mdc-switch__background .mdc-switch__knob::before { + opacity: .15; } + +.mdc-switch__native-control:disabled { + cursor: initial; } + +.mdc-switch__native-control:disabled ~ .mdc-switch__background::before { + background-color: #000; + opacity: .12; } + .mdc-switch--theme-dark .mdc-switch__native-control:disabled ~ .mdc-switch__background::before, + .mdc-theme--dark .mdc-switch__native-control:disabled ~ .mdc-switch__background::before { + background-color: #fff; + opacity: .1; } + +.mdc-switch__native-control:disabled ~ .mdc-switch__background .mdc-switch__knob { + background-color: #bdbdbd; } + .mdc-switch--theme-dark .mdc-switch__native-control:disabled ~ .mdc-switch__background .mdc-switch__knob, + .mdc-theme--dark .mdc-switch__native-control:disabled ~ .mdc-switch__background .mdc-switch__knob { + background-color: #424242; } diff --git a/add-on/src/popup/browser-action/nav-item.js b/add-on/src/popup/browser-action/nav-item.js new file mode 100644 index 000000000..56a35ffc4 --- /dev/null +++ b/add-on/src/popup/browser-action/nav-item.js @@ -0,0 +1,17 @@ +'use strict' +/* eslint-env browser, webextensions */ + +const html = require('choo/html') + +function navItem ({ icon, text, bold, disabled, onClick }) { + let className = 'button-reset db w-100 bg-white bg-near-white--hover b--none outline-0--focus pointer pv2 ph3 f5 tl' + if (bold) className += ' b' + + return html` + + ` +} + +module.exports = navItem diff --git a/add-on/src/popup/browser-action/operations.js b/add-on/src/popup/browser-action/operations.js index 1fc0cb771..461baf850 100644 --- a/add-on/src/popup/browser-action/operations.js +++ b/add-on/src/popup/browser-action/operations.js @@ -3,6 +3,7 @@ const browser = require('webextension-polyfill') const html = require('choo/html') +const navItem = require('./nav-item') module.exports = function operations ({ isIpfsOnline, @@ -13,38 +14,32 @@ module.exports = function operations ({ onToggleRedirect }) { return html` -
- ${isIpfsOnline ? html` -
-
-
${browser.i18n.getMessage('panel_quickUpload')}
-
-
- ` : null} - ${isIpfsOnline ? html` -
-
-
${browser.i18n.getMessage('panel_openWebui')}
-
-
- ` : null} -
-
-
${browser.i18n.getMessage('panel_openPreferences')}
-
-
-
-
-
- ${browser.i18n.getMessage( - redirectEnabled - ? 'panel_toggleGatewayRedirectDisable' - : 'panel_toggleGatewayRedirectEnable' - )} -
-
-
-
+
+ ${isIpfsOnline ? ( + navItem({ + text: browser.i18n.getMessage('panel_quickUpload'), + bold: true, + onClick: onQuickUpload + }) + ) : null} + ${isIpfsOnline ? ( + navItem({ + text: browser.i18n.getMessage('panel_openWebui'), + onClick: onOpenWebUi + }) + ) : null} + ${navItem({ + text: browser.i18n.getMessage('panel_openPreferences'), + onClick: onOpenPrefs + })} + ${navItem({ + text: browser.i18n.getMessage( + redirectEnabled + ? 'panel_toggleGatewayRedirectDisable' + : 'panel_toggleGatewayRedirectEnable' + ), + onClick: onToggleRedirect + })}
` } diff --git a/add-on/src/popup/browser-action/page.css b/add-on/src/popup/browser-action/page.css new file mode 100644 index 000000000..1f94c366e --- /dev/null +++ b/add-on/src/popup/browser-action/page.css @@ -0,0 +1,40 @@ +@import url('node_modules/tachyons/css/tachyons.css'); +@import url('./mdc.switch.css'); + +.bg-near-white--hover:hover { + background-color: #F4F4F4; +} + +.outline-0--focus:focus { + outline: 0; +} + +@keyframes heart-beat { + 0% { + transform: scale(1); + } + 5% { + transform: scale(1.05); + filter: drop-shadow(0 0 1.05em rgba(95, 203, 207, 0.5)); + } + 10% { + transform: scale(1.025); + filter: drop-shadow(0 0 1.025em rgba(95, 203, 207, 0.25)); + } + 15% { + transform: scale(1.075); + filter: drop-shadow(0 0 1.075em rgba(95, 203, 207, 0.5)); + } + 50% { + transform: scale(1); + } + 100% { + transform: scale(1); + } +} + +#ipfs-logo.online { + animation-name: heart-beat; + animation-iteration-count: infinite; + animation-duration: 2.5s; +} diff --git a/add-on/src/popup/browser-action/page.js b/add-on/src/popup/browser-action/page.js index 00d57a850..e14fc34d9 100644 --- a/add-on/src/popup/browser-action/page.js +++ b/add-on/src/popup/browser-action/page.js @@ -2,10 +2,13 @@ /* eslint-env browser, webextensions */ const html = require('choo/html') +const header = require('./header') const contextActions = require('./context-actions') const operations = require('./operations') const gatewayStatus = require('./gateway-status') +require('./page.css') + // Render the browser action page: // Passed current app `state` from the store and `emit`, a function to create // events, allowing views to signal back to the store that something happened. @@ -20,12 +23,14 @@ module.exports = function browserActionPage (state, emit) { const onOpenPrefs = () => emit('openPrefs') const onToggleRedirect = () => emit('toggleRedirect') + const headerProps = Object.assign({}, state) const contextActionsProps = Object.assign({ onCopyIpfsAddr, onCopyPublicGwAddr, onPin, onUnPin }, state) const opsProps = Object.assign({ onQuickUpload, onOpenWebUi, onOpenPrefs, onToggleRedirect }, state) const gwStatusProps = Object.assign({}, state) return html` -
+
+ ${header(headerProps)} ${contextActions(contextActionsProps)} ${operations(opsProps)} ${gatewayStatus(gwStatusProps)} diff --git a/package.json b/package.json index bcf109488..cb5115dd2 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,11 @@ "build:copy": "run-s build:copy:*", "build:copy:src": "shx mkdir -p add-on/dist && shx cp -R add-on/src/* add-on/dist", "build:copy:wx-polyfill-lib": "shx cp node_modules/webextension-polyfill/dist/browser-polyfill.min.js add-on/dist/contentScripts/browser-polyfill.min.js", - "build:js": "browserify -t [ browserify-package-json --global ] add-on/src/background/background.js add-on/src/options/options.js add-on/src/popup/browser-action/index.js add-on/src/popup/quick-upload.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/options/options.js -o add-on/dist/popup/browser-action/browser-action.js -o add-on/dist/popup/quick-upload.js ] -o add-on/dist/ipfs-companion-common.js", + "build:js": "browserify -t [ browserify-package-json --global ] -t browserify-css add-on/src/background/background.js add-on/src/options/options.js add-on/src/popup/browser-action/index.js add-on/src/popup/quick-upload.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/options/options.js -o add-on/dist/popup/browser-action/browser-action.js -o add-on/dist/popup/quick-upload.js ] -o add-on/dist/ipfs-companion-common.js", "build:minimize-dist": "shx rm -rf add-on/dist/lib", "build:bundle-extension": "web-ext build -s add-on/ -i src/ -a build/", "watch": "run-p watch:*", - "watch:js": "watchify add-on/src/background/background.js add-on/src/options/options.js add-on/src/popup/browser-action/index.js add-on/src/popup/quick-upload.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/options/options.js -o add-on/dist/popup/browser-action/browser-action.js -o add-on/dist/popup/quick-upload.js ] -o add-on/dist/ipfs-companion-common.js -v", + "watch:js": "watchify -t browserify-css add-on/src/background/background.js add-on/src/options/options.js add-on/src/popup/browser-action/index.js add-on/src/popup/quick-upload.js -p [ factor-bundle -o add-on/dist/background/background.js -o add-on/dist/options/options.js -o add-on/dist/popup/browser-action/browser-action.js -o add-on/dist/popup/quick-upload.js ] -o add-on/dist/ipfs-companion-common.js -v", "test": "run-s test:*", "test:functional": "mocha test/functional/**/*.test.js", "lint": "run-s lint:*", @@ -38,6 +38,7 @@ "devDependencies": { "babel-preset-es2017": "6.24.1", "browserify": "14.5.0", + "browserify-css": "0.14.0", "browserify-package-json": "1.0.1", "chai": "4.1.2", "cross-env": "5.1.1", @@ -71,6 +72,7 @@ "ipfs-api": "17.1.3", "is-ipfs": "0.3.2", "lru_map": "0.3.3", + "tachyons": "4.9.0", "webextension-polyfill": "0.1.2" } } diff --git a/yarn.lock b/yarn.lock index 84b1fe2fe..909818b8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -370,6 +370,10 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -813,6 +817,19 @@ browserify-cipher@^1.0.0: browserify-des "^1.0.0" evp_bytestokey "^1.0.0" +browserify-css@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/browserify-css/-/browserify-css-0.14.0.tgz#5ece581aa6f8c9aab262956fd06d57c526c9a334" + dependencies: + clean-css "^4.1.5" + concat-stream "^1.6.0" + css "^2.2.1" + find-node-modules "^1.0.4" + lodash "^4.17.4" + mime "^1.3.6" + strip-css-comments "^3.0.0" + through2 "2.0.x" + browserify-des@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" @@ -1151,6 +1168,12 @@ circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" +clean-css@^4.1.5: + version "4.1.9" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + dependencies: + source-map "0.5.x" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" @@ -1503,6 +1526,15 @@ css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" +css@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1670,6 +1702,12 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +detect-file@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" + dependencies: + fs-exists-sync "^0.1.0" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -2401,6 +2439,12 @@ expand-template@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" +expand-tilde@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + dependencies: + os-homedir "^1.0.1" + extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -2529,6 +2573,13 @@ finalhandler@1.0.6: statuses "~1.3.1" unpipe "~1.0.0" +find-node-modules@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-1.0.4.tgz#b6deb3cccb699c87037677bcede2c5f5862b2550" + dependencies: + findup-sync "0.4.2" + merge "^1.2.0" + find-root@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -2546,6 +2597,15 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" +findup-sync@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" + dependencies: + detect-file "^0.1.0" + is-glob "^2.0.1" + micromatch "^2.3.7" + resolve-dir "^0.1.0" + firefox-client@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/firefox-client/-/firefox-client-0.3.0.tgz#3794460f6eb6afcf41376addcbc7462e24a4cd8b" @@ -2636,6 +2696,10 @@ from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + fs-extra@0.26.5: version "0.26.5" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.5.tgz#53ac74667ca083fd2dc1712c813039ca32d69a7f" @@ -2828,6 +2892,22 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + globals@^9.14.0, globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3036,6 +3116,12 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +homedir-polyfill@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" @@ -3158,6 +3244,10 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + ini@~1.3.0, ini@~1.3.3: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" @@ -3500,6 +3590,10 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + is-relative@^0.1.0: version "0.1.3" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" @@ -3530,6 +3624,10 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + is-windows@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" @@ -4154,7 +4252,11 @@ meow@^3.3.0: redent "^1.0.0" trim-newlines "^1.0.0" -micromatch@^2.1.5: +merge@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -4193,6 +4295,10 @@ mime@^1.3.4: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +mime@^1.3.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -4831,6 +4937,10 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + parse5@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" @@ -5593,10 +5703,21 @@ requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +resolve-dir@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + dependencies: + expand-tilde "^1.2.2" + global-modules "^0.2.3" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-url@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -5967,6 +6088,15 @@ socket.io@1.7.3: socket.io-client "1.7.3" socket.io-parser "2.3.1" +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + source-map-support@0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb" @@ -5985,23 +6115,27 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + +source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + "source-map@>= 0.1.2", source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -source-map@^0.4.4, source-map@~0.4.0, source-map@~0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" +source-map@^0.1.38, source-map@~0.1.33: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" dependencies: amdefine ">=0.0.4" -source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@~0.1.33: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" +source-map@^0.4.4, source-map@~0.4.0, source-map@~0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" @@ -6280,6 +6414,12 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-css-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-css-comments/-/strip-css-comments-3.0.0.tgz#7a5625eff8a2b226cf8947a11254da96e13dae89" + dependencies: + is-regexp "^1.0.0" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -6360,6 +6500,10 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" +tachyons@4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/tachyons/-/tachyons-4.9.0.tgz#2df058ea6b6eb3d2be12d62a69fecb0f6b1e0534" + tar-fs@^1.13.0: version "1.16.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" @@ -6435,6 +6579,13 @@ thenify-all@^1.0.0, thenify-all@^1.6.0: dependencies: any-promise "^1.0.0" +through2@2.0.x, through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + through2@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" @@ -6449,13 +6600,6 @@ through2@^1.0.0: readable-stream ">=1.1.13-1 <1.2.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - through2@~0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" @@ -6710,6 +6854,10 @@ urijs@^1.18.2: version "1.19.0" resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.0.tgz#d8aa284d0e7469703a6988ad045c4cbfdf08ada0" +urix@^0.1.0, urix@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"