From c2282e61b4d6f6c1feda45a634df111bac00c65c Mon Sep 17 00:00:00 2001 From: Josh Harvey Date: Tue, 9 May 2017 00:37:38 +0300 Subject: [PATCH] new admin structure --- bin/lamassu-admin-server | 14 +- lamassu-schema.json | 45 +- lib/admin/config.js | 39 +- lib/admin/machines.js | 33 - lib/admin/server.js | 26 +- lib/admin/transactions.js | 27 +- lib/config-validate.js | 17 +- lib/machine-loader.js | 58 + lib/notifier.js | 18 +- lib/pairing.js | 18 +- lib/plugins.js | 18 +- lib/postgresql_interface.js | 6 - lib/routes.js | 3 +- lib/settings-loader.js | 34 +- migrations/031-remove_name_from_devices.js | 12 + public/elm.js | 6586 ++++++++++++++++---- public/styles.css | 18 +- 17 files changed, 5768 insertions(+), 1204 deletions(-) delete mode 100644 lib/admin/machines.js create mode 100644 lib/machine-loader.js create mode 100644 migrations/031-remove_name_from_devices.js diff --git a/bin/lamassu-admin-server b/bin/lamassu-admin-server index 9e91e977..503bb87a 100755 --- a/bin/lamassu-admin-server +++ b/bin/lamassu-admin-server @@ -14,15 +14,16 @@ const got = require('got') const morgan = require('morgan') const helmet = require('helmet') +const machineLoader = require('../lib/machine-loader') +const T = require('../lib/time') +const logger = require('../lib/logger') + const accounts = require('../lib/admin/accounts') -const machines = require('../lib/admin/machines') const config = require('../lib/admin/config') const login = require('../lib/admin/login') const pairing = require('../lib/admin/pairing') const server = require('../lib/admin/server') const transactions = require('../lib/admin/transactions') -const T = require('../lib/time') -const logger = require('../lib/logger') const NEVER = new Date(Date.now() + 100 * T.years) @@ -118,19 +119,18 @@ app.get('/api/accounts/account/:account', (req, res) => { }) app.get('/api/machines', (req, res) => { - machines.getMachines() + machineLoader.getMachineNames() .then(r => res.send({machines: r})) }) app.post('/api/machines', (req, res) => { - machines.setMachine(req.body) - .then(() => machines.getMachines()) + machineLoader.setMachine(req.body) + .then(() => machineLoader.getMachineNames()) .then(r => res.send({machines: r})) .then(() => dbNotify()) }) app.get('/api/status', (req, res, next) => { - console.log('DEBUG100') return Promise.all([server.status(), config.validateCurrentConfig()]) .then(([serverStatus, invalidConfigGroups]) => res.send({ server: serverStatus, diff --git a/lamassu-schema.json b/lamassu-schema.json index 1dff9509..1ee9d3e0 100644 --- a/lamassu-schema.json +++ b/lamassu-schema.json @@ -1,18 +1,26 @@ { "groups": [ + { + "code": "definition", + "display": "Definition", + "cryptoScope": "global", + "machineScope": "specific", + "fields": [ + "machineName", + "machineModel", + "machineLocation" + ] + }, { "code": "setup", "display": "Setup", "cryptoScope": "global", "machineScope": "both", "fields": [ - "machineName", - "machineModel", "fiatCurrency", "country", "machineLanguages", - "cryptoCurrencies", - "machineLocation" + "cryptoCurrencies" ] }, { @@ -35,8 +43,8 @@ "machineScope": "both", "fields": [ "cashInCommission", - "cashInFee", "cashOutCommission", + "cashInFee", "cashOutFee" ] }, @@ -76,7 +84,7 @@ "notificationsSMSEnabled", "sms", "email", - "balanceThreshold" + "balancesThreshold" ] } ], @@ -163,17 +171,6 @@ } ] }, - { - "code": "lowBalanceMargin", - "displayTop": "Low balance", - "displayBottom": "Margin", - "fieldType": "percentage", - "fieldClass": null, - "cryptoScope": "both", - "machineScope": "both", - "fieldValidation": [{"code": "required"}], - "default": 5 - }, { "code": "zeroConfLimit", "displayTop": "0-conf", @@ -220,8 +217,8 @@ "code": "fiatCurrency", "displayBottom": "Fiat Currency", "fieldType": "fiatCurrency", - "cryptoScope": "both", - "machineScope": "both", + "cryptoScope": "global", + "machineScope": "global", "fieldClass": null, "fieldValidation": [ { @@ -398,6 +395,8 @@ }, { "code": "machineName", + "cryptoScope": "global", + "machineScope": "specific", "displayBottom": "Name", "fieldType": "string", "fieldClass": null, @@ -405,6 +404,8 @@ }, { "code": "machineModel", + "cryptoScope": "global", + "machineScope": "specific", "displayBottom": "Model", "fieldType": "string", "fieldClass": null, @@ -489,10 +490,10 @@ "fieldValidation": [{"code": "required"}] }, { - "code": "lowBalanceThreshold", - "displayTop": "Low balance", + "code": "balancesThreshold", + "displayTop": "Balances", "displayBottom": "Threshold", - "fieldType": "integer", + "fieldType": "percentage", "fieldClass": null, "enabledIf": [ "notificationsEnabled" diff --git a/lib/admin/config.js b/lib/admin/config.js index 0ab4591c..412d660e 100644 --- a/lib/admin/config.js +++ b/lib/admin/config.js @@ -12,8 +12,7 @@ const db = require('../db') const options = require('../options') const configManager = require('../config-manager') const configValidate = require('../config-validate') - -const machines = require('./machines') +const machineLoader = require('../machine-loader') function fetchSchema () { const schemaPath = path.resolve(options.lamassuServerPath, 'lamassu-schema.json') @@ -64,7 +63,7 @@ function getField (schema, group, fieldCode) { return R.merge(R.pick(['cryptoScope', 'machineScope'], group), field) } -const fetchMachines = () => machines.getMachines() +const fetchMachines = () => machineLoader.getMachines() .then(machineList => machineList.map(r => r.deviceId)) function validateCurrentConfig () { @@ -134,7 +133,7 @@ const supportedLanguages = languageRec.supported const languages = supportedLanguages.map(mapLanguage).filter(r => r) function fetchData () { - return machines.getMachines() + return machineLoader.getMachineNames() .then(machineList => ({ currencies: massageCurrencies(currencies), cryptoCurrencies: [{crypto: 'BTC', display: 'Bitcoin'}, {crypto: 'ETH', display: 'Ethereum'}], @@ -163,36 +162,8 @@ function fetchData () { function saveConfigGroup (results) { if (results.values.length === 0) return fetchConfigGroup(results.groupCode) - return configValidate.ensureConstraints(results.values) - .then(fetchConfig) - .then(oldValues => { - results.values.forEach(newValue => { - const oldValueIndex = oldValues - .findIndex(old => old.fieldLocator.code === newValue.fieldLocator.code && - old.fieldLocator.fieldScope.crypto === newValue.fieldLocator.fieldScope.crypto && - old.fieldLocator.fieldScope.machine === newValue.fieldLocator.fieldScope.machine - ) - - const existingValue = oldValueIndex > -1 && - oldValues[oldValueIndex] - - if (existingValue) { - // Delete value record - if (R.isNil(newValue.fieldValue)) { - oldValues.splice(oldValueIndex, 1) - return - } - - existingValue.fieldValue = newValue.fieldValue - return - } - - if (!R.isNil(newValue.fieldValue)) oldValues.push(newValue) - }) - - return settingsLoader.save(oldValues) - .then(() => fetchConfigGroup(results.groupCode)) - }) + return settingsLoader.modifyConfig(results.values) + .then(() => fetchConfigGroup(results.groupCode)) } module.exports = { diff --git a/lib/admin/machines.js b/lib/admin/machines.js deleted file mode 100644 index 30026dd4..00000000 --- a/lib/admin/machines.js +++ /dev/null @@ -1,33 +0,0 @@ -const db = require('../db') -const pairing = require('./pairing') - -function getMachines () { - return db.any('select * from devices where display=TRUE order by name') - .then(rr => rr.map(r => ({ - deviceId: r.device_id, - name: r.name, - cashbox: r.cashbox, - cassette1: r.cassette1, - cassette2: r.cassette2, - paired: r.paired - }))) -} - -function resetCashOutBills (rec) { - const sql = 'update devices set cassette1=$1, cassette2=$2 where device_id=$3' - return db.none(sql, [rec.cassettes[0], rec.cassettes[1], rec.deviceId]) -} - -function unpair (rec) { - return pairing.unpair(rec.deviceId) -} - -function setMachine (rec) { - switch (rec.action) { - case 'resetCashOutBills': return resetCashOutBills(rec) - case 'unpair': return unpair(rec) - default: throw new Error('No such action: ' + rec.action) - } -} - -module.exports = {getMachines, setMachine} diff --git a/lib/admin/server.js b/lib/admin/server.js index 1b8cf6ee..018c71e1 100644 --- a/lib/admin/server.js +++ b/lib/admin/server.js @@ -1,24 +1,32 @@ +const _ = require('lodash/fp') const moment = require('moment') const ticker = require('../ticker') const settingsLoader = require('../settings-loader') const db = require('../db') +const machineLoader = require('../machine-loader') const CONSIDERED_UP_SECS = 30 function machinesLastPing () { - const sql = `select name, min(extract(epoch from (now() - machine_events.created))) as age - from machine_events, devices - where machine_events.device_id = devices.device_id - and devices.paired - group by name` + const sql = `select min(extract(epoch from (now() - created))) as age + from machine_events + group by device_id` - return db.any(sql) - .then(r => { - if (r.length === 0) return 'No paired machines' + return Promise.all([machineLoader.getMachineNames(), db.any(sql)]) + .then(([machines, events]) => { + if (machines.length === 0) return 'No paired machines' + + const addName = event => { + const machine = _.find(['deviceId', event.deviceId], machines) + if (!machine) return null + return _.set('name', machine.name, event) + } + + const mapper = _.flow(_.filter(row => row.age > CONSIDERED_UP_SECS), _.map(addName), _.compact) + const downRows = mapper(events) - const downRows = r.filter(row => row.age > CONSIDERED_UP_SECS) if (downRows.length === 0) return 'All machines are up' if (downRows.length === 1) { diff --git a/lib/admin/transactions.js b/lib/admin/transactions.js index e2f613c8..85dcc353 100644 --- a/lib/admin/transactions.js +++ b/lib/admin/transactions.js @@ -1,21 +1,34 @@ const _ = require('lodash/fp') const db = require('../db') +const machineLoader = require('../machine-loader') const NUM_RESULTS = 20 +function addNames (txs) { + return machineLoader.getMachineNames() + .then(machines => { + const addName = tx => { + const machine = _.find(['deviceId', tx.deviceId], machines) + const name = machine ? machine.name : 'Unpaired' + return _.set('machineName', name, tx) + } + + return _.map(addName, txs) + }) +} + function batch () { const camelize = _.mapKeys(_.camelCase) - const packager = _.flow(_.flatten, _.orderBy(_.property('created'), ['desc']), _.take(NUM_RESULTS), _.map(camelize)) + const packager = _.flow(_.flatten, _.orderBy(_.property('created'), ['desc']), + _.take(NUM_RESULTS), _.map(camelize), addNames) - const cashInSql = `select 'cashIn' as tx_class, devices.name as machine_name, cash_in_txs.* - from cash_in_txs, devices - where devices.device_id=cash_in_txs.device_id + const cashInSql = `select 'cashIn' as tx_class, cash_in_txs.* + from cash_in_txs order by created desc limit $1` - const cashOutSql = `select 'cashOut' as tx_class, devices.name as machine_name, cash_out_txs.* - from cash_out_txs, devices - where devices.device_id=cash_out_txs.device_id + const cashOutSql = `select 'cashOut' as tx_class, cash_out_txs.* + from cash_out_txs order by created desc limit $1` return Promise.all([db.any(cashInSql, [NUM_RESULTS]), db.any(cashOutSql, [NUM_RESULTS])]) diff --git a/lib/config-validate.js b/lib/config-validate.js index 6cf61bb7..3bdc5903 100644 --- a/lib/config-validate.js +++ b/lib/config-validate.js @@ -1,9 +1,8 @@ const _ = require('lodash/fp') +const db = require('./db') const configManager = require('./config-manager') -const machines = require('./admin/machines') const schema = require('../lamassu-schema.json') -const logger = require('./logger') function allScopes (cryptoScopes, machineScopes) { const scopes = [] @@ -91,8 +90,16 @@ function getGroupField (group, fieldCode) { return _.merge(_.pick(['cryptoScope', 'machineScope'], group), field) } -const fetchMachines = () => machines.getMachines() -.then(machineList => machineList.map(r => r.deviceId)) +// Note: We can't use machine-loader because it relies on settings-loader, +// which relies on this +function getMachines () { + return db.any('select device_id from devices') +} + +function fetchMachines () { + return getMachines() + .then(machineList => machineList.map(r => r.device_id)) +} function validateFieldParameter (value, validator) { switch (validator.code) { @@ -115,6 +122,8 @@ function ensureConstraints (config) { config.every(fieldInstance => { const fieldCode = fieldInstance.fieldLocator.code const field = pickField(fieldCode) + if (!field) throw new Error('No such field: ' + fieldCode) + const fieldValue = fieldInstance.fieldValue const isValid = field.fieldValidation diff --git a/lib/machine-loader.js b/lib/machine-loader.js new file mode 100644 index 00000000..32586e81 --- /dev/null +++ b/lib/machine-loader.js @@ -0,0 +1,58 @@ +const _ = require('lodash/fp') + +const db = require('./db') +const pairing = require('./pairing') +const configManager = require('./config-manager') +const settingsLoader = require('./settings-loader') + +module.exports = {getMachines, getMachineNames, setMachine} + +function getMachines () { + return db.any('select * from devices where display=TRUE order by created') + .then(rr => rr.map(r => ({ + deviceId: r.device_id, + cashbox: r.cashbox, + cassette1: r.cassette1, + cassette2: r.cassette2, + paired: r.paired + }))) +} + +function getConfig (defaultConfig) { + if (defaultConfig) return Promise.resolve(defaultConfig) + + return settingsLoader.loadRecentConfig() +} + +function getMachineNames (config) { + return Promise.all([getMachines(), getConfig(config)]) + .then(([machines, config]) => { + const addName = r => { + const name = configManager.machineScoped(r.deviceId, config).machineName + console.log('DEBUG200: %j', [name, r]) + console.log('DEBUG201: %j', configManager.machineScoped(r.deviceId, config)) + return _.set('name', name, r) + } + + return _.map(addName, machines) + }) +} + +function resetCashOutBills (rec) { + const sql = 'update devices set cassette1=$1, cassette2=$2 where device_id=$3' + return db.none(sql, [rec.cassettes[0], rec.cassettes[1], rec.deviceId]) +} + +function unpair (rec) { + return pairing.unpair(rec.deviceId) +} + +function setMachine (rec) { + switch (rec.action) { + case 'resetCashOutBills': return resetCashOutBills(rec) + case 'unpair': return unpair(rec) + default: throw new Error('No such action: ' + rec.action) + } +} + +console.log('DEBUG101') diff --git a/lib/notifier.js b/lib/notifier.js index 48287a99..d93851a5 100644 --- a/lib/notifier.js +++ b/lib/notifier.js @@ -137,23 +137,15 @@ function checkStuckScreen (deviceEvents) { return [] } -function devicesAndEvents () { - return Promise.all([db.devices(), db.machineEvents()]) - .then(arr => ({devices: arr[0], events: arr[1]})) -} - function checkStatus (plugins) { const alerts = {devices: {}, deviceNames: {}} - return Promise.all([plugins.checkBalances(), devicesAndEvents()]) - .then(([balances, rec]) => { - const devices = rec.devices - const events = rec.events - + return Promise.all([plugins.checkBalances(), db.machineEvents(), plugins.getMachineNames()]) + .then(([balances, events, devices]) => { alerts.general = balances - devices.forEach(function (deviceRow) { - const deviceId = deviceRow.device_id - const deviceName = deviceRow.name || deviceId + devices.forEach(function (device) { + const deviceId = device.deviceId + const deviceName = device.name const deviceEvents = events.filter(function (eventRow) { return eventRow.device_id === deviceId }) diff --git a/lib/pairing.js b/lib/pairing.js index cc8c5e33..f0892501 100644 --- a/lib/pairing.js +++ b/lib/pairing.js @@ -13,9 +13,13 @@ function pullToken (token) { return db.one(sql, [token]) } -function configureNewDevice (deviceId) { +function configureNewDevice (deviceId, machineName, machineModel) { const scope = {crypto: 'global', machine: deviceId} - const newFields = [settingsLoader.configAddField(scope, 'cashOutEnabled', false)] + const newFields = [ + settingsLoader.configAddField(scope, 'cashOutEnabled', false), + settingsLoader.configAddField(scope, 'machineName', machineName), + settingsLoader.configAddField(scope, 'machineModel', machineModel) + ] return settingsLoader.modifyConfig(newFields) } @@ -33,17 +37,17 @@ function unpair (deviceId) { .then(() => removeDeviceConfig(deviceId)) } -function pair (token, deviceId) { +function pair (token, deviceId, machineModel) { return pullToken(token) .then(r => { if (r.expired) return false - const insertSql = `insert into devices (device_id, name) values ($1, $2) + const insertSql = `insert into devices (device_id) values ($1) on conflict (device_id) - do update set name=$2, paired=TRUE, display=TRUE` + do update set paired=TRUE, display=TRUE` - return configureNewDevice(deviceId) - .then(() => db.none(insertSql, [deviceId, r.name])) + return configureNewDevice(deviceId, r.name, machineModel) + .then(() => db.none(insertSql, [deviceId])) .then(() => true) }) .catch(err => { diff --git a/lib/plugins.js b/lib/plugins.js index fdf9c923..63dedfa8 100644 --- a/lib/plugins.js +++ b/lib/plugins.js @@ -16,6 +16,7 @@ const exchange = require('./exchange') const sms = require('./sms') const email = require('./email') const cashOutHelper = require('./cash-out-helper') +const machineLoader = require('./machine-loader') const mapValuesWithKey = _.mapValues.convert({cap: false}) @@ -252,9 +253,7 @@ function plugins (settings, deviceId) { const rate = rawRate.div(cashInCommission) - // `lowBalanceMargin` is our safety net. It's a number > 1, and we divide - // all our balances by it to provide a safety margin. - const lowBalanceMargin = (BN(config.lowBalanceMargin).div(100)).plus(1) + const lowBalanceMargin = BN(1) const unitScale = BN(10).pow(coins[cryptoCode].unitScale) const fiatTransferBalance = balance.mul(rate.div(unitScale)).div(lowBalanceMargin) @@ -372,9 +371,9 @@ function plugins (settings, deviceId) { } function executeTrades () { - return dbm.devices() + return machineLoader.getMachines() .then(devices => { - const deviceIds = devices.map(device => device.device_id) + const deviceIds = devices.map(device => device.deviceId) const lists = deviceIds.map(deviceId => { const config = configManager.machineScoped(deviceId, settings.config) const fiatCode = config.fiatCurrency @@ -481,9 +480,9 @@ function plugins (settings, deviceId) { } function checkBalances () { - return dbm.devices() + return machineLoader.getMachines() .then(devices => { - const deviceIds = devices.map(r => r.device_id) + const deviceIds = devices.map(r => r.deviceId) const deviceBalancePromises = deviceIds.map(deviceId => checkDeviceBalances(deviceId)) return Promise.all(deviceBalancePromises) @@ -544,6 +543,10 @@ function plugins (settings, deviceId) { .catch(err => logger.error(err)) } + function getMachineNames () { + return machineLoader.getMachineNames(settings.config) + } + return { pollQueries, sendCoins, @@ -560,6 +563,7 @@ function plugins (settings, deviceId) { sweepHd, sendMessage, checkBalances, + getMachineNames, buildAvailableCassettes, buy, sell diff --git a/lib/postgresql_interface.js b/lib/postgresql_interface.js index 1a515ca4..42410a80 100644 --- a/lib/postgresql_interface.js +++ b/lib/postgresql_interface.js @@ -50,12 +50,6 @@ exports.machineEvent = function machineEvent (rec) { .then(() => db.none(deleteSql, [rec.deviceId, rec.eventType])) } -exports.devices = function devices () { - const sql = 'SELECT device_id, name FROM devices' - - return db.any(sql) -} - exports.machineEvents = function machineEvents () { const sql = 'SELECT *, (EXTRACT(EPOCH FROM (now() - created))) * 1000 AS age FROM machine_events' diff --git a/lib/routes.js b/lib/routes.js index 24a3e4e7..9d96a259 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -147,8 +147,9 @@ function ca (req, res) { function pair (req, res, next) { const token = req.query.token const deviceId = req.deviceId + const model = req.query.model - return pairing.pair(token, deviceId) + return pairing.pair(token, deviceId, model) .then(valid => { if (valid) { return helpers.updateMachineDefaults(deviceId) diff --git a/lib/settings-loader.js b/lib/settings-loader.js index 1c87edf0..61c92cd4 100644 --- a/lib/settings-loader.js +++ b/lib/settings-loader.js @@ -103,6 +103,19 @@ function loadLatestConfig () { }) } +function loadRecentConfig () { + if (argv.fixture) return loadFixture() + + const sql = `select id, data + from user_config + where type=$1 + order by id desc + limit 1` + + return db.one(sql, ['config']) + .then(row => row.data.config) +} + function loadAccounts () { const toFields = fieldArr => _.fromPairs(_.map(r => [r.code, r.value], fieldArr)) const toPairs = r => [r.code, toFields(r.fields)] @@ -152,16 +165,28 @@ function configDeleteField (scope, fieldCode) { } } +function addEdgeCases (config) { + const isCashOutEnabled = r => r.fieldLocator.fieldScope.machine !== 'global' && + r.fieldLocator.code === 'cashOutEnabled' && + r.fieldValue.value + + const cashOutEnabledExists = _.some(isCashOutEnabled, config) + const scope = {crypto: 'global', machine: 'global'} + const newField = configAddField(scope, 'cashOutEnabled', cashOutEnabledExists) + + return mergeValues(config, newField) +} + function modifyConfig (newFields) { const TransactionMode = pgp.txMode.TransactionMode const isolationLevel = pgp.txMode.isolationLevel const tmSRD = new TransactionMode({tiLevel: isolationLevel.serializable}) function transaction (t) { - return loadLatest() - .then(settings => { - const oldConfig = settings.config - return save(mergeValues(oldConfig, newFields)) + return loadRecentConfig() + .then(oldConfig => { + const doSave = _.flow(mergeValues, addEdgeCases, save) + return doSave(oldConfig, newFields) }) } @@ -173,6 +198,7 @@ function modifyConfig (newFields) { module.exports = { settings, loadConfig, + loadRecentConfig, load, loadLatest, save, diff --git a/migrations/031-remove_name_from_devices.js b/migrations/031-remove_name_from_devices.js new file mode 100644 index 00000000..89899d67 --- /dev/null +++ b/migrations/031-remove_name_from_devices.js @@ -0,0 +1,12 @@ +const db = require('./db') + +exports.up = function (next) { + const sql = [ + 'alter table devices drop column name' + ] + db.multi(sql, next) +} + +exports.down = function (next) { + next() +} diff --git a/public/elm.js b/public/elm.js index 9b462e18..f257d034 100644 --- a/public/elm.js +++ b/public/elm.js @@ -8954,6 +8954,3965 @@ return { }(); +var _elm_lang$virtual_dom$Native_Debug = function() { + + +// IMPORT / EXPORT + +function unsafeCoerce(value) +{ + return value; +} + +var upload = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) +{ + var element = document.createElement('input'); + element.setAttribute('type', 'file'); + element.setAttribute('accept', 'text/json'); + element.style.display = 'none'; + element.addEventListener('change', function(event) + { + var fileReader = new FileReader(); + fileReader.onload = function(e) + { + callback(_elm_lang$core$Native_Scheduler.succeed(e.target.result)); + }; + fileReader.readAsText(event.target.files[0]); + document.body.removeChild(element); + }); + document.body.appendChild(element); + element.click(); +}); + +function download(historyLength, json) +{ + return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) + { + var fileName = 'history-' + historyLength + '.txt'; + var jsonString = JSON.stringify(json); + var mime = 'text/plain;charset=utf-8'; + var done = _elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0); + + // for IE10+ + if (navigator.msSaveBlob) + { + navigator.msSaveBlob(new Blob([jsonString], {type: mime}), fileName); + return callback(done); + } + + // for HTML5 + var element = document.createElement('a'); + element.setAttribute('href', 'data:' + mime + ',' + encodeURIComponent(jsonString)); + element.setAttribute('download', fileName); + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + callback(done); + }); +} + + +// POPOUT + +function messageToString(value) +{ + switch (typeof value) + { + case 'boolean': + return value ? 'True' : 'False'; + case 'number': + return value + ''; + case 'string': + return '"' + addSlashes(value, false) + '"'; + } + if (value instanceof String) + { + return '\'' + addSlashes(value, true) + '\''; + } + if (typeof value !== 'object' || value === null || !('ctor' in value)) + { + return '…'; + } + + var ctorStarter = value.ctor.substring(0, 5); + if (ctorStarter === '_Tupl' || ctorStarter === '_Task') + { + return '…' + } + if (['_Array', '', '_Process', '::', '[]', 'Set_elm_builtin', 'RBNode_elm_builtin', 'RBEmpty_elm_builtin'].indexOf(value.ctor) >= 0) + { + return '…'; + } + + var keys = Object.keys(value); + switch (keys.length) + { + case 1: + return value.ctor; + case 2: + return value.ctor + ' ' + messageToString(value._0); + default: + return value.ctor + ' … ' + messageToString(value[keys[keys.length - 1]]); + } +} + + +function primitive(str) +{ + return { ctor: 'Primitive', _0: str }; +} + + +function init(value) +{ + var type = typeof value; + + if (type === 'boolean') + { + return { + ctor: 'Constructor', + _0: _elm_lang$core$Maybe$Just(value ? 'True' : 'False'), + _1: true, + _2: _elm_lang$core$Native_List.Nil + }; + } + + if (type === 'number') + { + return primitive(value + ''); + } + + if (type === 'string') + { + return { ctor: 'S', _0: '"' + addSlashes(value, false) + '"' }; + } + + if (value instanceof String) + { + return { ctor: 'S', _0: "'" + addSlashes(value, true) + "'" }; + } + + if (value instanceof Date) + { + return primitive('<' + value.toString() + '>'); + } + + if (value === null) + { + return primitive('XXX'); + } + + if (type === 'object' && 'ctor' in value) + { + var ctor = value.ctor; + + if (ctor === '::' || ctor === '[]') + { + return { + ctor: 'Sequence', + _0: {ctor: 'ListSeq'}, + _1: true, + _2: A2(_elm_lang$core$List$map, init, value) + }; + } + + if (ctor === 'Set_elm_builtin') + { + return { + ctor: 'Sequence', + _0: {ctor: 'SetSeq'}, + _1: true, + _2: A3(_elm_lang$core$Set$foldr, initCons, _elm_lang$core$Native_List.Nil, value) + }; + } + + if (ctor === 'RBNode_elm_builtin' || ctor == 'RBEmpty_elm_builtin') + { + return { + ctor: 'Dictionary', + _0: true, + _1: A3(_elm_lang$core$Dict$foldr, initKeyValueCons, _elm_lang$core$Native_List.Nil, value) + }; + } + + if (ctor === '_Array') + { + return { + ctor: 'Sequence', + _0: {ctor: 'ArraySeq'}, + _1: true, + _2: A3(_elm_lang$core$Array$foldr, initCons, _elm_lang$core$Native_List.Nil, value) + }; + } + + var ctorStarter = value.ctor.substring(0, 5); + if (ctorStarter === '_Task') + { + return primitive(''); + } + + if (ctor === '') + { + return primitive(ctor); + } + + if (ctor === '_Process') + { + return primitive(''); + } + + var list = _elm_lang$core$Native_List.Nil; + for (var i in value) + { + if (i === 'ctor') continue; + list = _elm_lang$core$Native_List.Cons(init(value[i]), list); + } + return { + ctor: 'Constructor', + _0: ctorStarter === '_Tupl' ? _elm_lang$core$Maybe$Nothing : _elm_lang$core$Maybe$Just(ctor), + _1: true, + _2: _elm_lang$core$List$reverse(list) + }; + } + + if (type === 'object') + { + var dict = _elm_lang$core$Dict$empty; + for (var i in value) + { + dict = A3(_elm_lang$core$Dict$insert, i, init(value[i]), dict); + } + return { ctor: 'Record', _0: true, _1: dict }; + } + + return primitive('XXX'); +} + +var initCons = F2(initConsHelp); + +function initConsHelp(value, list) +{ + return _elm_lang$core$Native_List.Cons(init(value), list); +} + +var initKeyValueCons = F3(initKeyValueConsHelp); + +function initKeyValueConsHelp(key, value, list) +{ + return _elm_lang$core$Native_List.Cons( + _elm_lang$core$Native_Utils.Tuple2(init(key), init(value)), + list + ); +} + +function addSlashes(str, isChar) +{ + var s = str.replace(/\\/g, '\\\\') + .replace(/\n/g, '\\n') + .replace(/\t/g, '\\t') + .replace(/\r/g, '\\r') + .replace(/\v/g, '\\v') + .replace(/\0/g, '\\0'); + if (isChar) + { + return s.replace(/\'/g, '\\\''); + } + else + { + return s.replace(/\"/g, '\\"'); + } +} + + +return { + upload: upload, + download: F2(download), + unsafeCoerce: unsafeCoerce, + messageToString: messageToString, + init: init +} + +}(); + +var _elm_lang$virtual_dom$VirtualDom_Helpers$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode; +var _elm_lang$virtual_dom$VirtualDom_Helpers$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3; +var _elm_lang$virtual_dom$VirtualDom_Helpers$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2; +var _elm_lang$virtual_dom$VirtualDom_Helpers$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy; +var _elm_lang$virtual_dom$VirtualDom_Helpers$defaultOptions = {stopPropagation: false, preventDefault: false}; +var _elm_lang$virtual_dom$VirtualDom_Helpers$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on; +var _elm_lang$virtual_dom$VirtualDom_Helpers$on = F2( + function (eventName, decoder) { + return A3(_elm_lang$virtual_dom$VirtualDom_Helpers$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom_Helpers$defaultOptions, decoder); + }); +var _elm_lang$virtual_dom$VirtualDom_Helpers$onClick = function (msg) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$on, + 'click', + _elm_lang$core$Json_Decode$succeed(msg)); +}; +var _elm_lang$virtual_dom$VirtualDom_Helpers$style = _elm_lang$virtual_dom$Native_VirtualDom.style; +var _elm_lang$virtual_dom$VirtualDom_Helpers$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute; +var _elm_lang$virtual_dom$VirtualDom_Helpers$id = _elm_lang$virtual_dom$VirtualDom_Helpers$attribute('id'); +var _elm_lang$virtual_dom$VirtualDom_Helpers$property = _elm_lang$virtual_dom$Native_VirtualDom.property; +var _elm_lang$virtual_dom$VirtualDom_Helpers$class = function (name) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$property, + 'className', + _elm_lang$core$Json_Encode$string(name)); +}; +var _elm_lang$virtual_dom$VirtualDom_Helpers$href = function (name) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$property, + 'href', + _elm_lang$core$Json_Encode$string(name)); +}; +var _elm_lang$virtual_dom$VirtualDom_Helpers$map = _elm_lang$virtual_dom$Native_VirtualDom.map; +var _elm_lang$virtual_dom$VirtualDom_Helpers$text = _elm_lang$virtual_dom$Native_VirtualDom.text; +var _elm_lang$virtual_dom$VirtualDom_Helpers$node = _elm_lang$virtual_dom$Native_VirtualDom.node; +var _elm_lang$virtual_dom$VirtualDom_Helpers$div = _elm_lang$virtual_dom$VirtualDom_Helpers$node('div'); +var _elm_lang$virtual_dom$VirtualDom_Helpers$span = _elm_lang$virtual_dom$VirtualDom_Helpers$node('span'); +var _elm_lang$virtual_dom$VirtualDom_Helpers$a = _elm_lang$virtual_dom$VirtualDom_Helpers$node('a'); +var _elm_lang$virtual_dom$VirtualDom_Helpers$h1 = _elm_lang$virtual_dom$VirtualDom_Helpers$node('h1'); +var _elm_lang$virtual_dom$VirtualDom_Helpers$Options = F2( + function (a, b) { + return {stopPropagation: a, preventDefault: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Helpers$Node = {ctor: 'Node'}; +var _elm_lang$virtual_dom$VirtualDom_Helpers$Property = {ctor: 'Property'}; + +var _elm_lang$virtual_dom$VirtualDom_Expando$purple = _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'color', _1: 'rgb(136, 19, 145)'}, + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$blue = _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'color', _1: 'rgb(28, 0, 207)'}, + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$red = _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'color', _1: 'rgb(196, 26, 22)'}, + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$leftPad = function (maybeKey) { + var _p0 = maybeKey; + if (_p0.ctor === 'Nothing') { + return _elm_lang$virtual_dom$VirtualDom_Helpers$style( + {ctor: '[]'}); + } else { + return _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'padding-left', _1: '4ch'}, + _1: {ctor: '[]'} + }); + } +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$makeArrow = function (arrow) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'color', _1: '#777'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'padding-left', _1: '2ch'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'width', _1: '2ch'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'display', _1: 'inline-block'}, + _1: {ctor: '[]'} + } + } + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(arrow), + _1: {ctor: '[]'} + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter = F3( + function (maybeKey, maybeIsClosed, description) { + var arrow = function () { + var _p1 = maybeIsClosed; + if (_p1.ctor === 'Nothing') { + return _elm_lang$virtual_dom$VirtualDom_Expando$makeArrow(''); + } else { + if (_p1._0 === true) { + return _elm_lang$virtual_dom$VirtualDom_Expando$makeArrow('▸'); + } else { + return _elm_lang$virtual_dom$VirtualDom_Expando$makeArrow('▾'); + } + } + }(); + var _p2 = maybeKey; + if (_p2.ctor === 'Nothing') { + return {ctor: '::', _0: arrow, _1: description}; + } else { + return { + ctor: '::', + _0: arrow, + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$purple, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p2._0), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' = '), + _1: description + } + } + }; + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTinyRecord = F3( + function (length, starter, entries) { + var _p3 = entries; + if (_p3.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: length + 1, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('}'), + _1: {ctor: '[]'} + } + }; + } else { + var _p5 = _p3._0; + var nextLength = (length + _elm_lang$core$String$length(_p5)) + 1; + if (_elm_lang$core$Native_Utils.cmp(nextLength, 18) > 0) { + return { + ctor: '_Tuple2', + _0: length + 2, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('…}'), + _1: {ctor: '[]'} + } + }; + } else { + var _p4 = A3(_elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTinyRecord, nextLength, ',', _p3._1); + var finalLength = _p4._0; + var otherNodes = _p4._1; + return { + ctor: '_Tuple2', + _0: finalLength, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(starter), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$purple, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p5), + _1: {ctor: '[]'} + }), + _1: otherNodes + } + } + }; + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$elideMiddle = function (str) { + return (_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$String$length(str), + 18) < 1) ? str : A2( + _elm_lang$core$Basics_ops['++'], + A2(_elm_lang$core$String$left, 8, str), + A2( + _elm_lang$core$Basics_ops['++'], + '...', + A2(_elm_lang$core$String$right, 8, str))); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyHelp = function (str) { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$String$length(str), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(str), + _1: {ctor: '[]'} + } + }; +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$updateIndex = F3( + function (n, func, list) { + var _p6 = list; + if (_p6.ctor === '[]') { + return {ctor: '[]'}; + } else { + var _p8 = _p6._1; + var _p7 = _p6._0; + return (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) ? { + ctor: '::', + _0: func(_p7), + _1: _p8 + } : { + ctor: '::', + _0: _p7, + _1: A3(_elm_lang$virtual_dom$VirtualDom_Expando$updateIndex, n - 1, func, _p8) + }; + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$seqTypeToString = F2( + function (n, seqType) { + var _p9 = seqType; + switch (_p9.ctor) { + case 'ListSeq': + return A2( + _elm_lang$core$Basics_ops['++'], + 'List(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(n), + ')')); + case 'SetSeq': + return A2( + _elm_lang$core$Basics_ops['++'], + 'Set(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(n), + ')')); + default: + return A2( + _elm_lang$core$Basics_ops['++'], + 'Array(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(n), + ')')); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewTiny = function (value) { + var _p10 = value; + switch (_p10.ctor) { + case 'S': + var str = _elm_lang$virtual_dom$VirtualDom_Expando$elideMiddle(_p10._0); + return { + ctor: '_Tuple2', + _0: _elm_lang$core$String$length(str), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$red, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(str), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }; + case 'Primitive': + var _p11 = _p10._0; + return { + ctor: '_Tuple2', + _0: _elm_lang$core$String$length(_p11), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$blue, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p11), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }; + case 'Sequence': + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyHelp( + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$seqTypeToString, + _elm_lang$core$List$length(_p10._2), + _p10._0)); + case 'Dictionary': + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyHelp( + A2( + _elm_lang$core$Basics_ops['++'], + 'Dict(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_lang$core$List$length(_p10._1)), + ')'))); + case 'Record': + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecord(_p10._1); + default: + if (_p10._2.ctor === '[]') { + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyHelp( + A2(_elm_lang$core$Maybe$withDefault, 'Unit', _p10._0)); + } else { + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyHelp( + function () { + var _p12 = _p10._0; + if (_p12.ctor === 'Nothing') { + return A2( + _elm_lang$core$Basics_ops['++'], + 'Tuple(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_lang$core$List$length(_p10._2)), + ')')); + } else { + return A2(_elm_lang$core$Basics_ops['++'], _p12._0, ' …'); + } + }()); + } + } +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecord = function (record) { + return _elm_lang$core$Dict$isEmpty(record) ? { + ctor: '_Tuple2', + _0: 2, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('{}'), + _1: {ctor: '[]'} + } + } : A3( + _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecordHelp, + 0, + '{ ', + _elm_lang$core$Dict$toList(record)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecordHelp = F3( + function (length, starter, entries) { + var _p13 = entries; + if (_p13.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: length + 2, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' }'), + _1: {ctor: '[]'} + } + }; + } else { + var _p16 = _p13._0._0; + var _p14 = _elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTiny(_p13._0._1); + var valueLen = _p14._0; + var valueNodes = _p14._1; + var fieldLen = _elm_lang$core$String$length(_p16); + var newLength = ((length + fieldLen) + valueLen) + 5; + if (_elm_lang$core$Native_Utils.cmp(newLength, 60) > 0) { + return { + ctor: '_Tuple2', + _0: length + 4, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(', … }'), + _1: {ctor: '[]'} + } + }; + } else { + var _p15 = A3(_elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecordHelp, newLength, ', ', _p13._1); + var finalLength = _p15._0; + var otherNodes = _p15._1; + return { + ctor: '_Tuple2', + _0: finalLength, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(starter), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$purple, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p16), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' = '), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + {ctor: '[]'}, + valueNodes), + _1: otherNodes + } + } + } + } + }; + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTiny = function (value) { + var _p17 = value; + if (_p17.ctor === 'Record') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTinyRecord, + 0, + '{', + _elm_lang$core$Dict$keys(_p17._1)); + } else { + return _elm_lang$virtual_dom$VirtualDom_Expando$viewTiny(value); + } +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$Constructor = F3( + function (a, b, c) { + return {ctor: 'Constructor', _0: a, _1: b, _2: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Record = F2( + function (a, b) { + return {ctor: 'Record', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Dictionary = F2( + function (a, b) { + return {ctor: 'Dictionary', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Sequence = F3( + function (a, b, c) { + return {ctor: 'Sequence', _0: a, _1: b, _2: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$initHelp = F2( + function (isOuter, expando) { + var _p18 = expando; + switch (_p18.ctor) { + case 'S': + return expando; + case 'Primitive': + return expando; + case 'Sequence': + var _p20 = _p18._0; + var _p19 = _p18._2; + return isOuter ? A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Sequence, + _p20, + false, + A2( + _elm_lang$core$List$map, + _elm_lang$virtual_dom$VirtualDom_Expando$initHelp(false), + _p19)) : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$List$length(_p19), + 8) < 1) ? A3(_elm_lang$virtual_dom$VirtualDom_Expando$Sequence, _p20, false, _p19) : expando); + case 'Dictionary': + var _p23 = _p18._1; + return isOuter ? A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, + false, + A2( + _elm_lang$core$List$map, + function (_p21) { + var _p22 = _p21; + return { + ctor: '_Tuple2', + _0: _p22._0, + _1: A2(_elm_lang$virtual_dom$VirtualDom_Expando$initHelp, false, _p22._1) + }; + }, + _p23)) : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$List$length(_p23), + 8) < 1) ? A2(_elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, false, _p23) : expando); + case 'Record': + var _p25 = _p18._1; + return isOuter ? A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Record, + false, + A2( + _elm_lang$core$Dict$map, + F2( + function (_p24, v) { + return A2(_elm_lang$virtual_dom$VirtualDom_Expando$initHelp, false, v); + }), + _p25)) : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$Dict$size(_p25), + 4) < 1) ? A2(_elm_lang$virtual_dom$VirtualDom_Expando$Record, false, _p25) : expando); + default: + var _p27 = _p18._0; + var _p26 = _p18._2; + return isOuter ? A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Constructor, + _p27, + false, + A2( + _elm_lang$core$List$map, + _elm_lang$virtual_dom$VirtualDom_Expando$initHelp(false), + _p26)) : ((_elm_lang$core$Native_Utils.cmp( + _elm_lang$core$List$length(_p26), + 4) < 1) ? A3(_elm_lang$virtual_dom$VirtualDom_Expando$Constructor, _p27, false, _p26) : expando); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$init = function (value) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$initHelp, + true, + _elm_lang$virtual_dom$Native_Debug.init(value)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$mergeHelp = F2( + function (old, $new) { + var _p28 = {ctor: '_Tuple2', _0: old, _1: $new}; + _v12_6: + do { + if (_p28.ctor === '_Tuple2') { + switch (_p28._1.ctor) { + case 'S': + return $new; + case 'Primitive': + return $new; + case 'Sequence': + if (_p28._0.ctor === 'Sequence') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Sequence, + _p28._1._0, + _p28._0._1, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$mergeListHelp, _p28._0._2, _p28._1._2)); + } else { + break _v12_6; + } + case 'Dictionary': + if (_p28._0.ctor === 'Dictionary') { + return A2(_elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, _p28._0._0, _p28._1._1); + } else { + break _v12_6; + } + case 'Record': + if (_p28._0.ctor === 'Record') { + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Record, + _p28._0._0, + A2( + _elm_lang$core$Dict$map, + _elm_lang$virtual_dom$VirtualDom_Expando$mergeDictHelp(_p28._0._1), + _p28._1._1)); + } else { + break _v12_6; + } + default: + if (_p28._0.ctor === 'Constructor') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Constructor, + _p28._1._0, + _p28._0._1, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$mergeListHelp, _p28._0._2, _p28._1._2)); + } else { + break _v12_6; + } + } + } else { + break _v12_6; + } + } while(false); + return $new; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$mergeDictHelp = F3( + function (oldDict, key, value) { + var _p29 = A2(_elm_lang$core$Dict$get, key, oldDict); + if (_p29.ctor === 'Nothing') { + return value; + } else { + return A2(_elm_lang$virtual_dom$VirtualDom_Expando$mergeHelp, _p29._0, value); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$mergeListHelp = F2( + function (olds, news) { + var _p30 = {ctor: '_Tuple2', _0: olds, _1: news}; + if (_p30._0.ctor === '[]') { + return news; + } else { + if (_p30._1.ctor === '[]') { + return news; + } else { + return { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Expando$mergeHelp, _p30._0._0, _p30._1._0), + _1: A2(_elm_lang$virtual_dom$VirtualDom_Expando$mergeListHelp, _p30._0._1, _p30._1._1) + }; + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$merge = F2( + function (value, expando) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$mergeHelp, + expando, + _elm_lang$virtual_dom$Native_Debug.init(value)); + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$update = F2( + function (msg, value) { + var _p31 = value; + switch (_p31.ctor) { + case 'S': + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 168, column: 3}, + end: {line: 235, column: 50} + }, + _p31)('No messages for primitives'); + case 'Primitive': + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 168, column: 3}, + end: {line: 235, column: 50} + }, + _p31)('No messages for primitives'); + case 'Sequence': + var _p39 = _p31._2; + var _p38 = _p31._0; + var _p37 = _p31._1; + var _p34 = msg; + switch (_p34.ctor) { + case 'Toggle': + return A3(_elm_lang$virtual_dom$VirtualDom_Expando$Sequence, _p38, !_p37, _p39); + case 'Index': + if (_p34._0.ctor === 'None') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Sequence, + _p38, + _p37, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$updateIndex, + _p34._1, + _elm_lang$virtual_dom$VirtualDom_Expando$update(_p34._2), + _p39)); + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 176, column: 7}, + end: {line: 188, column: 46} + }, + _p34)('No redirected indexes on sequences'); + } + default: + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 176, column: 7}, + end: {line: 188, column: 46} + }, + _p34)('No field on sequences'); + } + case 'Dictionary': + var _p51 = _p31._1; + var _p50 = _p31._0; + var _p40 = msg; + switch (_p40.ctor) { + case 'Toggle': + return A2(_elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, !_p50, _p51); + case 'Index': + var _p48 = _p40._2; + var _p47 = _p40._1; + var _p41 = _p40._0; + switch (_p41.ctor) { + case 'None': + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 196, column: 11}, + end: {line: 206, column: 81} + }, + _p41)('must have redirect for dictionaries'); + case 'Key': + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, + _p50, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$updateIndex, + _p47, + function (_p43) { + var _p44 = _p43; + return { + ctor: '_Tuple2', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Expando$update, _p48, _p44._0), + _1: _p44._1 + }; + }, + _p51)); + default: + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Dictionary, + _p50, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$updateIndex, + _p47, + function (_p45) { + var _p46 = _p45; + return { + ctor: '_Tuple2', + _0: _p46._0, + _1: A2(_elm_lang$virtual_dom$VirtualDom_Expando$update, _p48, _p46._1) + }; + }, + _p51)); + } + default: + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 191, column: 7}, + end: {line: 209, column: 50} + }, + _p40)('no field for dictionaries'); + } + case 'Record': + var _p55 = _p31._1; + var _p54 = _p31._0; + var _p52 = msg; + switch (_p52.ctor) { + case 'Toggle': + return A2(_elm_lang$virtual_dom$VirtualDom_Expando$Record, !_p54, _p55); + case 'Index': + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 212, column: 7}, + end: {line: 220, column: 77} + }, + _p52)('No index for records'); + default: + return A2( + _elm_lang$virtual_dom$VirtualDom_Expando$Record, + _p54, + A3( + _elm_lang$core$Dict$update, + _p52._0, + _elm_lang$virtual_dom$VirtualDom_Expando$updateField(_p52._1), + _p55)); + } + default: + var _p61 = _p31._2; + var _p60 = _p31._0; + var _p59 = _p31._1; + var _p56 = msg; + switch (_p56.ctor) { + case 'Toggle': + return A3(_elm_lang$virtual_dom$VirtualDom_Expando$Constructor, _p60, !_p59, _p61); + case 'Index': + if (_p56._0.ctor === 'None') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Expando$Constructor, + _p60, + _p59, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$updateIndex, + _p56._1, + _elm_lang$virtual_dom$VirtualDom_Expando$update(_p56._2), + _p61)); + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 223, column: 7}, + end: {line: 235, column: 50} + }, + _p56)('No redirected indexes on sequences'); + } + default: + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 223, column: 7}, + end: {line: 235, column: 50} + }, + _p56)('No field for constructors'); + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$updateField = F2( + function (msg, maybeExpando) { + var _p62 = maybeExpando; + if (_p62.ctor === 'Nothing') { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Expando', + { + start: {line: 253, column: 3}, + end: {line: 258, column: 32} + }, + _p62)('key does not exist'); + } else { + return _elm_lang$core$Maybe$Just( + A2(_elm_lang$virtual_dom$VirtualDom_Expando$update, msg, _p62._0)); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Primitive = function (a) { + return {ctor: 'Primitive', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$S = function (a) { + return {ctor: 'S', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$ArraySeq = {ctor: 'ArraySeq'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$SetSeq = {ctor: 'SetSeq'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$ListSeq = {ctor: 'ListSeq'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$Field = F2( + function (a, b) { + return {ctor: 'Field', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Index = F3( + function (a, b, c) { + return {ctor: 'Index', _0: a, _1: b, _2: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$Toggle = {ctor: 'Toggle'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$Value = {ctor: 'Value'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$Key = {ctor: 'Key'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$None = {ctor: 'None'}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorEntry = F2( + function (index, value) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$None, index), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just( + _elm_lang$core$Basics$toString(index)), + value)); + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$view = F2( + function (maybeKey, expando) { + var _p64 = expando; + switch (_p64.ctor) { + case 'S': + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, + maybeKey, + _elm_lang$core$Maybe$Nothing, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$red, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p64._0), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + })); + case 'Primitive': + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, + maybeKey, + _elm_lang$core$Maybe$Nothing, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$blue, + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p64._0), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + })); + case 'Sequence': + return A4(_elm_lang$virtual_dom$VirtualDom_Expando$viewSequence, maybeKey, _p64._0, _p64._1, _p64._2); + case 'Dictionary': + return A3(_elm_lang$virtual_dom$VirtualDom_Expando$viewDictionary, maybeKey, _p64._0, _p64._1); + case 'Record': + return A3(_elm_lang$virtual_dom$VirtualDom_Expando$viewRecord, maybeKey, _p64._0, _p64._1); + default: + return A4(_elm_lang$virtual_dom$VirtualDom_Expando$viewConstructor, maybeKey, _p64._0, _p64._1, _p64._2); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructor = F4( + function (maybeKey, maybeName, isClosed, valueList) { + var _p65 = function () { + var _p66 = valueList; + if (_p66.ctor === '[]') { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Nothing, + _1: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) + }; + } else { + if (_p66._1.ctor === '[]') { + var _p67 = _p66._0; + switch (_p67.ctor) { + case 'S': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Nothing, + _1: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) + }; + case 'Primitive': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Nothing, + _1: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) + }; + case 'Sequence': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just(isClosed), + _1: isClosed ? A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) : A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$None, 0), + _elm_lang$virtual_dom$VirtualDom_Expando$viewSequenceOpen(_p67._2)) + }; + case 'Dictionary': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just(isClosed), + _1: isClosed ? A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) : A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$None, 0), + _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionaryOpen(_p67._1)) + }; + case 'Record': + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just(isClosed), + _1: isClosed ? A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) : A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$None, 0), + _elm_lang$virtual_dom$VirtualDom_Expando$viewRecordOpen(_p67._1)) + }; + default: + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just(isClosed), + _1: isClosed ? A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) : A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$None, 0), + _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorOpen(_p67._2)) + }; + } + } else { + return { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just(isClosed), + _1: isClosed ? A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + {ctor: '[]'}) : _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorOpen(valueList) + }; + } + } + }(); + var maybeIsClosed = _p65._0; + var openHtml = _p65._1; + var tinyArgs = A2( + _elm_lang$core$List$map, + function (_p68) { + return _elm_lang$core$Tuple$second( + _elm_lang$virtual_dom$VirtualDom_Expando$viewExtraTiny(_p68)); + }, + valueList); + var description = function () { + var _p69 = {ctor: '_Tuple2', _0: maybeName, _1: tinyArgs}; + if (_p69._0.ctor === 'Nothing') { + if (_p69._1.ctor === '[]') { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('()'), + _1: {ctor: '[]'} + }; + } else { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('( '), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + {ctor: '[]'}, + _p69._1._0), + _1: A3( + _elm_lang$core$List$foldr, + F2( + function (args, rest) { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(', '), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + {ctor: '[]'}, + args), + _1: rest + } + }; + }), + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' )'), + _1: {ctor: '[]'} + }, + _p69._1._1) + } + }; + } + } else { + if (_p69._1.ctor === '[]') { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p69._0._0), + _1: {ctor: '[]'} + }; + } else { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + A2(_elm_lang$core$Basics_ops['++'], _p69._0._0, ' ')), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + {ctor: '[]'}, + _p69._1._0), + _1: A3( + _elm_lang$core$List$foldr, + F2( + function (args, rest) { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' '), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + {ctor: '[]'}, + args), + _1: rest + } + }; + }), + {ctor: '[]'}, + _p69._1._1) + } + }; + } + } + }(); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Expando$Toggle), + _1: {ctor: '[]'} + }, + A3(_elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, maybeKey, maybeIsClosed, description)), + _1: { + ctor: '::', + _0: openHtml, + _1: {ctor: '[]'} + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorOpen = function (valueList) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + A2(_elm_lang$core$List$indexedMap, _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorEntry, valueList)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionaryOpen = function (keyValuePairs) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + A2(_elm_lang$core$List$indexedMap, _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionaryEntry, keyValuePairs)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionaryEntry = F2( + function (index, _p70) { + var _p71 = _p70; + var _p74 = _p71._1; + var _p73 = _p71._0; + var _p72 = _p73; + switch (_p72.ctor) { + case 'S': + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$Value, index), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just(_p72._0), + _p74)); + case 'Primitive': + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$Value, index), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just(_p72._0), + _p74)); + default: + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$Key, index), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just('key'), + _p73)), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + A2(_elm_lang$virtual_dom$VirtualDom_Expando$Index, _elm_lang$virtual_dom$VirtualDom_Expando$Value, index), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just('value'), + _p74)), + _1: {ctor: '[]'} + } + }); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewRecordOpen = function (record) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + A2( + _elm_lang$core$List$map, + _elm_lang$virtual_dom$VirtualDom_Expando$viewRecordEntry, + _elm_lang$core$Dict$toList(record))); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewRecordEntry = function (_p75) { + var _p76 = _p75; + var _p77 = _p76._0; + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + _elm_lang$virtual_dom$VirtualDom_Expando$Field(_p77), + A2( + _elm_lang$virtual_dom$VirtualDom_Expando$view, + _elm_lang$core$Maybe$Just(_p77), + _p76._1)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewSequenceOpen = function (values) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + A2(_elm_lang$core$List$indexedMap, _elm_lang$virtual_dom$VirtualDom_Expando$viewConstructorEntry, values)); +}; +var _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionary = F3( + function (maybeKey, isClosed, keyValuePairs) { + var starter = A2( + _elm_lang$core$Basics_ops['++'], + 'Dict(', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString( + _elm_lang$core$List$length(keyValuePairs)), + ')')); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Expando$Toggle), + _1: {ctor: '[]'} + }, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, + maybeKey, + _elm_lang$core$Maybe$Just(isClosed), + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(starter), + _1: {ctor: '[]'} + })), + _1: { + ctor: '::', + _0: isClosed ? _elm_lang$virtual_dom$VirtualDom_Helpers$text('') : _elm_lang$virtual_dom$VirtualDom_Expando$viewDictionaryOpen(keyValuePairs), + _1: {ctor: '[]'} + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewRecord = F3( + function (maybeKey, isClosed, record) { + var _p78 = isClosed ? { + ctor: '_Tuple3', + _0: _elm_lang$core$Tuple$second( + _elm_lang$virtual_dom$VirtualDom_Expando$viewTinyRecord(record)), + _1: _elm_lang$virtual_dom$VirtualDom_Helpers$text(''), + _2: _elm_lang$virtual_dom$VirtualDom_Helpers$text('') + } : { + ctor: '_Tuple3', + _0: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('{'), + _1: {ctor: '[]'} + }, + _1: _elm_lang$virtual_dom$VirtualDom_Expando$viewRecordOpen(record), + _2: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad( + _elm_lang$core$Maybe$Just( + {ctor: '_Tuple0'})), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('}'), + _1: {ctor: '[]'} + }) + }; + var start = _p78._0; + var middle = _p78._1; + var end = _p78._2; + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Expando$Toggle), + _1: {ctor: '[]'} + }, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, + maybeKey, + _elm_lang$core$Maybe$Just(isClosed), + start)), + _1: { + ctor: '::', + _0: middle, + _1: { + ctor: '::', + _0: end, + _1: {ctor: '[]'} + } + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Expando$viewSequence = F4( + function (maybeKey, seqType, isClosed, valueList) { + var starter = A2( + _elm_lang$virtual_dom$VirtualDom_Expando$seqTypeToString, + _elm_lang$core$List$length(valueList), + seqType); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Expando$leftPad(maybeKey), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Expando$Toggle), + _1: {ctor: '[]'} + }, + A3( + _elm_lang$virtual_dom$VirtualDom_Expando$lineStarter, + maybeKey, + _elm_lang$core$Maybe$Just(isClosed), + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(starter), + _1: {ctor: '[]'} + })), + _1: { + ctor: '::', + _0: isClosed ? _elm_lang$virtual_dom$VirtualDom_Helpers$text('') : _elm_lang$virtual_dom$VirtualDom_Expando$viewSequenceOpen(valueList), + _1: {ctor: '[]'} + } + }); + }); + +var _elm_lang$virtual_dom$VirtualDom_Report$some = function (list) { + return !_elm_lang$core$List$isEmpty(list); +}; +var _elm_lang$virtual_dom$VirtualDom_Report$TagChanges = F4( + function (a, b, c, d) { + return {removed: a, changed: b, added: c, argsMatch: d}; + }); +var _elm_lang$virtual_dom$VirtualDom_Report$emptyTagChanges = function (argsMatch) { + return A4( + _elm_lang$virtual_dom$VirtualDom_Report$TagChanges, + {ctor: '[]'}, + {ctor: '[]'}, + {ctor: '[]'}, + argsMatch); +}; +var _elm_lang$virtual_dom$VirtualDom_Report$hasTagChanges = function (tagChanges) { + return _elm_lang$core$Native_Utils.eq( + tagChanges, + A4( + _elm_lang$virtual_dom$VirtualDom_Report$TagChanges, + {ctor: '[]'}, + {ctor: '[]'}, + {ctor: '[]'}, + true)); +}; +var _elm_lang$virtual_dom$VirtualDom_Report$SomethingChanged = function (a) { + return {ctor: 'SomethingChanged', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Report$MessageChanged = F2( + function (a, b) { + return {ctor: 'MessageChanged', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Report$VersionChanged = F2( + function (a, b) { + return {ctor: 'VersionChanged', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Report$CorruptHistory = {ctor: 'CorruptHistory'}; +var _elm_lang$virtual_dom$VirtualDom_Report$UnionChange = F2( + function (a, b) { + return {ctor: 'UnionChange', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Report$AliasChange = function (a) { + return {ctor: 'AliasChange', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Report$Fine = {ctor: 'Fine'}; +var _elm_lang$virtual_dom$VirtualDom_Report$Risky = {ctor: 'Risky'}; +var _elm_lang$virtual_dom$VirtualDom_Report$Impossible = {ctor: 'Impossible'}; +var _elm_lang$virtual_dom$VirtualDom_Report$worstCase = F2( + function (status, statusList) { + worstCase: + while (true) { + var _p0 = statusList; + if (_p0.ctor === '[]') { + return status; + } else { + switch (_p0._0.ctor) { + case 'Impossible': + return _elm_lang$virtual_dom$VirtualDom_Report$Impossible; + case 'Risky': + var _v1 = _elm_lang$virtual_dom$VirtualDom_Report$Risky, + _v2 = _p0._1; + status = _v1; + statusList = _v2; + continue worstCase; + default: + var _v3 = status, + _v4 = _p0._1; + status = _v3; + statusList = _v4; + continue worstCase; + } + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Report$evaluateChange = function (change) { + var _p1 = change; + if (_p1.ctor === 'AliasChange') { + return _elm_lang$virtual_dom$VirtualDom_Report$Impossible; + } else { + return ((!_p1._1.argsMatch) || (_elm_lang$virtual_dom$VirtualDom_Report$some(_p1._1.changed) || _elm_lang$virtual_dom$VirtualDom_Report$some(_p1._1.removed))) ? _elm_lang$virtual_dom$VirtualDom_Report$Impossible : (_elm_lang$virtual_dom$VirtualDom_Report$some(_p1._1.added) ? _elm_lang$virtual_dom$VirtualDom_Report$Risky : _elm_lang$virtual_dom$VirtualDom_Report$Fine); + } +}; +var _elm_lang$virtual_dom$VirtualDom_Report$evaluate = function (report) { + var _p2 = report; + switch (_p2.ctor) { + case 'CorruptHistory': + return _elm_lang$virtual_dom$VirtualDom_Report$Impossible; + case 'VersionChanged': + return _elm_lang$virtual_dom$VirtualDom_Report$Impossible; + case 'MessageChanged': + return _elm_lang$virtual_dom$VirtualDom_Report$Impossible; + default: + return A2( + _elm_lang$virtual_dom$VirtualDom_Report$worstCase, + _elm_lang$virtual_dom$VirtualDom_Report$Fine, + A2(_elm_lang$core$List$map, _elm_lang$virtual_dom$VirtualDom_Report$evaluateChange, _p2._0)); + } +}; + +var _elm_lang$virtual_dom$VirtualDom_Metadata$encodeDict = F2( + function (f, dict) { + return _elm_lang$core$Json_Encode$object( + _elm_lang$core$Dict$toList( + A2( + _elm_lang$core$Dict$map, + F2( + function (key, value) { + return f(value); + }), + dict))); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$encodeUnion = function (_p0) { + var _p1 = _p0; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'args', + _1: _elm_lang$core$Json_Encode$list( + A2(_elm_lang$core$List$map, _elm_lang$core$Json_Encode$string, _p1.args)) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'tags', + _1: A2( + _elm_lang$virtual_dom$VirtualDom_Metadata$encodeDict, + function (_p2) { + return _elm_lang$core$Json_Encode$list( + A2(_elm_lang$core$List$map, _elm_lang$core$Json_Encode$string, _p2)); + }, + _p1.tags) + }, + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$encodeAlias = function (_p3) { + var _p4 = _p3; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'args', + _1: _elm_lang$core$Json_Encode$list( + A2(_elm_lang$core$List$map, _elm_lang$core$Json_Encode$string, _p4.args)) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'type', + _1: _elm_lang$core$Json_Encode$string(_p4.tipe) + }, + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$encodeTypes = function (_p5) { + var _p6 = _p5; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'message', + _1: _elm_lang$core$Json_Encode$string(_p6.message) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'aliases', + _1: A2(_elm_lang$virtual_dom$VirtualDom_Metadata$encodeDict, _elm_lang$virtual_dom$VirtualDom_Metadata$encodeAlias, _p6.aliases) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'unions', + _1: A2(_elm_lang$virtual_dom$VirtualDom_Metadata$encodeDict, _elm_lang$virtual_dom$VirtualDom_Metadata$encodeUnion, _p6.unions) + }, + _1: {ctor: '[]'} + } + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$encodeVersions = function (_p7) { + var _p8 = _p7; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'elm', + _1: _elm_lang$core$Json_Encode$string(_p8.elm) + }, + _1: {ctor: '[]'} + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$encode = function (_p9) { + var _p10 = _p9; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'versions', + _1: _elm_lang$virtual_dom$VirtualDom_Metadata$encodeVersions(_p10.versions) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'types', + _1: _elm_lang$virtual_dom$VirtualDom_Metadata$encodeTypes(_p10.types) + }, + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$checkTag = F4( + function (tag, old, $new, changes) { + return _elm_lang$core$Native_Utils.eq(old, $new) ? changes : _elm_lang$core$Native_Utils.update( + changes, + { + changed: {ctor: '::', _0: tag, _1: changes.changed} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$addTag = F3( + function (tag, _p11, changes) { + return _elm_lang$core$Native_Utils.update( + changes, + { + added: {ctor: '::', _0: tag, _1: changes.added} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$removeTag = F3( + function (tag, _p12, changes) { + return _elm_lang$core$Native_Utils.update( + changes, + { + removed: {ctor: '::', _0: tag, _1: changes.removed} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$checkUnion = F4( + function (name, old, $new, changes) { + var tagChanges = A6( + _elm_lang$core$Dict$merge, + _elm_lang$virtual_dom$VirtualDom_Metadata$removeTag, + _elm_lang$virtual_dom$VirtualDom_Metadata$checkTag, + _elm_lang$virtual_dom$VirtualDom_Metadata$addTag, + old.tags, + $new.tags, + _elm_lang$virtual_dom$VirtualDom_Report$emptyTagChanges( + _elm_lang$core$Native_Utils.eq(old.args, $new.args))); + return _elm_lang$virtual_dom$VirtualDom_Report$hasTagChanges(tagChanges) ? changes : { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Report$UnionChange, name, tagChanges), + _1: changes + }; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$checkAlias = F4( + function (name, old, $new, changes) { + return (_elm_lang$core$Native_Utils.eq(old.tipe, $new.tipe) && _elm_lang$core$Native_Utils.eq(old.args, $new.args)) ? changes : { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Report$AliasChange(name), + _1: changes + }; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$ignore = F3( + function (key, value, report) { + return report; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$checkTypes = F2( + function (old, $new) { + return (!_elm_lang$core$Native_Utils.eq(old.message, $new.message)) ? A2(_elm_lang$virtual_dom$VirtualDom_Report$MessageChanged, old.message, $new.message) : _elm_lang$virtual_dom$VirtualDom_Report$SomethingChanged( + A6( + _elm_lang$core$Dict$merge, + _elm_lang$virtual_dom$VirtualDom_Metadata$ignore, + _elm_lang$virtual_dom$VirtualDom_Metadata$checkUnion, + _elm_lang$virtual_dom$VirtualDom_Metadata$ignore, + old.unions, + $new.unions, + A6( + _elm_lang$core$Dict$merge, + _elm_lang$virtual_dom$VirtualDom_Metadata$ignore, + _elm_lang$virtual_dom$VirtualDom_Metadata$checkAlias, + _elm_lang$virtual_dom$VirtualDom_Metadata$ignore, + old.aliases, + $new.aliases, + {ctor: '[]'}))); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$check = F2( + function (old, $new) { + return (!_elm_lang$core$Native_Utils.eq(old.versions.elm, $new.versions.elm)) ? A2(_elm_lang$virtual_dom$VirtualDom_Report$VersionChanged, old.versions.elm, $new.versions.elm) : A2(_elm_lang$virtual_dom$VirtualDom_Metadata$checkTypes, old.types, $new.types); + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$hasProblem = F2( + function (tipe, _p13) { + var _p14 = _p13; + return A2(_elm_lang$core$String$contains, _p14._1, tipe) ? _elm_lang$core$Maybe$Just(_p14._0) : _elm_lang$core$Maybe$Nothing; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Metadata = F2( + function (a, b) { + return {versions: a, types: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Versions = function (a) { + return {elm: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$decodeVersions = A2( + _elm_lang$core$Json_Decode$map, + _elm_lang$virtual_dom$VirtualDom_Metadata$Versions, + A2(_elm_lang$core$Json_Decode$field, 'elm', _elm_lang$core$Json_Decode$string)); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Types = F3( + function (a, b, c) { + return {message: a, aliases: b, unions: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Alias = F2( + function (a, b) { + return {args: a, tipe: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$decodeAlias = A3( + _elm_lang$core$Json_Decode$map2, + _elm_lang$virtual_dom$VirtualDom_Metadata$Alias, + A2( + _elm_lang$core$Json_Decode$field, + 'args', + _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)), + A2(_elm_lang$core$Json_Decode$field, 'type', _elm_lang$core$Json_Decode$string)); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Union = F2( + function (a, b) { + return {args: a, tags: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$decodeUnion = A3( + _elm_lang$core$Json_Decode$map2, + _elm_lang$virtual_dom$VirtualDom_Metadata$Union, + A2( + _elm_lang$core$Json_Decode$field, + 'args', + _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)), + A2( + _elm_lang$core$Json_Decode$field, + 'tags', + _elm_lang$core$Json_Decode$dict( + _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)))); +var _elm_lang$virtual_dom$VirtualDom_Metadata$decodeTypes = A4( + _elm_lang$core$Json_Decode$map3, + _elm_lang$virtual_dom$VirtualDom_Metadata$Types, + A2(_elm_lang$core$Json_Decode$field, 'message', _elm_lang$core$Json_Decode$string), + A2( + _elm_lang$core$Json_Decode$field, + 'aliases', + _elm_lang$core$Json_Decode$dict(_elm_lang$virtual_dom$VirtualDom_Metadata$decodeAlias)), + A2( + _elm_lang$core$Json_Decode$field, + 'unions', + _elm_lang$core$Json_Decode$dict(_elm_lang$virtual_dom$VirtualDom_Metadata$decodeUnion))); +var _elm_lang$virtual_dom$VirtualDom_Metadata$decoder = A3( + _elm_lang$core$Json_Decode$map2, + _elm_lang$virtual_dom$VirtualDom_Metadata$Metadata, + A2(_elm_lang$core$Json_Decode$field, 'versions', _elm_lang$virtual_dom$VirtualDom_Metadata$decodeVersions), + A2(_elm_lang$core$Json_Decode$field, 'types', _elm_lang$virtual_dom$VirtualDom_Metadata$decodeTypes)); +var _elm_lang$virtual_dom$VirtualDom_Metadata$Error = F2( + function (a, b) { + return {message: a, problems: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$ProblemType = F2( + function (a, b) { + return {name: a, problems: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$VirtualDom = {ctor: 'VirtualDom'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Program = {ctor: 'Program'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Request = {ctor: 'Request'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Socket = {ctor: 'Socket'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Process = {ctor: 'Process'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Task = {ctor: 'Task'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Decoder = {ctor: 'Decoder'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$Function = {ctor: 'Function'}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$problemTable = { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Function, _1: '->'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Decoder, _1: 'Json.Decode.Decoder'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Task, _1: 'Task.Task'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Process, _1: 'Process.Id'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Socket, _1: 'WebSocket.LowLevel.WebSocket'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Request, _1: 'Http.Request'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$Program, _1: 'Platform.Program'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$VirtualDom, _1: 'VirtualDom.Node'}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _elm_lang$virtual_dom$VirtualDom_Metadata$VirtualDom, _1: 'VirtualDom.Attribute'}, + _1: {ctor: '[]'} + } + } + } + } + } + } + } + } +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$findProblems = function (tipe) { + return A2( + _elm_lang$core$List$filterMap, + _elm_lang$virtual_dom$VirtualDom_Metadata$hasProblem(tipe), + _elm_lang$virtual_dom$VirtualDom_Metadata$problemTable); +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$collectBadAliases = F3( + function (name, _p15, list) { + var _p16 = _p15; + var _p17 = _elm_lang$virtual_dom$VirtualDom_Metadata$findProblems(_p16.tipe); + if (_p17.ctor === '[]') { + return list; + } else { + return { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Metadata$ProblemType, name, _p17), + _1: list + }; + } + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$collectBadUnions = F3( + function (name, _p18, list) { + var _p19 = _p18; + var _p20 = A2( + _elm_lang$core$List$concatMap, + _elm_lang$virtual_dom$VirtualDom_Metadata$findProblems, + _elm_lang$core$List$concat( + _elm_lang$core$Dict$values(_p19.tags))); + if (_p20.ctor === '[]') { + return list; + } else { + return { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Metadata$ProblemType, name, _p20), + _1: list + }; + } + }); +var _elm_lang$virtual_dom$VirtualDom_Metadata$isPortable = function (_p21) { + var _p22 = _p21; + var _p24 = _p22.types; + var badAliases = A3( + _elm_lang$core$Dict$foldl, + _elm_lang$virtual_dom$VirtualDom_Metadata$collectBadAliases, + {ctor: '[]'}, + _p24.aliases); + var _p23 = A3(_elm_lang$core$Dict$foldl, _elm_lang$virtual_dom$VirtualDom_Metadata$collectBadUnions, badAliases, _p24.unions); + if (_p23.ctor === '[]') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just( + A2(_elm_lang$virtual_dom$VirtualDom_Metadata$Error, _p24.message, _p23)); + } +}; +var _elm_lang$virtual_dom$VirtualDom_Metadata$decode = function (value) { + var _p25 = A2(_elm_lang$core$Json_Decode$decodeValue, _elm_lang$virtual_dom$VirtualDom_Metadata$decoder, value); + if (_p25.ctor === 'Err') { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.Metadata', + { + start: {line: 229, column: 3}, + end: {line: 239, column: 20} + }, + _p25)('Compiler is generating bad metadata. Report this at .'); + } else { + var _p28 = _p25._0; + var _p27 = _elm_lang$virtual_dom$VirtualDom_Metadata$isPortable(_p28); + if (_p27.ctor === 'Nothing') { + return _elm_lang$core$Result$Ok(_p28); + } else { + return _elm_lang$core$Result$Err(_p27._0); + } + } +}; + +var _elm_lang$virtual_dom$VirtualDom_History$viewMessage = F3( + function (currentIndex, index, msg) { + var messageName = _elm_lang$virtual_dom$Native_Debug.messageToString(msg); + var className = _elm_lang$core$Native_Utils.eq(currentIndex, index) ? 'messages-entry messages-entry-selected' : 'messages-entry'; + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class(className), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$on, + 'click', + _elm_lang$core$Json_Decode$succeed(index)), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('messages-entry-content'), + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Helpers$attribute, 'title', messageName), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(messageName), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('messages-entry-index'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + _elm_lang$core$Basics$toString(index)), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_History$consMsg = F3( + function (currentIndex, msg, _p0) { + var _p1 = _p0; + var _p2 = _p1._0; + return { + ctor: '_Tuple2', + _0: _p2 - 1, + _1: { + ctor: '::', + _0: A4(_elm_lang$virtual_dom$VirtualDom_Helpers$lazy3, _elm_lang$virtual_dom$VirtualDom_History$viewMessage, currentIndex, _p2, msg), + _1: _p1._1 + } + }; + }); +var _elm_lang$virtual_dom$VirtualDom_History$viewSnapshot = F3( + function (currentIndex, index, _p3) { + var _p4 = _p3; + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$Array$foldl, + _elm_lang$virtual_dom$VirtualDom_History$consMsg(currentIndex), + { + ctor: '_Tuple2', + _0: index - 1, + _1: {ctor: '[]'} + }, + _p4.messages))); + }); +var _elm_lang$virtual_dom$VirtualDom_History$undone = function (getResult) { + var _p5 = getResult; + if (_p5.ctor === 'Done') { + return {ctor: '_Tuple2', _0: _p5._1, _1: _p5._0}; + } else { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.History', + { + start: {line: 195, column: 3}, + end: {line: 200, column: 39} + }, + _p5)('Bug in History.get'); + } +}; +var _elm_lang$virtual_dom$VirtualDom_History$elmToJs = _elm_lang$virtual_dom$Native_Debug.unsafeCoerce; +var _elm_lang$virtual_dom$VirtualDom_History$encodeHelp = F2( + function (snapshot, allMessages) { + return A3( + _elm_lang$core$Array$foldl, + F2( + function (elm, msgs) { + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_History$elmToJs(elm), + _1: msgs + }; + }), + allMessages, + snapshot.messages); + }); +var _elm_lang$virtual_dom$VirtualDom_History$encode = function (_p7) { + var _p8 = _p7; + var recentJson = A2( + _elm_lang$core$List$map, + _elm_lang$virtual_dom$VirtualDom_History$elmToJs, + _elm_lang$core$List$reverse(_p8.recent.messages)); + return _elm_lang$core$Json_Encode$list( + A3(_elm_lang$core$Array$foldr, _elm_lang$virtual_dom$VirtualDom_History$encodeHelp, recentJson, _p8.snapshots)); +}; +var _elm_lang$virtual_dom$VirtualDom_History$jsToElm = _elm_lang$virtual_dom$Native_Debug.unsafeCoerce; +var _elm_lang$virtual_dom$VirtualDom_History$initialModel = function (_p9) { + var _p10 = _p9; + var _p11 = A2(_elm_lang$core$Array$get, 0, _p10.snapshots); + if (_p11.ctor === 'Just') { + return _p11._0.model; + } else { + return _p10.recent.model; + } +}; +var _elm_lang$virtual_dom$VirtualDom_History$size = function (history) { + return history.numMessages; +}; +var _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize = 64; +var _elm_lang$virtual_dom$VirtualDom_History$consSnapshot = F3( + function (currentIndex, snapshot, _p12) { + var _p13 = _p12; + var _p14 = _p13._0; + var nextIndex = _p14 - _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize; + var currentIndexHelp = ((_elm_lang$core$Native_Utils.cmp(nextIndex, currentIndex) < 1) && (_elm_lang$core$Native_Utils.cmp(currentIndex, _p14) < 0)) ? currentIndex : -1; + return { + ctor: '_Tuple2', + _0: _p14 - _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize, + _1: { + ctor: '::', + _0: A4(_elm_lang$virtual_dom$VirtualDom_Helpers$lazy3, _elm_lang$virtual_dom$VirtualDom_History$viewSnapshot, currentIndexHelp, _p14, snapshot), + _1: _p13._1 + } + }; + }); +var _elm_lang$virtual_dom$VirtualDom_History$viewSnapshots = F2( + function (currentIndex, snapshots) { + var highIndex = _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize * _elm_lang$core$Array$length(snapshots); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + {ctor: '[]'}, + _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$Array$foldr, + _elm_lang$virtual_dom$VirtualDom_History$consSnapshot(currentIndex), + { + ctor: '_Tuple2', + _0: highIndex, + _1: {ctor: '[]'} + }, + snapshots))); + }); +var _elm_lang$virtual_dom$VirtualDom_History$view = F2( + function (maybeIndex, _p15) { + var _p16 = _p15; + var _p17 = function () { + var _p18 = maybeIndex; + if (_p18.ctor === 'Nothing') { + return {ctor: '_Tuple2', _0: -1, _1: 'debugger-sidebar-messages'}; + } else { + return {ctor: '_Tuple2', _0: _p18._0, _1: 'debugger-sidebar-messages-paused'}; + } + }(); + var index = _p17._0; + var className = _p17._1; + var oldStuff = A3(_elm_lang$virtual_dom$VirtualDom_Helpers$lazy2, _elm_lang$virtual_dom$VirtualDom_History$viewSnapshots, index, _p16.snapshots); + var newStuff = _elm_lang$core$Tuple$second( + A3( + _elm_lang$core$List$foldl, + _elm_lang$virtual_dom$VirtualDom_History$consMsg(index), + { + ctor: '_Tuple2', + _0: _p16.numMessages - 1, + _1: {ctor: '[]'} + }, + _p16.recent.messages)); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class(className), + _1: {ctor: '[]'} + }, + {ctor: '::', _0: oldStuff, _1: newStuff}); + }); +var _elm_lang$virtual_dom$VirtualDom_History$History = F3( + function (a, b, c) { + return {snapshots: a, recent: b, numMessages: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_History$RecentHistory = F3( + function (a, b, c) { + return {model: a, messages: b, numMessages: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_History$empty = function (model) { + return A3( + _elm_lang$virtual_dom$VirtualDom_History$History, + _elm_lang$core$Array$empty, + A3( + _elm_lang$virtual_dom$VirtualDom_History$RecentHistory, + model, + {ctor: '[]'}, + 0), + 0); +}; +var _elm_lang$virtual_dom$VirtualDom_History$Snapshot = F2( + function (a, b) { + return {model: a, messages: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_History$addRecent = F3( + function (msg, newModel, _p19) { + var _p20 = _p19; + var _p23 = _p20.numMessages; + var _p22 = _p20.model; + var _p21 = _p20.messages; + return _elm_lang$core$Native_Utils.eq(_p23, _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize) ? { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Just( + A2( + _elm_lang$virtual_dom$VirtualDom_History$Snapshot, + _p22, + _elm_lang$core$Array$fromList(_p21))), + _1: A3( + _elm_lang$virtual_dom$VirtualDom_History$RecentHistory, + newModel, + { + ctor: '::', + _0: msg, + _1: {ctor: '[]'} + }, + 1) + } : { + ctor: '_Tuple2', + _0: _elm_lang$core$Maybe$Nothing, + _1: A3( + _elm_lang$virtual_dom$VirtualDom_History$RecentHistory, + _p22, + {ctor: '::', _0: msg, _1: _p21}, + _p23 + 1) + }; + }); +var _elm_lang$virtual_dom$VirtualDom_History$add = F3( + function (msg, model, _p24) { + var _p25 = _p24; + var _p28 = _p25.snapshots; + var _p27 = _p25.numMessages; + var _p26 = A3(_elm_lang$virtual_dom$VirtualDom_History$addRecent, msg, model, _p25.recent); + if (_p26._0.ctor === 'Just') { + return A3( + _elm_lang$virtual_dom$VirtualDom_History$History, + A2(_elm_lang$core$Array$push, _p26._0._0, _p28), + _p26._1, + _p27 + 1); + } else { + return A3(_elm_lang$virtual_dom$VirtualDom_History$History, _p28, _p26._1, _p27 + 1); + } + }); +var _elm_lang$virtual_dom$VirtualDom_History$decoder = F2( + function (initialModel, update) { + var addMessage = F2( + function (rawMsg, _p29) { + var _p30 = _p29; + var _p31 = _p30._0; + var msg = _elm_lang$virtual_dom$VirtualDom_History$jsToElm(rawMsg); + return { + ctor: '_Tuple2', + _0: A2(update, msg, _p31), + _1: A3(_elm_lang$virtual_dom$VirtualDom_History$add, msg, _p31, _p30._1) + }; + }); + var updateModel = function (rawMsgs) { + return A3( + _elm_lang$core$List$foldl, + addMessage, + { + ctor: '_Tuple2', + _0: initialModel, + _1: _elm_lang$virtual_dom$VirtualDom_History$empty(initialModel) + }, + rawMsgs); + }; + return A2( + _elm_lang$core$Json_Decode$map, + updateModel, + _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$value)); + }); +var _elm_lang$virtual_dom$VirtualDom_History$Done = F2( + function (a, b) { + return {ctor: 'Done', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_History$Stepping = F2( + function (a, b) { + return {ctor: 'Stepping', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_History$getHelp = F3( + function (update, msg, getResult) { + var _p32 = getResult; + if (_p32.ctor === 'Done') { + return getResult; + } else { + var _p34 = _p32._0; + var _p33 = _p32._1; + return _elm_lang$core$Native_Utils.eq(_p34, 0) ? A2( + _elm_lang$virtual_dom$VirtualDom_History$Done, + msg, + _elm_lang$core$Tuple$first( + A2(update, msg, _p33))) : A2( + _elm_lang$virtual_dom$VirtualDom_History$Stepping, + _p34 - 1, + _elm_lang$core$Tuple$first( + A2(update, msg, _p33))); + } + }); +var _elm_lang$virtual_dom$VirtualDom_History$get = F3( + function (update, index, _p35) { + var _p36 = _p35; + var _p39 = _p36.recent; + var snapshotMax = _p36.numMessages - _p39.numMessages; + if (_elm_lang$core$Native_Utils.cmp(index, snapshotMax) > -1) { + return _elm_lang$virtual_dom$VirtualDom_History$undone( + A3( + _elm_lang$core$List$foldr, + _elm_lang$virtual_dom$VirtualDom_History$getHelp(update), + A2(_elm_lang$virtual_dom$VirtualDom_History$Stepping, index - snapshotMax, _p39.model), + _p39.messages)); + } else { + var _p37 = A2(_elm_lang$core$Array$get, (index / _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize) | 0, _p36.snapshots); + if (_p37.ctor === 'Nothing') { + return _elm_lang$core$Native_Utils.crashCase( + 'VirtualDom.History', + { + start: {line: 165, column: 7}, + end: {line: 171, column: 95} + }, + _p37)('UI should only let you ask for real indexes!'); + } else { + return _elm_lang$virtual_dom$VirtualDom_History$undone( + A3( + _elm_lang$core$Array$foldr, + _elm_lang$virtual_dom$VirtualDom_History$getHelp(update), + A2( + _elm_lang$virtual_dom$VirtualDom_History$Stepping, + A2(_elm_lang$core$Basics$rem, index, _elm_lang$virtual_dom$VirtualDom_History$maxSnapshotSize), + _p37._0.model), + _p37._0.messages)); + } + } + }); + +var _elm_lang$virtual_dom$VirtualDom_Overlay$styles = A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'style', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('\n\n.elm-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n color: white;\n pointer-events: none;\n font-family: \'Trebuchet MS\', \'Lucida Grande\', \'Bitstream Vera Sans\', \'Helvetica Neue\', sans-serif;\n}\n\n.elm-overlay-resume {\n width: 100%;\n height: 100%;\n cursor: pointer;\n text-align: center;\n pointer-events: auto;\n background-color: rgba(200, 200, 200, 0.7);\n}\n\n.elm-overlay-resume-words {\n position: absolute;\n top: calc(50% - 40px);\n font-size: 80px;\n line-height: 80px;\n height: 80px;\n width: 100%;\n}\n\n.elm-mini-controls {\n position: fixed;\n bottom: 0;\n right: 6px;\n border-radius: 4px;\n background-color: rgb(61, 61, 61);\n font-family: monospace;\n pointer-events: auto;\n}\n\n.elm-mini-controls-button {\n padding: 6px;\n cursor: pointer;\n text-align: center;\n min-width: 24ch;\n}\n\n.elm-mini-controls-import-export {\n padding: 4px 0;\n font-size: 0.8em;\n text-align: center;\n background-color: rgb(50, 50, 50);\n}\n\n.elm-overlay-message {\n position: absolute;\n width: 600px;\n height: 100%;\n padding-left: calc(50% - 300px);\n padding-right: calc(50% - 300px);\n background-color: rgba(200, 200, 200, 0.7);\n pointer-events: auto;\n}\n\n.elm-overlay-message-title {\n font-size: 36px;\n height: 80px;\n background-color: rgb(50, 50, 50);\n padding-left: 22px;\n vertical-align: middle;\n line-height: 80px;\n}\n\n.elm-overlay-message-details {\n padding: 8px 20px;\n overflow-y: auto;\n max-height: calc(100% - 156px);\n background-color: rgb(61, 61, 61);\n}\n\n.elm-overlay-message-details-type {\n font-size: 1.5em;\n}\n\n.elm-overlay-message-details ul {\n list-style-type: none;\n padding-left: 20px;\n}\n\n.elm-overlay-message-details ul ul {\n list-style-type: disc;\n padding-left: 2em;\n}\n\n.elm-overlay-message-details li {\n margin: 8px 0;\n}\n\n.elm-overlay-message-buttons {\n height: 60px;\n line-height: 60px;\n text-align: right;\n background-color: rgb(50, 50, 50);\n}\n\n.elm-overlay-message-buttons button {\n margin-right: 20px;\n}\n\n'), + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$button = F2( + function (msg, label) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(msg), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'cursor', _1: 'pointer'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(label), + _1: {ctor: '[]'} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewImportExport = F3( + function (props, importMsg, exportMsg) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + props, + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$button, importMsg, 'Import'), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' / '), + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$button, exportMsg, 'Export'), + _1: {ctor: '[]'} + } + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewMiniControls = F2( + function (config, numMsgs) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-mini-controls'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(config.open), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-mini-controls-button'), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'Explore History (', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$core$Basics$toString(numMsgs), + ')'))), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Overlay$viewImportExport, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-mini-controls-import-export'), + _1: {ctor: '[]'} + }, + config.importHistory, + config.exportHistory), + _1: {ctor: '[]'} + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$addCommas = function (items) { + var _p0 = items; + if (_p0.ctor === '[]') { + return ''; + } else { + if (_p0._1.ctor === '[]') { + return _p0._0; + } else { + if (_p0._1._1.ctor === '[]') { + return A2( + _elm_lang$core$Basics_ops['++'], + _p0._0, + A2(_elm_lang$core$Basics_ops['++'], ' and ', _p0._1._0)); + } else { + return A2( + _elm_lang$core$String$join, + ', ', + A2( + _elm_lang$core$Basics_ops['++'], + _p0._1, + { + ctor: '::', + _0: A2(_elm_lang$core$Basics_ops['++'], ' and ', _p0._0), + _1: {ctor: '[]'} + })); + } + } + } +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$problemToString = function (problem) { + var _p1 = problem; + switch (_p1.ctor) { + case 'Function': + return 'functions'; + case 'Decoder': + return 'JSON decoders'; + case 'Task': + return 'tasks'; + case 'Process': + return 'processes'; + case 'Socket': + return 'web sockets'; + case 'Request': + return 'HTTP requests'; + case 'Program': + return 'programs'; + default: + return 'virtual DOM values'; + } +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$goodNews2 = '\nfunction can pattern match on that data and call whatever functions, JSON\ndecoders, etc. you need. This makes the code much more explicit and easy to\nfollow for other readers (or you in a few months!)\n'; +var _elm_lang$virtual_dom$VirtualDom_Overlay$goodNews1 = '\nThe good news is that having values like this in your message type is not\nso great in the long run. You are better off using simpler data, like\n'; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode = function (name) { + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'code', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(name), + _1: {ctor: '[]'} + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewMention = F2( + function (tags, verbed) { + var _p2 = A2( + _elm_lang$core$List$map, + _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode, + _elm_lang$core$List$reverse(tags)); + if (_p2.ctor === '[]') { + return _elm_lang$virtual_dom$VirtualDom_Helpers$text(''); + } else { + if (_p2._1.ctor === '[]') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'li', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(verbed), + _1: { + ctor: '::', + _0: _p2._0, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('.'), + _1: {ctor: '[]'} + } + } + }); + } else { + if (_p2._1._1.ctor === '[]') { + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'li', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(verbed), + _1: { + ctor: '::', + _0: _p2._1._0, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' and '), + _1: { + ctor: '::', + _0: _p2._0, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('.'), + _1: {ctor: '[]'} + } + } + } + } + }); + } else { + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'li', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(verbed), + _1: A2( + _elm_lang$core$Basics_ops['++'], + A2( + _elm_lang$core$List$intersperse, + _elm_lang$virtual_dom$VirtualDom_Helpers$text(', '), + _elm_lang$core$List$reverse(_p2._1)), + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(', and '), + _1: { + ctor: '::', + _0: _p2._0, + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('.'), + _1: {ctor: '[]'} + } + } + }) + }); + } + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewChange = function (change) { + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'li', + {ctor: '[]'}, + function () { + var _p3 = change; + if (_p3.ctor === 'AliasChange') { + return { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message-details-type'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p3._0), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }; + } else { + return { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message-details-type'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p3._0), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'ul', + {ctor: '[]'}, + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewMention, _p3._1.removed, 'Removed '), + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewMention, _p3._1.changed, 'Changed '), + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewMention, _p3._1.added, 'Added '), + _1: {ctor: '[]'} + } + } + }), + _1: { + ctor: '::', + _0: _p3._1.argsMatch ? _elm_lang$virtual_dom$VirtualDom_Helpers$text('') : _elm_lang$virtual_dom$VirtualDom_Helpers$text('This may be due to the fact that the type variable names changed.'), + _1: {ctor: '[]'} + } + } + }; + } + }()); +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewProblemType = function (_p4) { + var _p5 = _p4; + return A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'li', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p5.name), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + A2( + _elm_lang$core$Basics_ops['++'], + ' can contain ', + A2( + _elm_lang$core$Basics_ops['++'], + _elm_lang$virtual_dom$VirtualDom_Overlay$addCommas( + A2(_elm_lang$core$List$map, _elm_lang$virtual_dom$VirtualDom_Overlay$problemToString, _p5.problems)), + '.'))), + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewBadMetadata = function (_p6) { + var _p7 = _p6; + return { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'p', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('The '), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p7.message), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' type of your program cannot be reliably serialized for history files.'), + _1: {ctor: '[]'} + } + } + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'p', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('Functions cannot be serialized, nor can values that contain functions. This is a problem in these places:'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'ul', + {ctor: '[]'}, + A2(_elm_lang$core$List$map, _elm_lang$virtual_dom$VirtualDom_Overlay$viewProblemType, _p7.problems)), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'p', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_elm_lang$virtual_dom$VirtualDom_Overlay$goodNews1), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$a, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$href('https://guide.elm-lang.org/types/union_types.html'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('union types'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(', in your messages. From there, your '), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode('update'), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_elm_lang$virtual_dom$VirtualDom_Overlay$goodNews2), + _1: {ctor: '[]'} + } + } + } + } + }), + _1: {ctor: '[]'} + } + } + } + }; +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$explanationRisky = '\nThis history seems old. It will work with this program, but some\nmessages have been added since the history was created:\n'; +var _elm_lang$virtual_dom$VirtualDom_Overlay$explanationBad = '\nThe messages in this history do not match the messages handled by your\nprogram. I noticed changes in the following types:\n'; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewReport = F2( + function (isBad, report) { + var _p8 = report; + switch (_p8.ctor) { + case 'CorruptHistory': + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('Looks like this history file is corrupt. I cannot understand it.'), + _1: {ctor: '[]'} + }; + case 'VersionChanged': + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + A2( + _elm_lang$core$Basics_ops['++'], + 'This history was created with Elm ', + A2( + _elm_lang$core$Basics_ops['++'], + _p8._0, + A2( + _elm_lang$core$Basics_ops['++'], + ', but you are using Elm ', + A2(_elm_lang$core$Basics_ops['++'], _p8._1, ' right now.'))))), + _1: {ctor: '[]'} + }; + case 'MessageChanged': + return { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + A2(_elm_lang$core$Basics_ops['++'], 'To import some other history, the overall message type must', ' be the same. The old history has ')), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p8._0), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' messages, but the new program works with '), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewCode(_p8._1), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' messages.'), + _1: {ctor: '[]'} + } + } + } + } + }; + default: + return { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'p', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text( + isBad ? _elm_lang$virtual_dom$VirtualDom_Overlay$explanationBad : _elm_lang$virtual_dom$VirtualDom_Overlay$explanationRisky), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'ul', + {ctor: '[]'}, + A2(_elm_lang$core$List$map, _elm_lang$virtual_dom$VirtualDom_Overlay$viewChange, _p8._0)), + _1: {ctor: '[]'} + } + }; + } + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewResume = function (config) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-resume'), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(config.resume), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-resume-words'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('Click to Resume'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$uploadDecoder = A3( + _elm_lang$core$Json_Decode$map2, + F2( + function (v0, v1) { + return {ctor: '_Tuple2', _0: v0, _1: v1}; + }), + A2(_elm_lang$core$Json_Decode$field, 'metadata', _elm_lang$virtual_dom$VirtualDom_Metadata$decoder), + A2(_elm_lang$core$Json_Decode$field, 'history', _elm_lang$core$Json_Decode$value)); +var _elm_lang$virtual_dom$VirtualDom_Overlay$close = F2( + function (msg, state) { + var _p9 = state; + switch (_p9.ctor) { + case 'None': + return _elm_lang$core$Maybe$Nothing; + case 'BadMetadata': + return _elm_lang$core$Maybe$Nothing; + case 'BadImport': + return _elm_lang$core$Maybe$Nothing; + default: + var _p10 = msg; + if (_p10.ctor === 'Cancel') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just(_p9._1); + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$isBlocking = function (state) { + var _p11 = state; + if (_p11.ctor === 'None') { + return false; + } else { + return true; + } +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Config = F5( + function (a, b, c, d, e) { + return {resume: a, open: b, importHistory: c, exportHistory: d, wrap: e}; + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$RiskyImport = F2( + function (a, b) { + return {ctor: 'RiskyImport', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$BadImport = function (a) { + return {ctor: 'BadImport', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$corruptImport = _elm_lang$virtual_dom$VirtualDom_Overlay$BadImport(_elm_lang$virtual_dom$VirtualDom_Report$CorruptHistory); +var _elm_lang$virtual_dom$VirtualDom_Overlay$assessImport = F2( + function (metadata, jsonString) { + var _p12 = A2(_elm_lang$core$Json_Decode$decodeString, _elm_lang$virtual_dom$VirtualDom_Overlay$uploadDecoder, jsonString); + if (_p12.ctor === 'Err') { + return _elm_lang$core$Result$Err(_elm_lang$virtual_dom$VirtualDom_Overlay$corruptImport); + } else { + var _p14 = _p12._0._1; + var report = A2(_elm_lang$virtual_dom$VirtualDom_Metadata$check, _p12._0._0, metadata); + var _p13 = _elm_lang$virtual_dom$VirtualDom_Report$evaluate(report); + switch (_p13.ctor) { + case 'Impossible': + return _elm_lang$core$Result$Err( + _elm_lang$virtual_dom$VirtualDom_Overlay$BadImport(report)); + case 'Risky': + return _elm_lang$core$Result$Err( + A2(_elm_lang$virtual_dom$VirtualDom_Overlay$RiskyImport, report, _p14)); + default: + return _elm_lang$core$Result$Ok(_p14); + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$BadMetadata = function (a) { + return {ctor: 'BadMetadata', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$badMetadata = _elm_lang$virtual_dom$VirtualDom_Overlay$BadMetadata; +var _elm_lang$virtual_dom$VirtualDom_Overlay$None = {ctor: 'None'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$none = _elm_lang$virtual_dom$VirtualDom_Overlay$None; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Proceed = {ctor: 'Proceed'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Cancel = {ctor: 'Cancel'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewButtons = function (buttons) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message-buttons'), + _1: {ctor: '[]'} + }, + function () { + var _p15 = buttons; + if (_p15.ctor === 'Accept') { + return { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'button', + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Overlay$Proceed), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p15._0), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }; + } else { + return { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'button', + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Overlay$Cancel), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p15._0), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'button', + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Overlay$Proceed), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(_p15._1), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }; + } + }()); +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Message = {ctor: 'Message'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewMessage = F4( + function (config, title, details, buttons) { + return { + ctor: '_Tuple2', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$Message, + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message-title'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(title), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay-message-details'), + _1: {ctor: '[]'} + }, + details), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + config.wrap, + _elm_lang$virtual_dom$VirtualDom_Overlay$viewButtons(buttons)), + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + }; + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$Pause = {ctor: 'Pause'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Normal = {ctor: 'Normal'}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$Choose = F2( + function (a, b) { + return {ctor: 'Choose', _0: a, _1: b}; + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$Accept = function (a) { + return {ctor: 'Accept', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Overlay$viewHelp = F5( + function (config, isPaused, isOpen, numMsgs, state) { + var _p16 = state; + switch (_p16.ctor) { + case 'None': + var miniControls = isOpen ? {ctor: '[]'} : { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewMiniControls, config, numMsgs), + _1: {ctor: '[]'} + }; + return { + ctor: '_Tuple2', + _0: isPaused ? _elm_lang$virtual_dom$VirtualDom_Overlay$Pause : _elm_lang$virtual_dom$VirtualDom_Overlay$Normal, + _1: (isPaused && (!isOpen)) ? { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Overlay$viewResume(config), + _1: miniControls + } : miniControls + }; + case 'BadMetadata': + return A4( + _elm_lang$virtual_dom$VirtualDom_Overlay$viewMessage, + config, + 'Cannot use Import or Export', + _elm_lang$virtual_dom$VirtualDom_Overlay$viewBadMetadata(_p16._0), + _elm_lang$virtual_dom$VirtualDom_Overlay$Accept('Ok')); + case 'BadImport': + return A4( + _elm_lang$virtual_dom$VirtualDom_Overlay$viewMessage, + config, + 'Cannot Import History', + A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewReport, true, _p16._0), + _elm_lang$virtual_dom$VirtualDom_Overlay$Accept('Ok')); + default: + return A4( + _elm_lang$virtual_dom$VirtualDom_Overlay$viewMessage, + config, + 'Warning', + A2(_elm_lang$virtual_dom$VirtualDom_Overlay$viewReport, false, _p16._0), + A2(_elm_lang$virtual_dom$VirtualDom_Overlay$Choose, 'Cancel', 'Import Anyway')); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Overlay$view = F5( + function (config, isPaused, isOpen, numMsgs, state) { + var _p17 = A5(_elm_lang$virtual_dom$VirtualDom_Overlay$viewHelp, config, isPaused, isOpen, numMsgs, state); + var block = _p17._0; + var nodes = _p17._1; + return { + ctor: '_Tuple2', + _0: block, + _1: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('elm-overlay'), + _1: {ctor: '[]'} + }, + {ctor: '::', _0: _elm_lang$virtual_dom$VirtualDom_Overlay$styles, _1: nodes}) + }; + }); + +var _elm_lang$virtual_dom$VirtualDom_Debug$styles = A3( + _elm_lang$virtual_dom$VirtualDom_Helpers$node, + 'style', + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('\n\nhtml {\n overflow: hidden;\n height: 100%;\n}\n\nbody {\n height: 100%;\n overflow: auto;\n}\n\n#debugger {\n width: 100%\n height: 100%;\n font-family: monospace;\n}\n\n#values {\n display: block;\n float: left;\n height: 100%;\n width: calc(100% - 30ch);\n margin: 0;\n overflow: auto;\n cursor: default;\n}\n\n.debugger-sidebar {\n display: block;\n float: left;\n width: 30ch;\n height: 100%;\n color: white;\n background-color: rgb(61, 61, 61);\n}\n\n.debugger-sidebar-controls {\n width: 100%;\n text-align: center;\n background-color: rgb(50, 50, 50);\n}\n\n.debugger-sidebar-controls-import-export {\n width: 100%;\n height: 24px;\n line-height: 24px;\n font-size: 12px;\n}\n\n.debugger-sidebar-controls-resume {\n width: 100%;\n height: 30px;\n line-height: 30px;\n cursor: pointer;\n}\n\n.debugger-sidebar-controls-resume:hover {\n background-color: rgb(41, 41, 41);\n}\n\n.debugger-sidebar-messages {\n width: 100%;\n overflow-y: auto;\n height: calc(100% - 24px);\n}\n\n.debugger-sidebar-messages-paused {\n width: 100%;\n overflow-y: auto;\n height: calc(100% - 54px);\n}\n\n.messages-entry {\n cursor: pointer;\n width: 100%;\n}\n\n.messages-entry:hover {\n background-color: rgb(41, 41, 41);\n}\n\n.messages-entry-selected, .messages-entry-selected:hover {\n background-color: rgb(10, 10, 10);\n}\n\n.messages-entry-content {\n width: calc(100% - 7ch);\n padding-top: 4px;\n padding-bottom: 4px;\n padding-left: 1ch;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n display: inline-block;\n}\n\n.messages-entry-index {\n color: #666;\n width: 5ch;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-right: 1ch;\n text-align: right;\n display: block;\n float: right;\n}\n\n'), + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$button = F2( + function (msg, label) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$span, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(msg), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$style( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: 'cursor', _1: 'pointer'}, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(label), + _1: {ctor: '[]'} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$getLatestModel = function (state) { + var _p0 = state; + if (_p0.ctor === 'Running') { + return _p0._0; + } else { + return _p0._2; + } +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$withGoodMetadata = F2( + function (model, func) { + var _p1 = model.metadata; + if (_p1.ctor === 'Ok') { + return func(_p1._0); + } else { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + { + overlay: _elm_lang$virtual_dom$VirtualDom_Overlay$badMetadata(_p1._0) + }), + {ctor: '[]'}); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$Model = F6( + function (a, b, c, d, e, f) { + return {history: a, state: b, expando: c, metadata: d, overlay: e, isDebuggerOpen: f}; + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$Paused = F3( + function (a, b, c) { + return {ctor: 'Paused', _0: a, _1: b, _2: c}; + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$Running = function (a) { + return {ctor: 'Running', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$loadNewHistory = F3( + function (rawHistory, userUpdate, model) { + var pureUserUpdate = F2( + function (msg, userModel) { + return _elm_lang$core$Tuple$first( + A2(userUpdate, msg, userModel)); + }); + var initialUserModel = _elm_lang$virtual_dom$VirtualDom_History$initialModel(model.history); + var decoder = A2(_elm_lang$virtual_dom$VirtualDom_History$decoder, initialUserModel, pureUserUpdate); + var _p2 = A2(_elm_lang$core$Json_Decode$decodeValue, decoder, rawHistory); + if (_p2.ctor === 'Err') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {overlay: _elm_lang$virtual_dom$VirtualDom_Overlay$corruptImport}), + {ctor: '[]'}); + } else { + var _p3 = _p2._0._0; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + { + history: _p2._0._1, + state: _elm_lang$virtual_dom$VirtualDom_Debug$Running(_p3), + expando: _elm_lang$virtual_dom$VirtualDom_Expando$init(_p3), + overlay: _elm_lang$virtual_dom$VirtualDom_Overlay$none + }), + {ctor: '[]'}); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$OverlayMsg = function (a) { + return {ctor: 'OverlayMsg', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Upload = function (a) { + return {ctor: 'Upload', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$upload = A2(_elm_lang$core$Task$perform, _elm_lang$virtual_dom$VirtualDom_Debug$Upload, _elm_lang$virtual_dom$Native_Debug.upload); +var _elm_lang$virtual_dom$VirtualDom_Debug$Export = {ctor: 'Export'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Import = {ctor: 'Import'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Down = {ctor: 'Down'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Up = {ctor: 'Up'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Close = {ctor: 'Close'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Open = {ctor: 'Open'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Jump = function (a) { + return {ctor: 'Jump', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$Resume = {ctor: 'Resume'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$overlayConfig = {resume: _elm_lang$virtual_dom$VirtualDom_Debug$Resume, open: _elm_lang$virtual_dom$VirtualDom_Debug$Open, importHistory: _elm_lang$virtual_dom$VirtualDom_Debug$Import, exportHistory: _elm_lang$virtual_dom$VirtualDom_Debug$Export, wrap: _elm_lang$virtual_dom$VirtualDom_Debug$OverlayMsg}; +var _elm_lang$virtual_dom$VirtualDom_Debug$viewIn = function (_p4) { + var _p5 = _p4; + var isPaused = function () { + var _p6 = _p5.state; + if (_p6.ctor === 'Running') { + return false; + } else { + return true; + } + }(); + return A5( + _elm_lang$virtual_dom$VirtualDom_Overlay$view, + _elm_lang$virtual_dom$VirtualDom_Debug$overlayConfig, + isPaused, + _p5.isDebuggerOpen, + _elm_lang$virtual_dom$VirtualDom_History$size(_p5.history), + _p5.overlay); +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$resumeButton = A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$onClick(_elm_lang$virtual_dom$VirtualDom_Debug$Resume), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('debugger-sidebar-controls-resume'), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text('Resume'), + _1: {ctor: '[]'} + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$viewResumeButton = function (maybeIndex) { + var _p7 = maybeIndex; + if (_p7.ctor === 'Nothing') { + return _elm_lang$virtual_dom$VirtualDom_Helpers$text(''); + } else { + return _elm_lang$virtual_dom$VirtualDom_Debug$resumeButton; + } +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$playButton = function (maybeIndex) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('debugger-sidebar-controls'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Debug$viewResumeButton(maybeIndex), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('debugger-sidebar-controls-import-export'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$button, _elm_lang$virtual_dom$VirtualDom_Debug$Import, 'Import'), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$text(' / '), + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$button, _elm_lang$virtual_dom$VirtualDom_Debug$Export, 'Export'), + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$viewSidebar = F2( + function (state, history) { + var maybeIndex = function () { + var _p8 = state; + if (_p8.ctor === 'Running') { + return _elm_lang$core$Maybe$Nothing; + } else { + return _elm_lang$core$Maybe$Just(_p8._0); + } + }(); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$class('debugger-sidebar'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + _elm_lang$virtual_dom$VirtualDom_Debug$Jump, + A2(_elm_lang$virtual_dom$VirtualDom_History$view, maybeIndex, history)), + _1: { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Debug$playButton(maybeIndex), + _1: {ctor: '[]'} + } + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$ExpandoMsg = function (a) { + return {ctor: 'ExpandoMsg', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$viewOut = function (_p9) { + var _p10 = _p9; + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$id('debugger'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Debug$styles, + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$viewSidebar, _p10.state, _p10.history), + _1: { + ctor: '::', + _0: A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + _elm_lang$virtual_dom$VirtualDom_Debug$ExpandoMsg, + A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$div, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Helpers$id('values'), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Expando$view, _elm_lang$core$Maybe$Nothing, _p10.expando), + _1: {ctor: '[]'} + })), + _1: {ctor: '[]'} + } + } + }); +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$UserMsg = function (a) { + return {ctor: 'UserMsg', _0: a}; +}; +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapInit = F2( + function (metadata, _p11) { + var _p12 = _p11; + var _p13 = _p12._0; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + { + history: _elm_lang$virtual_dom$VirtualDom_History$empty(_p13), + state: _elm_lang$virtual_dom$VirtualDom_Debug$Running(_p13), + expando: _elm_lang$virtual_dom$VirtualDom_Expando$init(_p13), + metadata: _elm_lang$virtual_dom$VirtualDom_Metadata$decode(metadata), + overlay: _elm_lang$virtual_dom$VirtualDom_Overlay$none, + isDebuggerOpen: false + }, + { + ctor: '::', + _0: A2(_elm_lang$core$Platform_Cmd$map, _elm_lang$virtual_dom$VirtualDom_Debug$UserMsg, _p12._1), + _1: {ctor: '[]'} + }); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapSubs = F2( + function (userSubscriptions, _p14) { + var _p15 = _p14; + return A2( + _elm_lang$core$Platform_Sub$map, + _elm_lang$virtual_dom$VirtualDom_Debug$UserMsg, + userSubscriptions( + _elm_lang$virtual_dom$VirtualDom_Debug$getLatestModel(_p15.state))); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapView = F2( + function (userView, _p16) { + var _p17 = _p16; + var currentModel = function () { + var _p18 = _p17.state; + if (_p18.ctor === 'Running') { + return _p18._0; + } else { + return _p18._1; + } + }(); + return A2( + _elm_lang$virtual_dom$VirtualDom_Helpers$map, + _elm_lang$virtual_dom$VirtualDom_Debug$UserMsg, + userView(currentModel)); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$NoOp = {ctor: 'NoOp'}; +var _elm_lang$virtual_dom$VirtualDom_Debug$download = F2( + function (metadata, history) { + var json = _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'metadata', + _1: _elm_lang$virtual_dom$VirtualDom_Metadata$encode(metadata) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'history', + _1: _elm_lang$virtual_dom$VirtualDom_History$encode(history) + }, + _1: {ctor: '[]'} + } + }); + var historyLength = _elm_lang$virtual_dom$VirtualDom_History$size(history); + return A2( + _elm_lang$core$Task$perform, + function (_p19) { + return _elm_lang$virtual_dom$VirtualDom_Debug$NoOp; + }, + A2(_elm_lang$virtual_dom$Native_Debug.download, historyLength, json)); + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$runIf = F2( + function (bool, task) { + return bool ? A2( + _elm_lang$core$Task$perform, + _elm_lang$core$Basics$always(_elm_lang$virtual_dom$VirtualDom_Debug$NoOp), + task) : _elm_lang$core$Platform_Cmd$none; + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$updateUserMsg = F4( + function (userUpdate, scrollTask, userMsg, _p20) { + var _p21 = _p20; + var _p25 = _p21.state; + var _p24 = _p21; + var userModel = _elm_lang$virtual_dom$VirtualDom_Debug$getLatestModel(_p25); + var newHistory = A3(_elm_lang$virtual_dom$VirtualDom_History$add, userMsg, userModel, _p21.history); + var _p22 = A2(userUpdate, userMsg, userModel); + var newUserModel = _p22._0; + var userCmds = _p22._1; + var commands = A2(_elm_lang$core$Platform_Cmd$map, _elm_lang$virtual_dom$VirtualDom_Debug$UserMsg, userCmds); + var _p23 = _p25; + if (_p23.ctor === 'Running') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + _p24, + { + history: newHistory, + state: _elm_lang$virtual_dom$VirtualDom_Debug$Running(newUserModel), + expando: A2(_elm_lang$virtual_dom$VirtualDom_Expando$merge, newUserModel, _p21.expando) + }), + { + ctor: '::', + _0: commands, + _1: { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$runIf, _p24.isDebuggerOpen, scrollTask), + _1: {ctor: '[]'} + } + }); + } else { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + _p24, + { + history: newHistory, + state: A3(_elm_lang$virtual_dom$VirtualDom_Debug$Paused, _p23._0, _p23._1, newUserModel) + }), + { + ctor: '::', + _0: commands, + _1: {ctor: '[]'} + }); + } + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapUpdate = F4( + function (userUpdate, scrollTask, msg, model) { + wrapUpdate: + while (true) { + var _p26 = msg; + switch (_p26.ctor) { + case 'NoOp': + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + {ctor: '[]'}); + case 'UserMsg': + return A4(_elm_lang$virtual_dom$VirtualDom_Debug$updateUserMsg, userUpdate, scrollTask, _p26._0, model); + case 'ExpandoMsg': + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + { + expando: A2(_elm_lang$virtual_dom$VirtualDom_Expando$update, _p26._0, model.expando) + }), + {ctor: '[]'}); + case 'Resume': + var _p27 = model.state; + if (_p27.ctor === 'Running') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + {ctor: '[]'}); + } else { + var _p28 = _p27._2; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + { + state: _elm_lang$virtual_dom$VirtualDom_Debug$Running(_p28), + expando: A2(_elm_lang$virtual_dom$VirtualDom_Expando$merge, _p28, model.expando) + }), + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$runIf, model.isDebuggerOpen, scrollTask), + _1: {ctor: '[]'} + }); + } + case 'Jump': + var _p30 = _p26._0; + var _p29 = A3(_elm_lang$virtual_dom$VirtualDom_History$get, userUpdate, _p30, model.history); + var indexModel = _p29._0; + var indexMsg = _p29._1; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + { + state: A3( + _elm_lang$virtual_dom$VirtualDom_Debug$Paused, + _p30, + indexModel, + _elm_lang$virtual_dom$VirtualDom_Debug$getLatestModel(model.state)), + expando: A2(_elm_lang$virtual_dom$VirtualDom_Expando$merge, indexModel, model.expando) + }), + {ctor: '[]'}); + case 'Open': + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {isDebuggerOpen: true}), + {ctor: '[]'}); + case 'Close': + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {isDebuggerOpen: false}), + {ctor: '[]'}); + case 'Up': + var index = function () { + var _p31 = model.state; + if (_p31.ctor === 'Paused') { + return _p31._0; + } else { + return _elm_lang$virtual_dom$VirtualDom_History$size(model.history); + } + }(); + if (_elm_lang$core$Native_Utils.cmp(index, 0) > 0) { + var _v17 = userUpdate, + _v18 = scrollTask, + _v19 = _elm_lang$virtual_dom$VirtualDom_Debug$Jump(index - 1), + _v20 = model; + userUpdate = _v17; + scrollTask = _v18; + msg = _v19; + model = _v20; + continue wrapUpdate; + } else { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + {ctor: '[]'}); + } + case 'Down': + var _p32 = model.state; + if (_p32.ctor === 'Running') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + {ctor: '[]'}); + } else { + var _p33 = _p32._0; + if (_elm_lang$core$Native_Utils.eq( + _p33, + _elm_lang$virtual_dom$VirtualDom_History$size(model.history) - 1)) { + var _v22 = userUpdate, + _v23 = scrollTask, + _v24 = _elm_lang$virtual_dom$VirtualDom_Debug$Resume, + _v25 = model; + userUpdate = _v22; + scrollTask = _v23; + msg = _v24; + model = _v25; + continue wrapUpdate; + } else { + var _v26 = userUpdate, + _v27 = scrollTask, + _v28 = _elm_lang$virtual_dom$VirtualDom_Debug$Jump(_p33 + 1), + _v29 = model; + userUpdate = _v26; + scrollTask = _v27; + msg = _v28; + model = _v29; + continue wrapUpdate; + } + } + case 'Import': + return A2( + _elm_lang$virtual_dom$VirtualDom_Debug$withGoodMetadata, + model, + function (_p34) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + { + ctor: '::', + _0: _elm_lang$virtual_dom$VirtualDom_Debug$upload, + _1: {ctor: '[]'} + }); + }); + case 'Export': + return A2( + _elm_lang$virtual_dom$VirtualDom_Debug$withGoodMetadata, + model, + function (metadata) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + { + ctor: '::', + _0: A2(_elm_lang$virtual_dom$VirtualDom_Debug$download, metadata, model.history), + _1: {ctor: '[]'} + }); + }); + case 'Upload': + return A2( + _elm_lang$virtual_dom$VirtualDom_Debug$withGoodMetadata, + model, + function (metadata) { + var _p35 = A2(_elm_lang$virtual_dom$VirtualDom_Overlay$assessImport, metadata, _p26._0); + if (_p35.ctor === 'Err') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {overlay: _p35._0}), + {ctor: '[]'}); + } else { + return A3(_elm_lang$virtual_dom$VirtualDom_Debug$loadNewHistory, _p35._0, userUpdate, model); + } + }); + default: + var _p36 = A2(_elm_lang$virtual_dom$VirtualDom_Overlay$close, _p26._0, model.overlay); + if (_p36.ctor === 'Nothing') { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + model, + {overlay: _elm_lang$virtual_dom$VirtualDom_Overlay$none}), + {ctor: '[]'}); + } else { + return A3(_elm_lang$virtual_dom$VirtualDom_Debug$loadNewHistory, _p36._0, userUpdate, model); + } + } + } + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$wrap = F2( + function (metadata, _p37) { + var _p38 = _p37; + return { + init: A2(_elm_lang$virtual_dom$VirtualDom_Debug$wrapInit, metadata, _p38.init), + view: _elm_lang$virtual_dom$VirtualDom_Debug$wrapView(_p38.view), + update: _elm_lang$virtual_dom$VirtualDom_Debug$wrapUpdate(_p38.update), + viewIn: _elm_lang$virtual_dom$VirtualDom_Debug$viewIn, + viewOut: _elm_lang$virtual_dom$VirtualDom_Debug$viewOut, + subscriptions: _elm_lang$virtual_dom$VirtualDom_Debug$wrapSubs(_p38.subscriptions) + }; + }); +var _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags = F2( + function (metadata, _p39) { + var _p40 = _p39; + return { + init: function (flags) { + return A2( + _elm_lang$virtual_dom$VirtualDom_Debug$wrapInit, + metadata, + _p40.init(flags)); + }, + view: _elm_lang$virtual_dom$VirtualDom_Debug$wrapView(_p40.view), + update: _elm_lang$virtual_dom$VirtualDom_Debug$wrapUpdate(_p40.update), + viewIn: _elm_lang$virtual_dom$VirtualDom_Debug$viewIn, + viewOut: _elm_lang$virtual_dom$VirtualDom_Debug$viewOut, + subscriptions: _elm_lang$virtual_dom$VirtualDom_Debug$wrapSubs(_p40.subscriptions) + }; + }); + var _elm_lang$virtual_dom$VirtualDom$programWithFlags = function (impl) { return A2(_elm_lang$virtual_dom$Native_VirtualDom.programWithFlags, _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags, impl); }; @@ -26958,6 +30917,7 @@ var _user$project$Css_Classes$InvalidComponent = {ctor: 'InvalidComponent'}; var _user$project$Css_Classes$FocusedComponent = {ctor: 'FocusedComponent'}; var _user$project$Css_Classes$Component = {ctor: 'Component'}; var _user$project$Css_Classes$NoInput = {ctor: 'NoInput'}; +var _user$project$Css_Classes$BasicInputReadOnly = {ctor: 'BasicInputReadOnly'}; var _user$project$Css_Classes$BasicInputDisabled = {ctor: 'BasicInputDisabled'}; var _user$project$Css_Classes$BasicInput = {ctor: 'BasicInput'}; var _user$project$Css_Classes$Active = {ctor: 'Active'}; @@ -28089,7 +32049,7 @@ var _user$project$Selectize$view = F5( }, { ctor: '::', - _0: _elm_lang$html$Html$text('N/A'), + _0: _elm_lang$html$Html$text(' '), _1: {ctor: '[]'} }), _1: {ctor: '[]'} @@ -28441,9 +32401,9 @@ var _user$project$ConfigTypes$FieldLocator = F4( function (a, b, c, d) { return {fieldScope: a, code: b, fieldType: c, fieldClass: d}; }); -var _user$project$ConfigTypes$FieldInstance = F6( - function (a, b, c, d, e, f) { - return {fieldLocator: a, component: b, fieldHolder: c, loadedFieldHolder: d, fieldValidation: e, fieldEnabledIf: f}; +var _user$project$ConfigTypes$FieldInstance = F8( + function (a, b, c, d, e, f, g, h) { + return {fieldLocator: a, component: b, fieldHolder: c, loadedFieldHolder: d, fieldValidation: e, fieldEnabledIf: f, readOnly: g, inScope: h}; }); var _user$project$ConfigTypes$ResolvedFieldInstance = F2( function (a, b) { @@ -28453,10 +32413,29 @@ var _user$project$ConfigTypes$Field = F2( function (a, b) { return {fieldLocator: a, fieldValue: b}; }); -var _user$project$ConfigTypes$FieldDescriptor = F8( - function (a, b, c, d, e, f, g, h) { - return {code: a, displayTop: b, displayBottom: c, displayCount: d, fieldType: e, fieldValidation: f, fieldClass: g, fieldEnabledIf: h}; - }); +var _user$project$ConfigTypes$FieldDescriptor = function (a) { + return function (b) { + return function (c) { + return function (d) { + return function (e) { + return function (f) { + return function (g) { + return function (h) { + return function (i) { + return function (j) { + return function (k) { + return {code: a, cryptoScope: b, machineScope: c, displayTop: d, displayBottom: e, displayCount: f, fieldType: g, fieldValidation: h, fieldClass: i, fieldEnabledIf: j, readOnly: k}; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; +}; var _user$project$ConfigTypes$ConfigSchema = F5( function (a, b, c, d, e) { return {code: a, display: b, cryptoScope: c, machineScope: d, entries: e}; @@ -28802,6 +32781,78 @@ var _user$project$ConfigDecoder$stringToConfigScope = function (s) { } }; var _user$project$ConfigDecoder$configScopeDecoder = A2(_elm_lang$core$Json_Decode$andThen, _user$project$ConfigDecoder$stringToConfigScope, _elm_lang$core$Json_Decode$string); +var _user$project$ConfigDecoder$fieldDescriptorDecoder = A4( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$optional, + 'readOnly', + _elm_lang$core$Json_Decode$bool, + false, + A2( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$custom, + _elm_lang$core$Json_Decode$oneOf( + { + ctor: '::', + _0: A2( + _elm_lang$core$Json_Decode$field, + 'enabledIf', + _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)), + _1: { + ctor: '::', + _0: _elm_lang$core$Json_Decode$succeed( + {ctor: '[]'}), + _1: {ctor: '[]'} + } + }), + A3( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$required, + 'fieldClass', + _elm_lang$core$Json_Decode$nullable(_elm_lang$core$Json_Decode$string), + A2( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$custom, + A2( + _elm_lang$core$Json_Decode$field, + 'fieldValidation', + _elm_lang$core$Json_Decode$list(_user$project$ConfigDecoder$fieldValidatorDecoder)), + A2( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$custom, + A2( + _elm_lang$core$Json_Decode$andThen, + _user$project$ConfigDecoder$fieldTypeDecoder, + A2(_elm_lang$core$Json_Decode$field, 'fieldType', _elm_lang$core$Json_Decode$string)), + A2( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$custom, + _elm_lang$core$Json_Decode$maybe( + A2(_elm_lang$core$Json_Decode$field, 'displayCount', _elm_lang$core$Json_Decode$int)), + A3( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$required, + 'displayBottom', + _elm_lang$core$Json_Decode$string, + A2( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$custom, + _user$project$ConfigDecoder$displayTopDecoder, + A3( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$required, + 'machineScope', + _user$project$ConfigDecoder$configScopeDecoder, + A3( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$required, + 'cryptoScope', + _user$project$ConfigDecoder$configScopeDecoder, + A3( + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$required, + 'code', + _elm_lang$core$Json_Decode$string, + _NoRedInk$elm_decode_pipeline$Json_Decode_Pipeline$decode(_user$project$ConfigTypes$FieldDescriptor)))))))))))); +var _user$project$ConfigDecoder$configSchemaDecoder = A6( + _elm_lang$core$Json_Decode$map5, + _user$project$ConfigTypes$ConfigSchema, + A2(_elm_lang$core$Json_Decode$field, 'code', _elm_lang$core$Json_Decode$string), + A2(_elm_lang$core$Json_Decode$field, 'display', _elm_lang$core$Json_Decode$string), + A2(_elm_lang$core$Json_Decode$field, 'cryptoScope', _user$project$ConfigDecoder$configScopeDecoder), + A2(_elm_lang$core$Json_Decode$field, 'machineScope', _user$project$ConfigDecoder$configScopeDecoder), + A2( + _elm_lang$core$Json_Decode$field, + 'entries', + _elm_lang$core$Json_Decode$list(_user$project$ConfigDecoder$fieldDescriptorDecoder))); var _user$project$ConfigDecoder$displayRecDecoder = A3( _elm_lang$core$Json_Decode$map2, _user$project$ConfigTypes$DisplayRec, @@ -28889,51 +32940,6 @@ var _user$project$ConfigDecoder$nullOr = function (decoder) { } }); }; -var _user$project$ConfigDecoder$fieldDescriptorDecoder = A9( - _elm_lang$core$Json_Decode$map8, - _user$project$ConfigTypes$FieldDescriptor, - A2(_elm_lang$core$Json_Decode$field, 'code', _elm_lang$core$Json_Decode$string), - _user$project$ConfigDecoder$displayTopDecoder, - A2(_elm_lang$core$Json_Decode$field, 'displayBottom', _elm_lang$core$Json_Decode$string), - _elm_lang$core$Json_Decode$maybe( - A2(_elm_lang$core$Json_Decode$field, 'displayCount', _elm_lang$core$Json_Decode$int)), - A2( - _elm_lang$core$Json_Decode$andThen, - _user$project$ConfigDecoder$fieldTypeDecoder, - A2(_elm_lang$core$Json_Decode$field, 'fieldType', _elm_lang$core$Json_Decode$string)), - A2( - _elm_lang$core$Json_Decode$field, - 'fieldValidation', - _elm_lang$core$Json_Decode$list(_user$project$ConfigDecoder$fieldValidatorDecoder)), - A2( - _elm_lang$core$Json_Decode$field, - 'fieldClass', - _user$project$ConfigDecoder$nullOr(_elm_lang$core$Json_Decode$string)), - _elm_lang$core$Json_Decode$oneOf( - { - ctor: '::', - _0: A2( - _elm_lang$core$Json_Decode$field, - 'enabledIf', - _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string)), - _1: { - ctor: '::', - _0: _elm_lang$core$Json_Decode$succeed( - {ctor: '[]'}), - _1: {ctor: '[]'} - } - })); -var _user$project$ConfigDecoder$configSchemaDecoder = A6( - _elm_lang$core$Json_Decode$map5, - _user$project$ConfigTypes$ConfigSchema, - A2(_elm_lang$core$Json_Decode$field, 'code', _elm_lang$core$Json_Decode$string), - A2(_elm_lang$core$Json_Decode$field, 'display', _elm_lang$core$Json_Decode$string), - A2(_elm_lang$core$Json_Decode$field, 'cryptoScope', _user$project$ConfigDecoder$configScopeDecoder), - A2(_elm_lang$core$Json_Decode$field, 'machineScope', _user$project$ConfigDecoder$configScopeDecoder), - A2( - _elm_lang$core$Json_Decode$field, - 'entries', - _elm_lang$core$Json_Decode$list(_user$project$ConfigDecoder$fieldDescriptorDecoder))); var _user$project$ConfigDecoder$fieldScopeDecoder = A3( _elm_lang$core$Json_Decode$map2, _user$project$ConfigTypes$FieldScope, @@ -29879,8 +33885,8 @@ var _user$project$Config$updateSelectize = F3( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 1232, column: 17}, - end: {line: 1237, column: 56} + start: {line: 1285, column: 17}, + end: {line: 1290, column: 56} }, _p3)('Shouldn\'t be here'); } @@ -29959,6 +33965,10 @@ var _user$project$Config$validateMin = F2( return true; } }); +var _user$project$Config$isInScope = F3( + function (cryptoScope, machineScope, fieldScope) { + return !((_elm_lang$core$Native_Utils.eq(cryptoScope, _user$project$ConfigTypes$Specific) && _elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto)) || ((_elm_lang$core$Native_Utils.eq(machineScope, _user$project$ConfigTypes$Specific) && _elm_lang$core$Native_Utils.eq(fieldScope.machine, _user$project$ConfigTypes$GlobalMachine)) || ((_elm_lang$core$Native_Utils.eq(cryptoScope, _user$project$ConfigTypes$Global) && (!_elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto))) || (_elm_lang$core$Native_Utils.eq(machineScope, _user$project$ConfigTypes$Global) && (!_elm_lang$core$Native_Utils.eq(fieldScope.machine, _user$project$ConfigTypes$GlobalMachine)))))); + }); var _user$project$Config$buildFieldComponent = F4( function (configGroup, fieldType, fieldScope, fieldValue) { var _p8 = fieldType; @@ -29991,12 +34001,13 @@ var _user$project$Config$initFieldInstance = F3( _user$project$ConfigTypes$FieldEmpty, A2(_elm_lang$core$Maybe$map, _user$project$ConfigTypes$FieldOk, maybe)); }; + var inScope = A3(_user$project$Config$isInScope, fieldDescriptor.cryptoScope, fieldDescriptor.machineScope, fieldScope); var equivalentFieldLocator = F2( function (a, b) { return _elm_lang$core$Native_Utils.eq(a.fieldScope, b.fieldScope) && _elm_lang$core$Native_Utils.eq(a.code, b.code); }); var fieldLocator = {fieldScope: fieldScope, code: fieldDescriptor.code, fieldType: fieldDescriptor.fieldType, fieldClass: fieldDescriptor.fieldClass}; - var maybeValue = A2( + var maybeValue = inScope ? A2( _elm_lang$core$Maybe$map, function (_) { return _.fieldValue; @@ -30012,10 +34023,10 @@ var _user$project$Config$initFieldInstance = F3( return _.fieldLocator; }(_p9)); }, - configGroup.values))); + configGroup.values))) : _elm_lang$core$Maybe$Nothing; var component = A4(_user$project$Config$buildFieldComponent, configGroup, fieldDescriptor.fieldType, fieldScope, maybeValue); var fieldHolder = maybeToFieldHolder(maybeValue); - return {fieldLocator: fieldLocator, component: component, fieldHolder: fieldHolder, loadedFieldHolder: fieldHolder, fieldValidation: fieldDescriptor.fieldValidation, fieldEnabledIf: fieldDescriptor.fieldEnabledIf}; + return {fieldLocator: fieldLocator, component: component, fieldHolder: fieldHolder, loadedFieldHolder: fieldHolder, fieldValidation: fieldDescriptor.fieldValidation, fieldEnabledIf: fieldDescriptor.fieldEnabledIf, readOnly: fieldDescriptor.readOnly, inScope: inScope}; }); var _user$project$Config$initFieldInstancesPerEntry = F2( function (configGroup, fieldDescriptor) { @@ -30050,14 +34061,14 @@ var _user$project$Config$isField = function (fieldValue) { return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 989, column: 5}, - end: {line: 994, column: 59} + start: {line: 1024, column: 5}, + end: {line: 1029, column: 59} }, _p11)('Referenced field must be boolean'); } }; -var _user$project$Config$bottomHeaderRowView = F2( - function (configGroup, crypto) { +var _user$project$Config$bottomHeaderRowView = F3( + function (configGroup, crypto, displayMachineName) { var headerCellView = function (fieldDescriptor) { return A2( _elm_lang$html$Html$th, @@ -30068,20 +34079,21 @@ var _user$project$Config$bottomHeaderRowView = F2( _1: {ctor: '[]'} }); }; + var cells = displayMachineName ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$th, + {ctor: '[]'}, + {ctor: '[]'}), + _1: A2(_elm_lang$core$List$map, headerCellView, configGroup.schema.entries) + } : A2(_elm_lang$core$List$map, headerCellView, configGroup.schema.entries); return A2( _elm_lang$html$Html$tr, {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$th, - {ctor: '[]'}, - {ctor: '[]'}), - _1: A2(_elm_lang$core$List$map, headerCellView, configGroup.schema.entries) - }); + cells); }); -var _user$project$Config$topHeaderRowView = F2( - function (configGroup, crypto) { +var _user$project$Config$topHeaderRowView = F3( + function (configGroup, crypto, displayMachineName) { var headerCellView = function (fieldDescriptor) { var _p13 = fieldDescriptor.displayTop; switch (_p13.ctor) { @@ -30122,6 +34134,14 @@ var _user$project$Config$topHeaderRowView = F2( return _elm_lang$core$Maybe$Nothing; } }; + var cells = displayMachineName ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$th, + {ctor: '[]'}, + {ctor: '[]'}), + _1: A2(_elm_lang$core$List$filterMap, headerCellView, configGroup.schema.entries) + } : A2(_elm_lang$core$List$filterMap, headerCellView, configGroup.schema.entries); return A2( _elm_lang$html$Html$tr, { @@ -30134,14 +34154,7 @@ var _user$project$Config$topHeaderRowView = F2( }), _1: {ctor: '[]'} }, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$th, - {ctor: '[]'}, - {ctor: '[]'}), - _1: A2(_elm_lang$core$List$filterMap, headerCellView, configGroup.schema.entries) - }); + cells); }); var _user$project$Config$fieldInstanceToField = function (fieldInstance) { var buildFieldInstance = function (fieldValue) { @@ -30214,10 +34227,10 @@ var _user$project$Config$validate = F3( var _user$project$Config$referenceFields = F3( function (fieldScope, fields, fieldCodes) { var matchesMachine = function (targetMachine) { - return _elm_lang$core$Native_Utils.eq(fieldScope.machine, _user$project$ConfigTypes$GlobalMachine) ? true : _elm_lang$core$Native_Utils.eq(fieldScope.machine, targetMachine); + return (_elm_lang$core$Native_Utils.eq(fieldScope.machine, _user$project$ConfigTypes$GlobalMachine) && _elm_lang$core$Native_Utils.eq(targetMachine, _user$project$ConfigTypes$GlobalMachine)) || ((!_elm_lang$core$Native_Utils.eq(fieldScope.machine, _user$project$ConfigTypes$GlobalMachine)) && _elm_lang$core$Native_Utils.eq(fieldScope.machine, targetMachine)); }; var matchesCrypto = function (targetCrypto) { - return _elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto) ? true : _elm_lang$core$Native_Utils.eq(fieldScope.crypto, targetCrypto); + return (_elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto) && _elm_lang$core$Native_Utils.eq(targetCrypto, _user$project$ConfigTypes$GlobalCrypto)) || ((!_elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto)) && _elm_lang$core$Native_Utils.eq(fieldScope.crypto, targetCrypto)); }; var filter = function (field) { return A2(_elm_lang$core$List$member, field.fieldLocator.code, fieldCodes) && (matchesCrypto(field.fieldLocator.fieldScope.crypto) && matchesMachine(field.fieldLocator.fieldScope.machine)); @@ -30238,7 +34251,7 @@ var _user$project$Config$referenceFieldInstances = F4( return _elm_lang$core$Native_Utils.eq(fieldScope.crypto, _user$project$ConfigTypes$GlobalCrypto) ? true : _elm_lang$core$Native_Utils.eq(fieldScope.crypto, targetCrypto); }; var filter = function (fieldInstance) { - return A2(_elm_lang$core$List$member, fieldInstance.fieldLocator.code, fieldCodes) && (matchesCrypto(fieldInstance.fieldLocator.fieldScope.crypto) && (matchesMachine(fieldInstance.fieldLocator.fieldScope.machine) && A4(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance.fieldEnabledIf, fieldInstance.fieldLocator.fieldScope))); + return A2(_elm_lang$core$List$member, fieldInstance.fieldLocator.code, fieldCodes) && (matchesCrypto(fieldInstance.fieldLocator.fieldScope.crypto) && (matchesMachine(fieldInstance.fieldLocator.fieldScope.machine) && A3(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance))); }; return A2( _elm_lang$core$List$filterMap, @@ -30250,29 +34263,46 @@ var _user$project$Config$referenceFieldInstances = F4( }, A2(_elm_lang$core$List$filter, filter, fieldInstances)); }); -var _user$project$Config$checkEnabled = F4( - function (fieldInstances, configGroup, enabledIf, fieldScope) { - if (_elm_lang$core$List$isEmpty(enabledIf)) { - return true; +var _user$project$Config$checkEnabled = F3( + function (fieldInstances, configGroup, fieldInstance) { + var fieldScope = fieldInstance.fieldLocator.fieldScope; + var enabledIf = fieldInstance.fieldEnabledIf; + if (!fieldInstance.inScope) { + return false; } else { - var _p16 = A2( - _elm_lang$core$List$partition, - _user$project$ConfigTypes$groupMember(configGroup), - enabledIf); - var inGroup = _p16._0; - var outGroup = _p16._1; - var enabledInstances = A2( - _elm_lang$core$Basics_ops['++'], - A3(_user$project$Config$referenceFields, fieldScope, configGroup.values, outGroup), - A4(_user$project$Config$referenceFieldInstances, configGroup, fieldScope, fieldInstances, inGroup)); - return A2(_elm_lang$core$List$any, _user$project$Config$isField, enabledInstances); + if (_elm_lang$core$List$isEmpty(enabledIf)) { + return true; + } else { + var _p16 = A2( + _elm_lang$core$List$partition, + _user$project$ConfigTypes$groupMember(configGroup), + enabledIf); + var inGroup = _p16._0; + var outGroup = _p16._1; + var enabledInstances = A2( + _elm_lang$core$Basics_ops['++'], + A3(_user$project$Config$referenceFields, fieldScope, configGroup.values, outGroup), + A4(_user$project$Config$referenceFieldInstances, configGroup, fieldScope, fieldInstances, inGroup)); + var _p17 = _elm_lang$core$Native_Utils.eq(fieldInstance.fieldLocator.code, 'cashOutTransactionLimit') ? A2( + _elm_lang$core$Basics$always, + {ctor: '_Tuple0'}, + A2( + _elm_lang$core$Debug$log, + 'DEBUG100', + { + ctor: '_Tuple2', + _0: A3(_user$project$Config$referenceFields, fieldScope, configGroup.values, outGroup), + _1: A4(_user$project$Config$referenceFieldInstances, configGroup, fieldScope, fieldInstances, inGroup) + })) : {ctor: '_Tuple0'}; + return A2(_elm_lang$core$List$any, _user$project$Config$isField, enabledInstances); + } } }); var _user$project$Config$validateFieldInstance = F3( function (configGroup, fieldInstances, fieldInstance) { + var isEnabled = A3(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance); var isRequired = A2(_elm_lang$core$List$member, _user$project$ConfigTypes$FieldRequired, fieldInstance.fieldValidation); var fieldScope = fieldInstance.fieldLocator.fieldScope; - var isEnabled = A4(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance.fieldEnabledIf, fieldScope); return (!isEnabled) || A2( _elm_lang$core$List$all, A2(_user$project$Config$validate, fieldInstances, fieldInstance), @@ -30339,13 +34369,13 @@ var _user$project$Config$countrySelectizeView = F6( var _user$project$Config$languageSelectizeView = F6( function (model, localConfig, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue) { var toList = function (maybeValue) { - var _p17 = maybeValue; - if (_p17.ctor === 'Nothing') { + var _p18 = maybeValue; + if (_p18.ctor === 'Nothing') { return {ctor: '[]'}; } else { - var _p18 = _p17._0; - if (_p18.ctor === 'FieldLanguageValue') { - return _p18._0; + var _p19 = _p18._0; + if (_p19.ctor === 'FieldLanguageValue') { + return _p19._0; } else { return _elm_lang$core$Native_Utils.crashCase( 'Config', @@ -30353,7 +34383,7 @@ var _user$project$Config$languageSelectizeView = F6( start: {line: 520, column: 21}, end: {line: 525, column: 60} }, - _p18)('Shouldn\'t be here'); + _p19)('Shouldn\'t be here'); } } }; @@ -30381,13 +34411,13 @@ var _user$project$Config$languageSelectizeView = F6( var _user$project$Config$cryptoCurrencySelectizeView = F6( function (model, localConfig, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue) { var toList = function (maybeValue) { - var _p20 = maybeValue; - if (_p20.ctor === 'Nothing') { + var _p21 = maybeValue; + if (_p21.ctor === 'Nothing') { return {ctor: '[]'}; } else { - var _p21 = _p20._0; - if (_p21.ctor === 'FieldCryptoCurrencyValue') { - return _p21._0; + var _p22 = _p21._0; + if (_p22.ctor === 'FieldCryptoCurrencyValue') { + return _p22._0; } else { return _elm_lang$core$Native_Utils.crashCase( 'Config', @@ -30395,7 +34425,7 @@ var _user$project$Config$cryptoCurrencySelectizeView = F6( start: {line: 474, column: 21}, end: {line: 479, column: 60} }, - _p21)('Shouldn\'t be here'); + _p22)('Shouldn\'t be here'); } } }; @@ -30458,16 +34488,16 @@ var _user$project$Config$accountSelectizeView = F6( var selectedIds = _user$project$Config$maybeToList( A2(_elm_lang$core$Maybe$map, _user$project$ConfigTypes$fieldValueToString, maybeFieldValue)); var matchAccount = function (accountRec) { - var _p23 = fieldInstance.fieldLocator.fieldClass; - if (_p23.ctor === 'Nothing') { + var _p24 = fieldInstance.fieldLocator.fieldClass; + if (_p24.ctor === 'Nothing') { return true; } else { - return _elm_lang$core$Native_Utils.eq(accountRec.$class, _p23._0) && function () { - var _p24 = accountRec.cryptos; - if (_p24.ctor === 'Nothing') { + return _elm_lang$core$Native_Utils.eq(accountRec.$class, _p24._0) && function () { + var _p25 = accountRec.cryptos; + if (_p25.ctor === 'Nothing') { return true; } else { - return A2(_elm_lang$core$List$member, model.crypto, _p24._0); + return A2(_elm_lang$core$List$member, model.crypto, _p25._0); } }(); } @@ -30495,8 +34525,8 @@ var _user$project$Config$accountSelectizeView = F6( selectizeState); }); var _user$project$Config$fieldInstanceClasses = function (fieldInstance) { - var _p25 = fieldInstance.fieldLocator.fieldType; - switch (_p25.ctor) { + var _p26 = fieldInstance.fieldLocator.fieldType; + switch (_p26.ctor) { case 'FieldPercentageType': return { ctor: '::', @@ -30518,7 +34548,7 @@ var _user$project$Config$fieldInstanceClasses = function (fieldInstance) { case 'FieldStringType': return { ctor: '::', - _0: _user$project$Css_Classes$LongCell, + _0: _user$project$Css_Classes$MediumCell, _1: { ctor: '::', _0: _user$project$Css_Classes$TextCell, @@ -30547,8 +34577,8 @@ var _user$project$Config$fieldInstanceClasses = function (fieldInstance) { }; var _user$project$Config$unitDisplay = F2( function (fiat, fieldInstance) { - var _p26 = fieldInstance.fieldLocator.fieldType; - switch (_p26.ctor) { + var _p27 = fieldInstance.fieldLocator.fieldType; + switch (_p27.ctor) { case 'FieldPercentageType': return A2( _elm_lang$html$Html$div, @@ -30568,9 +34598,9 @@ var _user$project$Config$unitDisplay = F2( _1: {ctor: '[]'} }); case 'FieldIntegerType': - var _p27 = fieldInstance.fieldLocator.fieldClass; - if (_p27.ctor === 'Just') { - switch (_p27._0) { + var _p28 = fieldInstance.fieldLocator.fieldClass; + if (_p28.ctor === 'Just') { + switch (_p28._0) { case 'fiat': return A2( _elm_lang$html$Html$div, @@ -30627,8 +34657,8 @@ var _user$project$Config$unitDisplay = F2( } }); var _user$project$Config$fieldTypeToInputType = function (fieldType) { - var _p28 = fieldType; - if (_p28.ctor === 'FieldPercentageType') { + var _p29 = fieldType; + if (_p29.ctor === 'FieldPercentageType') { return 'number'; } else { return 'string'; @@ -30643,14 +34673,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 _p29 = fieldHolder; - if (_p29.ctor === 'FieldOk') { - var _p30 = _p29._0; - switch (_p30.ctor) { + var _p30 = fieldHolder; + if (_p30.ctor === 'FieldOk') { + var _p31 = _p30._0; + switch (_p31.ctor) { case 'FieldLanguageValue': - return _p30._0; + return _p31._0; case 'FieldCryptoCurrencyValue': - return _p30._0; + return _p31._0; default: return _elm_lang$core$Native_Utils.crashCase( 'Config', @@ -30658,7 +34688,7 @@ var _user$project$Config$fieldHolderToList = function (fieldHolder) { start: {line: 153, column: 13}, end: {line: 161, column: 50} }, - _p30)('Not a list type'); + _p31)('Not a list type'); } } else { return {ctor: '[]'}; @@ -30667,34 +34697,9 @@ var _user$project$Config$fieldHolderToList = function (fieldHolder) { var _user$project$Config$updateStringFieldInstance = F4( function (fieldInstances, fieldLocator, maybeString, fieldInstance) { if (_elm_lang$core$Native_Utils.eq(fieldInstance.fieldLocator, fieldLocator)) { - var _p32 = fieldLocator.fieldType; - switch (_p32.ctor) { + var _p33 = fieldLocator.fieldType; + switch (_p33.ctor) { case 'FieldLanguageType': - var list = _user$project$Config$fieldHolderToList(fieldInstance.fieldHolder); - var newList = function () { - var _p33 = maybeString; - if (_p33.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: _p33._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 _p34 = maybeString; @@ -30714,6 +34719,31 @@ var _user$project$Config$updateStringFieldInstance = F4( }); } }(); + 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 _p35 = maybeString; + if (_p35.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: _p35._0, + _1: {ctor: '[]'} + }); + } + }(); return _elm_lang$core$Native_Utils.update( fieldInstance, { @@ -30721,11 +34751,11 @@ var _user$project$Config$updateStringFieldInstance = F4( }); default: var fieldHolder = function () { - var _p35 = maybeString; - if (_p35.ctor === 'Nothing') { + var _p36 = maybeString; + if (_p36.ctor === 'Nothing') { return _user$project$ConfigTypes$FieldEmpty; } else { - return A2(_user$project$ConfigTypes$stringToFieldHolder, fieldLocator.fieldType, _p35._0); + return A2(_user$project$ConfigTypes$stringToFieldHolder, fieldLocator.fieldType, _p36._0); } }(); return _elm_lang$core$Native_Utils.update( @@ -30770,12 +34800,12 @@ var _user$project$Config$placeField = F2( field), fieldList)); var newField = function () { - var _p36 = maybeOldField; - if (_p36.ctor === 'Nothing') { + var _p37 = maybeOldField; + if (_p37.ctor === 'Nothing') { return field; } else { return _elm_lang$core$Native_Utils.update( - _p36._0, + _p37._0, {fieldValue: field.fieldValue}); } }(); @@ -30784,14 +34814,14 @@ var _user$project$Config$placeField = F2( _0: newField, _1: A2( _elm_lang$core$List$filter, - function (_p37) { + function (_p38) { return !A3( _user$project$Config$similar, function (_) { return _.fieldLocator; }, field, - _p37); + _p38); }, fieldList) }; @@ -30856,8 +34886,8 @@ var _user$project$Config$SelectizeMsg = F2( function (a, b) { return {ctor: 'SelectizeMsg', _0: a, _1: b}; }); -var _user$project$Config$selectizeView = F6( - function (model, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue, enabled) { +var _user$project$Config$selectizeView = F5( + function (model, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue) { var fieldLocator = fieldInstance.fieldLocator; var localConfig = { toMsg: _user$project$Config$SelectizeMsg(fieldLocator), @@ -30868,10 +34898,10 @@ var _user$project$Config$selectizeView = F6( toId: function (_) { return _.code; }, - enabled: enabled + enabled: true }; - var _p38 = fieldLocator.fieldType; - switch (_p38.ctor) { + var _p39 = fieldLocator.fieldType; + switch (_p39.ctor) { case 'FieldAccountType': return A6(_user$project$Config$accountSelectizeView, model, localConfig, fieldInstance, selectizeState, maybeFieldValue, maybeFallbackFieldValue); case 'FieldFiatCurrencyType': @@ -30888,10 +34918,10 @@ var _user$project$Config$selectizeView = F6( return _elm_lang$core$Native_Utils.crashCase( 'Config', { - start: {line: 598, column: 9}, - end: {line: 648, column: 52} + start: {line: 597, column: 9}, + end: {line: 647, column: 52} }, - _p38)('Not a Selectize field'); + _p39)('Not a Selectize field'); } }); var _user$project$Config$CryptoSwitch = function (a) { @@ -30900,12 +34930,12 @@ var _user$project$Config$CryptoSwitch = function (a) { var _user$project$Config$cryptoView = F2( function (maybeActiveCrypto, cryptoDisplay) { var activeClass = function () { - var _p40 = maybeActiveCrypto; - if (_p40.ctor === 'Nothing') { + var _p41 = maybeActiveCrypto; + if (_p41.ctor === 'Nothing') { return _user$project$Css_Admin$class( {ctor: '[]'}); } else { - return _elm_lang$core$Native_Utils.eq(_p40._0, cryptoDisplay.crypto) ? _user$project$Css_Admin$class( + return _elm_lang$core$Native_Utils.eq(_p41._0, cryptoDisplay.crypto) ? _user$project$Css_Admin$class( { ctor: '::', _0: _user$project$Css_Classes$Active, @@ -30955,8 +34985,8 @@ var _user$project$Config$Input = F2( function (a, b) { return {ctor: 'Input', _0: a, _1: b}; }); -var _user$project$Config$textInput = F5( - function (fiat, fieldInstance, maybeFieldValue, maybeFallbackFieldValue, enabled) { +var _user$project$Config$textInput = F4( + function (fiat, fieldInstance, maybeFieldValue, maybeFallbackFieldValue) { var fieldValid = _user$project$Config$validateFieldInstance; var fieldClasses = _user$project$Config$fieldInstanceClasses(fieldInstance); var maybeFallbackString = A2(_elm_lang$core$Maybe$map, _user$project$ConfigTypes$fieldValueToString, maybeFallbackFieldValue); @@ -30965,7 +34995,23 @@ var _user$project$Config$textInput = F5( var defaultString = A2(_elm_lang$core$Maybe$withDefault, '', maybeSpecificString); var fieldLocator = fieldInstance.fieldLocator; var inputType = _user$project$Config$fieldTypeToInputType(fieldLocator.fieldType); - return enabled ? A2( + return fieldInstance.readOnly ? A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$BasicInputReadOnly, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text(defaultString), + _1: {ctor: '[]'} + }) : A2( _elm_lang$html$Html$div, { ctor: '::', @@ -31020,31 +35066,31 @@ var _user$project$Config$textInput = F5( _0: A2(_user$project$Config$unitDisplay, fiat, fieldInstance), _1: {ctor: '[]'} } - }) : A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$BasicInputDisabled, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('N/A'), - _1: {ctor: '[]'} }); }); var _user$project$Config$fieldInput = F5( function (model, fieldInstance, maybeFieldValue, maybeFallbackFieldValue, enabled) { - var _p41 = fieldInstance.component; - if (_p41.ctor === 'InputBoxComponent') { - return A5(_user$project$Config$textInput, model.fiat, fieldInstance, maybeFieldValue, maybeFallbackFieldValue, enabled); + if (enabled) { + var _p42 = fieldInstance.component; + if (_p42.ctor === 'InputBoxComponent') { + return A4(_user$project$Config$textInput, model.fiat, fieldInstance, maybeFieldValue, maybeFallbackFieldValue); + } else { + return A5(_user$project$Config$selectizeView, model, fieldInstance, _p42._0, maybeFieldValue, maybeFallbackFieldValue); + } } else { - return A6(_user$project$Config$selectizeView, model, fieldInstance, _p41._0, maybeFieldValue, maybeFallbackFieldValue, enabled); + return A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$BasicInputDisabled, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + {ctor: '[]'}); } }); var _user$project$Config$fieldComponent = F2( @@ -31057,18 +35103,18 @@ var _user$project$Config$fieldComponent = F2( _user$project$Config$fieldInstanceClasses(fieldInstance)); var configGroup = model.configGroup; var maybeSpecific = function () { - var _p42 = fieldInstance.fieldHolder; - if (_p42.ctor === 'FieldOk') { - return _elm_lang$core$Maybe$Just(_p42._0); + var _p43 = fieldInstance.fieldHolder; + if (_p43.ctor === 'FieldOk') { + return _elm_lang$core$Maybe$Just(_p43._0); } else { return _elm_lang$core$Maybe$Nothing; } }(); var fieldInstances = model.fieldInstances; + var enabled = A3(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance); var fieldValid = A3(_user$project$Config$validateFieldInstance, configGroup, fieldInstances, fieldInstance); var fieldLocator = fieldInstance.fieldLocator; var fieldScope = fieldLocator.fieldScope; - var enabled = A4(_user$project$Config$checkEnabled, fieldInstances, configGroup, fieldInstance.fieldEnabledIf, fieldScope); var fieldCode = fieldLocator.code; var maybeFallbackFieldValue = A3(_user$project$Config$fallbackValue, fieldScope, fieldInstances, fieldCode); var fieldClass = fieldLocator.fieldClass; @@ -31134,16 +35180,16 @@ var _user$project$Config$cellView = F2( _1: {ctor: '[]'} }); }); -var _user$project$Config$rowView = F3( - function (model, fieldInstances, machineDisplay) { +var _user$project$Config$rowView = F4( + function (model, fieldInstances, displayMachineName, machineDisplay) { var fieldScope = {crypto: model.crypto, machine: machineDisplay.machine}; var toFieldLocator = function (entry) { return {fieldScope: fieldScope, code: entry.code}; }; var machine = machineDisplay.machine; var globalRowClass = function () { - var _p43 = machine; - if (_p43.ctor === 'GlobalMachine') { + var _p44 = machine; + if (_p44.ctor === 'GlobalMachine') { return _user$project$Css_Admin$class( { ctor: '::', @@ -31159,7 +35205,7 @@ var _user$project$Config$rowView = F3( return _elm_lang$core$Native_Utils.eq(fieldInstance.fieldLocator.fieldScope.machine, machine); }; var filteredFieldInstances = A2(_elm_lang$core$List$filter, machineScoped, fieldInstances); - return A2( + return displayMachineName ? A2( _elm_lang$html$Html$tr, { ctor: '::', @@ -31189,7 +35235,17 @@ var _user$project$Config$rowView = F3( _elm_lang$core$List$map, _user$project$Config$cellView(model), filteredFieldInstances) - }); + }) : A2( + _elm_lang$html$Html$tr, + { + ctor: '::', + _0: globalRowClass, + _1: {ctor: '[]'} + }, + A2( + _elm_lang$core$List$map, + _user$project$Config$cellView(model), + filteredFieldInstances)); }); var _user$project$Config$tableView = function (model) { var crypto = model.crypto; @@ -31198,12 +35254,13 @@ var _user$project$Config$tableView = function (model) { }; var instances = A2(_elm_lang$core$List$filter, cryptoScoped, model.fieldInstances); var configGroup = model.configGroup; - var topHeaderRow = A2(_user$project$Config$topHeaderRowView, configGroup, crypto); - var bottomHeaderRow = A2(_user$project$Config$bottomHeaderRowView, configGroup, crypto); + var displayMachineName = !_elm_lang$core$Native_Utils.eq(configGroup.schema.code, 'definition'); + var topHeaderRow = A3(_user$project$Config$topHeaderRowView, configGroup, crypto, displayMachineName); + var bottomHeaderRow = A3(_user$project$Config$bottomHeaderRowView, configGroup, crypto, displayMachineName); var machines = _user$project$ConfigTypes$listMachines(configGroup); var rows = A2( _elm_lang$core$List$map, - A2(_user$project$Config$rowView, model, instances), + A3(_user$project$Config$rowView, model, instances, displayMachineName), machines); return A2( _elm_lang$html$Html$table, @@ -31243,8 +35300,8 @@ var _user$project$Config$tableView = function (model) { }; var _user$project$Config$Submit = {ctor: 'Submit'}; var _user$project$Config$view = function (model) { - var _p44 = model.webConfigGroup; - switch (_p44.ctor) { + var _p45 = model.webConfigGroup; + switch (_p45.ctor) { case 'NotAsked': return A2( _elm_lang$html$Html$div, @@ -31266,21 +35323,21 @@ var _user$project$Config$view = function (model) { { ctor: '::', _0: _elm_lang$html$Html$text( - _elm_lang$core$Basics$toString(_p44._0)), + _elm_lang$core$Basics$toString(_p45._0)), _1: {ctor: '[]'} }); default: - var _p46 = _p44._0; + var _p47 = _p45._0; var statusString = function () { - var _p45 = model.status; - if (_p45.ctor === 'Saved') { + var _p46 = model.status; + if (_p46.ctor === 'Saved') { return 'Saved'; } else { return ''; } }(); - var cryptos = A3(_user$project$ConfigTypes$allCryptos, _p46.data.cryptoCurrencies, _p46.schema.cryptoScope, _p46.selectedCryptos); - var resolvedModel = A2(_user$project$Config$toResolvedModel, model, _p46); + var cryptos = A3(_user$project$ConfigTypes$allCryptos, _p47.data.cryptoCurrencies, _p47.schema.cryptoScope, _p47.selectedCryptos); + var resolvedModel = A2(_user$project$Config$toResolvedModel, model, _p47); var configGroupView = A2( _elm_lang$html$Html$div, { @@ -31308,7 +35365,7 @@ var _user$project$Config$view = function (model) { fieldInstances); var submitButton = A2( _elm_lang$core$List$all, - A2(_user$project$Config$validateFieldInstance, _p46, fieldInstances), + A2(_user$project$Config$validateFieldInstance, _p47, fieldInstances), cryptoFieldInstances) ? A2( _elm_lang$html$Html$div, { @@ -31412,7 +35469,7 @@ var _user$project$Config$view = function (model) { _1: {ctor: '[]'} } }); - return _elm_lang$core$Native_Utils.eq(_p46.schema.cryptoScope, _user$project$ConfigTypes$Global) ? A2( + return _elm_lang$core$Native_Utils.eq(_p47.schema.cryptoScope, _user$project$ConfigTypes$Global) ? A2( _elm_lang$html$Html$div, {ctor: '[]'}, { @@ -31431,7 +35488,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p46.schema.display), + _0: _elm_lang$html$Html$text(_p47.schema.display), _1: {ctor: '[]'} }), _1: { @@ -31458,7 +35515,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p46.schema.display), + _0: _elm_lang$html$Html$text(_p47.schema.display), _1: {ctor: '[]'} }), _1: { @@ -31492,7 +35549,7 @@ var _user$project$Config$view = function (model) { }, { ctor: '::', - _0: _elm_lang$html$Html$text(_p46.schema.display), + _0: _elm_lang$html$Html$text(_p47.schema.display), _1: {ctor: '[]'} }), _1: { @@ -31544,8 +35601,8 @@ var _user$project$Config$load = F3( var _user$project$Config$postForm = F2( function (configGroupCode, fieldInstances) { var maybeResults = A2(_user$project$ConfigEncoder$encodeResults, configGroupCode, fieldInstances); - var _p47 = maybeResults; - if (_p47.ctor === 'Nothing') { + var _p48 = maybeResults; + if (_p48.ctor === 'Nothing') { return _elm_lang$core$Platform_Cmd$none; } else { return A2( @@ -31559,7 +35616,7 @@ var _user$project$Config$postForm = F2( _elm_lang$http$Http$expectJson(_user$project$ConfigDecoder$configGroupDecoder), A2( _lukewestby$elm_http_builder$HttpBuilder$withJsonBody, - _p47._0, + _p48._0, _lukewestby$elm_http_builder$HttpBuilder$post('/api/config'))))); } }); @@ -31567,20 +35624,20 @@ var _user$project$Config$postFormNoLoad = F2( function (configGroupCode, fieldInstances) { return A2( _elm_lang$core$Platform_Cmd$map, - function (_p48) { + function (_p49) { return _user$project$Config$NoOp; }, A2(_user$project$Config$postForm, configGroupCode, fieldInstances)); }); var _user$project$Config$submitNoLoad = function (model) { - var _p49 = model.webConfigGroup; - if (_p49.ctor === 'Success') { + var _p50 = model.webConfigGroup; + if (_p50.ctor === 'Success') { return A2( _elm_lang$core$Platform_Cmd_ops['!'], model, { ctor: '::', - _0: A2(_user$project$Config$postFormNoLoad, _p49._0.schema.code, model.fieldInstances), + _0: A2(_user$project$Config$postFormNoLoad, _p50._0.schema.code, model.fieldInstances), _1: {ctor: '[]'} }); } else { @@ -31591,8 +35648,8 @@ var _user$project$Config$submitNoLoad = function (model) { } }; var _user$project$Config$submit = function (model) { - var _p50 = model.webConfigGroup; - if (_p50.ctor === 'Success') { + var _p51 = model.webConfigGroup; + if (_p51.ctor === 'Success') { return A2( _elm_lang$core$Platform_Cmd_ops['!'], _elm_lang$core$Native_Utils.update( @@ -31600,7 +35657,7 @@ var _user$project$Config$submit = function (model) { {status: _user$project$Config$Saving}), { ctor: '::', - _0: A2(_user$project$Config$postForm, _p50._0.schema.code, model.fieldInstances), + _0: A2(_user$project$Config$postForm, _p51._0.schema.code, model.fieldInstances), _1: {ctor: '[]'} }); } else { @@ -31612,45 +35669,45 @@ var _user$project$Config$submit = function (model) { }; var _user$project$Config$update = F2( function (msg, model) { - var _p51 = msg; - switch (_p51.ctor) { + var _p52 = msg; + switch (_p52.ctor) { case 'Load': - var _p58 = _p51._0; + var _p59 = _p52._0; var defaultCrypto = function () { - var _p52 = _p58; - if (_p52.ctor === 'Success') { - var _p53 = _p52._0; + var _p53 = _p59; + if (_p53.ctor === 'Success') { + var _p54 = _p53._0; return A2( _elm_lang$core$Maybe$map, function (_) { return _.crypto; }, _elm_lang$core$List$head( - A3(_user$project$ConfigTypes$allCryptos, _p53.data.cryptoCurrencies, _p53.schema.cryptoScope, _p53.selectedCryptos))); + A3(_user$project$ConfigTypes$allCryptos, _p54.data.cryptoCurrencies, _p54.schema.cryptoScope, _p54.selectedCryptos))); } else { return _elm_lang$core$Maybe$Nothing; } }(); var crypto = function () { - var _p54 = model.crypto; - if (_p54.ctor === 'Nothing') { + var _p55 = model.crypto; + if (_p55.ctor === 'Nothing') { return defaultCrypto; } else { - return _elm_lang$core$Maybe$Just(_p54._0); + return _elm_lang$core$Maybe$Just(_p55._0); } }(); var fiat = function () { - var _p55 = _p58; - if (_p55.ctor === 'Success') { - return _user$project$Config$pickFiat(_p55._0.values); + var _p56 = _p59; + if (_p56.ctor === 'Success') { + return _user$project$Config$pickFiat(_p56._0.values); } else { return _elm_lang$core$Maybe$Nothing; } }(); var fieldInstances = function () { - var _p56 = _p58; - if (_p56.ctor === 'Success') { - return _user$project$Config$initFieldInstances(_p56._0); + var _p57 = _p59; + if (_p57.ctor === 'Success') { + return _user$project$Config$initFieldInstances(_p57._0); } else { return {ctor: '[]'}; } @@ -31658,7 +35715,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 (_p57) { + function (_p58) { return _user$project$Config$HideSaveIndication; }, _elm_lang$core$Process$sleep(2 * _elm_lang$core$Time$second)) : _elm_lang$core$Platform_Cmd$none; @@ -31666,7 +35723,7 @@ var _user$project$Config$update = F2( ctor: '_Tuple2', _0: _elm_lang$core$Native_Utils.update( model, - {webConfigGroup: _p58, fieldInstances: fieldInstances, status: status, crypto: crypto, fiat: fiat}), + {webConfigGroup: _p59, fieldInstances: fieldInstances, status: status, crypto: crypto, fiat: fiat}), _1: cmd }; case 'Submit': @@ -31676,21 +35733,21 @@ var _user$project$Config$update = F2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateInput, - _p51._0, - _elm_lang$core$Maybe$Just(_p51._1), + _p52._0, + _elm_lang$core$Maybe$Just(_p52._1), model), {ctor: '[]'}); case 'CryptoSwitch': - var _p60 = _p51._0; - var _p59 = model.webConfigGroup; - if (_p59.ctor === 'Success') { - var cryptoCode = _user$project$ConfigTypes$cryptoToString(_p60); + var _p61 = _p52._0; + var _p60 = model.webConfigGroup; + if (_p60.ctor === 'Success') { + var cryptoCode = _user$project$ConfigTypes$cryptoToString(_p61); var path = A2( _elm_lang$core$Basics_ops['++'], '#config/', A2( _elm_lang$core$Basics_ops['++'], - _p59._0.schema.code, + _p60._0.schema.code, A2(_elm_lang$core$Basics_ops['++'], '/', cryptoCode))); var command = _elm_lang$navigation$Navigation$newUrl(path); return A2( @@ -31698,7 +35755,7 @@ var _user$project$Config$update = F2( _elm_lang$core$Native_Utils.update( model, { - crypto: _elm_lang$core$Maybe$Just(_p60) + crypto: _elm_lang$core$Maybe$Just(_p61) }), { ctor: '::', @@ -31714,57 +35771,57 @@ var _user$project$Config$update = F2( case 'Focus': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateFocus, _p51._0, true, model), + A3(_user$project$Config$updateFocus, _p52._0, true, model), {ctor: '[]'}); case 'Blur': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateFocus, _p51._0, false, model), + A3(_user$project$Config$updateFocus, _p52._0, false, model), {ctor: '[]'}); case 'SelectizeMsg': return A2( _elm_lang$core$Platform_Cmd_ops['!'], - A3(_user$project$Config$updateSelectize, _p51._0, _p51._1, model), + A3(_user$project$Config$updateSelectize, _p52._0, _p52._1, model), {ctor: '[]'}); case 'BlurSelectize': - var _p61 = _p51._0; - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - A3( - _user$project$Config$updateFocus, - _p61, - false, - A3(_user$project$Config$updateSelectize, _p61, _p51._1, model)), - {ctor: '[]'}); - case 'FocusSelectize': - var _p62 = _p51._0; + var _p62 = _p52._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateFocus, _p62, - true, - A3(_user$project$Config$updateSelectize, _p62, _p51._1, model)), + false, + A3(_user$project$Config$updateSelectize, _p62, _p52._1, model)), {ctor: '[]'}); - case 'Add': - var _p63 = _p51._0; + case 'FocusSelectize': + var _p63 = _p52._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( - _user$project$Config$updateInput, + _user$project$Config$updateFocus, _p63, - _elm_lang$core$Maybe$Just(_p51._1), - A3(_user$project$Config$updateSelectize, _p63, _p51._2, model)), + true, + A3(_user$project$Config$updateSelectize, _p63, _p52._1, model)), {ctor: '[]'}); - case 'Remove': - var _p64 = _p51._0; + case 'Add': + var _p64 = _p52._0; return A2( _elm_lang$core$Platform_Cmd_ops['!'], A3( _user$project$Config$updateInput, _p64, + _elm_lang$core$Maybe$Just(_p52._1), + A3(_user$project$Config$updateSelectize, _p64, _p52._2, model)), + {ctor: '[]'}); + case 'Remove': + var _p65 = _p52._0; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + A3( + _user$project$Config$updateInput, + _p65, _elm_lang$core$Maybe$Nothing, - A3(_user$project$Config$updateSelectize, _p64, _p51._1, model)), + A3(_user$project$Config$updateSelectize, _p65, _p52._1, model)), {ctor: '[]'}); case 'HideSaveIndication': return A2( @@ -32041,673 +36098,38 @@ var _user$project$Pair$update = F2( } }); -var _user$project$MachineTypes$Machine = F6( - function (a, b, c, d, e, f) { - return {deviceId: a, name: b, cashbox: c, cassette1: d, cassette2: e, paired: f}; - }); -var _user$project$MachineTypes$UnpairMachine = function (a) { - return {ctor: 'UnpairMachine', _0: a}; -}; -var _user$project$MachineTypes$ResetCashOutBills = function (a) { - return {ctor: 'ResetCashOutBills', _0: a}; -}; - -var _user$project$MachinesDecoder$machineDecoder = A7( - _elm_lang$core$Json_Decode$map6, - _user$project$MachineTypes$Machine, - A2(_elm_lang$core$Json_Decode$field, 'deviceId', _elm_lang$core$Json_Decode$string), - A2(_elm_lang$core$Json_Decode$field, 'name', _elm_lang$core$Json_Decode$string), - A2(_elm_lang$core$Json_Decode$field, 'cashbox', _elm_lang$core$Json_Decode$int), - A2(_elm_lang$core$Json_Decode$field, 'cassette1', _elm_lang$core$Json_Decode$int), - A2(_elm_lang$core$Json_Decode$field, 'cassette2', _elm_lang$core$Json_Decode$int), - A2(_elm_lang$core$Json_Decode$field, 'paired', _elm_lang$core$Json_Decode$bool)); -var _user$project$MachinesDecoder$machinesDecoder = A2( - _elm_lang$core$Json_Decode$map, - _elm_lang$core$Basics$identity, - A2( - _elm_lang$core$Json_Decode$field, - 'machines', - _elm_lang$core$Json_Decode$list(_user$project$MachinesDecoder$machineDecoder))); - -var _user$project$MachinesEncoder$encodeAction = function (action) { - var _p0 = action; - if (_p0.ctor === 'ResetCashOutBills') { - var _p1 = _p0._0; - return _elm_lang$core$Json_Encode$object( - { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'action', - _1: _elm_lang$core$Json_Encode$string('resetCashOutBills') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'deviceId', - _1: _elm_lang$core$Json_Encode$string(_p1.deviceId) - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'cassettes', - _1: _elm_lang$core$Json_Encode$list( - { - ctor: '::', - _0: _elm_lang$core$Json_Encode$int(_p1.cassette1), - _1: { - ctor: '::', - _0: _elm_lang$core$Json_Encode$int(_p1.cassette2), - _1: {ctor: '[]'} - } - }) - }, - _1: {ctor: '[]'} - } - } - }); - } else { - return _elm_lang$core$Json_Encode$object( - { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'action', - _1: _elm_lang$core$Json_Encode$string('unpair') - }, - _1: { - ctor: '::', - _0: { - ctor: '_Tuple2', - _0: 'deviceId', - _1: _elm_lang$core$Json_Encode$string(_p0._0.deviceId) - }, - _1: {ctor: '[]'} - } - }); - } -}; - -var _user$project$Machine$updateMachine = F2( - function (machine, oldMachine) { - return _elm_lang$core$Native_Utils.eq(machine.deviceId, oldMachine.deviceId) ? machine : oldMachine; - }); -var _user$project$Machine$updateCassette = F4( - function (machine, position, str, subModel) { - var countResult = _elm_lang$core$String$toInt(str); - var updatedMachine = function () { - var _p0 = countResult; - if (_p0.ctor === 'Ok') { - var _p2 = _p0._0; - var _p1 = position; - if (_p1.ctor === 'Top') { - return _elm_lang$core$Native_Utils.update( - machine, - {cassette1: _p2}); - } else { - return _elm_lang$core$Native_Utils.update( - machine, - {cassette2: _p2}); - } - } else { - return machine; - } - }(); - var machines = A2( - _elm_lang$core$List$map, - _user$project$Machine$updateMachine(updatedMachine), - subModel.machines); - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - subModel, - {machines: machines}), - {ctor: '[]'}); - }); -var _user$project$Machine$toModel = F2( - function (status, machines) { - return {status: status, machines: machines}; - }); -var _user$project$Machine$init = _krisajenkins$remotedata$RemoteData$NotAsked; -var _user$project$Machine$SubModel = F2( +var _user$project$Maintenance_Types$SubModel = F2( function (a, b) { return {status: a, machines: b}; }); -var _user$project$Machine$NotSaving = {ctor: 'NotSaving'}; -var _user$project$Machine$Editing = {ctor: 'Editing'}; -var _user$project$Machine$Saved = {ctor: 'Saved'}; -var _user$project$Machine$Saving = {ctor: 'Saving'}; -var _user$project$Machine$HideSaveIndication = {ctor: 'HideSaveIndication'}; -var _user$project$Machine$saveUpdate = function (model) { - var cmd = _elm_lang$core$Native_Utils.eq(model.status, _user$project$Machine$Saved) ? A2( - _elm_lang$core$Task$perform, - function (_p3) { - return _user$project$Machine$HideSaveIndication; - }, - _elm_lang$core$Process$sleep(2 * _elm_lang$core$Time$second)) : _elm_lang$core$Platform_Cmd$none; - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - model, - { - ctor: '::', - _0: cmd, - _1: {ctor: '[]'} - }); +var _user$project$Maintenance_Types$Machine = F6( + function (a, b, c, d, e, f) { + return {deviceId: a, name: b, cashbox: c, cassette1: d, cassette2: e, paired: f}; + }); +var _user$project$Maintenance_Types$NotSaving = {ctor: 'NotSaving'}; +var _user$project$Maintenance_Types$Editing = {ctor: 'Editing'}; +var _user$project$Maintenance_Types$Saved = {ctor: 'Saved'}; +var _user$project$Maintenance_Types$Saving = {ctor: 'Saving'}; +var _user$project$Maintenance_Types$UnpairMachine = function (a) { + return {ctor: 'UnpairMachine', _0: a}; }; -var _user$project$Machine$Submit = function (a) { +var _user$project$Maintenance_Types$ResetCashOutBills = function (a) { + return {ctor: 'ResetCashOutBills', _0: a}; +}; +var _user$project$Maintenance_Types$HideSaveIndication = {ctor: 'HideSaveIndication'}; +var _user$project$Maintenance_Types$Submit = function (a) { return {ctor: 'Submit', _0: a}; }; -var _user$project$Machine$InputCassette = F3( +var _user$project$Maintenance_Types$InputCassette = F3( function (a, b, c) { return {ctor: 'InputCassette', _0: a, _1: b, _2: c}; }); -var _user$project$Machine$inputCassetteView = F3( - function (machine, position, count) { - return A2( - _elm_lang$html$Html$input, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$BasicInput, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onInput( - A2(_user$project$Machine$InputCassette, machine, position)), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Attributes$defaultValue( - _elm_lang$core$Basics$toString(count)), - _1: {ctor: '[]'} - } - } - }, - {ctor: '[]'}); - }); -var _user$project$Machine$Load = function (a) { +var _user$project$Maintenance_Types$Load = function (a) { return {ctor: 'Load', _0: a}; }; -var _user$project$Machine$getForm = A2( - _elm_lang$core$Platform_Cmd$map, - _user$project$Machine$Load, - A2( - _lukewestby$elm_http_builder$HttpBuilder$send, - function (_p4) { - return _krisajenkins$remotedata$RemoteData$fromResult( - A2( - _elm_lang$core$Result$map, - _user$project$Machine$toModel(_user$project$Machine$NotSaving), - _p4)); - }, - A2( - _lukewestby$elm_http_builder$HttpBuilder$withExpect, - _elm_lang$http$Http$expectJson(_user$project$MachinesDecoder$machinesDecoder), - _lukewestby$elm_http_builder$HttpBuilder$get('/api/machines')))); -var _user$project$Machine$load = {ctor: '_Tuple2', _0: _krisajenkins$remotedata$RemoteData$Loading, _1: _user$project$Machine$getForm}; -var _user$project$Machine$postForm = function (action) { - return A2( - _elm_lang$core$Platform_Cmd$map, - _user$project$Machine$Load, - A2( - _lukewestby$elm_http_builder$HttpBuilder$send, - function (_p5) { - return _krisajenkins$remotedata$RemoteData$fromResult( - A2( - _elm_lang$core$Result$map, - _user$project$Machine$toModel(_user$project$Machine$Saved), - _p5)); - }, - A2( - _lukewestby$elm_http_builder$HttpBuilder$withExpect, - _elm_lang$http$Http$expectJson(_user$project$MachinesDecoder$machinesDecoder), - A2( - _lukewestby$elm_http_builder$HttpBuilder$withJsonBody, - _user$project$MachinesEncoder$encodeAction(action), - _lukewestby$elm_http_builder$HttpBuilder$post('/api/machines'))))); -}; -var _user$project$Machine$updateAction = F2( - function (action, subModel) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - subModel, - { - ctor: '::', - _0: _user$project$Machine$postForm(action), - _1: {ctor: '[]'} - }); - }); -var _user$project$Machine$update = F2( - function (msg, model) { - var _p6 = msg; - switch (_p6.ctor) { - case 'Action': - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - model, - {ctor: '[]'}); - case 'Load': - return A2(_krisajenkins$remotedata$RemoteData$update, _user$project$Machine$saveUpdate, _p6._0); - case 'InputCassette': - return A2( - _krisajenkins$remotedata$RemoteData$update, - A3(_user$project$Machine$updateCassette, _p6._0, _p6._1, _p6._2), - model); - case 'Submit': - return A2( - _krisajenkins$remotedata$RemoteData$update, - _user$project$Machine$updateAction(_p6._0), - model); - default: - return A2( - _krisajenkins$remotedata$RemoteData$update, - function (subModel) { - return A2( - _elm_lang$core$Platform_Cmd_ops['!'], - _elm_lang$core$Native_Utils.update( - subModel, - {status: _user$project$Machine$NotSaving}), - {ctor: '[]'}); - }, - model); - } - }); -var _user$project$Machine$Action = {ctor: 'Action'}; -var _user$project$Machine$Bottom = {ctor: 'Bottom'}; -var _user$project$Machine$Top = {ctor: 'Top'}; -var _user$project$Machine$rowView = function (machine) { - var actions = machine.paired ? { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$TableButton, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Machine$Submit( - _user$project$MachineTypes$ResetCashOutBills(machine))), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Reset Bills'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$TableButton, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Machine$Submit( - _user$project$MachineTypes$UnpairMachine(machine))), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Unpair'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - } : { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$button, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$TableButton, - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: _elm_lang$html$Html_Events$onClick( - _user$project$Machine$Submit( - _user$project$MachineTypes$ResetCashOutBills(machine))), - _1: {ctor: '[]'} - } - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Reset Bills'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$NoInput, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Unpaired'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }; - return A2( - _elm_lang$html$Html$tr, - {ctor: '[]'}, - A2( - _elm_lang$core$Basics_ops['++'], - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text(machine.name), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$classList( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, - _1: {ctor: '[]'} - } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: A3(_user$project$Machine$inputCassetteView, machine, _user$project$Machine$Top, machine.cassette1), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$classList( - { - ctor: '::', - _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, - _1: { - ctor: '::', - _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, - _1: {ctor: '[]'} - } - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: A3(_user$project$Machine$inputCassetteView, machine, _user$project$Machine$Bottom, machine.cassette2), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - } - }, - actions)); -}; -var _user$project$Machine$tableView = function (machines) { - return _elm_lang$core$List$isEmpty(machines) ? A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$EmptyTable, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text('No paired machines.'), - _1: {ctor: '[]'} - }) : A2( - _elm_lang$html$Html$table, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$ConfigTable, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$thead, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$tr, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - {ctor: '[]'}), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Top Bill Count'), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$td, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Bottom Bill Count'), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - } - }), - _1: {ctor: '[]'} - }), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$tbody, - {ctor: '[]'}, - A2(_elm_lang$core$List$map, _user$project$Machine$rowView, machines)), - _1: {ctor: '[]'} - } - }); -}; -var _user$project$Machine$view = function (model) { - var _p7 = model; - switch (_p7.ctor) { - case 'NotAsked': - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - {ctor: '[]'}); - case 'Loading': - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text('Loading...'), - _1: {ctor: '[]'} - }); - case 'Failure': - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: _elm_lang$html$Html$text( - _elm_lang$core$Basics$toString(_p7._0)), - _1: {ctor: '[]'} - }); - default: - var _p9 = _p7._0; - var statusString = function () { - var _p8 = _p9.status; - if (_p8.ctor === 'Saved') { - return 'Saved'; - } else { - return ''; - } - }(); - return A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$SectionLabel, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - {ctor: '[]'}, - { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$ConfigContainer, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _user$project$Machine$tableView(_p9.machines), - _1: { - ctor: '::', - _0: A2( - _elm_lang$html$Html$div, - { - ctor: '::', - _0: _user$project$Css_Admin$class( - { - ctor: '::', - _0: _user$project$Css_Classes$Saving, - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }, - { - ctor: '::', - _0: _elm_lang$html$Html$text(statusString), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - } - }), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }), - _1: {ctor: '[]'} - }); - } -}; +var _user$project$Maintenance_Types$Action = {ctor: 'Action'}; +var _user$project$Maintenance_Types$Bottom = {ctor: 'Bottom'}; +var _user$project$Maintenance_Types$Top = {ctor: 'Top'}; var _user$project$TransactionTypes$CashInTxRec = function (a) { return function (b) { @@ -33480,19 +36902,12 @@ var _user$project$Transaction$getTransactions = A2( var _user$project$Transaction$loadCmd = _user$project$Transaction$getTransactions; var _user$project$Transaction$load = {ctor: '_Tuple2', _0: _krisajenkins$remotedata$RemoteData$Loading, _1: _user$project$Transaction$loadCmd}; -var _user$project$CoreTypes$machineSubRouteToString = function (machineSubRoute) { - var _p0 = machineSubRoute; - return 'actions'; -}; -var _user$project$CoreTypes$MachineCat = {ctor: 'MachineCat'}; -var _user$project$CoreTypes$ConfigCat = {ctor: 'ConfigCat'}; +var _user$project$CoreTypes$GlobalSettingsCat = {ctor: 'GlobalSettingsCat'}; +var _user$project$CoreTypes$MachineSettingsCat = {ctor: 'MachineSettingsCat'}; var _user$project$CoreTypes$AccountCat = {ctor: 'AccountCat'}; -var _user$project$CoreTypes$MachineActions = {ctor: 'MachineActions'}; var _user$project$CoreTypes$NotFoundRoute = {ctor: 'NotFoundRoute'}; +var _user$project$CoreTypes$MaintenanceRoute = {ctor: 'MaintenanceRoute'}; var _user$project$CoreTypes$TransactionRoute = {ctor: 'TransactionRoute'}; -var _user$project$CoreTypes$MachineRoute = function (a) { - return {ctor: 'MachineRoute', _0: a}; -}; var _user$project$CoreTypes$ConfigRoute = F2( function (a, b) { return {ctor: 'ConfigRoute', _0: a, _1: b}; @@ -33517,8 +36932,8 @@ var _user$project$CoreTypes$LoadAccounts = function (a) { var _user$project$CoreTypes$TransactionMsg = function (a) { return {ctor: 'TransactionMsg', _0: a}; }; -var _user$project$CoreTypes$MachineMsg = function (a) { - return {ctor: 'MachineMsg', _0: a}; +var _user$project$CoreTypes$MaintenanceMsg = function (a) { + return {ctor: 'MaintenanceMsg', _0: a}; }; var _user$project$CoreTypes$ConfigMsg = function (a) { return {ctor: 'ConfigMsg', _0: a}; @@ -33530,15 +36945,50 @@ var _user$project$CoreTypes$AccountMsg = function (a) { return {ctor: 'AccountMsg', _0: a}; }; +var _user$project$NavBar$determineConfigCategory = function (configCode) { + return A2( + _elm_lang$core$List$member, + configCode, + { + ctor: '::', + _0: 'definition', + _1: { + ctor: '::', + _0: 'setup', + _1: { + ctor: '::', + _0: 'cashOut', + _1: { + ctor: '::', + _0: 'commissions', + _1: { + ctor: '::', + _0: 'compliance', + _1: {ctor: '[]'} + } + } + } + } + }) ? _elm_lang$core$Maybe$Just(_user$project$CoreTypes$MachineSettingsCat) : (A2( + _elm_lang$core$List$member, + configCode, + { + ctor: '::', + _0: 'walletSettings', + _1: { + ctor: '::', + _0: 'notifications', + _1: {ctor: '[]'} + } + }) ? _elm_lang$core$Maybe$Just(_user$project$CoreTypes$GlobalSettingsCat) : _elm_lang$core$Maybe$Nothing); +}; var _user$project$NavBar$determineCategory = function (route) { var _p0 = route; switch (_p0.ctor) { case 'AccountRoute': return _elm_lang$core$Maybe$Just(_user$project$CoreTypes$AccountCat); case 'ConfigRoute': - return _elm_lang$core$Maybe$Just(_user$project$CoreTypes$ConfigCat); - case 'MachineRoute': - return _elm_lang$core$Maybe$Just(_user$project$CoreTypes$MachineCat); + return _user$project$NavBar$determineConfigCategory(_p0._0); default: return _elm_lang$core$Maybe$Nothing; } @@ -33573,19 +37023,16 @@ var _user$project$NavBar$routeToUrl = function (route) { _0: _p1._1, _1: {ctor: '[]'} }); - case 'MachineRoute': - return A2( - _elm_lang$core$Basics_ops['++'], - '/#machine/', - _user$project$CoreTypes$machineSubRouteToString(_p1._0)); + case 'MaintenanceRoute': + return '/#maintenance/'; case 'TransactionRoute': return '/#transaction/'; default: return _elm_lang$core$Native_Utils.crashCase( 'NavBar', { - start: {line: 31, column: 5}, - end: {line: 48, column: 45} + start: {line: 29, column: 5}, + end: {line: 46, column: 45} }, _p1)('Need unknown route'); } @@ -33825,60 +37272,35 @@ var _user$project$NavBar$view = F2( {ctor: '_Tuple3', _0: 'Transactions', _1: _user$project$CoreTypes$TransactionRoute, _2: true}), _1: { ctor: '::', - _0: A2( - ll, - { - ctor: '_Tuple4', - _0: 'Machines', - _1: _user$project$CoreTypes$MachineCat, - _2: _user$project$CoreTypes$MachineRoute(_user$project$CoreTypes$MachineActions), - _3: true - }, - { - ctor: '::', - _0: { - ctor: '_Tuple3', - _0: 'Actions', - _1: _user$project$CoreTypes$MachineRoute(_user$project$CoreTypes$MachineActions), - _2: true - }, - _1: {ctor: '[]'} - }), + _0: l( + {ctor: '_Tuple3', _0: 'Maintenance', _1: _user$project$CoreTypes$MaintenanceRoute, _2: true}), _1: { ctor: '::', _0: A2( ll, { ctor: '_Tuple4', - _0: 'Configuration', - _1: _user$project$CoreTypes$ConfigCat, - _2: A2(_user$project$CoreTypes$ConfigRoute, 'fiat', _elm_lang$core$Maybe$Nothing), + _0: 'Machine Settings', + _1: _user$project$CoreTypes$MachineSettingsCat, + _2: A2(_user$project$CoreTypes$ConfigRoute, 'definition', _elm_lang$core$Maybe$Nothing), _3: allClear }, { ctor: '::', - _0: A2(configLink, 'fiat', 'Fiat currencies'), + _0: A2(configLink, 'definition', 'Definition'), _1: { ctor: '::', - _0: A2(configLink, 'commissions', 'Commissions'), + _0: A2(configLink, 'setup', 'Setup'), _1: { ctor: '::', - _0: A2(configLink, 'machineSettings', 'Machine settings'), + _0: A2(configLink, 'cashOut', 'Cash Out'), _1: { ctor: '::', - _0: A2(configLink, 'machines', 'Machines'), + _0: A2(configLink, 'commissions', 'Commissions'), _1: { ctor: '::', - _0: A2(configLink, 'cryptoServices', 'Crypto services'), - _1: { - ctor: '::', - _0: A2(configLink, 'notifications', 'Notifications'), - _1: { - ctor: '::', - _0: A2(configLink, 'compliance', 'Compliance'), - _1: {ctor: '[]'} - } - } + _0: A2(configLink, 'compliance', 'Compliance'), + _1: {ctor: '[]'} } } } @@ -33890,53 +37312,74 @@ var _user$project$NavBar$view = F2( ll, { ctor: '_Tuple4', - _0: 'Accounts', - _1: _user$project$CoreTypes$AccountCat, - _2: _user$project$CoreTypes$AccountRoute('bitgo'), - _3: true + _0: 'Global Settings', + _1: _user$project$CoreTypes$GlobalSettingsCat, + _2: A2(_user$project$CoreTypes$ConfigRoute, 'walletSettings ', _elm_lang$core$Maybe$Nothing), + _3: allClear }, { ctor: '::', - _0: { - ctor: '_Tuple3', - _0: 'BitGo', - _1: _user$project$CoreTypes$AccountRoute('bitgo'), - _2: true - }, + _0: A2(configLink, 'walletSettings', 'Wallet Settings'), _1: { + ctor: '::', + _0: A2(configLink, 'notifications', 'Notifications'), + _1: {ctor: '[]'} + } + }), + _1: { + ctor: '::', + _0: A2( + ll, + { + ctor: '_Tuple4', + _0: 'Third Party Services', + _1: _user$project$CoreTypes$AccountCat, + _2: _user$project$CoreTypes$AccountRoute('bitgo'), + _3: true + }, + { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Bitstamp', - _1: _user$project$CoreTypes$AccountRoute('bitstamp'), + _0: 'BitGo', + _1: _user$project$CoreTypes$AccountRoute('bitgo'), _2: true }, _1: { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Twilio', - _1: _user$project$CoreTypes$AccountRoute('twilio'), + _0: 'Bitstamp', + _1: _user$project$CoreTypes$AccountRoute('bitstamp'), _2: true }, _1: { ctor: '::', _0: { ctor: '_Tuple3', - _0: 'Mailjet', - _1: _user$project$CoreTypes$AccountRoute('mailjet'), + _0: 'Twilio', + _1: _user$project$CoreTypes$AccountRoute('twilio'), _2: true }, - _1: {ctor: '[]'} + _1: { + ctor: '::', + _0: { + ctor: '_Tuple3', + _0: 'Mailjet', + _1: _user$project$CoreTypes$AccountRoute('mailjet'), + _2: true + }, + _1: {ctor: '[]'} + } } } - } - }), - _1: { - ctor: '::', - _0: l( - {ctor: '_Tuple3', _0: 'Pairing', _1: _user$project$CoreTypes$PairRoute, _2: true}), - _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: l( + {ctor: '_Tuple3', _0: '+ Add Machine', _1: _user$project$CoreTypes$PairRoute, _2: true}), + _1: {ctor: '[]'} + } } } } @@ -33972,6 +37415,1056 @@ var _user$project$StatusDecoder$statusDecoder = A3( 'invalidConfigGroups', _elm_lang$core$Json_Decode$list(_elm_lang$core$Json_Decode$string))); +var _user$project$Maintenance_Rest$encodeAction = function (action) { + var _p0 = action; + if (_p0.ctor === 'ResetCashOutBills') { + var _p1 = _p0._0; + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'action', + _1: _elm_lang$core$Json_Encode$string('resetCashOutBills') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'deviceId', + _1: _elm_lang$core$Json_Encode$string(_p1.deviceId) + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'cassettes', + _1: _elm_lang$core$Json_Encode$list( + { + ctor: '::', + _0: _elm_lang$core$Json_Encode$int(_p1.cassette1), + _1: { + ctor: '::', + _0: _elm_lang$core$Json_Encode$int(_p1.cassette2), + _1: {ctor: '[]'} + } + }) + }, + _1: {ctor: '[]'} + } + } + }); + } else { + return _elm_lang$core$Json_Encode$object( + { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'action', + _1: _elm_lang$core$Json_Encode$string('unpair') + }, + _1: { + ctor: '::', + _0: { + ctor: '_Tuple2', + _0: 'deviceId', + _1: _elm_lang$core$Json_Encode$string(_p0._0.deviceId) + }, + _1: {ctor: '[]'} + } + }); + } +}; +var _user$project$Maintenance_Rest$machineDecoder = A7( + _elm_lang$core$Json_Decode$map6, + _user$project$Maintenance_Types$Machine, + A2(_elm_lang$core$Json_Decode$field, 'deviceId', _elm_lang$core$Json_Decode$string), + A2(_elm_lang$core$Json_Decode$field, 'name', _elm_lang$core$Json_Decode$string), + A2(_elm_lang$core$Json_Decode$field, 'cashbox', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode$field, 'cassette1', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode$field, 'cassette2', _elm_lang$core$Json_Decode$int), + A2(_elm_lang$core$Json_Decode$field, 'paired', _elm_lang$core$Json_Decode$bool)); +var _user$project$Maintenance_Rest$machinesDecoder = A2( + _elm_lang$core$Json_Decode$map, + _elm_lang$core$Basics$identity, + A2( + _elm_lang$core$Json_Decode$field, + 'machines', + _elm_lang$core$Json_Decode$list(_user$project$Maintenance_Rest$machineDecoder))); +var _user$project$Maintenance_Rest$toModel = F2( + function (status, machines) { + return {status: status, machines: machines}; + }); +var _user$project$Maintenance_Rest$getForm = A2( + _elm_lang$core$Platform_Cmd$map, + _user$project$Maintenance_Types$Load, + A2( + _lukewestby$elm_http_builder$HttpBuilder$send, + function (_p2) { + return _krisajenkins$remotedata$RemoteData$fromResult( + A2( + _elm_lang$core$Result$map, + _user$project$Maintenance_Rest$toModel(_user$project$Maintenance_Types$NotSaving), + _p2)); + }, + A2( + _lukewestby$elm_http_builder$HttpBuilder$withExpect, + _elm_lang$http$Http$expectJson(_user$project$Maintenance_Rest$machinesDecoder), + _lukewestby$elm_http_builder$HttpBuilder$get('/api/machines')))); +var _user$project$Maintenance_Rest$postForm = function (action) { + return A2( + _elm_lang$core$Platform_Cmd$map, + _user$project$Maintenance_Types$Load, + A2( + _lukewestby$elm_http_builder$HttpBuilder$send, + function (_p3) { + return _krisajenkins$remotedata$RemoteData$fromResult( + A2( + _elm_lang$core$Result$map, + _user$project$Maintenance_Rest$toModel(_user$project$Maintenance_Types$Saved), + _p3)); + }, + A2( + _lukewestby$elm_http_builder$HttpBuilder$withExpect, + _elm_lang$http$Http$expectJson(_user$project$Maintenance_Rest$machinesDecoder), + A2( + _lukewestby$elm_http_builder$HttpBuilder$withJsonBody, + _user$project$Maintenance_Rest$encodeAction(action), + _lukewestby$elm_http_builder$HttpBuilder$post('/api/machines'))))); +}; + +var _user$project$Maintenance_State$inputCassetteView = F3( + function (machine, position, count) { + return A2( + _elm_lang$html$Html$input, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$BasicInput, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onInput( + A2(_user$project$Maintenance_Types$InputCassette, machine, position)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$defaultValue( + _elm_lang$core$Basics$toString(count)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); + }); +var _user$project$Maintenance_State$rowView = function (machine) { + var actions = machine.paired ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$ResetCashOutBills(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Reset Bills'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$UnpairMachine(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Unpair'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } : { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$ResetCashOutBills(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Reset Bills'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$NoInput, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Unpaired'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }; + return A2( + _elm_lang$html$Html$tr, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text(machine.name), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$classList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A3(_user$project$Maintenance_State$inputCassetteView, machine, _user$project$Maintenance_Types$Top, machine.cassette1), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$classList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A3(_user$project$Maintenance_State$inputCassetteView, machine, _user$project$Maintenance_Types$Bottom, machine.cassette2), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } + }, + actions)); +}; +var _user$project$Maintenance_State$tableView = function (machines) { + return _elm_lang$core$List$isEmpty(machines) ? A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$EmptyTable, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('No paired machines.'), + _1: {ctor: '[]'} + }) : A2( + _elm_lang$html$Html$table, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$ConfigTable, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$thead, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$tr, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Top Bill Count'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Bottom Bill Count'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$tbody, + {ctor: '[]'}, + A2(_elm_lang$core$List$map, _user$project$Maintenance_State$rowView, machines)), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Maintenance_State$view = function (model) { + var _p0 = model; + switch (_p0.ctor) { + case 'NotAsked': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + {ctor: '[]'}); + case 'Loading': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Loading...'), + _1: {ctor: '[]'} + }); + case 'Failure': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + _elm_lang$core$Basics$toString(_p0._0)), + _1: {ctor: '[]'} + }); + default: + var _p2 = _p0._0; + var statusString = function () { + var _p1 = _p2.status; + if (_p1.ctor === 'Saved') { + return 'Saved'; + } else { + return ''; + } + }(); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$SectionLabel, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$ConfigContainer, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Maintenance_State$tableView(_p2.machines), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$Saving, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text(statusString), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }); + } +}; +var _user$project$Maintenance_State$saveUpdate = function (model) { + var cmd = _elm_lang$core$Native_Utils.eq(model.status, _user$project$Maintenance_Types$Saved) ? A2( + _elm_lang$core$Task$perform, + function (_p3) { + return _user$project$Maintenance_Types$HideSaveIndication; + }, + _elm_lang$core$Process$sleep(2 * _elm_lang$core$Time$second)) : _elm_lang$core$Platform_Cmd$none; + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + { + ctor: '::', + _0: cmd, + _1: {ctor: '[]'} + }); +}; +var _user$project$Maintenance_State$updateAction = F2( + function (action, subModel) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + subModel, + { + ctor: '::', + _0: _user$project$Maintenance_Rest$postForm(action), + _1: {ctor: '[]'} + }); + }); +var _user$project$Maintenance_State$updateMachine = F2( + function (machine, oldMachine) { + return _elm_lang$core$Native_Utils.eq(machine.deviceId, oldMachine.deviceId) ? machine : oldMachine; + }); +var _user$project$Maintenance_State$updateCassette = F4( + function (machine, position, str, subModel) { + var countResult = _elm_lang$core$String$toInt(str); + var updatedMachine = function () { + var _p4 = countResult; + if (_p4.ctor === 'Ok') { + var _p6 = _p4._0; + var _p5 = position; + if (_p5.ctor === 'Top') { + return _elm_lang$core$Native_Utils.update( + machine, + {cassette1: _p6}); + } else { + return _elm_lang$core$Native_Utils.update( + machine, + {cassette2: _p6}); + } + } else { + return machine; + } + }(); + var machines = A2( + _elm_lang$core$List$map, + _user$project$Maintenance_State$updateMachine(updatedMachine), + subModel.machines); + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + subModel, + {machines: machines}), + {ctor: '[]'}); + }); +var _user$project$Maintenance_State$update = F2( + function (msg, model) { + var _p7 = msg; + switch (_p7.ctor) { + case 'Action': + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + model, + {ctor: '[]'}); + case 'Load': + return A2(_krisajenkins$remotedata$RemoteData$update, _user$project$Maintenance_State$saveUpdate, _p7._0); + case 'InputCassette': + return A2( + _krisajenkins$remotedata$RemoteData$update, + A3(_user$project$Maintenance_State$updateCassette, _p7._0, _p7._1, _p7._2), + model); + case 'Submit': + return A2( + _krisajenkins$remotedata$RemoteData$update, + _user$project$Maintenance_State$updateAction(_p7._0), + model); + default: + return A2( + _krisajenkins$remotedata$RemoteData$update, + function (subModel) { + return A2( + _elm_lang$core$Platform_Cmd_ops['!'], + _elm_lang$core$Native_Utils.update( + subModel, + {status: _user$project$Maintenance_Types$NotSaving}), + {ctor: '[]'}); + }, + model); + } + }); +var _user$project$Maintenance_State$load = {ctor: '_Tuple2', _0: _krisajenkins$remotedata$RemoteData$Loading, _1: _user$project$Maintenance_Rest$getForm}; +var _user$project$Maintenance_State$init = _krisajenkins$remotedata$RemoteData$NotAsked; + +var _user$project$Maintenance_View$inputCassetteView = F3( + function (machine, position, count) { + return A2( + _elm_lang$html$Html$input, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$BasicInput, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onInput( + A2(_user$project$Maintenance_Types$InputCassette, machine, position)), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Attributes$defaultValue( + _elm_lang$core$Basics$toString(count)), + _1: {ctor: '[]'} + } + } + }, + {ctor: '[]'}); + }); +var _user$project$Maintenance_View$rowView = function (machine) { + var actions = machine.paired ? { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$ResetCashOutBills(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Reset Bills'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$UnpairMachine(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Unpair'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } : { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$button, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$TableButton, + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: _elm_lang$html$Html_Events$onClick( + _user$project$Maintenance_Types$Submit( + _user$project$Maintenance_Types$ResetCashOutBills(machine))), + _1: {ctor: '[]'} + } + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Reset Bills'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$NoInput, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Unpaired'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }; + return A2( + _elm_lang$html$Html$tr, + {ctor: '[]'}, + A2( + _elm_lang$core$Basics_ops['++'], + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text(machine.name), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$classList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A3(_user$project$Maintenance_View$inputCassetteView, machine, _user$project$Maintenance_Types$Top, machine.cassette1), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$classList( + { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$Component, _1: true}, + _1: { + ctor: '::', + _0: {ctor: '_Tuple2', _0: _user$project$Css_Classes$FocusedComponent, _1: false}, + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A3(_user$project$Maintenance_View$inputCassetteView, machine, _user$project$Maintenance_Types$Bottom, machine.cassette2), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } + }, + actions)); +}; +var _user$project$Maintenance_View$tableView = function (machines) { + return _elm_lang$core$List$isEmpty(machines) ? A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$EmptyTable, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text('No paired machines.'), + _1: {ctor: '[]'} + }) : A2( + _elm_lang$html$Html$table, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$ConfigTable, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$thead, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$tr, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + {ctor: '[]'}), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Top Bill Count'), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$td, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Bottom Bill Count'), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + } + }), + _1: {ctor: '[]'} + }), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$tbody, + {ctor: '[]'}, + A2(_elm_lang$core$List$map, _user$project$Maintenance_View$rowView, machines)), + _1: {ctor: '[]'} + } + }); +}; +var _user$project$Maintenance_View$view = function (model) { + var _p0 = model; + switch (_p0.ctor) { + case 'NotAsked': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + {ctor: '[]'}); + case 'Loading': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text('Loading...'), + _1: {ctor: '[]'} + }); + case 'Failure': + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: _elm_lang$html$Html$text( + _elm_lang$core$Basics$toString(_p0._0)), + _1: {ctor: '[]'} + }); + default: + var _p2 = _p0._0; + var statusString = function () { + var _p1 = _p2.status; + if (_p1.ctor === 'Saved') { + return 'Saved'; + } else { + return ''; + } + }(); + return A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$SectionLabel, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + {ctor: '[]'}, + { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$ConfigContainer, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _user$project$Maintenance_View$tableView(_p2.machines), + _1: { + ctor: '::', + _0: A2( + _elm_lang$html$Html$div, + { + ctor: '::', + _0: _user$project$Css_Admin$class( + { + ctor: '::', + _0: _user$project$Css_Classes$Saving, + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }, + { + ctor: '::', + _0: _elm_lang$html$Html$text(statusString), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + } + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }), + _1: {ctor: '[]'} + }); + } +}; + var _user$project$Main$subscriptions = function (model) { return A2( _elm_lang$core$Time$every, @@ -34069,11 +38562,11 @@ var _user$project$Main$content = F2( _elm_lang$html$Html$map, _user$project$CoreTypes$ConfigMsg, _user$project$Config$view(model.config)); - case 'MachineRoute': + case 'MaintenanceRoute': return A2( _elm_lang$html$Html$map, - _user$project$CoreTypes$MachineMsg, - _user$project$Machine$view(model.machine)); + _user$project$CoreTypes$MaintenanceMsg, + _user$project$Maintenance_View$view(model.maintenance)); case 'TransactionRoute': return A2( _elm_lang$html$Html$map, @@ -34160,11 +38653,8 @@ var _user$project$Main$parseRoute = _evancz$url_parser$UrlParser$oneOf( ctor: '::', _0: A2( _evancz$url_parser$UrlParser$map, - _user$project$CoreTypes$MachineRoute(_user$project$CoreTypes$MachineActions), - A2( - _evancz$url_parser$UrlParser_ops[''], - _evancz$url_parser$UrlParser$s('machine'), - _evancz$url_parser$UrlParser$s('actions'))), + _user$project$CoreTypes$MaintenanceRoute, + _evancz$url_parser$UrlParser$s('maintenance')), _1: { ctor: '::', _0: A2( @@ -34285,18 +38775,18 @@ var _user$project$Main$urlUpdate = F2( _0: A2(_elm_lang$core$Platform_Cmd$map, _user$project$CoreTypes$ConfigMsg, cmd), _1: {ctor: '[]'} }); - case 'MachineRoute': - var _p8 = _user$project$Machine$load; - var machineModel = _p8._0; + case 'MaintenanceRoute': + var _p8 = _user$project$Maintenance_State$load; + var maintenanceModel = _p8._0; var cmd = _p8._1; return A2( _elm_lang$core$Platform_Cmd_ops['!'], _elm_lang$core$Native_Utils.update( model, - {location: location, machine: machineModel}), + {location: location, maintenance: maintenanceModel}), { ctor: '::', - _0: A2(_elm_lang$core$Platform_Cmd$map, _user$project$CoreTypes$MachineMsg, cmd), + _0: A2(_elm_lang$core$Platform_Cmd$map, _user$project$CoreTypes$MaintenanceMsg, cmd), _1: {ctor: '[]'} }); case 'TransactionRoute': @@ -34328,7 +38818,7 @@ var _user$project$Main$init = function (location) { account: _user$project$Account$init, pair: _user$project$Pair$init, config: _user$project$Config$init, - machine: _user$project$Machine$init, + maintenance: _user$project$Maintenance_State$init, transaction: _user$project$Transaction$init, accounts: {ctor: '[]'}, status: _elm_lang$core$Maybe$Nothing, @@ -34414,18 +38904,18 @@ var _user$project$Main$update = F2( _1: {ctor: '[]'} }, extraCmds)); - case 'MachineMsg': - var _p16 = A2(_user$project$Machine$update, _p11._0, model.machine); - var machineModel = _p16._0; + case 'MaintenanceMsg': + var _p16 = A2(_user$project$Maintenance_State$update, _p11._0, model.maintenance); + var maintenanceModel = _p16._0; var cmd = _p16._1; return A2( _elm_lang$core$Platform_Cmd_ops['!'], _elm_lang$core$Native_Utils.update( model, - {machine: machineModel}), + {maintenance: maintenanceModel}), { ctor: '::', - _0: A2(_elm_lang$core$Platform_Cmd$map, _user$project$CoreTypes$MachineMsg, cmd), + _0: A2(_elm_lang$core$Platform_Cmd$map, _user$project$CoreTypes$MaintenanceMsg, cmd), _1: {ctor: '[]'} }); case 'TransactionMsg': @@ -34538,13 +39028,13 @@ var _user$project$Main$main = A2( {init: _user$project$Main$init, update: _user$project$Main$update, view: _user$project$Main$view, subscriptions: _user$project$Main$subscriptions})(); var _user$project$Main$Model = F9( function (a, b, c, d, e, f, g, h, i) { - return {location: a, pair: b, account: c, config: d, machine: e, transaction: f, accounts: g, status: h, err: i}; + return {location: a, pair: b, account: c, config: d, maintenance: e, transaction: f, accounts: g, status: h, err: i}; }); var Elm = {}; Elm['Main'] = Elm['Main'] || {}; if (typeof _user$project$Main$main !== 'undefined') { - _user$project$Main$main(Elm['Main'], 'Main', undefined); + _user$project$Main$main(Elm['Main'], 'Main', {"types":{"unions":{"FieldSetTypes.FieldValue":{"args":[],"tags":{"FieldString":["String"],"FieldPassword":["FieldSetTypes.FieldPasswordType"]}},"Selectize.Status":{"args":[],"tags":{"Editing":[],"Idle":[],"Blurred":[],"Cleared":[],"Initial":[]}},"Dict.LeafColor":{"args":[],"tags":{"LBBlack":[],"LBlack":[]}},"Account.SavingStatus":{"args":[],"tags":{"Saving":[],"Editing":[],"NotSaving":[],"Saved":[]}},"ConfigTypes.ConfigScope":{"args":[],"tags":{"Specific":[],"Both":[],"Global":[]}},"Maintenance.Types.Msg":{"args":[],"tags":{"Action":[],"Load":["Maintenance.Types.Model"],"InputCassette":["Maintenance.Types.Machine","Maintenance.Types.Position","String"],"Submit":["Maintenance.Types.MachineAction"],"HideSaveIndication":[]}},"ConfigTypes.FieldType":{"args":[],"tags":{"FieldOnOffType":[],"FieldPercentageType":[],"FieldLanguageType":[],"FieldCryptoCurrencyType":[],"FieldIntegerType":[],"FieldFiatCurrencyType":[],"FieldStringType":[],"FieldCountryType":[],"FieldAccountType":[]}},"Pair.Msg":{"args":[],"tags":{"SubmitName":[],"Load":["RemoteData.WebData String"],"InputName":["String"]}},"Transaction.Msg":{"args":[],"tags":{"Load":["Transaction.Model"]}},"Dict.Dict":{"args":["k","v"],"tags":{"RBNode_elm_builtin":["Dict.NColor","k","v","Dict.Dict k v","Dict.Dict k v"],"RBEmpty_elm_builtin":["Dict.LeafColor"]}},"ConfigTypes.DisplayTop":{"args":[],"tags":{"DisplayTopSolo":["String"],"DisplayTopLeader":["Int","String"],"DisplayTopNone":[]}},"Date.Date":{"args":[],"tags":{"Date":[]}},"Account.Msg":{"args":[],"tags":{"Load":["Account.Model"],"FieldSetMsg":["FieldSet.Msg"],"Submit":[],"HideSaveIndication":[]}},"Maybe.Maybe":{"args":["a"],"tags":{"Just":["a"],"Nothing":[]}},"RemoteData.RemoteData":{"args":["e","a"],"tags":{"NotAsked":[],"Success":["a"],"Loading":[],"Failure":["e"]}},"ConfigTypes.Crypto":{"args":[],"tags":{"GlobalCrypto":[],"CryptoCode":["String"]}},"FieldSet.Msg":{"args":[],"tags":{"Input":["String","String"]}},"CoreTypes.Msg":{"args":[],"tags":{"ConfigMsg":["Config.Msg"],"LoadAccounts":["List ( String, String )"],"MaintenanceMsg":["Maintenance.Types.Msg"],"NewUrl":["String"],"Interval":[],"LoadStatus":["StatusTypes.WebStatus"],"UrlChange":["Navigation.Location"],"TransactionMsg":["Transaction.Msg"],"AccountMsg":["Account.Msg"],"PairMsg":["Pair.Msg"]}},"Dict.NColor":{"args":[],"tags":{"BBlack":[],"Red":[],"NBlack":[],"Black":[]}},"Maintenance.Types.Position":{"args":[],"tags":{"Bottom":[],"Top":[]}},"ConfigTypes.Machine":{"args":[],"tags":{"MachineId":["String"],"GlobalMachine":[]}},"Config.Msg":{"args":[],"tags":{"Focus":["ConfigTypes.FieldLocator"],"BlurSelectize":["ConfigTypes.FieldLocator","Selectize.State"],"Remove":["ConfigTypes.FieldLocator","Selectize.State"],"Load":["Config.WebConfigGroup"],"Input":["ConfigTypes.FieldLocator","String"],"Blur":["ConfigTypes.FieldLocator"],"Add":["ConfigTypes.FieldLocator","String","Selectize.State"],"Submit":[],"SelectizeMsg":["ConfigTypes.FieldLocator","Selectize.State"],"FocusSelectize":["ConfigTypes.FieldLocator","Selectize.State"],"HideSaveIndication":[],"NoOp":[],"CryptoSwitch":["ConfigTypes.Crypto"]}},"Maintenance.Types.MachineAction":{"args":[],"tags":{"ResetCashOutBills":["Maintenance.Types.Machine"],"UnpairMachine":["Maintenance.Types.Machine"]}},"TransactionTypes.Tx":{"args":[],"tags":{"CashInTx":["TransactionTypes.CashInTxRec"],"CashOutTx":["TransactionTypes.CashOutTxRec"]}},"FieldSetTypes.FieldPasswordType":{"args":[],"tags":{"PasswordEmpty":[],"PasswordHidden":[],"Password":["String"]}},"ConfigTypes.FieldValidator":{"args":[],"tags":{"FieldRequired":[],"FieldMin":["Int"],"FieldMax":["Int"]}},"Http.Error":{"args":[],"tags":{"BadUrl":["String"],"NetworkError":[],"Timeout":[],"BadStatus":["Http.Response String"],"BadPayload":["String","Http.Response String"]}},"Maintenance.Types.SavingStatus":{"args":[],"tags":{"Saving":[],"Editing":[],"NotSaving":[],"Saved":[]}},"ConfigTypes.FieldValue":{"args":[],"tags":{"FieldIntegerValue":["Int"],"FieldCryptoCurrencyValue":["List String"],"FieldCountryValue":["String"],"FieldFiatCurrencyValue":["String"],"FieldStringValue":["String"],"FieldOnOffValue":["Bool"],"FieldAccountValue":["String"],"FieldLanguageValue":["List String"],"FieldPercentageValue":["Float"]}}},"aliases":{"ConfigTypes.ConfigSchema":{"args":[],"type":"{ code : String , display : String , cryptoScope : ConfigTypes.ConfigScope , machineScope : ConfigTypes.ConfigScope , entries : List ConfigTypes.FieldDescriptor }"},"Selectize.State":{"args":[],"type":"{ boxPosition : Int, status : Selectize.Status, string : String }"},"TransactionTypes.CashInTxRec":{"args":[],"type":"{ id : String , machineName : String , toAddress : String , cryptoAtoms : Int , cryptoCode : String , fiat : Float , fiatCode : String , txHash : Maybe.Maybe String , phone : Maybe.Maybe String , error : Maybe.Maybe String , created : Date.Date }"},"RemoteData.WebData":{"args":["a"],"type":"RemoteData.RemoteData Http.Error a"},"ConfigTypes.FieldLocator":{"args":[],"type":"{ fieldScope : ConfigTypes.FieldScope , code : String , fieldType : ConfigTypes.FieldType , fieldClass : Maybe.Maybe String }"},"AccountTypes.Account":{"args":[],"type":"{ code : String , display : String , fields : List FieldSetTypes.Field }"},"Http.Response":{"args":["body"],"type":"{ url : String , status : { code : Int, message : String } , headers : Dict.Dict String String , body : body }"},"StatusTypes.WebStatus":{"args":[],"type":"RemoteData.WebData StatusTypes.StatusRec"},"ConfigTypes.ConfigData":{"args":[],"type":"{ cryptoCurrencies : List ConfigTypes.CryptoDisplay , currencies : List ConfigTypes.DisplayRec , languages : List ConfigTypes.DisplayRec , countries : List ConfigTypes.DisplayRec , accounts : List ConfigTypes.AccountRec , machines : List ConfigTypes.MachineDisplay }"},"Account.Model":{"args":[],"type":"RemoteData.WebData Account.SubModel"},"Maintenance.Types.Machines":{"args":[],"type":"List Maintenance.Types.Machine"},"Maintenance.Types.Machine":{"args":[],"type":"{ deviceId : String , name : String , cashbox : Int , cassette1 : Int , cassette2 : Int , paired : Bool }"},"ConfigTypes.CryptoDisplay":{"args":[],"type":"{ crypto : ConfigTypes.Crypto, display : String }"},"Config.WebConfigGroup":{"args":[],"type":"RemoteData.WebData ConfigTypes.ConfigGroup"},"ConfigTypes.DisplayRec":{"args":[],"type":"{ code : String, display : String }"},"Account.SubModel":{"args":[],"type":"{ status : Account.SavingStatus, account : AccountTypes.Account }"},"ConfigTypes.FieldScope":{"args":[],"type":"{ crypto : ConfigTypes.Crypto, machine : ConfigTypes.Machine }"},"FieldSetTypes.Field":{"args":[],"type":"{ code : String , display : String , required : Bool , value : FieldSetTypes.FieldValue , loadedValue : FieldSetTypes.FieldValue }"},"ConfigTypes.ConfigGroup":{"args":[],"type":"{ schema : ConfigTypes.ConfigSchema , values : List ConfigTypes.Field , selectedCryptos : List String , data : ConfigTypes.ConfigData }"},"ConfigTypes.AccountRec":{"args":[],"type":"{ code : String , display : String , class : String , cryptos : Maybe.Maybe (List ConfigTypes.Crypto) }"},"Transaction.Model":{"args":[],"type":"RemoteData.WebData Transaction.Txs"},"Maintenance.Types.SubModel":{"args":[],"type":"{ status : Maintenance.Types.SavingStatus , machines : Maintenance.Types.Machines }"},"ConfigTypes.Field":{"args":[],"type":"{ fieldLocator : ConfigTypes.FieldLocator , fieldValue : ConfigTypes.FieldValue }"},"Transaction.Txs":{"args":[],"type":"List TransactionTypes.Tx"},"ConfigTypes.MachineDisplay":{"args":[],"type":"{ machine : ConfigTypes.Machine, display : String }"},"StatusTypes.ServerRec":{"args":[],"type":"{ up : Bool , lastPing : Maybe.Maybe String , rates : List StatusTypes.Rate , machineStatus : String }"},"StatusTypes.Rate":{"args":[],"type":"{ crypto : String, bid : Float, ask : Float }"},"TransactionTypes.CashOutTxRec":{"args":[],"type":"{ id : String , machineName : String , toAddress : String , cryptoAtoms : Int , cryptoCode : String , fiat : Float , fiatCode : String , status : String , dispense : Bool , notified : Bool , redeemed : Bool , phone : Maybe.Maybe String , error : Maybe.Maybe String , created : Date.Date , confirmed : Bool }"},"ConfigTypes.FieldDescriptor":{"args":[],"type":"{ code : String , cryptoScope : ConfigTypes.ConfigScope , machineScope : ConfigTypes.ConfigScope , displayTop : ConfigTypes.DisplayTop , displayBottom : String , displayCount : Maybe.Maybe Int , fieldType : ConfigTypes.FieldType , fieldValidation : List ConfigTypes.FieldValidator , fieldClass : Maybe.Maybe String , fieldEnabledIf : List String , readOnly : Bool }"},"StatusTypes.StatusRec":{"args":[],"type":"{ server : StatusTypes.ServerRec, invalidConfigGroups : List String }"},"Navigation.Location":{"args":[],"type":"{ href : String , host : String , hostname : String , protocol : String , origin : String , port_ : String , pathname : String , search : String , hash : String , username : String , password : String }"},"Maintenance.Types.Model":{"args":[],"type":"RemoteData.WebData Maintenance.Types.SubModel"}},"message":"CoreTypes.Msg"},"versions":{"elm":"0.18.0"}}); } if (typeof define === "function" && define['amd']) diff --git a/public/styles.css b/public/styles.css index f2d6c3b7..73c3986c 100644 --- a/public/styles.css +++ b/public/styles.css @@ -366,14 +366,28 @@ p { } .lamassuAdminConfigTable .lamassuAdminBasicInputDisabled { - background-color: #fcfcfa; height: 25px; line-height: 25px; font-size: 14px; font-weight: 500; color: #5f5f56; - text-align: center; + text-align: left; + padding: 0 1em; cursor: default; + background: repeating-linear-gradient(45deg,#dfdfdc,#dfdfdc 2px,#e6e6e3 5px); +} + +.lamassuAdminConfigTable .lamassuAdminBasicInputReadOnly { + height: 25px; + line-height: 25px; + font-size: 14px; + font-weight: 500; + color: #5f5f56; + text-align: left; + padding: 0 1em; + cursor: default; + background-color: #f6f6f4; + border: 2px solid #E6E6E3; } .lamassuAdminConfigTable td {