Merge pull request #5515 from blockscout/np-integrate-ace-editor

Integrate ace editor to display contract sources
pull/5536/head
Victor Baranov 3 years ago committed by GitHub
commit e4e0f87e18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      .dialyzer-ignore
  2. 1
      CHANGELOG.md
  3. 9
      apps/block_scout_web/assets/css/components/_tile.scss
  4. 2
      apps/block_scout_web/assets/css/theme/_dark-theme.scss
  5. 17
      apps/block_scout_web/assets/js/lib/ace/src-min/ace.js
  6. 8
      apps/block_scout_web/assets/js/lib/ace/src-min/mode-csharp.js
  7. 8
      apps/block_scout_web/assets/js/lib/ace/src-min/theme-chrome.js
  8. 30
      apps/block_scout_web/assets/js/view_specific/address_contract/code_highlighting.js
  9. 10
      apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex
  10. 34
      apps/block_scout_web/priv/gettext/default.pot
  11. 34
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po

@ -23,8 +23,8 @@ lib/indexer/fetcher/token_total_supply_on_demand.ex:16
lib/explorer/exchange_rates/source.ex:110
lib/explorer/exchange_rates/source.ex:113
lib/explorer/smart_contract/solidity/verifier.ex:162
lib/block_scout_web/templates/address_contract/index.html.eex:162
lib/block_scout_web/templates/address_contract/index.html.eex:199
lib/block_scout_web/templates/address_contract/index.html.eex:158
lib/block_scout_web/templates/address_contract/index.html.eex:195
lib/explorer/staking/stake_snapshotting.ex:15: Function do_snapshotting/7 has no local return
lib/explorer/staking/stake_snapshotting.ex:147
lib/explorer/third_party_integrations/sourcify.ex:70

@ -1,6 +1,7 @@
## Current
### Features
- [#5515](https://github.com/blockscout/blockscout/pull/5515) - Integrate ace editor to display contract sources
- [#5505](https://github.com/blockscout/blockscout/pull/5505) - Manage debug_traceTransaction JSON RPC method timeout
- [#5491](https://github.com/blockscout/blockscout/pull/5491) - Sequential blocks broadcast on the main page
- [#5312](https://github.com/blockscout/blockscout/pull/5312) - Add OpenZeppelin proxy storage slot

@ -146,6 +146,15 @@ $tile-body-a-color: #5959d8 !default;
box-shadow: none;
}
.tile-code {
border-radius: 4px;
border: 1px solid $border-color;
flex-grow: 1;
font-size: 12px;
line-height: 1.4rem;
padding: $tile-padding;
}
.tile-function-response {
span.function-response-item {
display: block;

@ -161,7 +161,7 @@ $dark-stakes-banned-background: #3e314c;
color: $dark-primary;
}
.tile {
.tile, .tile-code {
border-top-color: $dark-light;
border-bottom-color: $dark-light;
border-right-color: $dark-light;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,8 @@
/* eslint-disable */define("ace/theme/chrome",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-chrome",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;color: black;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {
window.require(["ace/theme/chrome"], function(m) {
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = m;
}
});
})();

@ -1,6 +1,28 @@
import hljs from 'highlight.js/lib/core'
import '../../lib/ace/src-min/ace'
import '../../lib/ace/src-min/mode-csharp'
import '../../lib/ace/src-min/theme-chrome'
import $ from 'jquery'
// only activate highlighting on pages with this selector
if (document.querySelectorAll('[data-activate-highlight]').length > 0) {
hljs.highlightAll()
/* eslint-disable-next-line */
const Mode = ace.require('ace/mode/csharp').Mode
const codeMain = $('#code_viewer_main')
const code = codeMain.text()
/* eslint-disable-next-line */
const editor = ace.edit('code_viewer_main')
editor.session.setMode(new Mode())
editor.setTheme('ace/theme/chrome')
editor.setValue(code, -1)
editor.setOptions({ maxLines: 40, readOnly: true, printMargin: false })
const len = codeMain.data('additional-sources-length')
for (let i = 0; i < len; i++) {
const tag = 'code_viewer_' + i
const code = $('#' + tag).text()
/* eslint-disable-next-line */
const editor = ace.edit(tag)
editor.session.setMode(new Mode())
editor.setTheme('ace/theme/chrome')
editor.setValue(code, -1)
editor.setOptions({ maxLines: 40, readOnly: true })
}

@ -102,12 +102,10 @@
<%= gettext "Copy Source Code" %>
</button>
</div>
<div class="tile tile-muted mb-4">
<pre class="pre-scrollable line-numbers" data-activate-highlight><code class="solidity"><%= for {line, number} <- contract_lines_with_index(target_contract.contract_source_code) do %><div data-line-number="<%= number %>"><%= line %></div><% end %></code></pre>
</div>
<pre class="tile-muted tile-code mb-4" id="code_viewer_main" data-additional-sources-length=<%= Enum.count(additional_sources) %>><%= target_contract.contract_source_code %><pre>
</section>
<%= Enum.map(additional_sources, fn additional_source -> %>
<%= additional_sources |> Enum.with_index() |> Enum.map(fn {additional_source, index} -> %>
<section>
<div class="d-flex justify-content-between align-items-baseline">
<h3><%= additional_source.file_name %></h3>
@ -115,9 +113,7 @@
<%= gettext "Copy Source Code" %>
</button>
</div>
<div class="tile tile-muted mb-4">
<pre class="pre-scrollable line-numbers" data-activate-highlight><code class="solidity"><%= for {line, number} <- contract_lines_with_index(additional_source.contract_source_code) do %><div data-line-number="<%= number %>"><%= line %></div><% end %></code></pre>
</div>
<pre class="tile-muted tile-code mb-4" id="code_viewer_<%= index %>"><%= additional_source.contract_source_code %><pre>
</section>
<% end)%>

@ -652,7 +652,7 @@ msgid "Contract"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:126
#: lib/block_scout_web/templates/address_contract/index.html.eex:122
msgid "Contract ABI"
msgstr ""
@ -678,8 +678,8 @@ msgid "Contract Creation"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:142
#: lib/block_scout_web/templates/address_contract/index.html.eex:157
#: lib/block_scout_web/templates/address_contract/index.html.eex:138
#: lib/block_scout_web/templates/address_contract/index.html.eex:153
msgid "Contract Creation Code"
msgstr ""
@ -711,7 +711,7 @@ msgid "Contract source code"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:148
#: lib/block_scout_web/templates/address_contract/index.html.eex:144
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr ""
@ -721,7 +721,7 @@ msgid "Contribute"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:128
#: lib/block_scout_web/templates/address_contract/index.html.eex:124
msgid "Copy ABI"
msgstr ""
@ -734,8 +734,8 @@ msgid "Copy Address"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:144
#: lib/block_scout_web/templates/address_contract/index.html.eex:160
#: lib/block_scout_web/templates/address_contract/index.html.eex:140
#: lib/block_scout_web/templates/address_contract/index.html.eex:156
msgid "Copy Contract Creation Code"
msgstr ""
@ -745,8 +745,8 @@ msgid "Copy Decompiled Contract Code"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:187
#: lib/block_scout_web/templates/address_contract/index.html.eex:197
#: lib/block_scout_web/templates/address_contract/index.html.eex:183
#: lib/block_scout_web/templates/address_contract/index.html.eex:193
msgid "Copy Deployed ByteCode"
msgstr ""
@ -781,7 +781,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:102
#: lib/block_scout_web/templates/address_contract/index.html.eex:115
#: lib/block_scout_web/templates/address_contract/index.html.eex:113
msgid "Copy Source Code"
msgstr ""
@ -951,8 +951,8 @@ msgid "Delegators’ Staked Amount"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:185
#: lib/block_scout_web/templates/address_contract/index.html.eex:193
#: lib/block_scout_web/templates/address_contract/index.html.eex:181
#: lib/block_scout_web/templates/address_contract/index.html.eex:189
msgid "Deployed ByteCode"
msgstr ""
@ -975,7 +975,7 @@ msgid "Difficulty"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:149
#: lib/block_scout_web/templates/address_contract/index.html.eex:145
msgid "Displaying the init data provided of the creating transaction."
msgstr ""
@ -1143,7 +1143,7 @@ msgid "Export Data"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:228
#: lib/block_scout_web/templates/address_contract/index.html.eex:224
msgid "External libraries"
msgstr ""
@ -2981,9 +2981,9 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:27
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 lib/block_scout_web/templates/address_contract/index.html.eex:164
#: lib/block_scout_web/templates/address_contract/index.html.eex:170 lib/block_scout_web/templates/address_contract/index.html.eex:201
#: lib/block_scout_web/templates/address_contract/index.html.eex:207 lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 lib/block_scout_web/templates/address_contract/index.html.eex:160
#: lib/block_scout_web/templates/address_contract/index.html.eex:166 lib/block_scout_web/templates/address_contract/index.html.eex:197
#: lib/block_scout_web/templates/address_contract/index.html.eex:203 lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
msgid "Verify & Publish"
msgstr ""

@ -652,7 +652,7 @@ msgid "Contract"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:126
#: lib/block_scout_web/templates/address_contract/index.html.eex:122
msgid "Contract ABI"
msgstr ""
@ -678,8 +678,8 @@ msgid "Contract Creation"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:142
#: lib/block_scout_web/templates/address_contract/index.html.eex:157
#: lib/block_scout_web/templates/address_contract/index.html.eex:138
#: lib/block_scout_web/templates/address_contract/index.html.eex:153
msgid "Contract Creation Code"
msgstr ""
@ -711,7 +711,7 @@ msgid "Contract source code"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:148
#: lib/block_scout_web/templates/address_contract/index.html.eex:144
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr ""
@ -721,7 +721,7 @@ msgid "Contribute"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:128
#: lib/block_scout_web/templates/address_contract/index.html.eex:124
msgid "Copy ABI"
msgstr ""
@ -734,8 +734,8 @@ msgid "Copy Address"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:144
#: lib/block_scout_web/templates/address_contract/index.html.eex:160
#: lib/block_scout_web/templates/address_contract/index.html.eex:140
#: lib/block_scout_web/templates/address_contract/index.html.eex:156
msgid "Copy Contract Creation Code"
msgstr ""
@ -745,8 +745,8 @@ msgid "Copy Decompiled Contract Code"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:187
#: lib/block_scout_web/templates/address_contract/index.html.eex:197
#: lib/block_scout_web/templates/address_contract/index.html.eex:183
#: lib/block_scout_web/templates/address_contract/index.html.eex:193
msgid "Copy Deployed ByteCode"
msgstr ""
@ -781,7 +781,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:102
#: lib/block_scout_web/templates/address_contract/index.html.eex:115
#: lib/block_scout_web/templates/address_contract/index.html.eex:113
msgid "Copy Source Code"
msgstr ""
@ -951,8 +951,8 @@ msgid "Delegators’ Staked Amount"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:185
#: lib/block_scout_web/templates/address_contract/index.html.eex:193
#: lib/block_scout_web/templates/address_contract/index.html.eex:181
#: lib/block_scout_web/templates/address_contract/index.html.eex:189
msgid "Deployed ByteCode"
msgstr ""
@ -975,7 +975,7 @@ msgid "Difficulty"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:149
#: lib/block_scout_web/templates/address_contract/index.html.eex:145
msgid "Displaying the init data provided of the creating transaction."
msgstr ""
@ -1143,7 +1143,7 @@ msgid "Export Data"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:228
#: lib/block_scout_web/templates/address_contract/index.html.eex:224
msgid "External libraries"
msgstr ""
@ -2981,9 +2981,9 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:27
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 lib/block_scout_web/templates/address_contract/index.html.eex:164
#: lib/block_scout_web/templates/address_contract/index.html.eex:170 lib/block_scout_web/templates/address_contract/index.html.eex:201
#: lib/block_scout_web/templates/address_contract/index.html.eex:207 lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 lib/block_scout_web/templates/address_contract/index.html.eex:160
#: lib/block_scout_web/templates/address_contract/index.html.eex:166 lib/block_scout_web/templates/address_contract/index.html.eex:197
#: lib/block_scout_web/templates/address_contract/index.html.eex:203 lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
msgid "Verify & Publish"
msgstr ""

Loading…
Cancel
Save