* Fix require-unicode-regexp issues
See [`require-unicode-regexp`](https://eslint.org/docs/rules/require-unicode-regexp) for more information.
This change enables `require-unicode-regexp` and fixes the issues raised by the rule.
* Remove case-insensitive flag from regexps
What
- modify `ui/app/helpers/utils/transactions.util.js` and
`ui/lib/account-link.js` to strip trailing slashes
if they are present.
- added relevant tests not just for the new scenario,
but also the general scenarios for these functions,
as there previously was no test coverage for these
two functions.
Why
- Current behaviour, when user enters a block explorer URL
when configuring a custom RPC, and that block explorer URL
contains a trailing `/`.
- e.g. `https://block.explorer/`
- this results in a double-slash (`//`) in the transaction
and account URLs generated by MetaMask.
- e.g. `https://block.explorer/tx/0xabcd...`,
`https://block.explorer/account/0xabcd...`
- This needs to be handled using a router redirect
on the server of the block explorer,
and this changes would avoid that requirement.
Previously all browser globals were allowed to be used anywhere by
ESLint because we had set the `env` property to `browser` in the ESLint
config. This has made it easy to accidentally use browser globals
(e.g. #8338), so it has been removed. Instead we now have a short list
of allowed globals.
All browser globals are now accessed as properties on `window`.
Unfortunately this change resulted in a few different confusing unit
test errors, as some of our unit tests setup assumed that a particular
global would be used via `window` or `global`. In particular,
`window.fetch` didn't work correctly because it wasn't patched by the
AbortController polyfill (only `global.fetch` was being patched).
The `jsdom-global` package we were using complicated matters by setting
all of the JSDOM `window` properties directly on `global`, overwriting
the `AbortController` for example.
The `helpers.js` test setup module has been simplified somewhat by
removing `jsdom-global` and constructing the JSDOM instance manually.
The JSDOM window is set on `window`, and a few properties are set on
`global` as well as needed by various dependencies. `node-fetch` and
the AbortController polyfill/patch now work as expected as well,
though `fetch` is only available on `window` now.
Implement `eth_decrypt` and `eth_getEncryptionPublicKey`. This allows decryption backed by the user's private key. The message decryption uses a confirmation flow similar to the messaging signing flow, where the message to be decrypted is also able to be decrypted inline for the user to read directly before confirming.
* Remove unnecessary `getEnvironmentType` parameter
The default value of the first parameter is `window.location.href`, so
there is no need to pass it in explicitly.
* Remove junk parameter from `getEnvironmentType` invocation
`getEnvironmentType` doesn't need to be passed any parameter, as the
default value is `window.location.href` which is generally what is
wanted. In this case, the variable `location.href` was always
`undefined` anyway. This particular `location` variable is from React
Router, and does not have an `href` property.
* Fix comment for `getEnvironmentType`
One of the possible return values was referred to by the wrong name.
The only web API that our usage of DetectRTC relied upon was
'enumerateDevices', which is supported and stable among all of our
supported browsers.
Note that the error handling here is a little... non-standard, and the
logic around how Firefox and Brave are handled should be justified, but
I've left the logic as-is for now to keep this PR small.
This component used to persist form contents to LocalStorage. This was
especially useful for the popup UI, as each time the mouse left the
popup, the UI was completely torn down and state was lost.
This component was only being referenced by one form, and it wasn't
even being used there (e.g. no fields were labelled appropriately to
be persisted).
This was a useful component, and it seems this feature was lost
somewhere in the past couple of years. It was tempting to re-instate it
rather than delete it, but I decided not to because I'd likely approach
the problem differently if we wanted to reinstate it again today (maybe
by using a React Hook, or storing the state in Redux and persisting a
subset of the Redux store instead).
The "blockies" style identicon is handled by a module that was copied
from MyEtherWallet and inlined. This has been removed, and replaced
with the upstream package it was originally derived from.
* Add networks tab to settings, with header.
* Adds network list to settings network tab.
* Adds form to settings networks tab and connects it to network list.
* Network tab: form adding and editing working
* Settings network form properly handles input errors
* Add translations for settings network form
* Clean up styles of settings network tab.
* Add popup-view styles and behaviour to settings network tab.
* Fix save button on settings network form
* Adds 'Add Network' button and addMode to settings networks tab
* Lint fix for settings networks tab addition
* Fix navigation in settings networks tab.
* Editing an rpcurl in networks tab does not create new network, just changes rpc of old
* Fix layout of settings tabs other than network
* Networks dropdown 'Custom Rpc' item links to networks tab in settings.
* Update settings sidebar networks subheader.
* Make networks tab buttons width consistent with input widths in extension view.
* Fix settings screen subheader height in popup view
* Fix height of add networks button in popup view
* Add optional label to chainId and symbol form labels in networks setting tab
* Style fixes for networks tab headers
* Add ability to customize block explorer used by custom rpc
* Stylistic improvements+fixes to custom rpc form.
* Hide cancel button.
* Highlight and show network form of provider by default.
* Standardize network subheader name to 'Networks'
* Update e2e tests for new settings network form
* Update unit tests for new rpcPrefs prop
* Extract blockexplorer url construction into method.
* Fix broken styles on non-network tabs in popup mode
* Fix block explorer url links for cases when provider in state has not been updated.
* Fix vertical spacing of network form
* Don't allow click of save button on network form if nothing has changed
* Ensure add network button is shown in popup view
* Lint fix for networks tab
* Fix block explorer url preference setting.
* Fix e2e tests for custom blockexplorer in account details modal changes.
* Update integration test states to include frequentRpcList property
* Fix some capitalizations in en/messages.json
* Remove some console.logs added during custom rpc form work
* Fix external account link text and url for modal and dropdown.
* Documentation, url validation, proptype required additions and lint fixes on network tab and form.
* eslint: Check for unused function arguments
* eslint: Ignore unused '_' in argument list
Also allow any number of '_' e.g., '__' or '___' which is to be used sparingly
* Remove and rename unused arguments
* Removed unused UI files. Fixes#3434.
* Reverted the deletion of "feature-toggle-utils.js". Reverted the deletion of the test files and modified the paths so they referred to the old-ui.
Fixed warnings:
```md
app/scripts/controllers/computed-balances.js
+ 35:27 warning Missing space before function parentheses space-before-function-paren
+ 41:14 warning 'address' is never reassigned. Use 'const' instead prefer-const
+ 61:9 warning 'updater' is never reassigned. Use 'const' instead prefer-const
+ 68:11 warning 'newState' is never reassigned. Use 'const' instead prefer-const
app/scripts/controllers/network.js
+ 104:29 warning Missing space before function parentheses space-before-function-paren
app/scripts/lib/createLoggerMiddleware.js
+ 4:32 warning Missing space before function parentheses space-before-function-paren
+ 15:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/createOriginMiddleware.js
+ 4:32 warning Missing space before function parentheses space-before-function-paren
+ 9:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/createProviderMiddleware.js
+ 5:34 warning Missing space before function parentheses space-before-function-paren
+ 13:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/events-proxy.js
+ 1:50 warning Missing space before function parentheses space-before-function-paren
+ 31:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/nodeify.js
+ 2:22 warning Missing space before function parentheses space-before-function-paren
+ 2:24 warning Missing space before opening brace space-before-blocks
+ 5:18 warning Missing space before function parentheses space-before-function-paren
+ 5:20 warning Missing space before opening brace space-before-blocks
app/scripts/lib/pending-balance-calculator.js
+ 16:19 warning Missing space before function parentheses space-before-function-paren
app/scripts/lib/pending-tx-tracker.js
+ 85:11 warning '||' should be placed at the end of the line operator-linebreak
+ 87:11 warning '||' should be placed at the end of the line operator-linebreak
+ 88:11 warning '||' should be placed at the end of the line operator-linebreak
+ 90:11 warning '||' should be placed at the end of the line operator-linebreak
+ 91:11 warning '||' should be placed at the end of the line operator-linebreak
app/scripts/lib/port-stream.js
+ 3:22 warning Missing space before function parentheses space-before-function-paren
+ 3:24 warning Missing space before opening brace space-before-blocks
app/scripts/lib/tx-gas-utils.js
+ 84:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/tx-state-history-helper.js
+ 12:37 warning Missing space before function parentheses space-before-function-paren
+ 23:30 warning Missing space before function parentheses space-before-function-paren
+ 30:23 warning Missing space before function parentheses space-before-function-paren
+ 35:28 warning Missing space before function parentheses space-before-function-paren
+ 41:2 warning Newline required at end of file but not found eol-last
app/scripts/lib/tx-state-manager.js
+ 94:13 warning 'value' is never reassigned. Use 'const' instead prefer-const
ui/app/reducers.js
+ 45:7 warning 'state' is never reassigned. Use 'const' instead prefer-const
+ 53:7 warning 'stateString' is never reassigned. Use 'const' instead prefer-const
ui/lib/tx-helper.js
+ 27:2 warning Newline required at end of file but not found eol-last
ui/app/components/account-dropdowns.js
+ 163:1 warning More than 2 blank lines not allowed no-multiple-empty-lines
ui/app/components/menu-droppo.js
+ 22:7 warning 'style' is never reassigned. Use 'const' instead prefer-const
ui/app/components/shapeshift-form.js
+ 135:11 warning '&&' should be placed at the end of the line operator-linebreak
ui/app/components/typed-message-renderer.js
+ 35:25 warning Missing space before function parentheses space-before-function-paren
+ 42:2 warning Newline required at end of file but not found eol-last
mascara/server/index.js
+ 11:42 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 12:36 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 13:33 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 14:40 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 20:29 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 21:29 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
+ 26:40 warning Use path.join() or path.resolve() instead of + to create paths no-path-concat
```