Merge pull request #1845 from ethereum/swap_it_style_fixes_l

Feedback fixes
pull/1/head
yann300 6 years ago committed by GitHub
commit 96bec1c3d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/app.js
  2. 4
      src/app/components/plugin-manager-component.js
  3. 2
      src/app/components/swap-panel-component.js
  4. 109
      src/app/components/vertical-icons-component.js
  5. 27
      src/app/editor/editor.js
  6. 2
      src/app/editor/sourceHighlighter.js
  7. 4
      src/app/files/fileManager.js
  8. 2
      src/app/panels/editor-panel.js
  9. 2
      src/app/panels/file-panel.js
  10. 4
      src/app/panels/styles/file-panel-styles.js
  11. 4
      src/app/panels/styles/terminal-styles.js
  12. 11
      src/app/panels/tab-proxy.js
  13. 4
      src/app/panels/terminal.js
  14. 1
      src/app/staticanalysis/styles/staticAnalysisView-styles.js
  15. 4
      src/app/tabs/analysis-tab.js
  16. 10
      src/app/tabs/compile-tab.js
  17. 2
      src/app/tabs/compileTab/compilerContainer.js
  18. 4
      src/app/tabs/debugger-tab.js
  19. 2
      src/app/tabs/run-tab.js
  20. 6
      src/app/tabs/runTab/contractDropdown.js
  21. 8
      src/app/tabs/runTab/settings.js
  22. 4
      src/app/tabs/settings-tab.js
  23. 35
      src/app/tabs/styles/run-tab-styles.js
  24. 4
      src/app/tabs/test-tab.js
  25. 3
      src/app/tabs/theme-module.js
  26. 10
      src/app/ui/card.js
  27. 2
      src/app/ui/landing-page/landing-page.js
  28. 4
      src/app/ui/styles/dropdown-styles.js
  29. 13
      src/framingService.js
  30. 6
      src/multiParamManager.js
  31. 4
      src/remixAppManager.js
  32. 17
      src/universal-dapp-styles.js

@ -163,7 +163,7 @@ class App {
init () { init () {
var self = this var self = this
self._components.resizeFeature = new PanelsResize('#swap-panel', '#editor-container', { 'minWidth': 300, x: 300 }) self._components.resizeFeature = new PanelsResize('#swap-panel', '#editor-container', { 'minWidth': 300, x: 450 })
run.apply(self) run.apply(self)
} }

@ -35,12 +35,12 @@ const css = csjs`
` `
const profile = { const profile = {
displayName: 'plugin manager',
name: 'pluginManager', name: 'pluginManager',
displayName: 'Plugin manager',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzU1IDQ1M3EzNyAzOCAzNyA5MC41dC0zNyA5MC41bC00MDEgNDAwIDE1MCAxNTAtMTYwIDE2MHEtMTYzIDE2My0zODkuNSAxODYuNXQtNDExLjUtMTAwLjVsLTM2MiAzNjJoLTE4MXYtMTgxbDM2Mi0zNjJxLTEyNC0xODUtMTAwLjUtNDExLjV0MTg2LjUtMzg5LjVsMTYwLTE2MCAxNTAgMTUwIDQwMC00MDFxMzgtMzcgOTEtMzd0OTAgMzcgMzcgOTAuNS0zNyA5MC41bC00MDAgNDAxIDIzNCAyMzQgNDAxLTQwMHEzOC0zNyA5MS0zN3Q5MCAzN3oiLz48L3N2Zz4=', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzU1IDQ1M3EzNyAzOCAzNyA5MC41dC0zNyA5MC41bC00MDEgNDAwIDE1MCAxNTAtMTYwIDE2MHEtMTYzIDE2My0zODkuNSAxODYuNXQtNDExLjUtMTAwLjVsLTM2MiAzNjJoLTE4MXYtMTgxbDM2Mi0zNjJxLTEyNC0xODUtMTAwLjUtNDExLjV0MTg2LjUtMzg5LjVsMTYwLTE2MCAxNTAgMTUwIDQwMC00MDFxMzgtMzcgOTEtMzd0OTAgMzcgMzcgOTAuNS0zNyA5MC41bC00MDAgNDAxIDIzNCAyMzQgNDAxLTQwMHEzOC0zNyA5MS0zN3Q5MCAzN3oiLz48L3N2Zz4=',
description: 'start/stop services, modules and plugins', description: 'Start/stop services, modules and plugins',
kind: 'settings', kind: 'settings',
location: 'swapPanel' location: 'swapPanel'
} }

@ -73,7 +73,7 @@ module.exports = SwapPanelComponent
const css = csjs` const css = csjs`
.plugins { .plugins {
height : 100%; height : 95%;
} }
.plugItIn { .plugItIn {
display : none; display : none;

@ -1,6 +1,7 @@
var yo = require('yo-yo') var yo = require('yo-yo')
var csjs = require('csjs-inject') var csjs = require('csjs-inject')
var helper = require('../../lib/helper') var helper = require('../../lib/helper')
let globalRegistry = require('../../global/registry')
const EventEmitter = require('events') const EventEmitter = require('events')
@ -32,6 +33,11 @@ class VerticalIconComponent {
}) })
this.store.event.on('add', (api) => { }) this.store.event.on('add', (api) => { })
this.store.event.on('remove', (api) => { }) this.store.event.on('remove', (api) => { })
let themeModule = globalRegistry.get('themeModule').api
themeModule.events.on('themeChanged', (type) => {
this.onThemeChanged(type)
})
} }
stopListenOnStatus (api) { stopListenOnStatus (api) {
@ -56,8 +62,15 @@ class VerticalIconComponent {
* Add an icon to the map * Add an icon to the map
* @param {ModuleProfile} profile The profile of the module * @param {ModuleProfile} profile The profile of the module
*/ */
addIcon ({kind, name, icon, displayName}) { addIcon ({kind, name, icon, displayName, tooltip}) {
this.icons[name] = yo`<div class="${css.icon}" onclick="${(e) => { this._iconClick(name) }}" plugin="${name}" title="${displayName || name}" ><img src="${icon}" alt="${name}" /></div>` let title = (displayName || name)// + (tooltip ? tooltip : "")
this.icons[name] = yo`
<div
class="${css.icon}"
onclick="${(e) => { this._iconClick(name) }}"
plugin="${name}" title="${title}" >
<img class="image" src="${icon}" alt="${name}" />
</div>`
this.iconKind[kind || 'other'].appendChild(this.icons[name]) this.iconKind[kind || 'other'].appendChild(this.icons[name])
} }
@ -69,7 +82,7 @@ class VerticalIconComponent {
setIconStatus (name, status) { setIconStatus (name, status) {
const el = this.icons[name] const el = this.icons[name]
if (!el) return if (!el) return
let statusEl = el.querySelector('i') let statusEl = el.querySelector('span')
if (statusEl) { if (statusEl) {
el.removeChild(statusEl) el.removeChild(statusEl)
} }
@ -77,7 +90,17 @@ class VerticalIconComponent {
let key = helper.checkSpecialChars(status.key) ? '' : status.key let key = helper.checkSpecialChars(status.key) ? '' : status.key
let type = helper.checkSpecialChars(status.type) ? '' : status.type let type = helper.checkSpecialChars(status.type) ? '' : status.type
let title = helper.checkSpecialChars(status.title) ? '' : status.title let title = helper.checkSpecialChars(status.title) ? '' : status.title
el.appendChild(yo`<i title="${title}" class="fa fa-${key} ${css.status} text-${type}" aria-hidden="true"></i>`) el.appendChild(yo`<span title="${title}" class="fa fa-${key} ${css.status} text-${type}" aria-hidden="true"></span>`)
// el.classList = "" doesn't work on all browser use instead
var classList = el.classList
while (classList.length > 0) {
classList.remove(classList.item(0))
}
el.classList.add(`${css.icon}`)
el.classList.add('border')
el.classList.add(`border-${type}`)
} }
} }
@ -89,22 +112,57 @@ class VerticalIconComponent {
if (this.icons[name]) this.iconKind[kind || 'other'].removeChild(this.icons[name]) if (this.icons[name]) this.iconKind[kind || 'other'].removeChild(this.icons[name])
} }
select (name) { /**
let currentActive = this.view.querySelector(`.${css.active}`) * Remove active for the current activated icons
*/
removeActive () {
// reset filters
const images = this.view.querySelectorAll(`.image`)
images.forEach(function (im) {
im.style.setProperty('filter', 'invert(0.5)')
})
// remove active
const currentActive = this.view.querySelector(`.${css.active}`)
if (currentActive) { if (currentActive) {
let currentTitle = currentActive.getAttribute('title') currentActive.classList.remove(css.active)
currentActive.classList.toggle(`${css.active}`) }
if (currentTitle !== name) { }
let activate = this.view.querySelector(`[plugin="${name}"]`)
if (activate) activate.classList.toggle(`${css.active}`) /**
* Add active for the new activated icon
* @param {string} name Name of profile of the module to activate
*/
addActive (name) {
const themeType = globalRegistry.get('themeModule').api.currentTheme().quality
const invert = themeType === 'dark' ? 1 : 0
const nextActive = this.view.querySelector(`[plugin="${name}"]`)
if (nextActive) {
let image = nextActive.querySelector('.image')
nextActive.classList.add(css.active)
image.style.setProperty('filter', `invert(${invert})`)
} }
} else {
let activate = this.view.querySelector(`[plugin="${name}"]`)
if (activate) activate.classList.toggle(`${css.active}`)
} }
/**
* Set an icon as active
* @param {string} name Name of profile of the module to activate
*/
select (name) {
this.removeActive()
this.addActive(name)
this.events.emit('showContent', name) this.events.emit('showContent', name)
} }
onThemeChanged (themeType) {
const invert = themeType === 'dark' ? 1 : 0
const active = this.view.querySelector(`.${css.active}`)
if (active) {
let image = active.querySelector('.image')
image.style.setProperty('filter', `invert(${invert})`)
}
}
_iconClick (name) { _iconClick (name) {
this.select(name) this.select(name)
} }
@ -180,24 +238,22 @@ const css = csjs`
height: 36px; height: 36px;
padding: 3px; padding: 3px;
position: relative; position: relative;
border-radius: 8px;
} }
.icon img { .icon img {
width: 28px; width: 28px;
height: 28px; height: 28px;
padding: 4px; padding: 4px;
filter: invert(0.5);
}
.image {
} }
.icon svg { .icon svg {
width: 28px; width: 28px;
height: 28px; height: 28px;
padding: 4px; padding: 4px;
} }
.icon.active { .icon[title='Settings'] {
border: solid 3px hsla(229, 75%, 87%, 1);
border-radius: 8px;
padding-top: 1px;
padding-left: 1px;
}
.icon[title='settings'] {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
} }
@ -206,4 +262,15 @@ const css = csjs`
bottom: 0; bottom: 0;
right: 0; right: 0;
} }
.statusWithBG
border-radius: 8px;
background-color: var(--danger);
color: var(--light);
font-size: 12px;
height: 15px;
text-align: center;
font-weight: bold;
padding-left: 5px;
padding-right: 5px;
}
` `

@ -33,25 +33,6 @@ document.head.appendChild(yo`
.ace_gutter-cell.ace_breakpoint{ .ace_gutter-cell.ace_breakpoint{
background-color: var(--secondary); background-color: var(--secondary);
} }
.highlightreference {
position:absolute;
z-index:20;
background-color: var(--primary);
opacity: 0.6
}
.highlightreferenceline {
position:absolute;
z-index:20;
background-color: var(--primary);
opacity: 0.6
}
.highlightcode {
position:absolute;
z-index:20;
background-color: var(--danger);
}
</style> </style>
`) `)
@ -97,6 +78,7 @@ class Editor {
// Editor Setup // Editor Setup
const el = yo`<div id="input"></div>` const el = yo`<div id="input"></div>`
this.editor = ace.edit(el) this.editor = ace.edit(el)
ace.acequire('ace/ext/language_tools') ace.acequire('ace/ext/language_tools')
// Unmap ctrl-l & cmd-l // Unmap ctrl-l & cmd-l
@ -153,6 +135,13 @@ class Editor {
} }
langTools.addCompleter(flowCompleter) langTools.addCompleter(flowCompleter)
// zoom with Ctrl+wheel
window.addEventListener('wheel', (e) => {
if (e.ctrlKey && Math.abs(e.wheelY) > 5) {
this.editorFontSize(e.wheelY > 0 ? 1 : -1)
}
})
// EVENTS LISTENERS // EVENTS LISTENERS
// Gutter Mouse down // Gutter Mouse down

@ -42,7 +42,7 @@ class SourceHighlighter {
this._deps.fileManager.switchFile(this.source) this._deps.fileManager.switchFile(this.source)
} }
const backgoundClass = style || 'bg-info' const backgoundClass = style || 'alert-info'
const css = csjs` const css = csjs`
.highlightcode { .highlightcode {
position:absolute; position:absolute;

@ -13,9 +13,9 @@ import { FileSystemApi } from 'remix-plugin'
*/ */
const profile = { const profile = {
displayName: 'file manager',
name: 'fileManager', name: 'fileManager',
description: 'service - read/write to any files or folders, require giving permissions', displayName: 'File manager',
description: 'Service - read/write to any files or folders, require giving permissions',
permission: true permission: true
} }

@ -199,7 +199,7 @@ class EditorPanel {
self._adjustLayout('top', self.data._layout.top.offset) self._adjustLayout('top', self.data._layout.top.offset)
document.addEventListener('keydown', (e) => { document.addEventListener('keydown', (e) => {
if (e.altKey && e.keyCode === 84) self.tabProxy.switchNextTab() if (e.altKey && e.keyCode === 84) self.tabProxy.switchNextTab() // alt + t
}) })
return self._view.el return self._view.el

@ -29,7 +29,7 @@ var canUpload = window.File || window.FileReader || window.FileList || window.Bl
const profile = { const profile = {
name: 'fileExplorers', name: 'fileExplorers',
displayName: 'file explorers', displayName: 'File explorers',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDM4NHE0MCAwIDY4IDI4dDI4IDY4djEyMTZxMCA0MC0yOCA2OHQtNjggMjhoLTk2MHEtNDAgMC02OC0yOHQtMjgtNjh2LTI4OGgtNTQ0cS00MCAwLTY4LTI4dC0yOC02OHYtNjcycTAtNDAgMjAtODh0NDgtNzZsNDA4LTQwOHEyOC0yOCA3Ni00OHQ4OC0yMGg0MTZxNDAgMCA2OCAyOHQyOCA2OHYzMjhxNjgtNDAgMTI4LTQwaDQxNnptLTU0NCAyMTNsLTI5OSAyOTloMjk5di0yOTl6bS02NDAtMzg0bC0yOTkgMjk5aDI5OXYtMjk5em0xOTYgNjQ3bDMxNi0zMTZ2LTQxNmgtMzg0djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djY0MGg1MTJ2LTI1NnEwLTQwIDIwLTg4dDQ4LTc2em05NTYgODA0di0xMTUyaC0zODR2NDE2cTAgNDAtMjggNjh0LTY4IDI4aC00MTZ2NjQwaDg5NnoiLz48L3N2Zz4=', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDM4NHE0MCAwIDY4IDI4dDI4IDY4djEyMTZxMCA0MC0yOCA2OHQtNjggMjhoLTk2MHEtNDAgMC02OC0yOHQtMjgtNjh2LTI4OGgtNTQ0cS00MCAwLTY4LTI4dC0yOC02OHYtNjcycTAtNDAgMjAtODh0NDgtNzZsNDA4LTQwOHEyOC0yOCA3Ni00OHQ4OC0yMGg0MTZxNDAgMCA2OCAyOHQyOCA2OHYzMjhxNjgtNDAgMTI4LTQwaDQxNnptLTU0NCAyMTNsLTI5OSAyOTloMjk5di0yOTl6bS02NDAtMzg0bC0yOTkgMjk5aDI5OXYtMjk5em0xOTYgNjQ3bDMxNi0zMTZ2LTQxNmgtMzg0djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djY0MGg1MTJ2LTI1NnEwLTQwIDIwLTg4dDQ4LTc2em05NTYgODA0di0xMTUyaC0zODR2NDE2cTAgNDAtMjggNjh0LTY4IDI4aC00MTZ2NjQwaDg5NnoiLz48L3N2Zz4=',

@ -13,6 +13,8 @@ var css = csjs`
flex-direction : column; flex-direction : column;
position : relative; position : relative;
width : 100%; width : 100%;
padding-left : 6px;
padding-top : 6px;
} }
.gist { .gist {
padding : 10px; padding : 10px;
@ -50,7 +52,7 @@ var css = csjs`
.uploadFile label { .uploadFile label {
cursor : pointer; cursor : pointer;
} }
.treeviews { .treeview {
overflow-y : auto; overflow-y : auto;
} }
.dialog { .dialog {

@ -12,7 +12,6 @@ var css = csjs`
} }
.bar { .bar {
display : flex; display : flex;
min-height : 3em;
z-index : 3; z-index : 3;
} }
.menu { .menu {
@ -34,7 +33,6 @@ var css = csjs`
.toggleTerminal { .toggleTerminal {
margin-right : 20px; margin-right : 20px;
margin-left : 2px; margin-left : 2px;
margin-top : 2px;
font-size : 14px; font-size : 14px;
font-weight : bold; font-weight : bold;
cursor : pointer; cursor : pointer;
@ -129,7 +127,6 @@ var css = csjs`
height : 65%; height : 65%;
} }
.pendingTx { .pendingTx {
border : 1px solid var(--secondary);
border-radius : 50%; border-radius : 50%;
margin-right : 30px; margin-right : 30px;
min-width : 13px; min-width : 13px;
@ -138,6 +135,7 @@ var css = csjs`
justify-content : center; justify-content : center;
align-items : center; align-items : center;
font-size : 14px; font-size : 14px;
user-select : none;
} }
.dragbarHorizontal { .dragbarHorizontal {
position : absolute; position : absolute;

@ -27,7 +27,7 @@ export class TabProxy {
this._view.filetabs.activateTab(file) this._view.filetabs.activateTab(file)
return return
} }
this.addTab(file, () => { this.addTab(file, '', () => {
this.fileManager.switchFile(file) this.fileManager.switchFile(file)
this.event.emit('switchFile', file) this.event.emit('switchFile', file)
}, },
@ -39,7 +39,7 @@ export class TabProxy {
fileManager.events.on('fileRenamed', (oldName, newName) => { fileManager.events.on('fileRenamed', (oldName, newName) => {
this.removeTab(oldName) this.removeTab(oldName)
this.addTab(newName, () => { this.addTab(newName, '', () => {
this.fileManager.switchFile(newName) this.fileManager.switchFile(newName)
this.event.emit('switchFile', newName) this.event.emit('switchFile', newName)
}, },
@ -54,6 +54,7 @@ export class TabProxy {
if (profile.location === 'mainPanel') { if (profile.location === 'mainPanel') {
this.addTab( this.addTab(
name, name,
profile.displayName,
() => this.event.emit('switchApp', name), () => this.event.emit('switchApp', name),
() => { () => {
this.event.emit('closeApp', name) this.event.emit('closeApp', name)
@ -104,11 +105,13 @@ export class TabProxy {
this._view.filetabs.activateTab(name) this._view.filetabs.activateTab(name)
} }
addTab (name, switchTo, close, kind) { addTab (name, title, switchTo, close, kind) {
if (this._handlers[name]) return if (this._handlers[name]) return
var slash = name.split('/') var slash = name.split('/')
let title = name.indexOf('/') !== -1 ? slash[slash.length - 1] : name if (!title) {
title = name.indexOf('/') !== -1 ? slash[slash.length - 1] : name
}
this._view.filetabs.addTab({ this._view.filetabs.addTab({
id: name, id: name,
title, title,

@ -142,7 +142,7 @@ class Terminal extends BaseApi {
` `
self._view.icon = yo` self._view.icon = yo`
<i onmouseenter=${hover} onmouseleave=${hover} onmousedown=${minimize} <i onmouseenter=${hover} onmouseleave=${hover} onmousedown=${minimize}
class="btn btn-secondary align-items-center ${css.toggleTerminal} fa fa-angle-double-down"></i>` class="btn btn-secondary btn-sm align-items-center ${css.toggleTerminal} fa fa-angle-double-down"></i>`
self._view.dragbar = yo` self._view.dragbar = yo`
<div onmousedown=${mousedown} class=${css.dragbarHorizontal}></div>` <div onmousedown=${mousedown} class=${css.dragbarHorizontal}></div>`
self._view.dropdown = self._components.dropdown.render() self._view.dropdown = self._components.dropdown.render()
@ -151,7 +151,7 @@ class Terminal extends BaseApi {
self._view.bar = yo` self._view.bar = yo`
<div class="${css.bar}"> <div class="${css.bar}">
${self._view.dragbar} ${self._view.dragbar}
<div class="${css.menu} bg-light"> <div class="${css.menu} border-top bg-light">
${self._view.icon} ${self._view.icon}
<div class=${css.clear} onclick=${clear}> <div class=${css.clear} onclick=${clear}>
<i class="fa fa-ban" aria-hidden="true" title="Clear console" <i class="fa fa-ban" aria-hidden="true" title="Clear console"

@ -8,7 +8,6 @@ var css = csjs`
.result { .result {
margin-top: 1%; margin-top: 1%;
max-height: 300px; max-height: 300px;
overflow-y: auto;
} }
.buttons { .buttons {
margin: 1rem 0; margin: 1rem 0;

@ -8,11 +8,11 @@ import { EventEmitter } from 'events'
const profile = { const profile = {
name: 'solidityStaticAnalysis', name: 'solidityStaticAnalysis',
displayName: 'solidity static analysis', displayName: 'Solidity static analysis',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjA0OCIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMjA0OCAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0yMDQ4IDE1MzZ2MTI4aC0yMDQ4di0xNTM2aDEyOHYxNDA4aDE5MjB6bS0xMjgtMTI0OHY0MzVxMCAyMS0xOS41IDI5LjV0LTM1LjUtNy41bC0xMjEtMTIxLTYzMyA2MzNxLTEwIDEwLTIzIDEwdC0yMy0xMGwtMjMzLTIzMy00MTYgNDE2LTE5Mi0xOTIgNTg1LTU4NXExMC0xMCAyMy0xMHQyMyAxMGwyMzMgMjMzIDQ2NC00NjQtMTIxLTEyMXEtMTYtMTYtNy41LTM1LjV0MjkuNS0xOS41aDQzNXExNCAwIDIzIDl0OSAyM3oiLz48L3N2Zz4=', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjA0OCIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMjA0OCAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0yMDQ4IDE1MzZ2MTI4aC0yMDQ4di0xNTM2aDEyOHYxNDA4aDE5MjB6bS0xMjgtMTI0OHY0MzVxMCAyMS0xOS41IDI5LjV0LTM1LjUtNy41bC0xMjEtMTIxLTYzMyA2MzNxLTEwIDEwLTIzIDEwdC0yMy0xMGwtMjMzLTIzMy00MTYgNDE2LTE5Mi0xOTIgNTg1LTU4NXExMC0xMCAyMy0xMHQyMyAxMGwyMzMgMjMzIDQ2NC00NjQtMTIxLTEyMXEtMTYtMTYtNy41LTM1LjV0MjkuNS0xOS41aDQzNXExNCAwIDIzIDl0OSAyM3oiLz48L3N2Zz4=',
description: ' - ', description: 'Checks the contract code for security vulnerabilities and bad practices.',
kind: 'analysis', kind: 'analysis',
location: 'swapPanel' location: 'swapPanel'
} }

@ -20,10 +20,10 @@ const CompilerContainer = require('./compileTab/compilerContainer.js')
import { CompilerApi } from 'remix-plugin' import { CompilerApi } from 'remix-plugin'
const profile = { const profile = {
displayName: 'solidity compiler',
name: 'solidity', name: 'solidity',
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMywgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIgoJIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iMTMwMHB4IiBoZWlnaHQ9IjEzMDBweCIKCSB2aWV3Qm94PSIwIDAgMTMwMCAxMzAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMzAwIDEzMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8dGl0bGU+VmVjdG9yIDE8L3RpdGxlPgo8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KPGcgaWQ9IlBhZ2UtMSIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+Cgk8ZyBpZD0ic29saWRpdHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQwMi4wMDAwMDAsIDExOC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KCQk8ZyBpZD0iR3JvdXAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPgoJCQk8cGF0aCBpZD0iU2hhcGUiIG9wYWNpdHk9IjAuNDUiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgICAgIiBkPSJNMzcxLjc3MiwxMzUuMzA4TDI0MS4wNjgsMzY3LjYxSC0yMC4xNThsMTMwLjYxNC0yMzIuMzAyCgkJCQlIMzcxLjc3MiIvPgoJCQk8cGF0aCBpZD0iU2hhcGVfMV8iIG9wYWNpdHk9IjAuNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAgICAiIGQ9Ik0yNDEuMDY4LDM2Ny42MWgyNjEuMzE4TDM3MS43NzIsMTM1LjMwOEgxMTAuNDU2CgkJCQlMMjQxLjA2OCwzNjcuNjF6Ii8+CgkJCTxwYXRoIGlkPSJTaGFwZV8yXyIgb3BhY2l0eT0iMC44IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3ICAgICIgZD0iTTExMC40NTYsNTk5LjgyMkwyNDEuMDY4LDM2Ny42MUwxMTAuNDU2LDEzNS4zMDgKCQkJCUwtMjAuMTU4LDM2Ny42MUwxMTAuNDU2LDU5OS44MjJ6Ii8+CgkJCTxwYXRoIGlkPSJTaGFwZV8zXyIgb3BhY2l0eT0iMC40NSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAgICAiIGQ9Ik0xMTEuNzIxLDk0OC4yNzVsMTMwLjcwNC0yMzIuMzAzaDI2MS4zMThMMzczLjAzOCw5NDguMjc1CgkJCQlIMTExLjcyMSIvPgoJCQk8cGF0aCBpZD0iU2hhcGVfNF8iIG9wYWNpdHk9IjAuNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAgICAiIGQ9Ik0yNDIuNDI0LDcxNS45NzNILTE4Ljg5M2wxMzAuNjEzLDIzMi4zMDNoMjYxLjMxNwoJCQkJTDI0Mi40MjQsNzE1Ljk3M3oiLz4KCQkJPHBhdGggaWQ9IlNoYXBlXzVfIiBvcGFjaXR5PSIwLjgiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgICAgIiBkPSJNMzczLjAzOCw0ODMuNzYxTDI0Mi40MjQsNzE1Ljk3M2wxMzAuNjE0LDIzMi4zMDMKCQkJCWwxMzAuNzA0LTIzMi4zMDNMMzczLjAzOCw0ODMuNzYxeiIvPgoJCTwvZz4KCTwvZz4KPC9nPgo8L3N2Zz4K', displayName: 'Solidity compiler',
description: 'compile solidity contracts', icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAASdAAAEnQF8NGuhAAAAB3RJTUUH4wQMDx84DVYryQAAAjBJREFUSMe1102ITmEUB/DfO4aZRuM7otQgqSlCFmIhSRaSJClWs9BY2RAba1tLZTGxmbJWImFsWBhhZONzpJSEaJhhPl6bM/V2ux/vnTtz6untPvc857z/8/E/z61pXnZjHeoFejcwUWSs1qTTFjzHOP7l2PqCAVxuxmAzcgbLsSQH8SQ+YxM6igzOa8LpMvSH4dYI43iK3nDs17AND6oiPt+Qs3qgTso4fjU8r0Z3Fcfd6E0505nYe52olyn0VAn1FaxM2W/HSETgN76l6HREet6URbwPe3LeLw5k73OK7UDZdmrBIJYWROse3hak8gluJ1+0ZhyYwlNsLyCMHjOUvFCfij+Q19vmwjFcy9D5gUdVHDdDmY8xP3HmULDUnCGGswmnL3Oc7sBxsygDUeVDaMvR68fDnKItPSROBNo+/M3QOYwtwWq9s4n6ajBWltyJqAziVQbjlZpO03IzZ8CfDpab7vmJGKP3q14E8mQR7qaAaMdJvKiS4zw5lxG5MVyoWlxZshFHI8RpazP2lgl1DRdjAmVxdR070VVAUIM4Uqa4PuFg6LSlrFVRQJ3hIG2NY1fZUH/Asxy0a+L3a07H9M20nYZjmE8mnK5omNWTWJgCYhTHZup4BAuwPjHDNyT0/iTuYbXo7XdVqvpWA/fWI7dpF4exhufvwWSVmGv66ro10HdlVPpokEkd+/FzNobEQKBY23AuuWpx4xzCxyKDrSXI4nrkPO+DrA2XmjH2H8KUd4MWwdIJAAAAAElFTkSuQmCC',
description: 'Compile solidity contracts',
kind: 'compile', kind: 'compile',
permission: true, permission: true,
location: 'swapPanel' location: 'swapPanel'
@ -166,7 +166,7 @@ class CompileTab extends CompilerApi {
<!-- Select Compiler Version --> <!-- Select Compiler Version -->
<header class="navbar navbar-light bg-light input-group mb-3 ${css.compilerArticle}"> <header class="navbar navbar-light bg-light input-group mb-3 ${css.compilerArticle}">
<div class="input-group-prepend"> <div class="input-group-prepend">
<label class="input-group-text" for="compiledContracts">Contract</label> <label class="border-0 input-group-text" for="compiledContracts">Contract</label>
</div> </div>
<select onchange="${e => this.selectContract(e.target.value)}" onload="${e => { this.selectedContract = e.value }}" id="compiledContracts" class="custom-select"> <select onchange="${e => this.selectContract(e.target.value)}" onload="${e => { this.selectedContract = e.value }}" id="compiledContracts" class="custom-select">
${contractList.map((name) => yo`<option value="${name}">${name}</option>`)} ${contractList.map((name) => yo`<option value="${name}">${name}</option>`)}
@ -181,7 +181,7 @@ class CompileTab extends CompilerApi {
Compilation Details Compilation Details
</button> </button>
<!-- Copy to Clipboard --> <!-- Copy to Clipboard -->
<div class="${css.contractHelperButtons}"> <div class="${css.contractHelperButtons} btn-secondary">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text">Copy to clipboard</span> <span class="input-group-text">Copy to clipboard</span>

@ -141,7 +141,7 @@ class CompilerContainer {
<article> <article>
<header class="navbar navbar-light bg-light input-group mb-3"> <header class="navbar navbar-light bg-light input-group mb-3">
<div class="input-group-prepend"> <div class="input-group-prepend">
<label class="input-group-text" for="versionSelector">Compiler</label> <label class="input-group-text border-0" for="versionSelector">Compiler</label>
</div> </div>
${this._view.versionSelector} ${this._view.versionSelector}
</header> </header>

@ -6,12 +6,12 @@ var DebuggerUI = require('../debugger/debuggerUI')
import { BaseApi } from 'remix-plugin' import { BaseApi } from 'remix-plugin'
const profile = { const profile = {
displayName: 'debugger',
name: 'debugger', name: 'debugger',
displayName: 'Debugger',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDk2MHEwIDI2LTE5IDQ1dC00NSAxOWgtMjI0cTAgMTcxLTY3IDI5MGwyMDggMjA5cTE5IDE5IDE5IDQ1dC0xOSA0NXEtMTggMTktNDUgMTl0LTQ1LTE5bC0xOTgtMTk3cS01IDUtMTUgMTN0LTQyIDI4LjUtNjUgMzYuNS04MiAyOS05NyAxM3YtODk2aC0xMjh2ODk2cS01MSAwLTEwMS41LTEzLjV0LTg3LTMzLTY2LTM5LTQzLjUtMzIuNWwtMTUtMTQtMTgzIDIwN3EtMjAgMjEtNDggMjEtMjQgMC00My0xNi0xOS0xOC0yMC41LTQ0LjV0MTUuNS00Ni41bDIwMi0yMjdxLTU4LTExNC01OC0yNzRoLTIyNHEtMjYgMC00NS0xOXQtMTktNDUgMTktNDUgNDUtMTloMjI0di0yOTRsLTE3My0xNzNxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5IDQ1IDE5bDE3MyAxNzNoODQ0bDE3My0xNzNxMTktMTkgNDUtMTl0NDUgMTkgMTkgNDUtMTkgNDVsLTE3MyAxNzN2Mjk0aDIyNHEyNiAwIDQ1IDE5dDE5IDQ1em0tNDgwLTU3NmgtNjQwcTAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjV6Ii8+PC9zdmc+', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDk2MHEwIDI2LTE5IDQ1dC00NSAxOWgtMjI0cTAgMTcxLTY3IDI5MGwyMDggMjA5cTE5IDE5IDE5IDQ1dC0xOSA0NXEtMTggMTktNDUgMTl0LTQ1LTE5bC0xOTgtMTk3cS01IDUtMTUgMTN0LTQyIDI4LjUtNjUgMzYuNS04MiAyOS05NyAxM3YtODk2aC0xMjh2ODk2cS01MSAwLTEwMS41LTEzLjV0LTg3LTMzLTY2LTM5LTQzLjUtMzIuNWwtMTUtMTQtMTgzIDIwN3EtMjAgMjEtNDggMjEtMjQgMC00My0xNi0xOS0xOC0yMC41LTQ0LjV0MTUuNS00Ni41bDIwMi0yMjdxLTU4LTExNC01OC0yNzRoLTIyNHEtMjYgMC00NS0xOXQtMTktNDUgMTktNDUgNDUtMTloMjI0di0yOTRsLTE3My0xNzNxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5IDQ1IDE5bDE3MyAxNzNoODQ0bDE3My0xNzNxMTktMTkgNDUtMTl0NDUgMTkgMTkgNDUtMTkgNDVsLTE3MyAxNzN2Mjk0aDIyNHEyNiAwIDQ1IDE5dDE5IDQ1em0tNDgwLTU3NmgtNjQwcTAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjV6Ii8+PC9zdmc+',
description: 'debug transactions', description: 'Debug transactions',
kind: 'debugging', kind: 'debugging',
location: 'swapPanel' location: 'swapPanel'
} }

@ -16,7 +16,7 @@ import { BaseApi } from 'remix-plugin'
const profile = { const profile = {
name: 'run', name: 'run',
displayName: 'run transactions', displayName: 'Deploy and run transactions',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNTc2IDkyN2wtMTMyOCA3MzhxLTIzIDEzLTM5LjUgM3QtMTYuNS0zNnYtMTQ3MnEwLTI2IDE2LjUtMzZ0MzkuNSAzbDEzMjggNzM4cTIzIDEzIDIzIDMxdC0yMyAzMXoiLz48L3N2Zz4=', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNTc2IDkyN2wtMTMyOCA3MzhxLTIzIDEzLTM5LjUgM3QtMTYuNS0zNnYtMTQ3MnEwLTI2IDE2LjUtMzZ0MzkuNSAzbDEzMjggNzM4cTIzIDEzIDIzIDMxdC0yMyAzMXoiLz48L3N2Zz4=',

@ -44,7 +44,7 @@ class ContractDropdownUI {
} }
render () { render () {
this.compFails = yo`<i title="Contract compilation failed. Please check the compile tab for more information." class="fa fa-times-circle ${css.errorIcon}" ></i>` this.compFails = yo`<i title="No contract compiled yet or compilation failed. Please check the compile tab for more information." class="fa fa-times-circle ${css.errorIcon}" ></i>`
var info = yo`<i class="fa fa-info ${css.infoDeployAction}" aria-hidden="true" title="*.sol files allows deploying and accessing contracts. *.abi files only allows accessing contracts."></i>` var info = yo`<i class="fa fa-info ${css.infoDeployAction}" aria-hidden="true" title="*.sol files allows deploying and accessing contracts. *.abi files only allows accessing contracts."></i>`
this.atAddressButtonInput = yo`<input class="${css.input} ${css.ataddressinput} ataddressinput form-control" placeholder="Load contract from Address" title="atAddress" />` this.atAddressButtonInput = yo`<input class="${css.input} ${css.ataddressinput} ataddressinput form-control" placeholder="Load contract from Address" title="atAddress" />`
@ -61,14 +61,14 @@ class ContractDropdownUI {
${this.createPanel} ${this.createPanel}
${this.orLabel} ${this.orLabel}
<div class="${css.button} ${css.atAddressSect}"> <div class="${css.button} ${css.atAddressSect}">
<div class="${css.atAddress} btn btn-sm btn-info" onclick=${this.loadFromAddress.bind(this)}>At Address</div> <div class="${css.atAddress} btn btn-sm btn-primary" onclick=${this.loadFromAddress.bind(this)}>At Address</div>
${this.atAddressButtonInput} ${this.atAddressButtonInput}
</div> </div>
</div> </div>
</div> </div>
` `
this.selectContractNames.addEventListener('change', this.setInputParamsPlaceHolder.bind(this)) this.selectContractNames.addEventListener('change', this.setInputParamsPlaceHolder.bind(this))
this.setInputParamsPlaceHolder()
return el return el
} }

@ -64,7 +64,7 @@ class SettingsUI {
value="web3" name="executionContext"> Web3 Provider value="web3" name="executionContext"> Web3 Provider
</option> </option>
</select> </select>
<a href="https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md" target="_blank"><i class="${css.icon} fa fa-info"></i></a> <a href="https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md" target="_blank"><i class="${css.infoDeployAction} fa fa-info"></i></a>
</div> </div>
</div> </div>
` `
@ -93,14 +93,16 @@ class SettingsUI {
var valueEl = yo` var valueEl = yo`
<div class="${css.crow}"> <div class="${css.crow}">
<div class="${css.col1_1}">Value</div> <div class="${css.col1_1}">Value</div>
<input type="text" class="form-control ${css.gasNval} ${css.col2_1}" id="value" value="0" title="Enter the value and choose the unit"> <div class="${css.gasValueContainer}">
<select name="unit" class="form-control ${css.gasNval} ${css.col2_2}" id="unit"> <input type="text" class="form-control ${css.gasNval} ${css.col2}" id="value" value="0" title="Enter the value and choose the unit">
<select name="unit" class="form-control ${css.gasNvalUnit} ${css.col2_2}" id="unit">
<option data-unit="wei">wei</option> <option data-unit="wei">wei</option>
<option data-unit="gwei">gwei</option> <option data-unit="gwei">gwei</option>
<option data-unit="finney">finney</option> <option data-unit="finney">finney</option>
<option data-unit="ether">ether</option> <option data-unit="ether">ether</option>
</select> </select>
</div> </div>
</div>
` `
var el = yo` var el = yo`

@ -7,12 +7,12 @@ var css = require('./styles/settings-tab-styles')
import { BaseApi } from 'remix-plugin' import { BaseApi } from 'remix-plugin'
const profile = { const profile = {
displayName: 'settings',
name: 'settings', name: 'settings',
displayName: 'Settings',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMTUyIDg5NnEwLTEwNi03NS0xODF0LTE4MS03NS0xODEgNzUtNzUgMTgxIDc1IDE4MSAxODEgNzUgMTgxLTc1IDc1LTE4MXptNTEyLTEwOXYyMjJxMCAxMi04IDIzdC0yMCAxM2wtMTg1IDI4cS0xOSA1NC0zOSA5MSAzNSA1MCAxMDcgMTM4IDEwIDEyIDEwIDI1dC05IDIzcS0yNyAzNy05OSAxMDh0LTk0IDcxcS0xMiAwLTI2LTlsLTEzOC0xMDhxLTQ0IDIzLTkxIDM4LTE2IDEzNi0yOSAxODYtNyAyOC0zNiAyOGgtMjIycS0xNCAwLTI0LjUtOC41dC0xMS41LTIxLjVsLTI4LTE4NHEtNDktMTYtOTAtMzdsLTE0MSAxMDdxLTEwIDktMjUgOS0xNCAwLTI1LTExLTEyNi0xMTQtMTY1LTE2OC03LTEwLTctMjMgMC0xMiA4LTIzIDE1LTIxIDUxLTY2LjV0NTQtNzAuNXEtMjctNTAtNDEtOTlsLTE4My0yN3EtMTMtMi0yMS0xMi41dC04LTIzLjV2LTIyMnEwLTEyIDgtMjN0MTktMTNsMTg2LTI4cTE0LTQ2IDM5LTkyLTQwLTU3LTEwNy0xMzgtMTAtMTItMTAtMjQgMC0xMCA5LTIzIDI2LTM2IDk4LjUtMTA3LjV0OTQuNS03MS41cTEzIDAgMjYgMTBsMTM4IDEwN3E0NC0yMyA5MS0zOCAxNi0xMzYgMjktMTg2IDctMjggMzYtMjhoMjIycTE0IDAgMjQuNSA4LjV0MTEuNSAyMS41bDI4IDE4NHE0OSAxNiA5MCAzN2wxNDItMTA3cTktOSAyNC05IDEzIDAgMjUgMTAgMTI5IDExOSAxNjUgMTcwIDcgOCA3IDIyIDAgMTItOCAyMy0xNSAyMS01MSA2Ni41dC01NCA3MC41cTI2IDUwIDQxIDk4bDE4MyAyOHExMyAyIDIxIDEyLjV0OCAyMy41eiIvPjwvc3ZnPg==', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMTUyIDg5NnEwLTEwNi03NS0xODF0LTE4MS03NS0xODEgNzUtNzUgMTgxIDc1IDE4MSAxODEgNzUgMTgxLTc1IDc1LTE4MXptNTEyLTEwOXYyMjJxMCAxMi04IDIzdC0yMCAxM2wtMTg1IDI4cS0xOSA1NC0zOSA5MSAzNSA1MCAxMDcgMTM4IDEwIDEyIDEwIDI1dC05IDIzcS0yNyAzNy05OSAxMDh0LTk0IDcxcS0xMiAwLTI2LTlsLTEzOC0xMDhxLTQ0IDIzLTkxIDM4LTE2IDEzNi0yOSAxODYtNyAyOC0zNiAyOGgtMjIycS0xNCAwLTI0LjUtOC41dC0xMS41LTIxLjVsLTI4LTE4NHEtNDktMTYtOTAtMzdsLTE0MSAxMDdxLTEwIDktMjUgOS0xNCAwLTI1LTExLTEyNi0xMTQtMTY1LTE2OC03LTEwLTctMjMgMC0xMiA4LTIzIDE1LTIxIDUxLTY2LjV0NTQtNzAuNXEtMjctNTAtNDEtOTlsLTE4My0yN3EtMTMtMi0yMS0xMi41dC04LTIzLjV2LTIyMnEwLTEyIDgtMjN0MTktMTNsMTg2LTI4cTE0LTQ2IDM5LTkyLTQwLTU3LTEwNy0xMzgtMTAtMTItMTAtMjQgMC0xMCA5LTIzIDI2LTM2IDk4LjUtMTA3LjV0OTQuNS03MS41cTEzIDAgMjYgMTBsMTM4IDEwN3E0NC0yMyA5MS0zOCAxNi0xMzYgMjktMTg2IDctMjggMzYtMjhoMjIycTE0IDAgMjQuNSA4LjV0MTEuNSAyMS41bDI4IDE4NHE0OSAxNiA5MCAzN2wxNDItMTA3cTktOSAyNC05IDEzIDAgMjUgMTAgMTI5IDExOSAxNjUgMTcwIDcgOCA3IDIyIDAgMTItOCAyMy0xNSAyMS01MSA2Ni41dC01NCA3MC41cTI2IDUwIDQxIDk4bDE4MyAyOHExMyAyIDIxIDEyLjV0OCAyMy41eiIvPjwvc3ZnPg==',
description: ' - ', description: 'Remix-IDE settings',
kind: 'settings', kind: 'settings',
location: 'swapPanel' location: 'swapPanel'
} }

@ -12,10 +12,11 @@ var css = csjs`
font-size: 12px; font-size: 12px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding-left: 15px;
} }
.settings { .settings {
margin-bottom: 2%; margin-bottom: 2%;
padding: 10px 15px 15px 15px; padding: 10px 0px 15px 15px;
} }
.recorderCount { .recorderCount {
/* margin-right: 30px; */ /* margin-right: 30px; */
@ -38,7 +39,6 @@ var css = csjs`
} }
.col1_1 { .col1_1 {
font-size: 12px; font-size: 12px;
width: 15%;
min-width: 75px; min-width: 75px;
float: left; float: left;
align-self: center; align-self: center;
@ -47,12 +47,13 @@ var css = csjs`
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
width: 259px; width: 100%;
padding-right: 25px;
} }
.account { .account {
display: flex; display: flex;
align-items: center; align-items: center;
width: 266px; width: 90%;
} }
.col2 { .col2 {
border-radius: 3px; border-radius: 3px;
@ -62,12 +63,14 @@ var css = csjs`
min-width: 164px; min-width: 164px;
} }
.col2_2 { .col2_2 {
width: 82px; width: 100px;
min-width: 82px; min-width: 82px;
position: absolute;
margin-left: 100px;
} }
.select { .select {
font-weight: normal; font-weight: normal;
width: 250px; width: 100%;
} }
.instanceContainer { .instanceContainer {
display: flex; display: flex;
@ -85,7 +88,8 @@ var css = csjs`
text-align: center; text-align: center;
} }
.container { .container {
margin-bottom: 2%; margin-bottom: 4%;
padding-left: 15px;
} }
.recorderCollapsedView, .recorderCollapsedView,
.recorderExpandedView { .recorderExpandedView {
@ -141,6 +145,7 @@ var css = csjs`
.noInstancesText { .noInstancesText {
font-style: italic; font-style: italic;
text-align: left; text-align: left;
padding-left: 15px;
} }
.pendingTxsText { .pendingTxsText {
font-style: italic; font-style: italic;
@ -188,7 +193,7 @@ var css = csjs`
color: var(--warning); color: var(--warning);
} }
.errorIcon { .errorIcon {
color: var(--danger); color: var(--warning);
margin-left: 15px; margin-left: 15px;
} }
.failDesc { .failDesc {
@ -204,7 +209,7 @@ var css = csjs`
color: grey; color: grey;
width: 100%; width: 100%;
height: 100%; height: 100%;
padding-right: 28px; padding-right: 53px;
pointer-events: none; pointer-events: none;
} }
.networkItem { .networkItem {
@ -224,12 +229,22 @@ var css = csjs`
.infoDeployAction { .infoDeployAction {
margin-left: 5px; margin-left: 5px;
font-size: 13px; font-size: 13px;
color: var(--danger); color: var(--info);
}
.gasValueContainer {
flex-direction: row;
display: flex;
} }
.gasNval { .gasNval {
transform: scale(0.7); transform: scale(0.7);
transform-origin: left; transform-origin: left;
margin-right: 10px; margin-right: 10px;
width: 120px;
}
.gasNvalUnit {
transform: scale(0.7);
transform-origin: left;
margin-right: 10px;
} }
` `

@ -9,11 +9,11 @@ const TestTabLogic = require('./testTab/testTab')
const profile = { const profile = {
name: 'solidityUnitTesting', name: 'solidityUnitTesting',
displayName: 'solidity unit testing', displayName: 'Solidity unit testing',
methods: [], methods: [],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjMwNCIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMjMwNCAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDQ0OGwtMzg0IDcwNGg3Njh6bS0xMjgwIDBsLTM4NCA3MDRoNzY4em04MjEtMTkycS0xNCA0MC00NS41IDcxLjV0LTcxLjUgNDUuNXYxMjkxaDYwOHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTEzNDRxLTE0IDAtMjMtOXQtOS0yM3YtNjRxMC0xNCA5LTIzdDIzLTloNjA4di0xMjkxcS00MC0xNC03MS41LTQ1LjV0LTQ1LjUtNzEuNWgtNDkxcS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDQ5MXEyMS01NyA3MC05Mi41dDExMS0zNS41IDExMSAzNS41IDcwIDkyLjVoNDkxcTE0IDAgMjMgOXQ5IDIzdjY0cTAgMTQtOSAyM3QtMjMgOWgtNDkxem0tMTgxIDE2cTMzIDAgNTYuNS0yMy41dDIzLjUtNTYuNS0yMy41LTU2LjUtNTYuNS0yMy41LTU2LjUgMjMuNS0yMy41IDU2LjUgMjMuNSA1Ni41IDU2LjUgMjMuNXptMTA4OCA4ODBxMCA3My00Ni41IDEzMXQtMTE3LjUgOTEtMTQ0LjUgNDkuNS0xMzkuNSAxNi41LTEzOS41LTE2LjUtMTQ0LjUtNDkuNS0xMTcuNS05MS00Ni41LTEzMXEwLTExIDM1LTgxdDkyLTE3NC41IDEwNy0xOTUuNSAxMDItMTg0IDU2LTEwMHExOC0zMyA1Ni0zM3Q1NiAzM3E0IDcgNTYgMTAwdDEwMiAxODQgMTA3IDE5NS41IDkyIDE3NC41IDM1IDgxem0tMTI4MCAwcTAgNzMtNDYuNSAxMzF0LTExNy41IDkxLTE0NC41IDQ5LjUtMTM5LjUgMTYuNS0xMzkuNS0xNi41LTE0NC41LTQ5LjUtMTE3LjUtOTEtNDYuNS0xMzFxMC0xMSAzNS04MXQ5Mi0xNzQuNSAxMDctMTk1LjUgMTAyLTE4NCA1Ni0xMDBxMTgtMzMgNTYtMzN0NTYgMzNxNCA3IDU2IDEwMHQxMDIgMTg0IDEwNyAxOTUuNSA5MiAxNzQuNSAzNSA4MXoiLz48L3N2Zz4=', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjMwNCIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMjMwNCAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDQ0OGwtMzg0IDcwNGg3Njh6bS0xMjgwIDBsLTM4NCA3MDRoNzY4em04MjEtMTkycS0xNCA0MC00NS41IDcxLjV0LTcxLjUgNDUuNXYxMjkxaDYwOHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0LTkgMjN0LTIzIDloLTEzNDRxLTE0IDAtMjMtOXQtOS0yM3YtNjRxMC0xNCA5LTIzdDIzLTloNjA4di0xMjkxcS00MC0xNC03MS41LTQ1LjV0LTQ1LjUtNzEuNWgtNDkxcS0xNCAwLTIzLTl0LTktMjN2LTY0cTAtMTQgOS0yM3QyMy05aDQ5MXEyMS01NyA3MC05Mi41dDExMS0zNS41IDExMSAzNS41IDcwIDkyLjVoNDkxcTE0IDAgMjMgOXQ5IDIzdjY0cTAgMTQtOSAyM3QtMjMgOWgtNDkxem0tMTgxIDE2cTMzIDAgNTYuNS0yMy41dDIzLjUtNTYuNS0yMy41LTU2LjUtNTYuNS0yMy41LTU2LjUgMjMuNS0yMy41IDU2LjUgMjMuNSA1Ni41IDU2LjUgMjMuNXptMTA4OCA4ODBxMCA3My00Ni41IDEzMXQtMTE3LjUgOTEtMTQ0LjUgNDkuNS0xMzkuNSAxNi41LTEzOS41LTE2LjUtMTQ0LjUtNDkuNS0xMTcuNS05MS00Ni41LTEzMXEwLTExIDM1LTgxdDkyLTE3NC41IDEwNy0xOTUuNSAxMDItMTg0IDU2LTEwMHExOC0zMyA1Ni0zM3Q1NiAzM3E0IDcgNTYgMTAwdDEwMiAxODQgMTA3IDE5NS41IDkyIDE3NC41IDM1IDgxem0tMTI4MCAwcTAgNzMtNDYuNSAxMzF0LTExNy41IDkxLTE0NC41IDQ5LjUtMTM5LjUgMTYuNS0xMzkuNS0xNi41LTE0NC41LTQ5LjUtMTE3LjUtOTEtNDYuNS0xMzFxMC0xMSAzNS04MXQ5Mi0xNzQuNSAxMDctMTk1LjUgMTAyLTE4NCA1Ni0xMDBxMTgtMzMgNTYtMzN0NTYgMzNxNCA3IDU2IDEwMHQxMDIgMTg0IDEwNyAxOTUuNSA5MiAxNzQuNSAzNSA4MXoiLz48L3N2Zz4=',
description: ' - ', description: 'Fast tool to generate unit tests for your contracts',
location: 'swapPanel' location: 'swapPanel'
} }

@ -13,7 +13,7 @@ const themes = [
{name: 'Yeti', quality: 'light', url: 'https://bootswatch.com/4/yeti/bootstrap.min.css'}, {name: 'Yeti', quality: 'light', url: 'https://bootswatch.com/4/yeti/bootstrap.min.css'},
{name: 'Cyborg', quality: 'dark', url: 'https://bootswatch.com/4/cyborg/bootstrap.min.css'}, {name: 'Cyborg', quality: 'dark', url: 'https://bootswatch.com/4/cyborg/bootstrap.min.css'},
{name: 'Darkly', quality: 'dark', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/darkly/bootstrap.min.css'}, {name: 'Darkly', quality: 'dark', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/darkly/bootstrap.min.css'},
{name: 'Slate', quality: 'dark', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/slate/bootstrap.min.css'}, {name: 'Slate', quality: 'light', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/slate/bootstrap.min.css'},
{name: 'Superhero', quality: 'dark', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/superhero/bootstrap.min.css'} {name: 'Superhero', quality: 'dark', url: 'https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/superhero/bootstrap.min.css'}
] ]
@ -56,6 +56,7 @@ export class ThemeModule extends BaseApi {
this.storage.set('theme', next) this.storage.set('theme', next)
document.getElementById('theme-link').setAttribute('href', nextTheme.url) document.getElementById('theme-link').setAttribute('href', nextTheme.url)
document.documentElement.style.setProperty('--theme', nextTheme.quality) document.documentElement.style.setProperty('--theme', nextTheme.quality)
if (themeName) this.active = themeName
this.events.emit('themeChanged', nextTheme.quality) this.events.emit('themeChanged', nextTheme.quality)
} }
} }

@ -16,17 +16,15 @@ module.exports = class Card {
if (self._view.el) return self._view.el if (self._view.el) return self._view.el
self._view.cardBody = yo`<div class=${css.cardBody}></div>` self._view.cardBody = yo`<div class=${css.cardBody}></div>`
self._view.arrow = yo`<i class="${css.arrow} fa fa-angle-down" self._view.arrow = yo`<i class="${css.arrow} fa fa-angle-down" onclick="${() => trigger(this)}"></i>`
onclick=${(ev) => trigger(ev.target)}></i>`
self._view.expandCollapseButton = yo` self._view.expandCollapseButton = yo`
<div class=${css.expandCollapseButton}>${self._view.arrow}</div>` <div class=${css.expandCollapseButton}>${self._view.arrow}</div>`
self._view.statusBar = yo`<div class=${css.statusBar}>${self._opts.collapsedView}</div>` self._view.statusBar = yo`<div class=${css.statusBar}>${self._opts.collapsedView}</div>`
self._view.cardHeader = yo` self._view.cardHeader = yo`
<div class=${css.cardHeader}> <div class=${css.cardHeader} onclick=${() => trigger(self._view.arrow)}>
<div class=${css.cardTitles}> <div class="p-1 ${css.cardTitles}">
<div class=${css.cardTitle}>${self._opts.title}</div> <div class=${css.cardTitle}>${self._opts.title}</div>
${self._view.statusBar} ${self._view.statusBar}
</div> </div>
@ -43,7 +41,7 @@ module.exports = class Card {
// HTML // HTML
self._view.el = yo` self._view.el = yo`
<div class="${css.cardContainer} list-group-item"> <div class="${css.cardContainer} p-2 list-group-item">
${self._view.cardHeader} ${self._view.cardHeader}
${self._view.cardBody} ${self._view.cardBody}
</div>` </div>`

@ -106,8 +106,8 @@ let css = csjs`
import { BaseApi } from 'remix-plugin' import { BaseApi } from 'remix-plugin'
const profile = { const profile = {
displayName: 'Home',
name: 'home', name: 'home',
displayName: 'Home',
methods: [], methods: [],
events: [], events: [],
description: ' - ', description: ' - ',

@ -8,6 +8,8 @@ var css = csjs`
flex-direction : column; flex-direction : column;
margin-left : 10px; margin-left : 10px;
width : auto; width : auto;
margin-top : 2px;
max-height : 24px;
} }
.selectbox { .selectbox {
display : flex; display : flex;
@ -31,7 +33,7 @@ var css = csjs`
display : flex; display : flex;
flex-direction : column; flex-direction : column;
align-items : end; align-items : end;
top : 32px; top : 23px;
left : 0; left : 0;
width : 245px; width : 245px;
border : 1px solid var(--dark); border : 1px solid var(--dark);

@ -13,5 +13,18 @@ export default {
verticalIconApi.select('fileExplorers') verticalIconApi.select('fileExplorers')
mainPanelApi.showContent('home') mainPanelApi.showContent('home')
document.addEventListener('keypress', (e) => {
if (e.shiftKey && e.ctrlKey) {
if (e.code === 'KeyF') { // Ctrl+Shift+F
verticalIconApi.select('fileExplorers')
} else if (e.code === 'KeyA') { // Ctrl+Shift+A
verticalIconApi.select('pluginManager')
} else if (e.code === 'KeyS') { // Ctrl+Shift+S
verticalIconApi.select('settings')
}
e.preventDefault()
}
})
} }
} }

@ -145,7 +145,7 @@ class MultiParamManager {
var button = yo`<button onclick=${() => { multiOnClick() }} class="${css.instanceButton}"></button>` var button = yo`<button onclick=${() => { multiOnClick() }} class="${css.instanceButton}"></button>`
this.contractActionsContainerMulti = yo`<div class="${css.contractActionsContainerMulti}" > this.contractActionsContainerMulti = yo`<div class="${css.contractActionsContainerMulti}" >
<div class="${css.contractActionsContainerMultiInner}" > <div class="${css.contractActionsContainerMultiInner} text-dark" >
<div onclick=${() => { this.switchMethodViewOff() }} class="${css.multiHeader}"> <div onclick=${() => { this.switchMethodViewOff() }} class="${css.multiHeader}">
<div class="${css.multiTitle}">${title}</div> <div class="${css.multiTitle}">${title}</div>
<i class='fa fa-angle-up ${css.methCaret}'></i> <i class='fa fa-angle-up ${css.methCaret}'></i>
@ -183,9 +183,9 @@ class MultiParamManager {
this.contractActionsContainerSingle.querySelector(`.${css.instanceButton}`).classList.add('btn-info') this.contractActionsContainerSingle.querySelector(`.${css.instanceButton}`).classList.add('btn-info')
button.classList.add('btn-info') button.classList.add('btn-info')
} else { } else {
this.contractActionsContainerSingle.querySelector(`.${css.instanceButton}`).classList.add('btn-warning') this.contractActionsContainerSingle.querySelector(`.${css.instanceButton}`).classList.add('btn-primary')
button.innerHTML = 'transact' button.innerHTML = 'transact'
button.classList.add('btn-warning') button.classList.add('btn-primary')
} }
if (this.funABI.inputs && this.funABI.inputs.length > 0) { if (this.funABI.inputs && this.funABI.inputs.length > 0) {

@ -58,8 +58,8 @@ export class RemixAppManager extends AppManagerApi {
plugins () { plugins () {
let vyper = { let vyper = {
displayName: 'vyper',
name: 'vyper', name: 'vyper',
displayName: 'Vyper',
events: ['compilationFinished'], events: ['compilationFinished'],
methods: [], methods: [],
notifications: {}, notifications: {},
@ -70,8 +70,8 @@ export class RemixAppManager extends AppManagerApi {
location: 'swapPanel' location: 'swapPanel'
} }
var pipeline = { var pipeline = {
displayName: 'pipeline',
name: 'pipeline', name: 'pipeline',
displayName: 'Pipeline',
events: [], events: [],
methods: [], methods: [],
notifications: { notifications: {

@ -101,13 +101,12 @@ var css = csjs`
.contractProperty { .contractProperty {
overflow: auto; overflow: auto;
margin-bottom: 0.4em; margin-bottom: 0.4em;
margin-top: 1em;
width:100%; width:100%;
} }
.contractProperty.hasArgs input { .contractProperty.hasArgs input {
min-width: 200px;
padding: .36em; padding: .36em;
border-radius: 5px; border-radius: 5px;
width: 70%;
} }
.contractProperty .contractActionsContainerSingle input{ .contractProperty .contractActionsContainerSingle input{
border-top-left-radius: 0; border-top-left-radius: 0;
@ -136,7 +135,7 @@ var css = csjs`
outline: none; outline: none;
} }
.contractProperty input { .contractProperty input {
width: 75% /* width: 75% */
} }
.contractProperty > .value { .contractProperty > .value {
box-sizing: border-box; box-sizing: border-box;
@ -187,7 +186,7 @@ var css = csjs`
cursor: default; cursor: default;
} }
.contractProperty .contractActionsContainerMultiInner .multiArg label{ .contractProperty .contractActionsContainerMultiInner .multiArg label{
text-align: center; text-align: right;
} }
.multiHeader .methCaret { .multiHeader .methCaret {
float: right; float: right;
@ -205,6 +204,7 @@ var css = csjs`
} }
.multiArg { .multiArg {
margin-bottom: 8px; margin-bottom: 8px;
display: flex;
} }
.multiArg input{ .multiArg input{
padding: 5px; padding: 5px;
@ -214,13 +214,12 @@ var css = csjs`
float: left; float: left;
margin-right: 6px; margin-right: 6px;
font-size: 10px; font-size: 10px;
width: 20%; min-width: 30%;
} }
.multiArg button { .multiArg button {
border-radius: 3px; border-radius: 3px;
float: right; float: right;
margin-right: 5%; margin-right: 2%;
font-size: 10px;
border-width: 1px; border-width: 1px;
width: inherit; width: inherit;
} }
@ -230,6 +229,7 @@ var css = csjs`
} }
.hasArgs .multiArg input { .hasArgs .multiArg input {
border-left: 1px solid #dddddd; border-left: 1px solid #dddddd;
width: 100%;
} }
.hasArgs input { .hasArgs input {
display: block; display: block;
@ -244,7 +244,6 @@ var css = csjs`
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
border-right: 0; border-right: 0;
/* height: 25px; */
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -253,7 +252,7 @@ var css = csjs`
border-radius: 3px; border-radius: 3px;
} }
.contractActionsContainerMultiInner .multiArg i { .contractActionsContainerMultiInner .multiArg i {
padding-right: 26px; padding-right: 15px;
padding-top: 5px; padding-top: 5px;
float: right; float: right;
}, },

Loading…
Cancel
Save