github.com/jonasnick/go-ethereum@v0.7.12-0.20150216215225-22176f05d387/cmd/mist/assets/qml/depricated_browser.qml (about) 1 import QtQuick 2.1 2 import QtWebKit 3.0 3 import QtWebKit.experimental 1.0 4 import QtQuick.Controls 1.0; 5 import QtQuick.Controls.Styles 1.0 6 import QtQuick.Layouts 1.0; 7 import QtQuick.Window 2.1; 8 import Ethereum 1.0 9 10 Rectangle { 11 id: window 12 anchors.fill: parent 13 color: "#00000000" 14 15 property var title: "DApps" 16 property var iconSource: "../browser.png" 17 property var menuItem 18 property var hideUrl: true 19 20 property alias url: webview.url 21 property alias windowTitle: webview.title 22 property alias webView: webview 23 24 property var cleanPath: false 25 property var open: function(url) { 26 if(!window.cleanPath) { 27 var uri = url; 28 if(!/.*\:\/\/.*/.test(uri)) { 29 uri = "http://" + uri; 30 } 31 32 var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/ 33 34 if(reg.test(uri)) { 35 uri.replace(reg, function(match, pre, domain, path) { 36 uri = pre; 37 38 var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4)); 39 var ip = []; 40 for(var i = 0, l = lookup.length; i < l; i++) { 41 ip.push(lookup.charCodeAt(i)) 42 } 43 44 if(ip.length != 0) { 45 uri += lookup; 46 } else { 47 uri += domain; 48 } 49 50 uri += path; 51 }); 52 } 53 54 window.cleanPath = true; 55 56 webview.url = uri; 57 58 //uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>"); 59 uriNav.text = uri; 60 } else { 61 // Prevent inf loop. 62 window.cleanPath = false; 63 } 64 } 65 66 Component.onCompleted: { 67 webview.url = "http://etherian.io" 68 } 69 70 function messages(messages, id) { 71 // Bit of a cheat to get proper JSON 72 var m = JSON.parse(JSON.parse(JSON.stringify(messages))) 73 webview.postEvent("eth_changed", id, m); 74 } 75 76 function onShhMessage(message, id) { 77 webview.postEvent("shh_changed", id, message) 78 } 79 80 Item { 81 objectName: "root" 82 id: root 83 anchors.fill: parent 84 state: "inspectorShown" 85 86 RowLayout { 87 id: navBar 88 height: 40 89 anchors { 90 left: parent.left 91 right: parent.right 92 leftMargin: 7 93 } 94 95 Button { 96 id: back 97 onClicked: { 98 webview.goBack() 99 } 100 style: ButtonStyle { 101 background: Image { 102 source: "../back.png" 103 width: 30 104 height: 30 105 } 106 } 107 } 108 109 TextField { 110 anchors { 111 left: back.right 112 right: toggleInspector.left 113 leftMargin: 10 114 rightMargin: 10 115 } 116 text: webview.url; 117 id: uriNav 118 y: parent.height / 2 - this.height / 2 119 120 Keys.onReturnPressed: { 121 webview.url = this.text; 122 } 123 } 124 125 Button { 126 id: toggleInspector 127 anchors { 128 right: parent.right 129 } 130 iconSource: "../bug.png" 131 onClicked: { 132 if(inspector.visible == true){ 133 inspector.visible = false 134 }else{ 135 inspector.visible = true 136 inspector.url = webview.experimental.remoteInspectorUrl 137 } 138 } 139 } 140 } 141 142 // Border 143 Rectangle { 144 id: divider 145 anchors { 146 left: parent.left 147 right: parent.right 148 top: navBar.bottom 149 } 150 z: -1 151 height: 1 152 color: "#CCCCCC" 153 } 154 155 ScrollView { 156 anchors { 157 left: parent.left 158 right: parent.right 159 bottom: parent.bottom 160 top: divider.bottom 161 } 162 WebView { 163 objectName: "webView" 164 id: webview 165 anchors.fill: parent 166 167 function sendMessage(data) { 168 webview.experimental.postMessage(JSON.stringify(data)) 169 } 170 171 experimental.preferences.javascriptEnabled: true 172 experimental.preferences.webAudioEnabled: true 173 experimental.preferences.pluginsEnabled: true 174 experimental.preferences.navigatorQtObjectEnabled: true 175 experimental.preferences.developerExtrasEnabled: true 176 experimental.preferences.webGLEnabled: true 177 experimental.preferences.notificationsEnabled: true 178 experimental.preferences.localStorageEnabled: true 179 experimental.userAgent:"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Mist/0.1 Safari/537.36" 180 181 experimental.itemSelector: MouseArea { 182 // To avoid conflicting with ListView.model when inside Initiator context. 183 property QtObject selectorModel: model 184 anchors.fill: parent 185 onClicked: selectorModel.reject() 186 187 Menu { 188 visible: true 189 id: itemSelector 190 191 Instantiator { 192 model: selectorModel.items 193 delegate: MenuItem { 194 text: model.text 195 onTriggered: { 196 selectorModel.accept(index) 197 } 198 } 199 onObjectAdded: itemSelector.insertItem(index, object) 200 onObjectRemoved: itemSelector.removeItem(object) 201 } 202 } 203 204 Component.onCompleted: { 205 itemSelector.popup() 206 } 207 } 208 experimental.userScripts: ["../ext/q.js", "../ext/ethereum.js/lib/web3.js", "../ext/ethereum.js/lib/qt.js", "../ext/setup.js"] 209 experimental.onMessageReceived: { 210 //console.log("[onMessageReceived]: ", message.data) 211 var data = JSON.parse(message.data) 212 213 try { 214 switch(data.call) { 215 case "eth_compile": 216 postData(data._id, eth.compile(data.args[0])) 217 break 218 219 case "eth_coinbase": 220 postData(data._id, eth.coinBase()) 221 222 case "eth_account": 223 postData(data._id, eth.key().address); 224 225 case "eth_istening": 226 postData(data._id, eth.isListening()) 227 228 break 229 230 case "eth_mining": 231 postData(data._id, eth.isMining()) 232 233 break 234 235 case "eth_peerCount": 236 postData(data._id, eth.peerCount()) 237 238 break 239 240 case "eth_countAt": 241 require(1) 242 postData(data._id, eth.txCountAt(data.args[0])) 243 244 break 245 246 case "eth_codeAt": 247 require(1) 248 var code = eth.codeAt(data.args[0]) 249 postData(data._id, code); 250 251 break 252 253 case "eth_blockByNumber": 254 require(1) 255 var block = eth.blockByNumber(data.args[0]) 256 postData(data._id, block) 257 break 258 259 case "eth_blockByHash": 260 require(1) 261 var block = eth.blockByHash(data.args[0]) 262 postData(data._id, block) 263 break 264 265 require(2) 266 var block = eth.blockByHash(data.args[0]) 267 postData(data._id, block.transactions[data.args[1]]) 268 break 269 270 case "eth_transactionByHash": 271 case "eth_transactionByNumber": 272 require(2) 273 274 var block; 275 if (data.call === "transactionByHash") 276 block = eth.blockByHash(data.args[0]) 277 else 278 block = eth.blockByNumber(data.args[0]) 279 280 var tx = block.transactions.get(data.args[1]) 281 282 postData(data._id, tx) 283 break 284 285 case "eth_uncleByHash": 286 case "eth_uncleByNumber": 287 require(2) 288 289 var block; 290 if (data.call === "uncleByHash") 291 block = eth.blockByHash(data.args[0]) 292 else 293 block = eth.blockByNumber(data.args[0]) 294 295 var uncle = block.uncles.get(data.args[1]) 296 297 postData(data._id, uncle) 298 299 break 300 301 case "transact": 302 require(5) 303 304 var tx = eth.transact(data.args) 305 postData(data._id, tx) 306 307 break 308 309 case "eth_stateAt": 310 require(2); 311 312 var storage = eth.storageAt(data.args[0], data.args[1]); 313 postData(data._id, storage) 314 315 break 316 317 case "eth_call": 318 require(1); 319 var ret = eth.call(data.args) 320 postData(data._id, ret) 321 break 322 323 case "eth_balanceAt": 324 require(1); 325 326 postData(data._id, eth.balanceAt(data.args[0])); 327 break 328 329 case "eth_watch": 330 require(2) 331 eth.watch(data.args[0], data.args[1]) 332 333 case "eth_disconnect": 334 require(1) 335 postData(data._id, null) 336 break; 337 338 case "eth_newFilterString": 339 require(1) 340 var id = eth.newFilterString(data.args[0], window) 341 postData(data._id, id); 342 break; 343 344 case "eth_newFilter": 345 require(1) 346 var id = eth.newFilter(data.args[0], window) 347 348 postData(data._id, id); 349 break; 350 351 case "eth_filterLogs": 352 require(1); 353 354 var messages = eth.messages(data.args[0]); 355 var m = JSON.parse(JSON.parse(JSON.stringify(messages))) 356 postData(data._id, m); 357 358 break; 359 360 case "eth_deleteFilter": 361 require(1); 362 eth.uninstallFilter(data.args[0]) 363 break; 364 365 366 case "shh_newFilter": 367 require(1); 368 var id = shh.watch(data.args[0], window); 369 postData(data._id, id); 370 break; 371 372 case "shh_newIdentity": 373 var id = shh.newIdentity() 374 postData(data._id, id) 375 376 break 377 378 case "shh_post": 379 require(1); 380 381 var params = data.args[0]; 382 var fields = ["payload", "to", "from"]; 383 for(var i = 0; i < fields.length; i++) { 384 params[fields[i]] = params[fields[i]] || ""; 385 } 386 if(typeof params.payload !== "object") { params.payload = [params.payload]; } //params.payload = params.payload.join(""); } 387 params.topics = params.topics || []; 388 params.priority = params.priority || 1000; 389 params.ttl = params.ttl || 100; 390 391 shh.post(params.payload, params.to, params.from, params.topics, params.priority, params.ttl); 392 393 break; 394 395 case "shh_getMessages": 396 require(1); 397 398 var m = shh.messages(data.args[0]); 399 var messages = JSON.parse(JSON.parse(JSON.stringify(m))); 400 postData(data._id, messages); 401 402 break; 403 404 case "ssh_newGroup": 405 postData(data._id, ""); 406 break; 407 } 408 } catch(e) { 409 console.log(data.call + ": " + e) 410 411 postData(data._id, null); 412 } 413 } 414 415 function post(seed, data) { 416 postData(data._id, data) 417 } 418 function require(args, num) { 419 if(args.length < num) { 420 throw("required argument count of "+num+" got "+args.length); 421 } 422 } 423 function postData(seed, data) { 424 webview.experimental.postMessage(JSON.stringify({data: data, _id: seed})) 425 } 426 function postEvent(event, id, data) { 427 webview.experimental.postMessage(JSON.stringify({data: data, _id: id, _event: event})) 428 } 429 function onWatchedCb(data, id) { 430 var messages = JSON.parse(data) 431 postEvent("watched:"+id, messages) 432 } 433 function onNewBlockCb(block) { 434 postEvent("block:new", block) 435 } 436 function onObjectChangeCb(stateObject) { 437 postEvent("object:"+stateObject.address(), stateObject) 438 } 439 function onStorageChangeCb(storageObject) { 440 var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":"); 441 postEvent(ev, [storageObject.address, storageObject.value]) 442 } 443 } 444 } 445 446 Rectangle { 447 id: sizeGrip 448 color: "gray" 449 visible: false 450 height: 10 451 anchors { 452 left: root.left 453 right: root.right 454 } 455 y: Math.round(root.height * 2 / 3) 456 457 MouseArea { 458 anchors.fill: parent 459 drag.target: sizeGrip 460 drag.minimumY: 0 461 drag.maximumY: root.height 462 drag.axis: Drag.YAxis 463 } 464 } 465 466 WebView { 467 id: inspector 468 visible: false 469 anchors { 470 left: root.left 471 right: root.right 472 top: sizeGrip.bottom 473 bottom: root.bottom 474 } 475 } 476 477 states: [ 478 State { 479 name: "inspectorShown" 480 PropertyChanges { 481 target: inspector 482 } 483 } 484 ] 485 } 486 }