Lots of good UI updates and code formatting

This commit is contained in:
Nathan Parikh 2017-08-25 15:15:06 -05:00
parent 504aed67be
commit 2f52fd2978
4 changed files with 779 additions and 225 deletions

View File

@ -4,10 +4,13 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Latest Crypto Prices</title> <title>Latest Crypto Prices</title>
<link href="https://fonts.googleapis.com/css?family=Heebo:100,400" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Heebo:100,400" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet">
<style type="text/css"> <style type="text/css">
/*@import url('https://rsms.me/interface/interface.css');*/
body { body {
background: #000; background: #000;
font-family: 'Heebo', sans-serif; /*font-family: 'Heebo', sans-serif;*/
font-family: 'Inconsolata', monospace;
color: #fff; color: #fff;
} }
.titlebar { .titlebar {
@ -61,8 +64,8 @@
#prices { #prices {
margin: 0; margin: 0;
padding: 0; padding: 0;
font-size: 36px; font-size: 28px;
font-weight: 100; font-weight: 400;
} }
#prices li { #prices li {
margin: 0px 0px 15px 0px; margin: 0px 0px 15px 0px;
@ -82,8 +85,97 @@
.inactive { .inactive {
display: none; display: none;
} }
/*Settings Page*/
#myInput {
font-family: 'Inconsolata', monospace;
border: none;
padding: 0px 0px 10px;
font-size: 14px;
background: #000;
color: #fff;
outline: none;
border-bottom: 1px solid #252525;
display: block;
width: 100%;
}
#saveCoins {
background-color: #000000;
color: #fff;
border: 1px solid #252525;
padding: 5px 10px;
margin: -1px 0px 0px 0px;
font-family: 'Inconsolata', monospace;
}
#coinlist {
margin: 15px 0px 0px 0px;
padding: 0;
max-height: 240px;
overflow: scroll;
}
/*Scrollbar*/
::-webkit-scrollbar,
::-webkit-scrollbar-corner {
background-color: black;
}
::-webkit-scrollbar {
width: .5em;
}
::-webkit-scrollbar-thumb:window-inactive,
::-webkit-scrollbar-thumb {
background: #252525;
-webkit-border-radius: 100px;
}
/*Select Boxes*/
.custom-select {
position: relative;
display: inline-block;
}
.custom-select select {
display: inline-block;
border: 1px solid #252525;
padding: 4px 3px 3px 5px;
margin: 0;
font: inherit;
outline: none;
line-height: 1.2;
background: #000000;
-webkit-appearance: none;
width: 145px;
color: #fff;
}
/* for Webkit's CSS-only solution */
@media screen and (-webkit-min-device-pixel-ratio:0) {
.custom-select select {
padding-right:30px;
}
}
/* Since we removed the default focus styles, we have to add our own */
.custom-select select:focus {
-webkit-box-shadow: 0 0 3px 1px #00afc1;
-moz-box-shadow: 0 0 3px 1px #00afc1;
box-shadow: 0 0 3px 1px #00afc1;
}
/* Select arrow styling */
.custom-select:after {
content: "▼";
position: absolute;
top: 0;
right: 0;
bottom: 0;
font-size: 60%;
line-height: 30px;
padding: 0 7px;
background: #252525;
color: white;
pointer-events: none;
}
</style> </style>
</head> </head>
<body> <body>
<header style="-webkit-app-region: drag" class="titlebar"> <header style="-webkit-app-region: drag" class="titlebar">
<div class="controls"> <div class="controls">
@ -92,37 +184,35 @@
</div> </div>
<button id="settings-btn" onclick="toggleSettings()"><img src="images/icons8-Settings.png"></button> <button id="settings-btn" onclick="toggleSettings()"><img src="images/icons8-Settings.png"></button>
</header> </header>
<div id="main" class="panel active"> <div id="main" class="panel active">
<ul id="prices"> <ul id="prices">
</ul> </ul>
</div><!-- #main -->
<div>
Hello <span id="firstname"></span>
</div>
</div>
<div id="settings" class="panel inactive"> <div id="settings" class="panel inactive">
<h3>Choose Your Coins</h3> <h3>Choose Your Coins</h3>
<div id="coinsearch"> <div id="coinsearch">
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.."> <input type="text" id="myInput" onkeyup="myFunction()" placeholder="Type here to filter list">
<button type="button" style="background-color: #fff;" id="saveCoins">Click Me!</button> <button type="button" id="saveCoins">Save</button>
<ul id="coinlist"> <ul id="coinlist">
</ul> </ul>
</div> </div><!-- #coinsearch -->
<h3>Choose Your Base Currency</h3> <h3>Choose Your Base Currency</h3>
<select id="base" onchange="setBase()"> <label class="custom-select">
<option value="USD">USD</option> <select id="base" onchange="setBase()">
<option value="EUR">EUR</option> <option value="USD">USD</option>
<option value="GBP">GBP</option> <option value="EUR">EUR</option>
<option value="BTC">BTC</option> <option value="GBP">GBP</option>
<option value="LTC">LTC</option> <option value="BTC">BTC</option>
<option value="ETH">ETH</option> <option value="LTC">LTC</option>
</select> <option value="ETH">ETH</option>
</div> </select>
</label>
</div><!-- #settings -->
</body> </body>
<script> <script>
@ -131,7 +221,9 @@
</script> </script>
<script> <script>
/******************
* APP FUNCTIONALITY
******************/
(function() { (function() {
function loadJSON(callback) { function loadJSON(callback) {
@ -146,17 +238,18 @@
} }
}; };
xobj.send(null); xobj.send(null);
} } //loadJSON
// Generate the list of all coins
loadJSON(function(response) { loadJSON(function(response) {
// Parse JSON string into object // Parse JSON string into object
var myDiv = document.getElementById("coinlist"); var myDiv = document.getElementById("coinlist");
var actual_JSON = JSON.parse(response); var actual_JSON = JSON.parse(response);
//alert(settings.get('user.coins')); //alert(settings.get('user.coins'));
//console.log(actual_JSON.Data); //console.log(actual_JSON.Data);
//loop through data, get coin info, generate checkbox fore each coin
Object.keys(actual_JSON.Data).forEach(function(key) { Object.keys(actual_JSON.Data).forEach(function(key) {
//console.log(actual_JSON.Data[key].Name); //console.log(actual_JSON.Data[key].Name);
//console.log(actual_JSON.Data[key].CoinName); //console.log(actual_JSON.Data[key].CoinName);
var li = document.createElement("li"); var li = document.createElement("li");
@ -178,13 +271,12 @@
li.appendChild(label); li.appendChild(label);
label.appendChild(document.createTextNode(actual_JSON.Data[key].CoinName)); label.appendChild(document.createTextNode(actual_JSON.Data[key].CoinName));
label.appendChild(document.createTextNode(' ('+actual_JSON.Data[key].Name+')')); label.appendChild(document.createTextNode(' ('+actual_JSON.Data[key].Name+')'));
}); }); //forEach
}); }); //loadJSON
base = 'USD'; base = 'USD';
setBase = function() { setBase = function() {
//selected base currency //selected base currency
var x = document.getElementById("base").selectedIndex; var x = document.getElementById("base").selectedIndex;
var y = document.getElementById("base").options; var y = document.getElementById("base").options;
@ -193,153 +285,135 @@
})(); })();
function createNode(element) { //Functions for creating/appending elements
return document.createElement(element); function createNode(element) {
} return document.createElement(element);
function append(parent, el) { }
return parent.appendChild(el); function append(parent, el) {
} return parent.appendChild(el);
//user settings
const settings = require('electron-settings');
settings.set('name', {
first: 'Nathan',
last: 'Parikh'
});
// Returns an array with values of the selected (checked) checkboxes in "frm"
function getSelectedChbox(frm) {
// JavaScript & jQuery Course - http://coursesweb.net/javascript/
var selchbox = []; // array that will store the value of selected checkboxes
// gets all the input tags in frm, and their number
var inpfields = frm.getElementsByTagName('input');
var nr_inpfields = inpfields.length;
// traverse the inpfields elements, and adds the value of selected (checked) checkbox in selchbox
for(var i=0; i<nr_inpfields; i++) {
if(inpfields[i].type == 'checkbox' && inpfields[i].checked == true) selchbox.push(inpfields[i].value);
} }
return selchbox; //user settings
} const settings = require('electron-settings');
settings.set('name', {
/* Test this function */ first: 'Nathan',
document.getElementById('firstname').innerHTML = settings.get('user.coins'); last: 'Parikh'
// When click on #btntest, alert the selected values
document.getElementById('saveCoins').onclick = function(){
var coinForm = document.getElementById('coinlist');
var selchb = getSelectedChbox(coinForm); // gets the array returned by getSelectedChbox()
alert(selchb);
settings.set('user', {
coins: selchb
}); });
var selectedCoins = settings.get('user.coins'); // Returns an array with values of the selected (checked) checkboxes in "frm"
document.getElementById('firstname').innerHTML = selectedCoins; function getSelectedChbox(frm) {
} var selchbox = []; // array that will store the value of selected checkboxes
// gets all the input tags in frm, and their number
var inpfields = frm.getElementsByTagName('input');
var nr_inpfields = inpfields.length;
// traverse the inpfields elements, and adds the value of selected (checked) checkbox in selchbox
for(var i=0; i<nr_inpfields; i++) {
if(inpfields[i].type == 'checkbox' && inpfields[i].checked == true) selchbox.push(inpfields[i].value);
}
return selchbox;
}
const ul = document.getElementById('prices'); // Get the list where we will place our authors /* Test this function */
const url = 'https://min-api.cryptocompare.com/data/pricemultifull?fsyms='+settings.get('user.coins') +'&tsyms='+base +'&extraParams=your_app_name'; //document.getElementById('firstname').innerHTML = settings.get('user.coins');
// Click on #saveCoins, save the coin selection to the user
function initData() { document.getElementById('saveCoins').onclick = function(){
fetch(url) var coinForm = document.getElementById('coinlist');
.then( var selchb = getSelectedChbox(coinForm); // gets the array returned by getSelectedChbox()
function(response) { alert(selchb);
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' + settings.set('user', {
response.status); coins: selchb
return; });
var selectedCoins = settings.get('user.coins');
//document.getElementById('firstname').innerHTML = selectedCoins;
}
const ul = document.getElementById('prices'); // Get the list where we will place coins
const url = 'https://min-api.cryptocompare.com/data/pricemultifull?fsyms='+settings.get('user.coins') +'&tsyms='+base +'&extraParams=your_app_name';
function initData() {
fetch(url)
.then(
function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
return;
}
// Examine the response
response.json().then(function(data) {
//console.log(data);
let prices = data.DISPLAY;
var i = 0;
for (let key of Object.keys(prices)) {
let coin = prices[key];
//console.log(coin);
let li = createNode('li'),
span = createNode('span');
li.setAttribute("class", "price");
li.setAttribute("id", "coin-"+[key]);
//alert("coin-"+[key])
//console.log(settings.get('coin.'+[key]+'.order'));
li.setAttribute("sortorder", settings.get(li.id+'.order'));
//alert(settings.get(li.id+'.order'));
span.innerHTML = coin.USD.FROMSYMBOL + ' ' + coin.USD.PRICE + settings.get('coin.'+i+'.order');
append(li, span);
append(ul, li);
i++;
} }
//console.log(data.RAW.BTC.USD.PRICE)
// Examine the text in the response sortChildren(
response.json().then(function(data) { document.getElementById('prices'),
//console.log(data); function(li) { return +li.getAttribute('sortorder') }
);
let prices = data.DISPLAY; //sort your coins
var i = 0; sortable('#prices', {
for (let key of Object.keys(prices)) { handle: 'span'
let coin = prices[key]; })[0].addEventListener('sortstop', function(e) {
//console.log(coin); // Declare variables
let li = createNode('li'), var ul, li, i;
span = createNode('span'); ul = document.getElementById("prices");
li.setAttribute("class", "price"); li = ul.getElementsByTagName('li');
li.setAttribute("id", "coin-"+[key]);
//alert("coin-"+[key]) // Loop through all list items
//console.log(settings.get('coin.'+[key]+'.order')); for (i = 0; i < li.length; i++) {
li.setAttribute("sortorder", settings.get(li.id+'.order')); li[i].setAttribute("sortorder", i);
//alert(settings.get(li.id+'.order')); var elementID = li[i].id;
span.innerHTML = coin.USD.FROMSYMBOL + ' ' + coin.USD.PRICE + settings.get('coin.'+i+'.order'); //alert(elementID);
append(li, span); settings.set(elementID, { // coin-BTC
append(ul, li); order: li[i].getAttribute('sortorder')
i++; });
//alert(settings.get(elementID + '.order'));
} }
//console.log(data.RAW.BTC.USD.PRICE) //alert(settings.get('coin.'+e+'.order'));
sortChildren( /*
document.getElementById('prices'), This event is triggered when the user stopped sorting and the DOM position has changed.
function(li) { return +li.getAttribute('sortorder') }
);
//sort your coins e.detail.item contains the current dragged element.
sortable('#prices', { e.detail.index contains the new index of the dragged element (considering only list items)
handle: 'span' e.detail.oldindex contains the old index of the dragged element (considering only list items)
})[0].addEventListener('sortstop', function(e) { e.detail.elementIndex contains the new index of the dragged element (considering all items within sortable)
e.detail.oldElementIndex contains the old index of the dragged element (considering all items within sortable)
e.detail.startparent contains the element that the dragged item comes from
e.detail.endparent contains the element that the dragged item was added to (new parent)
e.detail.newEndList contains all elements in the list the dragged item was dragged to
e.detail.newStartList contains all elements in the list the dragged item was dragged from
e.detail.oldStartList contains all elements in the list the dragged item was dragged from BEFORE it was dragged from it
*/
}); //sortable
}); //response.json
// Declare variables } //function(response)
var ul, li, i; ) //.then
ul = document.getElementById("prices"); .catch(function(err) {
li = ul.getElementsByTagName('li'); console.log('Fetch Error :-S', err);
});
// Loop through all list items, and hide those who don't match the search query updateData();
for (i = 0; i < li.length; i++) {
li[i].setAttribute("sortorder", i);
var elementID = li[i].id;
//alert(elementID);
settings.set(elementID, { // coin-BTC
order: li[i].getAttribute('sortorder')
});
//alert(settings.get(elementID + '.order'));
}
//alert(settings.get('coin.'+e+'.order'));
/*
*/
//
//now figure out how to sort by attribute sortorder on load
/*
This event is triggered when the user stopped sorting and the DOM position has changed.
e.detail.item contains the current dragged element.
e.detail.index contains the new index of the dragged element (considering only list items)
e.detail.oldindex contains the old index of the dragged element (considering only list items)
e.detail.elementIndex contains the new index of the dragged element (considering all items within sortable)
e.detail.oldElementIndex contains the old index of the dragged element (considering all items within sortable)
e.detail.startparent contains the element that the dragged item comes from
e.detail.endparent contains the element that the dragged item was added to (new parent)
e.detail.newEndList contains all elements in the list the dragged item was dragged to
e.detail.newStartList contains all elements in the list the dragged item was dragged from
e.detail.oldStartList contains all elements in the list the dragged item was dragged from BEFORE it was dragged from it
*/
});
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
updateData();
} }
function updateData() { function updateData() {
@ -354,54 +428,58 @@ document.getElementById('saveCoins').onclick = function(){
} }
// Examine the text in the response // Examine the text in the response
response.json().then(function(data) { response.json().then(function(data) {
let prices = data.DISPLAY; let pricesDISPLAY = data.DISPLAY; // display for everything except coin symbol
for (let key of Object.keys(prices)) { let pricesRAW = data.RAW; // raw to get BTC instead of bitcoin symbol
let coin = prices[key]; for (let key of Object.keys(pricesRAW)) {
//console.log(coin); let coinDISPLAY = pricesDISPLAY[key];
let coinRAW = pricesRAW[key];
console.log(coinDISPLAY);
let li = document.getElementById("coin-"+[key]), let li = document.getElementById("coin-"+[key]),
span = document.querySelector("#coin-"+[key]+" span"); span = document.querySelector("#coin-"+[key]+" span");
//console.log(span); //console.log(span);
span.innerHTML = coin[base].FROMSYMBOL + ' ' + coin[base].PRICE; span.innerHTML = coinRAW[base].FROMSYMBOL + ' ' + coinDISPLAY[base].PRICE.replace(/ /g,''); //.replace(/ /g,'') removes space after $
} }
}); });
} }
) )
setTimeout(function(){updateData()}, 1000); setTimeout(function(){updateData()}, 1000); // run this once every second
} }
initData(); // Let's do this thing!
initData();
//controls /*******
const remote = require('electron').remote; * APP UI
document.getElementById("close-btn").addEventListener("click", function (e) { ********/
var window = remote.getCurrentWindow();
window.close(); //Window controls
const remote = require('electron').remote;
document.getElementById("close-btn").addEventListener("click", function (e) {
var window = remote.getCurrentWindow();
window.close();
});
document.getElementById("min-btn").addEventListener("click", function (e) {
var window = remote.getCurrentWindow();
window.minimize();
}); });
document.getElementById("min-btn").addEventListener("click", function (e) { //settings tab/icon
var window = remote.getCurrentWindow(); function toggleSettings() {
window.minimize(); var divs = document.getElementsByClassName('panel'), i;
}); for (i = 0; i < divs.length; ++i) {
if(divs[i].classList.contains('inactive')) {
divs[i].classList.remove('inactive');
divs[i].classList.add('active');
}
else {
divs[i].classList.remove('active');
divs[i].classList.add('inactive');
}
}//for
}//toggleSettings
//settings //Coin search filter
function toggleSettings() { function myFunction() {
//var div = document.getElementsByClassName("panel");
var divs = document.getElementsByClassName('panel'), i;
//console.log(div);
for (i = 0; i < divs.length; ++i) {
if(divs[i].classList.contains('inactive')) {
divs[i].classList.remove('inactive');
divs[i].classList.add('active');
}
else {
divs[i].classList.remove('active');
divs[i].classList.add('inactive');
}
}
}
//search
function myFunction() {
// Declare variables // Declare variables
var input, filter, ul, li, a, i; var input, filter, ul, li, a, i;
input = document.getElementById('myInput'); input = document.getElementById('myInput');
@ -411,18 +489,18 @@ function myFunction() {
// Loop through all list items, and hide those who don't match the search query // Loop through all list items, and hide those who don't match the search query
for (i = 0; i < li.length; i++) { for (i = 0; i < li.length; i++) {
label = li[i].getElementsByTagName("label")[0]; label = li[i].getElementsByTagName("label")[0];
checkbox = li[i].getElementsByTagName("input")[0].value; checkbox = li[i].getElementsByTagName("input")[0].value;
if (label.innerHTML.toUpperCase().indexOf(filter) > -1) { if (label.innerHTML.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = ""; li[i].style.display = "";
} else { } else {
li[i].style.display = "none"; li[i].style.display = "none";
} }
} } //for
} } //myFunction
//sort by attribute //sort by attribute
function sortChildren(wrap, f, isNum) { function sortChildren(wrap, f, isNum) {
var l = wrap.children.length, var l = wrap.children.length,
arr = new Array(l); arr = new Array(l);
for(var i=0; i<l; ++i) for(var i=0; i<l; ++i)
@ -436,16 +514,8 @@ function sortChildren(wrap, f, isNum) {
par.removeChild(wrap); par.removeChild(wrap);
for(var i=0; i<l; ++i) wrap.appendChild(arr[i][1]); for(var i=0; i<l; ++i) wrap.appendChild(arr[i][1]);
par.insertBefore(wrap, ref); par.insertBefore(wrap, ref);
} } //sortChildren
</script>
</script> <script src="js/html.sortable.min.js"></script>
<script src="js/html.sortable.min.js"></script> </html>
<script type="text/javascript">
//sort your coins
</script>
</html>

View File

@ -30,7 +30,7 @@ function createWindow () {
y: mainWindowState.y, y: mainWindowState.y,
width: mainWindowState.width, width: mainWindowState.width,
height: mainWindowState.height, height: mainWindowState.height,
//maxWidth: 360, maxWidth: 360,
minWidth: 160, minWidth: 160,
minHeight: 150, minHeight: 150,
maximizable: false, maximizable: false,

482
package-lock.json generated
View File

@ -10,6 +10,12 @@
"integrity": "sha512-KQHAZeVsk4UIT9XaR6cn4WpHZzimK6UBD1UomQKfQQFmTlUHaNBzeuov+TM4+kigLO0IJt4I5OOsshcCyA9gSA==", "integrity": "sha512-KQHAZeVsk4UIT9XaR6cn4WpHZzimK6UBD1UomQKfQQFmTlUHaNBzeuov+TM4+kigLO0IJt4I5OOsshcCyA9gSA==",
"dev": true "dev": true
}, },
"abbrev": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
"integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
"dev": true
},
"acorn": { "acorn": {
"version": "4.0.13", "version": "4.0.13",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
@ -142,6 +148,37 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
}, },
"asar": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/asar/-/asar-0.13.0.tgz",
"integrity": "sha1-3zPdnQG/+EJGTQ2fCVdA1KYq+xQ=",
"dev": true,
"requires": {
"chromium-pickle-js": "0.2.0",
"commander": "2.11.0",
"cuint": "0.2.2",
"glob": "6.0.4",
"minimatch": "3.0.4",
"mkdirp": "0.5.0",
"mksnapshot": "0.3.1",
"tmp": "0.0.28"
},
"dependencies": {
"glob": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
"dev": true,
"requires": {
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
}
}
},
"asn1": { "asn1": {
"version": "0.2.3", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
@ -1010,6 +1047,12 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
}, },
"base64-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
"integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
"dev": true
},
"bcrypt-pbkdf": { "bcrypt-pbkdf": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
@ -1020,6 +1063,16 @@
"tweetnacl": "0.14.5" "tweetnacl": "0.14.5"
} }
}, },
"binary": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
"dev": true,
"requires": {
"buffers": "0.1.1",
"chainsaw": "0.1.0"
}
},
"binary-extensions": { "binary-extensions": {
"version": "1.9.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz",
@ -1085,6 +1138,12 @@
"resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz",
"integrity": "sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U=" "integrity": "sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U="
}, },
"buffers": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
"dev": true
},
"builtin-modules": { "builtin-modules": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
@ -1169,6 +1228,23 @@
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true "dev": true
}, },
"chainsaw": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
"dev": true,
"requires": {
"traverse": "0.3.9"
},
"dependencies": {
"traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
"dev": true
}
}
},
"chalk": { "chalk": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
@ -1197,6 +1273,12 @@
"readdirp": "2.1.0" "readdirp": "2.1.0"
} }
}, },
"chromium-pickle-js": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
"integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
"dev": true
},
"ci-info": { "ci-info": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz",
@ -1291,6 +1373,12 @@
"delayed-stream": "1.0.0" "delayed-stream": "1.0.0"
} }
}, },
"commander": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
"dev": true
},
"common-path-prefix": { "common-path-prefix": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz", "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-1.0.0.tgz",
@ -1301,6 +1389,12 @@
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
}, },
"compare-version": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
"integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
"dev": true
},
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -1428,6 +1522,12 @@
"resolved": "https://registry.npmjs.org/cryptocurrencies/-/cryptocurrencies-1.0.0.tgz", "resolved": "https://registry.npmjs.org/cryptocurrencies/-/cryptocurrencies-1.0.0.tgz",
"integrity": "sha1-ejLy8qIqDSU9x0i9F6423HXW4L0=" "integrity": "sha1-ejLy8qIqDSU9x0i9F6423HXW4L0="
}, },
"cuint": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
"integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
"dev": true
},
"currently-unhandled": { "currently-unhandled": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@ -1479,6 +1579,21 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
}, },
"decompress-zip": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.0.tgz",
"integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=",
"dev": true,
"requires": {
"binary": "0.3.0",
"graceful-fs": "4.1.11",
"mkpath": "0.1.0",
"nopt": "3.0.6",
"q": "1.5.0",
"readable-stream": "1.1.14",
"touch": "0.0.3"
}
},
"deep-assign": { "deep-assign": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz",
@ -1672,6 +1787,110 @@
"sumchecker": "1.3.1" "sumchecker": "1.3.1"
} }
}, },
"electron-osx-sign": {
"version": "0.4.7",
"resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.7.tgz",
"integrity": "sha1-HXVkeoJ0jqzUi+pwYW7IP/rePuU=",
"dev": true,
"requires": {
"bluebird": "3.5.0",
"compare-version": "0.1.2",
"debug": "2.6.8",
"isbinaryfile": "3.0.2",
"minimist": "1.2.0",
"plist": "2.1.0"
}
},
"electron-packager": {
"version": "8.7.2",
"resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-8.7.2.tgz",
"integrity": "sha1-RX078kvJYHwGrUsettqkrMrcIQg=",
"dev": true,
"requires": {
"asar": "0.13.0",
"debug": "2.6.8",
"electron-download": "4.1.0",
"electron-osx-sign": "0.4.7",
"extract-zip": "1.6.5",
"fs-extra": "3.0.1",
"get-package-info": "1.0.0",
"minimist": "1.2.0",
"plist": "2.1.0",
"rcedit": "0.9.0",
"resolve": "1.4.0",
"run-series": "1.1.4",
"sanitize-filename": "1.6.1",
"semver": "5.4.1"
},
"dependencies": {
"electron-download": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.0.tgz",
"integrity": "sha1-v5MsdG8vh//MCdHdRy8v9rkYeEU=",
"dev": true,
"requires": {
"debug": "2.6.8",
"env-paths": "1.0.0",
"fs-extra": "2.1.2",
"minimist": "1.2.0",
"nugget": "2.0.1",
"path-exists": "3.0.0",
"rc": "1.2.1",
"semver": "5.4.1",
"sumchecker": "2.0.2"
},
"dependencies": {
"fs-extra": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
"integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"jsonfile": "2.4.0"
}
}
}
},
"fs-extra": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
"integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"jsonfile": "3.0.1",
"universalify": "0.1.1"
},
"dependencies": {
"jsonfile": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
"integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11"
}
}
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
"sumchecker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
"integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
"dev": true,
"requires": {
"debug": "2.6.8"
}
}
}
},
"electron-settings": { "electron-settings": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/electron-settings/-/electron-settings-3.1.1.tgz", "resolved": "https://registry.npmjs.org/electron-settings/-/electron-settings-3.1.1.tgz",
@ -1746,6 +1965,12 @@
"iconv-lite": "0.4.18" "iconv-lite": "0.4.18"
} }
}, },
"env-paths": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
"integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
"dev": true
},
"error-ex": { "error-ex": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
@ -2323,6 +2548,77 @@
"is-property": "1.0.2" "is-property": "1.0.2"
} }
}, },
"get-package-info": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz",
"integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=",
"dev": true,
"requires": {
"bluebird": "3.5.0",
"debug": "2.6.8",
"lodash.get": "4.4.2",
"read-pkg-up": "2.0.0"
},
"dependencies": {
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
"locate-path": "2.0.0"
}
},
"load-json-file": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"parse-json": "2.2.0",
"pify": "2.3.0",
"strip-bom": "3.0.0"
}
},
"path-type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
"dev": true,
"requires": {
"pify": "2.3.0"
}
},
"read-pkg": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"requires": {
"load-json-file": "2.0.0",
"normalize-package-data": "2.4.0",
"path-type": "2.0.0"
}
},
"read-pkg-up": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
"dev": true,
"requires": {
"find-up": "2.1.0",
"read-pkg": "2.0.0"
}
},
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
}
}
},
"get-set-props": { "get-set-props": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz", "resolved": "https://registry.npmjs.org/get-set-props/-/get-set-props-0.1.0.tgz",
@ -2912,6 +3208,12 @@
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true "dev": true
}, },
"isbinaryfile": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
"integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
"dev": true
},
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -3145,6 +3447,24 @@
"strip-bom": "2.0.0" "strip-bom": "2.0.0"
} }
}, },
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
"p-locate": "2.0.0",
"path-exists": "3.0.0"
},
"dependencies": {
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
}
}
},
"lodash": { "lodash": {
"version": "4.17.4", "version": "4.17.4",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
@ -3185,6 +3505,12 @@
"resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz",
"integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=" "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY="
}, },
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"lodash.kebabcase": { "lodash.kebabcase": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
@ -3366,6 +3692,38 @@
} }
} }
}, },
"mkpath": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz",
"integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=",
"dev": true
},
"mksnapshot": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.1.tgz",
"integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=",
"dev": true,
"requires": {
"decompress-zip": "0.3.0",
"fs-extra": "0.26.7",
"request": "2.81.0"
},
"dependencies": {
"fs-extra": {
"version": "0.26.7",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
"integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"jsonfile": "2.4.0",
"klaw": "1.3.1",
"path-is-absolute": "1.0.1",
"rimraf": "2.6.1"
}
}
}
},
"ms": { "ms": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -3401,6 +3759,15 @@
"resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8="
}, },
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
"abbrev": "1.1.0"
}
},
"normalize-package-data": { "normalize-package-data": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@ -3542,6 +3909,21 @@
"os-tmpdir": "1.0.2" "os-tmpdir": "1.0.2"
} }
}, },
"p-limit": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
"integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
"dev": true
},
"p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
"p-limit": "1.1.0"
}
},
"package-hash": { "package-hash": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/package-hash/-/package-hash-1.2.0.tgz", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-1.2.0.tgz",
@ -3676,6 +4058,17 @@
"find-up": "1.1.2" "find-up": "1.1.2"
} }
}, },
"plist": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
"integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
"dev": true,
"requires": {
"base64-js": "1.2.0",
"xmlbuilder": "8.2.2",
"xmldom": "0.1.27"
}
},
"plur": { "plur": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
@ -3891,6 +4284,12 @@
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true "dev": true
}, },
"q": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz",
"integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=",
"dev": true
},
"qs": { "qs": {
"version": "6.4.0", "version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
@ -3949,6 +4348,12 @@
"strip-json-comments": "2.0.1" "strip-json-comments": "2.0.1"
} }
}, },
"rcedit": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.9.0.tgz",
"integrity": "sha1-ORDfVzRTmeKwMl9KUZAH+J5V7xw=",
"dev": true
},
"read-all-stream": { "read-all-stream": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
@ -4279,6 +4684,12 @@
"once": "1.4.0" "once": "1.4.0"
} }
}, },
"run-series": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.4.tgz",
"integrity": "sha1-iac93F51ye+KtjIMChYA1qQRebk=",
"dev": true
},
"rx-lite": { "rx-lite": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
@ -4289,6 +4700,15 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
}, },
"sanitize-filename": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
"integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
"dev": true,
"requires": {
"truncate-utf8-bytes": "1.0.2"
}
},
"semver": { "semver": {
"version": "5.4.1", "version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
@ -4644,11 +5064,40 @@
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
"integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc="
}, },
"tmp": {
"version": "0.0.28",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
"integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
"dev": true,
"requires": {
"os-tmpdir": "1.0.2"
}
},
"to-fast-properties": { "to-fast-properties": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
}, },
"touch": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz",
"integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=",
"dev": true,
"requires": {
"nopt": "1.0.10"
},
"dependencies": {
"nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
"dev": true,
"requires": {
"abbrev": "1.1.0"
}
}
}
},
"tough-cookie": { "tough-cookie": {
"version": "2.3.2", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
@ -4673,6 +5122,15 @@
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
}, },
"truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
"dev": true,
"requires": {
"utf8-byte-length": "1.0.4"
}
},
"tryit": { "tryit": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
@ -4742,6 +5200,12 @@
} }
} }
}, },
"universalify": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
"integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
"dev": true
},
"unzip-response": { "unzip-response": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
@ -4778,6 +5242,12 @@
"os-homedir": "1.0.2" "os-homedir": "1.0.2"
} }
}, },
"utf8-byte-length": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
"dev": true
},
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -4916,6 +5386,18 @@
"os-homedir": "1.0.2" "os-homedir": "1.0.2"
} }
}, },
"xmlbuilder": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
"integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
"dev": true
},
"xmldom": {
"version": "0.1.27",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
"dev": true
},
"xo": { "xo": {
"version": "0.16.0", "version": "0.16.0",
"resolved": "https://registry.npmjs.org/xo/-/xo-0.16.0.tgz", "resolved": "https://registry.npmjs.org/xo/-/xo-0.16.0.tgz",

View File

@ -1,5 +1,6 @@
{ {
"name": "crypto-price-widget", "name": "crypto-price-widget",
"productName": "crypto-price-widget",
"version": "1.0.0", "version": "1.0.0",
"description": "A cross-platform app for tracking Crypto prices", "description": "A cross-platform app for tracking Crypto prices",
"main": "main.js", "main": "main.js",
@ -18,7 +19,8 @@
"author": "GitHub", "author": "GitHub",
"license": "CC0-1.0", "license": "CC0-1.0",
"devDependencies": { "devDependencies": {
"electron": "~1.6.2" "electron": "~1.6.2",
"electron-packager": "^8.7.2"
}, },
"dependencies": { "dependencies": {
"ava": "^0.15.2", "ava": "^0.15.2",