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  }