diff --git a/assets/js/ballot.sol.js b/assets/js/ballot.sol.js index c415131fd2..3ce12967c3 100644 --- a/assets/js/ballot.sol.js +++ b/assets/js/ballot.sol.js @@ -22,9 +22,9 @@ * THE SOFTWARE. */ -var multi = function(func) { return func.toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; } +var multi = function (func) { return func.toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]; }; -var BALLOT_EXAMPLE = multi(function(){/*contract Ballot { +var BALLOT_EXAMPLE = multi(function () { /*contract Ballot { struct Voter { uint weight; diff --git a/background.js b/background.js index 332bd20c27..21df85f296 100644 --- a/background.js +++ b/background.js @@ -1,10 +1,9 @@ -chrome.browserAction.onClicked.addListener(function (tab) { - - chrome.storage.sync.set({ 'chrome-app-sync' : true }); +/* global chrome */ +chrome.browserAction.onClicked.addListener(function (tab) { + chrome.storage.sync.set({ 'chrome-app-sync': true }); - chrome.tabs.create({ 'url': chrome.extension.getURL('index.html') }, function (tab) { + chrome.tabs.create({ 'url': chrome.extension.getURL('index.html') }, function (tab) { // tab opened - }); - + }); }); diff --git a/src/app.js b/src/app.js index 15c5b1c247..79d010ec04 100644 --- a/src/app.js +++ b/src/app.js @@ -1,3 +1,5 @@ +/* global alert, confirm, prompt, Option, Worker, soljsonSources */ + var $ = require('jquery'); var utils = require('./app/utils'); @@ -13,452 +15,441 @@ var Compiler = require('./app/compiler'); var filesToLoad = null; var loadFilesCallback = function (files) { filesToLoad = files; }; // will be replaced later window.addEventListener('message', function (ev) { - if (typeof ev.data === typeof [] && ev.data[0] === 'loadFiles') { - loadFilesCallback(ev.data[1]); - } + if (typeof ev.data === typeof [] && ev.data[0] === 'loadFiles') { + loadFilesCallback(ev.data[1]); + } }, false); var run = function () { - - function loadFiles (files) { - for (var f in files) { - var key = utils.fileKey(f); - var content = files[f].content; - if (key in window.localStorage && window.localStorage[key] !== content) { - var count = ''; - var otherKey = key + count; - while ((key + count) in window.localStorage) count = count - 1; - window.localStorage[key + count] = window.localStorage[key]; - } - window.localStorage[key] = content; - } - editor.setCacheFile(Object.keys(files)[0]); - updateFiles(); - } - - loadFilesCallback = function (files) { - loadFiles(files); - }; - - if (filesToLoad !== null) { - loadFiles(filesToLoad); + function loadFiles (files) { + for (var f in files) { + var key = utils.fileKey(f); + var content = files[f].content; + if (key in window.localStorage && window.localStorage[key] !== content) { + var count = ''; + while ((key + count) in window.localStorage) count = count - 1; + window.localStorage[key + count] = window.localStorage[key]; + } + window.localStorage[key] = content; + } + editor.setCacheFile(Object.keys(files)[0]); + updateFiles(); + } + + loadFilesCallback = function (files) { + loadFiles(files); + }; + + if (filesToLoad !== null) { + loadFiles(filesToLoad); + } + + // ------------------ query params (hash) ---------------- + + function syncQueryParams () { + $('#optimize').attr('checked', (queryParams.get().optimize === 'true')); + } + + window.onhashchange = syncQueryParams; + syncQueryParams(); + + // -------- check file upload capabilities ------- + + if (!(window.File || window.FileReader || window.FileList || window.Blob)) { + $('.uploadFile').remove(); + } + + // ------------------ gist load ---------------- + + var loadingFromGist = gistHandler.handleLoad(function (gistId) { + $.ajax({ + url: 'https://api.github.com/gists/' + gistId, + jsonp: 'callback', + dataType: 'jsonp', + success: function (response) { + if (response.data) { + if (!response.data.files) { + alert('Gist load error: ' + response.data.message); + return; + } + loadFiles(response.data.files); } - - - // ------------------ query params (hash) ---------------- - - function syncQueryParams () { - $('#optimize').attr('checked', (queryParams.get().optimize === 'true')); - } - - window.onhashchange = syncQueryParams; - syncQueryParams(); - - // -------- check file upload capabilities ------- - if (!(window.File || window.FileReader || window.FileList || window.Blob)) { - $(".uploadFile").remove(); - } - - // ------------------ gist load ---------------- - - var loadingFromGist = gistHandler.handleLoad(function (gistId) { - $.ajax({ - url: 'https://api.github.com/gists/' + gistId, - jsonp: 'callback', - dataType: 'jsonp', - success: function (response) { - if (response.data) { - if (!response.data.files) { - alert('Gist load error: ' + response.data.message); - return; - } - loadFiles(response.data.files); - } - } + } + }); + }); + + // ----------------- storage -------------------- + + var storageHandler = new StorageHandler(updateFiles); + window.syncStorage = storageHandler.sync; + storageHandler.sync(); + + // ----------------- editor ---------------------- + + var editor = new Editor(loadingFromGist); + + // ----------------- tabbed menu ------------------- + + $('#options li').click(function (ev) { + var $el = $(this); + var match = /[a-z]+View/.exec($el.get(0).className); + if (!match) return; + var cls = match[0]; + if (!$el.hasClass('active')) { + $el.parent().find('li').removeClass('active'); + $('#optionViews').attr('class', '').addClass(cls); + $el.addClass('active'); + } else { + $el.removeClass('active'); + $('#optionViews').removeClass(cls); + } + }); + + // ------------------ gist publish -------------- + + $('#gist').click(function () { + if (confirm('Are you sure you want to publish all your files anonymously as a public gist on github.com?')) { + var files = editor.packageFiles(); + var description = 'Created using browser-solidity: Realtime Ethereum Contract Compiler and Runtime. \n Load this file by pasting this gists URL or ID at https://ethereum.github.io/browser-solidity/#version=' + queryParams.get().version + '&optimize=' + queryParams.get().optimize + '&gist='; + + $.ajax({ + url: 'https://api.github.com/gists', + type: 'POST', + data: JSON.stringify({ + description: description, + public: true, + files: files + }) + }).done(function (response) { + if (response.html_url && confirm('Created a gist at ' + response.html_url + ' Would you like to open it in a new window?')) { + window.open(response.html_url, '_blank'); + } + }); + } + }); + + $('#copyOver').click(function () { + var target = prompt( + 'To which other browser-solidity instance do you want to copy over all files?', + 'https://ethereum.github.io/browser-solidity/' + ); + if (target === null) { + return; + } + var files = editor.packageFiles(); + $('