Added muted
This commit is contained in:
parent
c0de11955b
commit
922974c760
@ -4,7 +4,7 @@
|
|||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
html, body {
|
html, body {
|
||||||
margin: 0; padding: 0;
|
margin: 0; padding: 0;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#debugger {
|
#debugger {
|
||||||
|
@ -7,20 +7,63 @@
|
|||||||
<script src="lib/codemirror.js"></script>
|
<script src="lib/codemirror.js"></script>
|
||||||
<script src="lib/matchbrackets.js"></script>
|
<script src="lib/matchbrackets.js"></script>
|
||||||
<script src="lib/go.js"></script>
|
<script src="lib/go.js"></script>
|
||||||
|
<script src="muted.js"></script>
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
html, body {
|
html, body {
|
||||||
margin: 0; padding: 0;
|
margin: 0; padding: 0;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#debugger {
|
||||||
|
height: 30%;
|
||||||
|
font-family: "Monaco";
|
||||||
|
border-top: 5px solid grey;
|
||||||
|
}
|
||||||
|
#debugger .line {
|
||||||
|
overflow: none;
|
||||||
|
}
|
||||||
|
#debugger .col1, #debugger .col2 {
|
||||||
|
float: left;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
#debugger .col1 {
|
||||||
|
width: 10px;
|
||||||
|
padding-left: 10px
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
#debugger .col2 {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
.prompt {
|
||||||
|
color: "#5089D4";
|
||||||
}
|
}
|
||||||
|
|
||||||
.CodeMirror {
|
.CodeMirror {
|
||||||
height: 100%;
|
height: 70%;
|
||||||
|
font-size: 14pt;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<textarea id="editor"></textarea>
|
<textarea id="editor"></textarea>
|
||||||
|
|
||||||
|
<div id="debugger">
|
||||||
|
<div class="line">
|
||||||
|
<div class="col1 prompt">
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="col2" contenteditable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var textArea = document.querySelector("#editor")
|
var textArea = document.querySelector("#editor")
|
||||||
var editor = CodeMirror.fromTextArea(textArea, {
|
var editor = CodeMirror.fromTextArea(textArea, {
|
||||||
@ -33,6 +76,5 @@
|
|||||||
indentWithTabs: true,
|
indentWithTabs: true,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
61
ethereal/assets/muted/muted.js
Normal file
61
ethereal/assets/muted/muted.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Helper function for generating pseudo callbacks and sending data to the QML part of the application
|
||||||
|
function postData(data, cb) {
|
||||||
|
data._seed = Math.floor(Math.random() * 1000000)
|
||||||
|
if(cb) {
|
||||||
|
Muted._callbacks[data._seed] = cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.args === undefined) {
|
||||||
|
data.args = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
navigator.qt.postMessage(JSON.stringify(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
window.Muted = {
|
||||||
|
prototype: Object(),
|
||||||
|
}
|
||||||
|
|
||||||
|
window.Muted._callbacks = {}
|
||||||
|
window.Muted._onCallbacks = {}
|
||||||
|
|
||||||
|
function debug(/**/) {
|
||||||
|
console.log("hello world")
|
||||||
|
|
||||||
|
var args = arguments;
|
||||||
|
var msg = ""
|
||||||
|
for(var i = 0; i < args.length; i++){
|
||||||
|
if(typeof args[i] == "object") {
|
||||||
|
msg += " " + JSON.stringify(args[i])
|
||||||
|
} else {
|
||||||
|
msg += args[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelector("#debugger").innerHTML += "<div class='line'><div class='col1'></div><div class='col2'>"+msg+"</div></div>";
|
||||||
|
}
|
||||||
|
console.log = function() {
|
||||||
|
var args = []
|
||||||
|
for(var i = 0; i < arguments.length; i++) {
|
||||||
|
args.push(arguments[i]);
|
||||||
|
}
|
||||||
|
postData({call:"log", args:args})
|
||||||
|
}
|
||||||
|
|
||||||
|
navigator.qt.onmessage = function(ev) {
|
||||||
|
var data = JSON.parse(ev.data)
|
||||||
|
|
||||||
|
if(data._event !== undefined) {
|
||||||
|
Muted.trigger(data._event, data.data);
|
||||||
|
} else {
|
||||||
|
if(data._seed) {
|
||||||
|
var cb = Muted._callbacks[data._seed];
|
||||||
|
if(cb) {
|
||||||
|
// Call the callback
|
||||||
|
cb(data.data);
|
||||||
|
// Remove the "trigger" callback
|
||||||
|
delete Muted._callbacks[ev._seed];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,59 +7,68 @@ import QtQuick.Window 2.1;
|
|||||||
import Ethereum 1.0
|
import Ethereum 1.0
|
||||||
|
|
||||||
ApplicationWindow {
|
ApplicationWindow {
|
||||||
id: window
|
id: window
|
||||||
title: "muted"
|
title: "muted"
|
||||||
width: 900
|
width: 900
|
||||||
height: 600
|
height: 600
|
||||||
minimumHeight: 300
|
minimumHeight: 300
|
||||||
|
|
||||||
property alias url: webView.url
|
property alias url: webView.url
|
||||||
property alias debugUrl: debugView.url
|
property alias webView: webView
|
||||||
property alias webView: webView
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
WebView {
|
WebView {
|
||||||
objectName: "webView"
|
objectName: "webView"
|
||||||
id: webView
|
id: webView
|
||||||
anchors {
|
anchors {
|
||||||
top: root.top
|
top: root.top
|
||||||
right: root.right
|
right: root.right
|
||||||
left: root.left
|
left: root.left
|
||||||
bottom: sizeGrip.top
|
bottom: root.bottom
|
||||||
}
|
//bottom: sizeGrip.top
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
experimental.preferences.javascriptEnabled: true
|
||||||
id: sizeGrip
|
experimental.preferences.navigatorQtObjectEnabled: true
|
||||||
color: "gray"
|
experimental.onMessageReceived: {
|
||||||
height: 5
|
var data = JSON.parse(message.data)
|
||||||
anchors {
|
|
||||||
left: root.left
|
|
||||||
right: root.right
|
|
||||||
}
|
|
||||||
y: Math.round(root.height * 2 / 3)
|
|
||||||
|
|
||||||
MouseArea {
|
switch(data.call) {
|
||||||
anchors.fill: parent
|
case "log":
|
||||||
drag.target: sizeGrip
|
console.log.apply(this, data.args)
|
||||||
drag.minimumY: 0
|
break;
|
||||||
drag.maximumY: root.height - sizeGrip.height
|
}
|
||||||
drag.axis: Drag.YAxis
|
}
|
||||||
}
|
function postData(seed, data) {
|
||||||
}
|
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
|
||||||
|
}
|
||||||
|
function postEvent(event, data) {
|
||||||
|
webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WebView {
|
/*
|
||||||
id: debugView
|
Rectangle {
|
||||||
objectName: "debugView"
|
id: sizeGrip
|
||||||
anchors {
|
color: "gray"
|
||||||
left: root.left
|
height: 5
|
||||||
right: root.right
|
anchors {
|
||||||
bottom: root.bottom
|
left: root.left
|
||||||
top: sizeGrip.bottom
|
right: root.right
|
||||||
}
|
}
|
||||||
}
|
y: Math.round(root.height * 2 / 3)
|
||||||
}
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
drag.target: sizeGrip
|
||||||
|
drag.minimumY: 0
|
||||||
|
drag.maximumY: root.height - sizeGrip.height
|
||||||
|
drag.axis: Drag.YAxis
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,134 +7,135 @@ import QtQuick.Window 2.1;
|
|||||||
import Ethereum 1.0
|
import Ethereum 1.0
|
||||||
|
|
||||||
ApplicationWindow {
|
ApplicationWindow {
|
||||||
id: window
|
id: window
|
||||||
title: "Ethereum"
|
title: "Ethereum"
|
||||||
width: 900
|
width: 900
|
||||||
height: 600
|
height: 600
|
||||||
minimumHeight: 300
|
minimumHeight: 300
|
||||||
|
|
||||||
property alias url: webview.url
|
property alias url: webview.url
|
||||||
property alias webView: webview
|
property alias webView: webview
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
objectName: "root"
|
objectName: "root"
|
||||||
id: root
|
id: root
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
state: "inspectorShown"
|
state: "inspectorShown"
|
||||||
|
|
||||||
WebView {
|
WebView {
|
||||||
objectName: "webView"
|
objectName: "webView"
|
||||||
id: webview
|
id: webview
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
/*
|
/*
|
||||||
anchors {
|
anchors {
|
||||||
left: parent.left
|
left: parent.left
|
||||||
right: parent.right
|
right: parent.right
|
||||||
bottom: sizeGrip.top
|
bottom: sizeGrip.top
|
||||||
top: parent.top
|
top: parent.top
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
onTitleChanged: { window.title = title }
|
||||||
|
experimental.preferences.javascriptEnabled: true
|
||||||
|
experimental.preferences.navigatorQtObjectEnabled: true
|
||||||
|
experimental.preferences.developerExtrasEnabled: true
|
||||||
|
experimental.userScripts: [ui.assetPath("ethereum.js")]
|
||||||
|
experimental.onMessageReceived: {
|
||||||
|
//console.log("[onMessageReceived]: ", message.data)
|
||||||
|
var data = JSON.parse(message.data)
|
||||||
|
|
||||||
|
switch(data.call) {
|
||||||
|
case "getBlockByNumber":
|
||||||
|
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
||||||
|
postData(data._seed, block)
|
||||||
|
break
|
||||||
|
case "getBlockByHash":
|
||||||
|
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
||||||
|
postData(data._seed, block)
|
||||||
|
break
|
||||||
|
case "createTx":
|
||||||
|
if(data.args.length < 5) {
|
||||||
|
postData(data._seed, null)
|
||||||
|
} else {
|
||||||
|
var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
|
||||||
|
postData(data._seed, tx)
|
||||||
}
|
}
|
||||||
*/
|
break
|
||||||
|
case "getStorage":
|
||||||
onTitleChanged: { window.title = title }
|
if(data.args.length < 2) {
|
||||||
experimental.preferences.javascriptEnabled: true
|
postData(data._seed, null)
|
||||||
experimental.preferences.navigatorQtObjectEnabled: true
|
} else {
|
||||||
experimental.preferences.developerExtrasEnabled: true
|
var stateObject = eth.getStateObject(data.args[0])
|
||||||
experimental.userScripts: [ui.assetPath("ethereum.js")]
|
var storage = stateObject.getStorage(data.args[1])
|
||||||
experimental.onMessageReceived: {
|
postData(data._seed, storage)
|
||||||
//console.log("[onMessageReceived]: ", message.data)
|
|
||||||
var data = JSON.parse(message.data)
|
|
||||||
|
|
||||||
switch(data.call) {
|
|
||||||
case "getBlockByNumber":
|
|
||||||
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
|
||||||
postData(data._seed, block)
|
|
||||||
break
|
|
||||||
case "getBlockByHash":
|
|
||||||
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
|
||||||
postData(data._seed, block)
|
|
||||||
break
|
|
||||||
case "createTx":
|
|
||||||
if(data.args.length < 5) {
|
|
||||||
postData(data._seed, null)
|
|
||||||
} else {
|
|
||||||
var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
|
|
||||||
postData(data._seed, tx)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "getStorage":
|
|
||||||
if(data.args.length < 2) {
|
|
||||||
postData(data._seed, null)
|
|
||||||
} else {
|
|
||||||
var stateObject = eth.getStateObject(data.args[0])
|
|
||||||
var storage = stateObject.getStorage(data.args[1])
|
|
||||||
postData(data._seed, storage)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
case "getKey":
|
|
||||||
var keys = eth.getKey()
|
|
||||||
postData(data._seed, keys)
|
|
||||||
break
|
|
||||||
case "watch":
|
|
||||||
if(data.args.length > 0) {
|
|
||||||
eth.watch(data.args[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
function postData(seed, data) {
|
break
|
||||||
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
|
case "getKey":
|
||||||
}
|
var keys = eth.getKey()
|
||||||
function postEvent(event, data) {
|
postData(data._seed, keys)
|
||||||
webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
|
break
|
||||||
}
|
case "watch":
|
||||||
|
if(data.args.length > 0) {
|
||||||
function onNewBlockCb(block) {
|
eth.watch(data.args[0]);
|
||||||
postEvent("block:new", block)
|
}
|
||||||
}
|
break
|
||||||
function onObjectChangeCb(stateObject) {
|
|
||||||
postEvent("object:change", stateObject)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
function postData(seed, data) {
|
||||||
|
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
|
||||||
|
}
|
||||||
|
function postEvent(event, data) {
|
||||||
|
webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle {
|
function onNewBlockCb(block) {
|
||||||
id: sizeGrip
|
postEvent("block:new", block)
|
||||||
color: "gray"
|
}
|
||||||
visible: false
|
function onObjectChangeCb(stateObject) {
|
||||||
height: 10
|
postEvent("object:change", stateObject)
|
||||||
anchors {
|
}
|
||||||
left: root.left
|
|
||||||
right: root.right
|
|
||||||
}
|
|
||||||
y: Math.round(root.height * 2 / 3)
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
drag.target: sizeGrip
|
|
||||||
drag.minimumY: 0
|
|
||||||
drag.maximumY: root.height
|
|
||||||
drag.axis: Drag.YAxis
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WebView {
|
|
||||||
id: inspector
|
|
||||||
visible: false
|
|
||||||
url: webview.experimental.remoteInspectorUrl
|
|
||||||
anchors {
|
|
||||||
left: root.left
|
|
||||||
right: root.right
|
|
||||||
top: sizeGrip.bottom
|
|
||||||
bottom: root.bottom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "inspectorShown"
|
|
||||||
PropertyChanges {
|
|
||||||
target: inspector
|
|
||||||
url: webview.experimental.remoteInspectorUrl
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: sizeGrip
|
||||||
|
color: "gray"
|
||||||
|
visible: false
|
||||||
|
height: 10
|
||||||
|
anchors {
|
||||||
|
left: root.left
|
||||||
|
right: root.right
|
||||||
|
}
|
||||||
|
y: Math.round(root.height * 2 / 3)
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
drag.target: sizeGrip
|
||||||
|
drag.minimumY: 0
|
||||||
|
drag.maximumY: root.height
|
||||||
|
drag.axis: Drag.YAxis
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WebView {
|
||||||
|
id: inspector
|
||||||
|
visible: false
|
||||||
|
url: webview.experimental.remoteInspectorUrl
|
||||||
|
anchors {
|
||||||
|
left: root.left
|
||||||
|
right: root.right
|
||||||
|
top: sizeGrip.bottom
|
||||||
|
bottom: root.bottom
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
states: [
|
||||||
|
State {
|
||||||
|
name: "inspectorShown"
|
||||||
|
PropertyChanges {
|
||||||
|
target: inspector
|
||||||
|
url: webview.experimental.remoteInspectorUrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,8 +120,8 @@ func (ui *UiLib) Muted(content string) {
|
|||||||
go func() {
|
go func() {
|
||||||
path := "file://" + ui.AssetPath("muted/index.html")
|
path := "file://" + ui.AssetPath("muted/index.html")
|
||||||
win.Set("url", path)
|
win.Set("url", path)
|
||||||
debuggerPath := "file://" + ui.AssetPath("muted/debugger.html")
|
//debuggerPath := "file://" + ui.AssetPath("muted/debugger.html")
|
||||||
win.Set("debugUrl", debuggerPath)
|
//win.Set("debugUrl", debuggerPath)
|
||||||
|
|
||||||
win.Show()
|
win.Show()
|
||||||
win.Wait()
|
win.Wait()
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/eth-go/ethwire"
|
"github.com/ethereum/eth-go/ethwire"
|
||||||
"github.com/ethereum/go-ethereum/utils"
|
"github.com/ethereum/go-ethereum/utils"
|
||||||
|
"github.com/obscuren/mutan"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@ -190,7 +191,7 @@ func (i *Console) ParseInput(input string) bool {
|
|||||||
case "contract":
|
case "contract":
|
||||||
fmt.Println("Contract editor (Ctrl-D = done)")
|
fmt.Println("Contract editor (Ctrl-D = done)")
|
||||||
|
|
||||||
mainInput, initInput := ethutil.PreProcess(i.Editor())
|
mainInput, initInput := mutan.PreProcess(i.Editor())
|
||||||
mainScript, err := utils.Compile(mainInput)
|
mainScript, err := utils.Compile(mainInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user