diff --git a/lib/email.js b/lib/email.js index 85548312..afa2353f 100644 --- a/lib/email.js +++ b/lib/email.js @@ -1,10 +1,8 @@ const configManager = require('./config-manager') -const settingsLoader = require('./settings-loader') -function sendMessage (rec) { +function sendMessage (settings, rec) { return Promise.resolve() .then(() => { - const settings = settingsLoader.settings() const pluginCode = configManager.unscoped(settings.config).email if (!pluginCode) throw new Error('No email plugin defined') diff --git a/lib/plugins.js b/lib/plugins.js index a4f8d71a..d96b9b63 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -266,7 +266,7 @@ function plugins (settings) { } } - return sms.sendMessage(rec) + return sms.sendMessage(settings, rec) .then(() => dbm.updateNotify(tx)) } @@ -403,8 +403,8 @@ function plugins (settings) { const config = configManager.unscoped(settings.config) let promises = [] - if (config.notificationsEmailEnabled) promises.push(email.sendMessage(rec)) - if (config.notificationsSMSEnabled) promises.push(sms.sendMessage(rec)) + if (config.notificationsEmailEnabled) promises.push(email.sendMessage(settings, rec)) + if (config.notificationsSMSEnabled) promises.push(sms.sendMessage(settings, rec)) return Promise.all(promises) } @@ -466,7 +466,7 @@ function plugins (settings) { } } - return sms.sendMessage(rec) + return sms.sendMessage(settings, rec) .then(() => code) } diff --git a/lib/sms.js b/lib/sms.js index 8103485e..189282bc 100644 --- a/lib/sms.js +++ b/lib/sms.js @@ -1,10 +1,8 @@ const configManager = require('./config-manager') -const settingsLoader = require('./settings-loader') -function sendMessage (rec) { +function sendMessage (settings, rec) { return Promise.resolve() .then(() => { - const settings = settingsLoader.settings() const pluginCode = configManager.unscoped(settings.config).sms if (!pluginCode) throw new Error('No sms plugin defined') diff --git a/package.json b/package.json index 03128e40..e4d070fa 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,8 @@ "pretty-ms": "^2.1.0", "ramda": "^0.22.1", "serve-static": "^1.11.1", + "socket.io": "^1.7.1", + "socket.io-client": "^1.7.1", "uuid": "^3.0.0", "winston": "^2.3.0" }, diff --git a/public/elm.js b/public/elm.js index 95e99b6d..aaadbc7a 100644 --- a/public/elm.js +++ b/public/elm.js @@ -22440,6 +22440,8 @@ var _user$project$Css_Admin$className = function ($class) { return A2(_rtfeldman$elm_css_util$Css_Helpers$identifierToString, _user$project$Css_Admin$name, $class); }; +var _user$project$Css_Classes$UnitDisplay = {ctor: 'UnitDisplay'}; +var _user$project$Css_Classes$InputContainer = {ctor: 'InputContainer'}; var _user$project$Css_Classes$TxTable = {ctor: 'TxTable'}; var _user$project$Css_Classes$DateColumn = {ctor: 'DateColumn'}; var _user$project$Css_Classes$TruncatedColumn = {ctor: 'TruncatedColumn'}; @@ -25207,8 +25209,8 @@ var _user$project$Config$updateSelectize = F3( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 1011, column: 17}, - end: {line: 1016, column: 56} + start: {line: 1024, column: 17}, + end: {line: 1029, column: 56} }, _p1)('Shouldn\'t be here'); } @@ -25353,8 +25355,8 @@ var _user$project$Config$isField = function (fieldValue) { return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 857, column: 5}, - end: {line: 862, column: 59} + start: {line: 870, column: 5}, + end: {line: 875, column: 59} }, _p7)('Referenced field must be boolean'); } @@ -25523,8 +25525,8 @@ var _user$project$Config$languageSelectizeView = F6( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 459, column: 21}, - end: {line: 464, column: 60} + start: {line: 472, column: 21}, + end: {line: 477, column: 60} }, _p12)('Shouldn\'t be here'); } @@ -25565,8 +25567,8 @@ var _user$project$Config$cryptoCurrencySelectizeView = F6( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 413, column: 21}, - end: {line: 418, column: 60} + start: {line: 426, column: 21}, + end: {line: 431, column: 60} }, _p15)('Shouldn\'t be here'); } @@ -25667,24 +25669,51 @@ var _user$project$Config$accountSelectizeView = F6( fallbackIds, selectizeState); }); +var _user$project$Config$unitDisplay = function (fieldInstance) { + var _p19 = fieldInstance.fieldLocator.fieldType; + if (_p19.ctor === 'FieldPercentageType') { + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$UnitDisplay, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('%'), + _1: {ctor: '[]'} + }); + } else { + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + {ctor: '[]'}); + } +}; var _user$project$Config$buildValidationAttribute = function (fieldValidator) { - var _p19 = fieldValidator; - switch (_p19.ctor) { + var _p20 = fieldValidator; + switch (_p20.ctor) { case 'FieldMin': return _elm_lang$core$Maybe$Just( _elm_lang$html$Html_Attributes$min( - _elm_lang$core$Basics$toString(_p19._0))); + _elm_lang$core$Basics$toString(_p20._0))); case 'FieldMax': return _elm_lang$core$Maybe$Just( _elm_lang$html$Html_Attributes$max( - _elm_lang$core$Basics$toString(_p19._0))); + _elm_lang$core$Basics$toString(_p20._0))); default: return _elm_lang$core$Maybe$Nothing; } }; var _user$project$Config$fieldTypeToInputType = function (fieldType) { - var _p20 = fieldType; - if (_p20.ctor === 'FieldPercentageType') { + var _p21 = fieldType; + if (_p21.ctor === 'FieldPercentageType') { return 'number'; } else { return 'string'; @@ -25699,14 +25728,14 @@ var _user$project$Config$emptyToNothing = function (list) { return _elm_lang$core$List$isEmpty(list) ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(list); }; var _user$project$Config$fieldHolderToList = function (fieldHolder) { - var _p21 = fieldHolder; - if (_p21.ctor === 'FieldOk') { - var _p22 = _p21._0; - switch (_p22.ctor) { + var _p22 = fieldHolder; + if (_p22.ctor === 'FieldOk') { + var _p23 = _p22._0; + switch (_p23.ctor) { case 'FieldLanguageValue': - return _p22._0; + return _p23._0; case 'FieldCryptoCurrencyValue': - return _p22._0; + return _p23._0; default: return _elm_lang$core$Native_Utils.crashCase( 'Config', @@ -25714,7 +25743,7 @@ var _user$project$Config$fieldHolderToList = function (fieldHolder) { start: {line: 131, column: 13}, end: {line: 139, column: 50} }, - _p22)('Not a list type'); + _p23)('Not a list type'); } } else { return {ctor: '[]'}; @@ -25723,34 +25752,9 @@ var _user$project$Config$fieldHolderToList = function (fieldHolder) { var _user$project$Config$updateStringFieldInstance = F3( function (fieldLocator, maybeString, fieldInstance) { if (_elm_lang$core$Native_Utils.eq(fieldInstance.fieldLocator, fieldLocator)) { - var _p24 = fieldLocator.fieldType; - switch (_p24.ctor) { + var _p25 = fieldLocator.fieldType; + switch (_p25.ctor) { case 'FieldLanguageType': - var list = _user$project$Config$fieldHolderToList(fieldInstance.fieldHolder); - var newList = function () { - var _p25 = maybeString; - if (_p25.ctor === 'Nothing') { - return A2( - _elm_lang$core$List$take, - _elm_lang$core$List$length(list) - 1, - list); - } else { - return A2( - _elm_lang$core$Basics_ops['++'], - list, - { - ctor: '::', - _0: _p25._0, - _1: {ctor: '[]'} - }); - } - }(); - return _elm_lang$core$Native_Utils.update( - fieldInstance, - { - fieldHolder: A2(_user$project$Config$listToFieldHolder, _user$project$ConfigTypes$FieldLanguageValue, newList) - }); - case 'FieldCryptoCurrencyType': var list = _user$project$Config$fieldHolderToList(fieldInstance.fieldHolder); var newList = function () { var _p26 = maybeString; @@ -25770,6 +25774,31 @@ var _user$project$Config$updateStringFieldInstance = F3( }); } }(); + return _elm_lang$core$Native_Utils.update( + fieldInstance, + { + fieldHolder: A2(_user$project$Config$listToFieldHolder, _user$project$ConfigTypes$FieldLanguageValue, newList) + }); + case 'FieldCryptoCurrencyType': + var list = _user$project$Config$fieldHolderToList(fieldInstance.fieldHolder); + var newList = function () { + var _p27 = maybeString; + if (_p27.ctor === 'Nothing') { + return A2( + _elm_lang$core$List$take, + _elm_lang$core$List$length(list) - 1, + list); + } else { + return A2( + _elm_lang$core$Basics_ops['++'], + list, + { + ctor: '::', + _0: _p27._0, + _1: {ctor: '[]'} + }); + } + }(); return _elm_lang$core$Native_Utils.update( fieldInstance, { @@ -25777,11 +25806,11 @@ var _user$project$Config$updateStringFieldInstance = F3( }); default: var fieldHolder = function () { - var _p27 = maybeString; - if (_p27.ctor === 'Nothing') { + var _p28 = maybeString; + if (_p28.ctor === 'Nothing') { return _user$project$ConfigTypes$FieldEmpty; } else { - return A2(_user$project$ConfigTypes$stringToFieldHolder, fieldLocator.fieldType, _p27._0); + return A2(_user$project$ConfigTypes$stringToFieldHolder, fieldLocator.fieldType, _p28._0); } }(); return _elm_lang$core$Native_Utils.update( @@ -25825,12 +25854,12 @@ var _user$project$Config$placeField = F2( field), fieldList)); var newField = function () { - var _p28 = maybeOldField; - if (_p28.ctor === 'Nothing') { + var _p29 = maybeOldField; + if (_p29.ctor === 'Nothing') { return field; } else { return _elm_lang$core$Native_Utils.update( - _p28._0, + _p29._0, {fieldValue: field.fieldValue}); } }(); @@ -25839,14 +25868,14 @@ var _user$project$Config$placeField = F2( _0: newField, _1: A2( _elm_lang$core$List$filter, - function (_p29) { + function (_p30) { return !A3( _user$project$Config$similar, function (_) { return _.fieldLocator; }, field, - _p29); + _p30); }, fieldList) }; @@ -25921,8 +25950,8 @@ var _user$project$Config$selectizeView = F6( }, enabled: enabled }; - var _p30 = fieldLocator.fieldType; - switch (_p30.ctor) { + var _p31 = fieldLocator.fieldType; + switch (_p31.ctor) { case 'FieldAccountType': return A6(_user$project$Config$accountSelectizeView, model, localConfig, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue); case 'FieldFiatCurrencyType': @@ -25937,10 +25966,10 @@ var _user$project$Config$selectizeView = F6( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 502, column: 9}, - end: {line: 544, column: 52} + start: {line: 515, column: 9}, + end: {line: 557, column: 52} }, - _p30)('Not a Selectize field'); + _p31)('Not a Selectize field'); } }); var _user$project$Config$CryptoSwitch = function (a) { @@ -25949,12 +25978,12 @@ var _user$project$Config$CryptoSwitch = function (a) { var _user$project$Config$cryptoView = F2( function (maybeActiveCrypto, cryptoDisplay) { var activeClass = function () { - var _p32 = maybeActiveCrypto; - if (_p32.ctor === 'Nothing') { + var _p33 = maybeActiveCrypto; + if (_p33.ctor === 'Nothing') { return _user$project$Css_Admin$class( {ctor: '[]'}); } else { - return _elm_lang$core$Native_Utils.eq(_p32._0, cryptoDisplay.crypto) ? _user$project$Css_Admin$class( + return _elm_lang$core$Native_Utils.eq(_p33._0, cryptoDisplay.crypto) ? _user$project$Css_Admin$class( { ctor: '::', _0: _user$project$Css_Classes$Active, @@ -26021,52 +26050,72 @@ var _user$project$Config$textInput = F4( var fieldLocator = fieldInstance.fieldLocator; var inputType = _user$project$Config$fieldTypeToInputType(fieldLocator.fieldType); return enabled ? A2( - _elm_lang$html$Html$input, - A2( - _elm_lang$core$Basics_ops['++'], - { - ctor: '::', - _0: _elm_lang$html$Html_Events$onInput( - _user$project$Config$Input(fieldLocator)), - _1: { + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { ctor: '::', - _0: _elm_lang$html$Html_Events$onFocus( - _user$project$Config$Focus(fieldLocator)), - _1: { + _0: _user$project$Css_Classes$InputContainer, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$input, + A2( + _elm_lang$core$Basics_ops['++'], + { ctor: '::', - _0: _elm_lang$html$Html_Events$onBlur( - _user$project$Config$Blur(fieldLocator)), + _0: _elm_lang$html$Html_Events$onInput( + _user$project$Config$Input(fieldLocator)), _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$defaultValue(defaultString), + _0: _elm_lang$html$Html_Events$onFocus( + _user$project$Config$Focus(fieldLocator)), _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$placeholder(fallbackString), + _0: _elm_lang$html$Html_Events$onBlur( + _user$project$Config$Blur(fieldLocator)), _1: { ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$BasicInput, - _1: { - ctor: '::', - _0: valid, - _1: {ctor: '[]'} - } - }), + _0: _elm_lang$html$Html_Attributes$defaultValue(defaultString), _1: { ctor: '::', - _0: _elm_lang$html$Html_Attributes$type_(inputType), - _1: {ctor: '[]'} + _0: _elm_lang$html$Html_Attributes$placeholder(fallbackString), + _1: { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$BasicInput, + _1: { + ctor: '::', + _0: valid, + _1: {ctor: '[]'} + } + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$type_(inputType), + _1: {ctor: '[]'} + } + } } } } } - } - } - }, - validations), - {ctor: '[]'}) : A2( + }, + validations), + {ctor: '[]'}), + _1: { + ctor: '::', + _0: _user$project$Config$unitDisplay(fieldInstance), + _1: {ctor: '[]'} + } + }) : A2( _elm_lang$html$Html$div, { ctor: '::', @@ -26086,20 +26135,20 @@ var _user$project$Config$textInput = F4( }); var _user$project$Config$fieldInput = F5( function (model, fieldInstance, maybeFieldValue, maybeFallbackFieldValue, enabled) { - var _p33 = fieldInstance.component; - if (_p33.ctor === 'InputBoxComponent') { + var _p34 = fieldInstance.component; + if (_p34.ctor === 'InputBoxComponent') { return A4(_user$project$Config$textInput, fieldInstance, maybeFieldValue, maybeFallbackFieldValue, enabled); } else { - return A6(_user$project$Config$selectizeView, model, fieldInstance, _p33._0, maybeFieldValue, maybeFallbackFieldValue, enabled); + return A6(_user$project$Config$selectizeView, model, fieldInstance, _p34._0, maybeFieldValue, maybeFallbackFieldValue, enabled); } }); var _user$project$Config$fieldComponent = F2( function (model, fieldInstance) { var configGroup = model.configGroup; var maybeSpecific = function () { - var _p34 = fieldInstance.fieldHolder; - if (_p34.ctor === 'FieldOk') { - return _elm_lang$core$Maybe$Just(_p34._0); + var _p35 = fieldInstance.fieldHolder; + if (_p35.ctor === 'FieldOk') { + return _elm_lang$core$Maybe$Just(_p35._0); } else { return _elm_lang$core$Maybe$Nothing; } @@ -26185,8 +26234,8 @@ var _user$project$Config$rowView = F3( }; var machine = machineDisplay.machine; var globalRowClass = function () { - var _p35 = machine; - if (_p35.ctor === 'GlobalMachine') { + var _p36 = machine; + if (_p36.ctor === 'GlobalMachine') { return _user$project$Css_Admin$class( { ctor: '::', @@ -26272,8 +26321,8 @@ var _user$project$Config$tableView = function (model) { }; var _user$project$Config$Submit = {ctor: 'Submit'}; var _user$project$Config$view = function (model) { - var _p36 = model.webConfigGroup; - switch (_p36.ctor) { + var _p37 = model.webConfigGroup; + switch (_p37.ctor) { case 'NotAsked': return A2( _elm_lang$html$Html$div, @@ -26295,21 +26344,21 @@ var _user$project$Config$view = function (model) { { ctor: '::', _0: _elm_lang$html$Html$text( - _elm_lang$core$Basics$toString(_p36._0)), + _elm_lang$core$Basics$toString(_p37._0)), _1: {ctor: '[]'} }); default: - var _p38 = _p36._0; + var _p39 = _p37._0; var statusString = function () { - var _p37 = model.status; - if (_p37.ctor === 'Saved') { + var _p38 = model.status; + if (_p38.ctor === 'Saved') { return 'Saved'; } else { return ''; } }(); - var cryptos = A3(_user$project$ConfigTypes$allCryptos, _p38.data.cryptoCurrencies, _p38.schema.cryptoScope, _p38.selectedCryptos); - var resolvedModel = A2(_user$project$Config$toResolvedModel, model, _p38); + var cryptos = A3(_user$project$ConfigTypes$allCryptos, _p39.data.cryptoCurrencies, _p39.schema.cryptoScope, _p39.selectedCryptos); + var resolvedModel = A2(_user$project$Config$toResolvedModel, model, _p39); var configGroupView = A2( _elm_lang$html$Html$div, { @@ -26393,7 +26442,7 @@ var _user$project$Config$view = function (model) { _1: {ctor: '[]'} } }); - return _elm_lang$core$Native_Utils.eq(_p38.schema.cryptoScope, _user$project$ConfigTypes$Global) ? A2( + return _elm_lang$core$Native_Utils.eq(_p39.schema.cryptoScope, _user$project$ConfigTypes$Global) ? A2( _elm_lang$html$Html$div, {ctor: '[]'}, { @@ -26412,7 +26461,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p38.schema.display), + _0: _elm_lang$html$Html$text(_p39.schema.display), _1: {ctor: '[]'} }), _1: { @@ -26439,7 +26488,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p38.schema.display), + _0: _elm_lang$html$Html$text(_p39.schema.display), _1: {ctor: '[]'} }), _1: { @@ -26473,7 +26522,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p38.schema.display), + _0: _elm_lang$html$Html$text(_p39.schema.display), _1: {ctor: '[]'} }), _1: { @@ -26540,37 +26589,37 @@ var _user$project$Config$postForm = F2( }); var _user$project$Config$update = F2( function (msg, model) { - var _p39 = msg; - switch (_p39.ctor) { + var _p40 = msg; + switch (_p40.ctor) { case 'Load': - var _p45 = _p39._0; + var _p46 = _p40._0; var defaultCrypto = function () { - var _p40 = _p45; - if (_p40.ctor === 'Success') { - var _p41 = _p40._0; + var _p41 = _p46; + if (_p41.ctor === 'Success') { + var _p42 = _p41._0; return A2( _elm_lang$core$Maybe$map, function (_) { return _.crypto; }, _elm_lang$core$List$head( - A3(_user$project$ConfigTypes$allCryptos, _p41.data.cryptoCurrencies, _p41.schema.cryptoScope, _p41.selectedCryptos))); + A3(_user$project$ConfigTypes$allCryptos, _p42.data.cryptoCurrencies, _p42.schema.cryptoScope, _p42.selectedCryptos))); } else { return _elm_lang$core$Maybe$Nothing; } }(); var crypto = function () { - var _p42 = model.crypto; - if (_p42.ctor === 'Nothing') { + var _p43 = model.crypto; + if (_p43.ctor === 'Nothing') { return defaultCrypto; } else { - return _elm_lang$core$Maybe$Just(_p42._0); + return _elm_lang$core$Maybe$Just(_p43._0); } }(); var fieldInstances = function () { - var _p43 = _p45; - if (_p43.ctor === 'Success') { - return _user$project$Config$initFieldInstances(_p43._0); + var _p44 = _p46; + if (_p44.ctor === 'Success') { + return _user$project$Config$initFieldInstances(_p44._0); } else { return {ctor: '[]'}; } @@ -26578,7 +26627,7 @@ var _user$project$Config$update = F2( var status = _elm_lang$core$Native_Utils.eq(model.status, _user$project$Config$Saving) ? _user$project$Config$Saved : model.status; var cmd = _elm_lang$core$Native_Utils.eq(status, _user$project$Config$Saved) ? A2( _elm_lang$core$Task$perform, - function (_p44) { + function (_p45) { return _user$project$Config$HideSaveIndication; }, _elm_lang$core$Process$sleep(2 * _elm_lang$core$Time$second)) : _elm_lang$core$Platform_Cmd$none; @@ -26586,12 +26635,12 @@ var _user$project$Config$update = F2( ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - {webConfigGroup: _p45, fieldInstances: fieldInstances, status: status, crypto: crypto}), + {webConfigGroup: _p46, fieldInstances: fieldInstances, status: status, crypto: crypto}), _1: cmd }; case 'Submit': - var _p46 = model.webConfigGroup; - if (_p46.ctor === 'Success') { + var _p47 = model.webConfigGroup; + if (_p47.ctor === 'Success') { return A2( _elm_lang$core$Platform_Cmd_ops['!'], _elm_lang$core$Native_Utils.update( @@ -26599,7 +26648,7 @@ var _user$project$Config$update = F2( {status: _user$project$Config$Saving}), { ctor: '::', - _0: A2(_user$project$Config$postForm, _p46._0.schema.code, model.fieldInstances), + _0: A2(_user$project$Config$postForm, _p47._0.schema.code, model.fieldInstances), _1: {ctor: '[]'} }); } else { @@ -26613,21 +26662,21 @@ var _user$project$Config$update = F2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateInput, - _p39._0, - _elm_lang$core$Maybe$Just(_p39._1), + _p40._0, + _elm_lang$core$Maybe$Just(_p40._1), model), {ctor: '[]'}); case 'CryptoSwitch': - var _p48 = _p39._0; - var _p47 = model.webConfigGroup; - if (_p47.ctor === 'Success') { - var cryptoCode = _user$project$ConfigTypes$cryptoToString(_p48); + var _p49 = _p40._0; + var _p48 = model.webConfigGroup; + if (_p48.ctor === 'Success') { + var cryptoCode = _user$project$ConfigTypes$cryptoToString(_p49); var path = A2( _elm_lang$core$Basics_ops['++'], '#config/', A2( _elm_lang$core$Basics_ops['++'], - _p47._0.schema.code, + _p48._0.schema.code, A2(_elm_lang$core$Basics_ops['++'], '/', cryptoCode))); var command = _elm_lang$navigation$Navigation$newUrl( A2(_elm_lang$core$Debug$log, 'DEBUG123', path)); @@ -26636,7 +26685,7 @@ var _user$project$Config$update = F2( _elm_lang$core$Native_Utils.update( model, { - crypto: _elm_lang$core$Maybe$Just(_p48) + crypto: _elm_lang$core$Maybe$Just(_p49) }), { ctor: '::', @@ -26652,57 +26701,57 @@ var _user$project$Config$update = F2( case 'Focus': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateFocus, _p39._0, true, model), + A3(_user$project$Config$updateFocus, _p40._0, true, model), {ctor: '[]'}); case 'Blur': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateFocus, _p39._0, false, model), + A3(_user$project$Config$updateFocus, _p40._0, false, model), {ctor: '[]'}); case 'SelectizeMsg': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateSelectize, _p39._0, _p39._1, model), + A3(_user$project$Config$updateSelectize, _p40._0, _p40._1, model), {ctor: '[]'}); case 'BlurSelectize': - var _p49 = _p39._0; - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - A3( - _user$project$Config$updateFocus, - _p49, - false, - A3(_user$project$Config$updateSelectize, _p49, _p39._1, model)), - {ctor: '[]'}); - case 'FocusSelectize': - var _p50 = _p39._0; + var _p50 = _p40._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateFocus, _p50, - true, - A3(_user$project$Config$updateSelectize, _p50, _p39._1, model)), + false, + A3(_user$project$Config$updateSelectize, _p50, _p40._1, model)), {ctor: '[]'}); - case 'Add': - var _p51 = _p39._0; + case 'FocusSelectize': + var _p51 = _p40._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( - _user$project$Config$updateInput, + _user$project$Config$updateFocus, _p51, - _elm_lang$core$Maybe$Just(_p39._1), - A3(_user$project$Config$updateSelectize, _p51, _p39._2, model)), + true, + A3(_user$project$Config$updateSelectize, _p51, _p40._1, model)), {ctor: '[]'}); - case 'Remove': - var _p52 = _p39._0; + case 'Add': + var _p52 = _p40._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateInput, _p52, + _elm_lang$core$Maybe$Just(_p40._1), + A3(_user$project$Config$updateSelectize, _p52, _p40._2, model)), + {ctor: '[]'}); + case 'Remove': + var _p53 = _p40._0; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + A3( + _user$project$Config$updateInput, + _p53, _elm_lang$core$Maybe$Nothing, - A3(_user$project$Config$updateSelectize, _p52, _p39._1, model)), + A3(_user$project$Config$updateSelectize, _p53, _p40._1, model)), {ctor: '[]'}); default: return A2( diff --git a/public/styles.css b/public/styles.css index c6ed0bed..aaa1b032 100644 --- a/public/styles.css +++ b/public/styles.css @@ -283,6 +283,18 @@ p { width: 6em; } +.lamassuAdminConfigTable .lamassuAdminInputContainer { + display: flex; +} + +.lamassuAdminConfigTable .lamassuAdminUnitDisplay { + border-radius: 0px 3px 3px 0px; + background-color: #E6E6E3; + padding: 0 5px; + font-weight: 500; + line-height: 25px; +} + .lamassuAdminConfigTable input { border: 0; border-radius: 3px; @@ -292,7 +304,7 @@ p { font-family: Fira Code; font-weight: 600; outline: none; - background-color: inherit; + background-color: #ffffff; } .lamassuAdminConfigTable input:invalid { diff --git a/yarn.lock b/yarn.lock index 803e1c3e..70764e83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -accepts@~1.3.3: +accepts@1.3.3, accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -13,6 +13,10 @@ acorn@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +after@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" + agent-base@2: version "2.0.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" @@ -72,6 +76,10 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +arraybuffer.slice@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -124,6 +132,10 @@ axios@^0.15.2: dependencies: follow-redirects "1.0.0" +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -132,10 +144,18 @@ base-x@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac" +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + base64-url@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f" +base64id@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" + base64url@2.0.0, base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" @@ -150,6 +170,12 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" @@ -230,6 +256,10 @@ bl@~1.1.2: dependencies: readable-stream "~2.0.5" +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + bluebird@^3.3.5: version "3.4.6" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" @@ -341,6 +371,10 @@ bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -437,10 +471,22 @@ commoner@~0.10.3: q "^1.1.2" recast "^0.11.17" -component-emitter@^1.2.0, component-emitter@~1.2.0: +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" + +component-emitter@1.2.1, component-emitter@^1.2.0, component-emitter@~1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -554,7 +600,13 @@ dateformat@^1.0.12: get-stdin "^4.0.1" meow "^3.3.0" -debug@2, debug@^2.2.0, debug@~2.2.0: +debug@2, debug@2.3.3, debug@^2.2.0: + version "2.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" + dependencies: + ms "0.7.2" + +debug@2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: @@ -681,6 +733,45 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +engine.io-client@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.1.tgz#71237e9bbce04862675d4d6bfbef351c8b6a35a3" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "2.3.3" + engine.io-parser "1.3.1" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "1.1.1" + xmlhttprequest-ssl "1.5.3" + yeast "0.1.2" + +engine.io-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.1.tgz#9554f1ae33107d6fbd170ca5466d2f833f6a07cf" + dependencies: + after "0.8.1" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary "0.1.6" + wtf-8 "1.0.0" + +engine.io@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.1.tgz#20066ea903304f13ee37f10faaff6b4784f64373" + dependencies: + accepts "1.3.3" + base64id "0.1.0" + cookie "0.3.1" + debug "2.3.3" + engine.io-parser "1.3.1" + ws "1.1.1" + error-ex@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" @@ -978,6 +1069,22 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-binary@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" + dependencies: + isarray "0.0.1" + +has-binary@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" + dependencies: + isarray "0.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + hash.js@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" @@ -1095,6 +1202,10 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1221,6 +1332,10 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -1502,10 +1617,14 @@ morgan@^1.7.0: on-finished "~2.3.0" on-headers "~1.0.1" -ms@0.7.1, ms@^0.7.1: +ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" +ms@0.7.2, ms@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" + nan@^2.0.5, nan@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" @@ -1571,6 +1690,10 @@ object-assign@4.1.0, object-assign@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + on-finished@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.2.1.tgz#5c85c1cc36299f78029653f667f27b6b99ebc029" @@ -1604,6 +1727,10 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +options@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" @@ -1648,6 +1775,24 @@ parse-ms@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" +parsejson@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" @@ -2114,6 +2259,50 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +socket.io-adapter@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" + dependencies: + debug "2.3.3" + socket.io-parser "2.3.1" + +socket.io-client@1.7.1, socket.io-client@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.1.tgz#6c23725edff804f3919c1ce4ebb25e591c6e61d7" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "1.8.1" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.5" + socket.io-parser "2.3.1" + to-array "0.1.4" + +socket.io-parser@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" + dependencies: + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +socket.io@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.1.tgz#a34d763fd22cd975643c2f0c7c5f14ba6da80aaf" + dependencies: + debug "2.3.3" + engine.io "1.8.1" + has-binary "0.1.7" + object-assign "4.1.0" + socket.io-adapter "0.5.0" + socket.io-client "1.7.1" + socket.io-parser "2.3.1" + socks-proxy-agent@2: version "2.0.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.0.0.tgz#c674842d70410fb28ae1e92e6135a927854bc275" @@ -2292,6 +2481,10 @@ timed-out@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.0.0.tgz#ff88de96030ce960eabd42487db61d3add229273" +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" @@ -2345,6 +2538,10 @@ typeforce@^1.5.5: dependencies: inherits "^2.0.1" +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + underscore.string@2.4.0, underscore.string@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" @@ -2441,10 +2638,25 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +ws@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +wtf-8@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" + x-xss-protection@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.0.0.tgz#898afb93869b24661cf9c52f9ee8db8ed0764dd9" +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" + xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" @@ -2467,3 +2679,7 @@ yargs@~3.27.0: os-locale "^1.4.0" window-size "^0.1.2" y18n "^3.2.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"