1 |
- {"version":3,"file":"./js/index.d78ba9.bundle.js","mappings":"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","sources":["webpack://squeezelite-esp32/webpack/runtime/chunk loaded","webpack://squeezelite-esp32/./src/js/custom.js","webpack://squeezelite-esp32/./src/index.ts","webpack://squeezelite-esp32/webpack/bootstrap","webpack://squeezelite-esp32/webpack/runtime/compat get default export","webpack://squeezelite-esp32/webpack/runtime/define property getters","webpack://squeezelite-esp32/webpack/runtime/global","webpack://squeezelite-esp32/webpack/runtime/hasOwnProperty shorthand","webpack://squeezelite-esp32/webpack/runtime/make namespace object","webpack://squeezelite-esp32/webpack/runtime/node module decorator","webpack://squeezelite-esp32/webpack/runtime/jsonp chunk loading","webpack://squeezelite-esp32/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var he = require('he');\nvar Promise = require('es6-promise').Promise;\nwindow.bootstrap = require('bootstrap');\nimport Cookies from 'js-cookie';\n\n\n\nif (!String.prototype.format) {\n Object.assign(String.prototype, {\n format() {\n const args = arguments;\n return this.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined' ? args[number] : match;\n });\n },\n });\n}\nif (!String.prototype.encodeHTML) {\n Object.assign(String.prototype, {\n encodeHTML() {\n return he.encode(this).replace(/\\n/g, '<br />');\n },\n });\n}\nObject.assign(Date.prototype, {\n toLocalShort() {\n const opt = { dateStyle: 'short', timeStyle: 'short' };\n return this.toLocaleString(undefined, opt);\n },\n});\nfunction handleNVSVisible(){\n let nvs_previous_checked = isEnabled(Cookies.get(\"show-nvs\"));\n $('input#show-nvs')[0].checked = nvs_previous_checked ;\n if ($('input#show-nvs')[0].checked || recovery) {\n $('*[href*=\"-nvs\"]').show();\n } else {\n $('*[href*=\"-nvs\"]').hide();\n }\n}\n\n\nfunction isEnabled(val) {\n return val!=undefined && typeof val === 'string' && val.match(\"[Yy1]\");\n}\n\nconst nvsTypes = {\n NVS_TYPE_U8: 0x01,\n\n /*! < Type uint8_t */\n NVS_TYPE_I8: 0x11,\n\n /*! < Type int8_t */\n NVS_TYPE_U16: 0x02,\n\n /*! < Type uint16_t */\n NVS_TYPE_I16: 0x12,\n\n /*! < Type int16_t */\n NVS_TYPE_U32: 0x04,\n\n /*! < Type uint32_t */\n NVS_TYPE_I32: 0x14,\n\n /*! < Type int32_t */\n NVS_TYPE_U64: 0x08,\n\n /*! < Type uint64_t */\n NVS_TYPE_I64: 0x18,\n\n /*! < Type int64_t */\n NVS_TYPE_STR: 0x21,\n\n /*! < Type string */\n NVS_TYPE_BLOB: 0x42,\n\n /*! < Type blob */\n NVS_TYPE_ANY: 0xff /*! < Must be last */,\n};\nconst btIcons = {\n bt_playing: 'media_bluetooth_on',\n bt_disconnected: 'media_bluetooth_off',\n bt_neutral: 'bluetooth',\n bt_connecting: 'bluetooth_searching',\n bt_connected: 'bluetooth_connected',\n bt_disabled: 'bluetooth_disabled',\n play_arrow: 'play_circle_filled',\n pause: 'pause_circle',\n stop: 'stop_circle',\n '': '',\n};\nconst batIcons = [\n { icon: \"battery_0_bar\", ranges: [{ f: 5.8, t: 6.8 }, { f: 8.8, t: 10.2 }] },\n { icon: \"battery_2_bar\", ranges: [{ f: 6.8, t: 7.4 }, { f: 10.2, t: 11.1 }] },\n { icon: \"battery_3_bar\", ranges: [{ f: 7.4, t: 7.5 }, { f: 11.1, t: 11.25 }] },\n { icon: \"battery_4_bar\", ranges: [{ f: 7.5, t: 7.8 }, { f: 11.25, t: 11.7 }] }\n];\nconst btStateIcons = [\n { desc: 'Idle', sub: ['bt_neutral'] },\n { desc: 'Discovering', sub: ['bt_connecting'] },\n { desc: 'Discovered', sub: ['bt_connecting'] },\n { desc: 'Unconnected', sub: ['bt_disconnected'] },\n { desc: 'Connecting', sub: ['bt_connecting'] },\n {\n desc: 'Connected',\n sub: ['bt_connected', 'play_arrow', 'bt_playing', 'pause', 'stop'],\n },\n { desc: 'Disconnecting', sub: ['bt_disconnected'] },\n];\n\nconst pillcolors = {\n MESSAGING_INFO: 'badge-success',\n MESSAGING_WARNING: 'badge-warning',\n MESSAGING_ERROR: 'badge-danger',\n};\nconst connectReturnCode = {\n OK: 0,\n FAIL: 1,\n DISC: 2,\n LOST: 3,\n RESTORE: 4,\n ETH: 5\n}\nconst taskStates = {\n 0: 'eRunning',\n /*! < A task is querying the state of itself, so must be running. */\n 1: 'eReady',\n /*! < The task being queried is in a read or pending ready list. */\n 2: 'eBlocked',\n /*! < The task being queried is in the Blocked state. */\n 3: 'eSuspended',\n /*! < The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */\n 4: 'eDeleted',\n};\nlet flashState = {\n NONE: 0,\n REBOOT_TO_RECOVERY: 2,\n SET_FWURL: 5,\n FLASHING: 6,\n DONE: 7,\n UPLOADING: 8,\n ERROR: 9,\n UPLOADCOMPLETE: 10,\n _state: -1,\n olderRecovery: false,\n statusText: '',\n flashURL: '',\n flashFileName: '',\n statusPercent: 0,\n Completed: false,\n recovery: false,\n prevRecovery: false,\n updateModal: new bootstrap.Modal(document.getElementById('otadiv'), {}),\n reset: function () {\n\n this.olderRecovery = false;\n this.statusText = '';\n this.statusPercent = -1;\n this.flashURL = '';\n this.flashFileName = undefined;\n this.UpdateProgress();\n $('#rTable tr.release').removeClass('table-success table-warning');\n $('.flact').prop('disabled', false);\n $('#flashfilename').value = null;\n $('#fw-url-input').value = null;\n if(!this.isStateError()){\n $('span#flash-status').html('');\n $('#fwProgressLabel').parent().removeClass('bg-danger');\n }\n this._state = this.NONE\n return this;\n },\n isStateUploadComplete: function () {\n return this._state == this.UPLOADCOMPLETE;\n },\n isStateError: function () {\n return this._state == this.ERROR;\n },\n isStateNone: function () {\n return this._state == this.NONE;\n },\n isStateRebootRecovery: function () {\n return this._state == this.REBOOT_TO_RECOVERY;\n },\n isStateSetUrl: function () {\n return this._state == this.SET_FWURL;\n },\n isStateFlashing: function () {\n return this._state == this.FLASHING;\n },\n isStateDone: function () {\n return this._state == this.DONE;\n },\n isStateUploading: function () {\n return this._state == this.UPLOADING;\n },\n init: function () {\n this._state = this.NONE;\n return this;\n },\n\n SetStateError: function () {\n this._state = this.ERROR;\n $('#fwProgressLabel').parent().addClass('bg-danger');\n return this;\n },\n SetStateNone: function () {\n this._state = this.NONE;\n return this;\n },\n SetStateRebootRecovery: function () {\n this._state = this.REBOOT_TO_RECOVERY;\n // Reboot system to recovery mode\n this.SetStatusText('Starting recovery mode.')\n $.ajax({\n url: '/recovery.json',\n context: this,\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n error: function (xhr, _ajaxOptions, thrownError) {\n this.setOTAError(`Unexpected error while trying to restart to recovery. (status=${xhr.status ?? ''}, error=${thrownError ?? ''} ) `);\n },\n complete: function (response) {\n this.SetStatusText('Waiting for system to boot.')\n },\n });\n return this;\n },\n SetStateSetUrl: function () {\n this._state = this.SET_FWURL;\n this.statusText = 'Sending firmware download location.';\n let confData = {\n fwurl: {\n value: this.flashURL,\n type: 33,\n }\n };\n post_config(confData);\n return this;\n },\n SetStateFlashing: function () {\n this._state = this.FLASHING;\n return this;\n },\n SetStateDone: function () {\n this._state = this.DONE;\n this.reset();\n return this;\n },\n SetStateUploading: function () {\n this._state = this.UPLOADING;\n return this.SetStatusText('Sending file to device.');\n },\n SetStateUploadComplete: function () {\n this._state = this.UPLOADCOMPLETE;\n return this;\n },\n\n isFlashExecuting: function () {\n return true === (this._state != this.UPLOADING && (this.statusText !== '' || this.statusPercent >= 0));\n },\n\n\n\n toString: function () {\n let keys = Object.keys(this);\n return keys.find(x => this[x] === this._state);\n },\n\n setOTATargets: function () {\n this.flashURL = '';\n this.flashFileName = '';\n this.flashURL = $('#fw-url-input').val();\n let fileInput = $('#flashfilename')[0].files;\n if (fileInput.length > 0) {\n this.flashFileName = fileInput[0];\n }\n if (this.flashFileName.length == 0 && this.flashURL.length == 0) {\n this.setOTAError('Invalid url or file. Cannot start OTA');\n }\n return this;\n },\n\n setOTAError: function (message) {\n this.SetStateError().SetStatusPercent(0).SetStatusText(message).reset();\n return this;\n },\n\n ShowDialog: function () {\n if (!this.isStateNone()) {\n this.updateModal.show();\n $('.flact').prop('disabled', true);\n }\n return this;\n },\n\n SetStatusPercent: function (pct) {\n var pctChanged = (this.statusPercent != pct);\n this.statusPercent = pct;\n if (pctChanged) {\n if (!this.isStateUploading() && !this.isStateFlashing()) {\n this.SetStateFlashing();\n }\n if (pct == 100) {\n if (this.isStateFlashing()) {\n this.SetStateDone();\n }\n else if (this.isStateUploading()) {\n this.statusPercent = 0;\n this.SetStateFlashing();\n }\n }\n this.UpdateProgress().ShowDialog();\n }\n return this;\n },\n SetStatusText: function (txt) {\n var changed = (this.statusText != txt);\n this.statusText = txt;\n if (changed) {\n $('span#flash-status').html(this.statusText);\n this.ShowDialog();\n }\n\n return this;\n },\n UpdateProgress: function () {\n $('.progress-bar')\n .css('width', this.statusPercent + '%')\n .attr('aria-valuenow', this.statusPercent)\n .text(this.statusPercent + '%')\n $('.progress-bar').html((this.isStateDone() ? 100 : this.statusPercent) + '%');\n return this;\n },\n StartOTA: function () {\n this.logEvent(this.StartOTA.name);\n $('#fwProgressLabel').parent().removeClass('bg-danger');\n this.setOTATargets();\n if (this.isStateError()) {\n return this;\n }\n if (!recovery) {\n this.SetStateRebootRecovery();\n }\n else {\n this.SetStateFlashing().TargetReadyStartOTA();\n }\n\n return this;\n },\n UploadLocalFile: function () {\n this.SetStateUploading();\n const xhttp = new XMLHttpRequest();\n xhttp.context = this;\n var boundHandleUploadProgressEvent = this.HandleUploadProgressEvent.bind(this);\n var boundsetOTAError=this.setOTAError.bind(this);\n xhttp.upload.addEventListener(\"progress\",boundHandleUploadProgressEvent, false);\n xhttp.onreadystatechange = function () {\n if (xhttp.readyState === 4) {\n if (xhttp.status === 0 || xhttp.status === 404) {\n boundsetOTAError(`Upload Failed. Recovery version might not support uploading. Please use web update instead.`);\n }\n }\n };\n xhttp.open('POST', '/flash.json', true);\n xhttp.send(this.flashFileName);\n },\n TargetReadyStartOTA: function () {\n if (recovery && this.prevRecovery && !this.isStateRebootRecovery() && !this.isStateFlashing()) {\n // this should only execute once, while being in a valid state\n return this;\n }\n\n this.logEvent(this.TargetReadyStartOTA.name);\n if (!recovery) {\n console.error('Event TargetReadyStartOTA fired in the wrong mode ');\n return this;\n }\n this.prevRecovery = true;\n\n if (this.flashFileName !== '') {\n this.UploadLocalFile();\n }\n else if (this.flashURL != '') {\n this.SetStateSetUrl();\n }\n else {\n this.setOTAError('Invalid URL or file name while trying to start the OTa process')\n }\n },\n HandleUploadProgressEvent: function (data) {\n this.logEvent(this.HandleUploadProgressEvent.name);\n this.SetStateUploading().SetStatusPercent(Math.round(data.loaded / data.total * 100)).SetStatusText('Uploading file to device');\n },\n EventTargetStatus: function (data) {\n if (!this.isStateNone()) {\n this.logEvent(this.EventTargetStatus.name);\n }\n if (data.ota_pct ?? -1 >= 0) {\n this.olderRecovery = true;\n this.SetStatusPercent(data.ota_pct);\n }\n if ((data.ota_dsc ?? '') != '') {\n this.olderRecovery = true;\n this.SetStatusText(data.ota_dsc);\n }\n\n if (data.recovery != undefined) {\n this.recovery = data.recovery === 1 ? true : false;\n }\n if (this.isStateRebootRecovery() && this.recovery) {\n this.TargetReadyStartOTA();\n }\n },\n EventOTAMessageClass: function (data) {\n this.logEvent(this.EventOTAMessageClass.name);\n var otaData = JSON.parse(data);\n this.SetStatusPercent(otaData.ota_pct).SetStatusText(otaData.ota_dsc);\n },\n logEvent: function (fun) {\n console.log(`${fun}, flash state ${this.toString()}, recovery: ${this.recovery}, ota pct: ${this.statusPercent}, ota desc: ${this.statusText}`);\n }\n\n};\nwindow.hideSurrounding = function (obj) {\n $(obj).parent().parent().hide();\n}\n\nlet presetsloaded = false;\nlet is_i2c_locked = false;\nlet statusInterval = 2000;\nlet messageInterval = 2500;\nfunction post_config(data) {\n let confPayload = {\n timestamp: Date.now(),\n config: data\n };\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(confPayload),\n error: handleExceptionResponse,\n });\n}\n\n\nwindow.hFlash = function () {\n // reset file upload selection if any;\n $('#flashfilename').value = null\n flashState.StartOTA();\n}\nwindow.handleReboot = function (link) {\n if (link == 'reboot_ota') {\n $('#reboot_ota_nav').removeClass('active').prop(\"disabled\", true); delayReboot(500, '', 'reboot_ota');\n }\n else {\n $('#reboot_nav').removeClass('active'); delayReboot(500, '', link);\n }\n}\nfunction handlebtstate(data) {\n let icon = '';\n let tt = '';\n if (data.bt_status !== undefined && data.bt_sub_status !== undefined) {\n const iconindex = btStateIcons[data.bt_status].sub[data.bt_sub_status];\n if (iconindex) {\n icon = btIcons[iconindex];\n tt = btStateIcons[data.bt_status].desc;\n } else {\n icon = btIcons.bt_connected;\n tt = 'Output status';\n }\n }\n\n $('#o_type').attr('title', tt);\n $('#o_bt').html(icon);\n}\nfunction handleTemplateTypeRadio(outtype) {\n $('#o_type').children('span').css({ display: 'none' });\n if (outtype === 'bt') {\n output = 'bt';\n } else if (outtype === 'spdif') {\n output = 'spdif';\n } else {\n output = 'i2s';\n }\n $('#' + output).prop('checked', true);\n $('#o_' + output).css({ display: 'inline' });\n}\n\nfunction handleExceptionResponse(xhr, _ajaxOptions, thrownError) {\n console.log(xhr.status);\n console.log(thrownError);\n if (thrownError !== '') {\n showLocalMessage(thrownError, 'MESSAGING_ERROR');\n }\n}\nfunction HideCmdMessage(cmdname) {\n $('#toast_' + cmdname)\n .removeClass('table-success')\n .removeClass('table-warning')\n .removeClass('table-danger')\n .addClass('table-success')\n .removeClass('show');\n $('#msg_' + cmdname).html('');\n}\nfunction showCmdMessage(cmdname, msgtype, msgtext, append = false) {\n let color = 'table-success';\n if (msgtype === 'MESSAGING_WARNING') {\n color = 'table-warning';\n } else if (msgtype === 'MESSAGING_ERROR') {\n color = 'table-danger';\n }\n $('#toast_' + cmdname)\n .removeClass('table-success')\n .removeClass('table-warning')\n .removeClass('table-danger')\n .addClass(color)\n .addClass('show');\n let escapedtext = msgtext\n .substring(0, msgtext.length - 1)\n .encodeHTML()\n .replace(/\\n/g, '<br />');\n escapedtext =\n ($('#msg_' + cmdname).html().length > 0 && append\n ? $('#msg_' + cmdname).html() + '<br/>'\n : '') + escapedtext;\n $('#msg_' + cmdname).html(escapedtext);\n}\n\nlet releaseURL =\n 'https://api.github.com/repos/sle118/squeezelite-esp32/releases';\n\nlet recovery = false;\nlet messagesHeld = false;\nconst commandHeader = 'squeezelite -b 500:2000 -d all=info -C 30 -W';\n//let blockFlashButton = false;\nlet apList = null;\n//let selectedSSID = '';\n//let checkStatusInterval = null;\nlet messagecount = 0;\nlet messageseverity = 'MESSAGING_INFO';\nlet SystemConfig = {};\nlet LastCommandsState = null;\nvar output = '';\nlet hostName = '';\nlet versionName = 'Squeezelite-ESP32';\nlet prevmessage = '';\nlet project_name = versionName;\nlet board_model = '';\nlet platform_name = versionName;\nlet preset_name = '';\nlet btSinkNamesOptSel = '#cfg-audio-bt_source-sink_name';\nlet ConnectedTo = {};\nlet ConnectingToSSID = {};\nlet lmsBaseUrl;\nlet prevLMSIP = '';\nconst ConnectingToActions = {\n 'CONN': 0, 'MAN': 1, 'STS': 2,\n}\n\nPromise.prototype.delay = function (duration) {\n return this.then(\n function (value) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve(value);\n }, duration);\n });\n },\n function (reason) {\n return new Promise(function (_resolve, reject) {\n setTimeout(function () {\n reject(reason);\n }, duration);\n });\n }\n );\n};\n\nfunction getConfigJson(slimMode) {\n const config = {};\n $('input.nvs').each(function (_index, entry) {\n if (!slimMode) {\n const nvsType = parseInt(entry.attributes.nvs_type.value, 10);\n if (entry.id !== '') {\n config[entry.id] = {};\n if (\n nvsType === nvsTypes.NVS_TYPE_U8 ||\n nvsType === nvsTypes.NVS_TYPE_I8 ||\n nvsType === nvsTypes.NVS_TYPE_U16 ||\n nvsType === nvsTypes.NVS_TYPE_I16 ||\n nvsType === nvsTypes.NVS_TYPE_U32 ||\n nvsType === nvsTypes.NVS_TYPE_I32 ||\n nvsType === nvsTypes.NVS_TYPE_U64 ||\n nvsType === nvsTypes.NVS_TYPE_I64\n ) {\n config[entry.id].value = parseInt(entry.value);\n } else {\n config[entry.id].value = entry.value;\n }\n config[entry.id].type = nvsType;\n }\n } else {\n config[entry.id] = entry.value;\n }\n });\n const key = $('#nvs-new-key').val();\n const val = $('#nvs-new-value').val();\n if (key !== '') {\n if (!slimMode) {\n config[key] = {};\n config[key].value = val;\n config[key].type = 33;\n } else {\n config[key] = val;\n }\n }\n return config;\n}\n\nfunction handleHWPreset(allfields, reboot) {\n\n const selJson = JSON.parse(allfields[0].value);\n var cmd = allfields[0].attributes.cmdname.value;\n\n console.log(`selected model: ${selJson.name}`);\n let confPayload = {\n timestamp: Date.now(),\n config: { model_config: { value: selJson.name, type: 33 } }\n };\n for (const [name, value] of Object.entries(selJson.config)) {\n const storedval = (typeof value === 'string' || value instanceof String) ? value : JSON.stringify(value);\n confPayload.config[name] = {\n value: storedval,\n type: 33,\n }\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Setting ${name}=${storedval} `,\n true\n );\n }\n\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Committing `,\n true\n );\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(confPayload),\n error: function (xhr, _ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, _ajaxOptions, thrownError);\n showCmdMessage(\n cmd,\n 'MESSAGING_ERROR',\n `Unexpected error ${(thrownError !== '') ? thrownError : 'with return status = ' + xhr.status} `,\n true\n );\n },\n success: function (response) {\n showCmdMessage(\n cmd,\n 'MESSAGING_INFO',\n `Saving complete `,\n true\n );\n console.log(response);\n if (reboot) {\n delayReboot(2500, cmd);\n }\n },\n });\n\n\n\n\n\n}\n\n\n// pull json file from https://gist.githubusercontent.com/sle118/dae585e157b733a639c12dc70f0910c5/raw/b462691f69e2ad31ac95c547af6ec97afb0f53db/squeezelite-esp32-presets.json and\nfunction loadPresets() {\n if ($(\"#cfg-hw-preset-model_config\").length == 0) return;\n if (presetsloaded) return;\n presetsloaded = true;\n $('#cfg-hw-preset-model_config').html('<option>--</option>');\n $.getJSON(\n 'https://gist.githubusercontent.com/sle118/dae585e157b733a639c12dc70f0910c5/raw/',\n { _: new Date().getTime() },\n function (data) {\n $.each(data, function (key, val) {\n $('#cfg-hw-preset-model_config').append(`<option value='${JSON.stringify(val).replace(/\"/g, '\\\"').replace(/\\'/g, '\\\"')}'>${val.name}</option>`);\n if (preset_name !== '' && preset_name == val.name) {\n $('#cfg-hw-preset-model_config').val(preset_name);\n }\n });\n if (preset_name !== '') {\n ('#prev_preset').show().val(preset_name);\n }\n }\n\n ).fail(function (jqxhr, textStatus, error) {\n const err = textStatus + ', ' + error;\n console.log('Request Failed: ' + err);\n }\n );\n}\n\nfunction delayReboot(duration, cmdname, ota = 'reboot') {\n const url = '/' + ota + '.json';\n $('tbody#tasks').empty();\n $('#tasks_sect').css('visibility', 'collapse');\n Promise.resolve({ cmdname: cmdname, url: url })\n .delay(duration)\n .then(function (data) {\n if (data.cmdname.length > 0) {\n showCmdMessage(\n data.cmdname,\n 'MESSAGING_WARNING',\n 'System is rebooting.\\n',\n true\n );\n } else {\n showLocalMessage('System is rebooting.\\n', 'MESSAGING_WARNING');\n }\n console.log('now triggering reboot');\n $(\"button[onclick*='handleReboot']\").addClass('rebooting');\n $.ajax({\n url: data.url,\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n error: handleExceptionResponse,\n complete: function () {\n console.log('reboot call completed');\n Promise.resolve(data)\n .delay(6000)\n .then(function (rdata) {\n if (rdata.cmdname.length > 0) {\n HideCmdMessage(rdata.cmdname);\n }\n getCommands();\n getConfig();\n });\n },\n });\n });\n}\n// eslint-disable-next-line no-unused-vars\nwindow.saveAutoexec1 = function (apply) {\n showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Saving.\\n', false);\n let commandLine = commandHeader + ' -n \"' + $('#player').val() + '\"';\n if (output === 'bt') {\n commandLine += ' -o \"BT\" -R -Z 192000';\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_INFO',\n 'Remember to configure the Bluetooth audio device name.\\n',\n true\n );\n } else if (output === 'spdif') {\n commandLine += ' -o SPDIF -Z 192000';\n } else {\n commandLine += ' -o I2S';\n }\n if ($('#optional').val() !== '') {\n commandLine += ' ' + $('#optional').val();\n }\n const data = {\n timestamp: Date.now(),\n };\n data.config = {\n autoexec1: { value: commandLine, type: 33 },\n autoexec: {\n value: $('#disable-squeezelite').prop('checked') ? '0' : '1',\n type: 33,\n },\n };\n\n $.ajax({\n url: '/config.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(data),\n error: handleExceptionResponse,\n complete: function (response) {\n if (\n response.responseText &&\n JSON.parse(response.responseText).result === 'OK'\n ) {\n showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Done.\\n', true);\n if (apply) {\n delayReboot(1500, 'cfg-audio-tmpl');\n }\n } else if (JSON.parse(response.responseText).result) {\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_WARNING',\n JSON.parse(response.responseText).Result + '\\n',\n true\n );\n } else {\n showCmdMessage(\n 'cfg-audio-tmpl',\n 'MESSAGING_ERROR',\n response.statusText + '\\n'\n );\n }\n console.log(response.responseText);\n },\n });\n console.log('sent data:', JSON.stringify(data));\n}\nwindow.handleDisconnect = function () {\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'DELETE',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n });\n}\nfunction setPlatformFilter(val) {\n if ($('.upf').filter(function () { return $(this).text().toUpperCase() === val.toUpperCase() }).length > 0) {\n $('#splf').val(val).trigger('input');\n return true;\n }\n return false;\n}\nwindow.handleConnect = function () {\n ConnectingToSSID.ssid = $('#manual_ssid').val();\n ConnectingToSSID.pwd = $('#manual_pwd').val();\n ConnectingToSSID.dhcpname = $('#dhcp-name2').val();\n $(\"*[class*='connecting']\").hide();\n $('#ssid-wait').text(ConnectingToSSID.ssid);\n $('.connecting').show();\n\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n ssid: ConnectingToSSID.ssid,\n pwd: ConnectingToSSID.pwd\n }),\n error: handleExceptionResponse,\n });\n\n // now we can re-set the intervals regardless of result\n\n}\n$(document).ready(function () {\n handleNVSVisible();\n flashState.init();\n $('#fw-url-input').on('input', function () {\n if ($(this).val().length > 8 && ($(this).val().startsWith('http://') || $(this).val().startsWith('https://'))) {\n $('#start-flash').show();\n }\n else {\n $('#start-flash').hide();\n }\n });\n $('.upSrch').on('input', function () {\n const val = this.value;\n $(\"#rTable tr\").removeClass(this.id + '_hide');\n if (val.length > 0) {\n $(`#rTable td:nth-child(${$(this).parent().index() + 1})`).filter(function () {\n return !$(this).text().toUpperCase().includes(val.toUpperCase());\n }).parent().addClass(this.id + '_hide');\n }\n $('[class*=\"_hide\"]').hide();\n $('#rTable tr').not('[class*=\"_hide\"]').show()\n\n });\n setTimeout(refreshAP, 1500);\n\n $('#WifiConnectDialog')[0].addEventListener('shown.bs.modal', function (event) {\n $(\"*[class*='connecting']\").hide();\n\n if (event?.relatedTarget) {\n ConnectingToSSID.Action = ConnectingToActions.CONN;\n if ($(event.relatedTarget).children('td:eq(1)').text() == ConnectedTo.ssid) {\n ConnectingToSSID.Action = ConnectingToActions.STS;\n }\n else {\n if (!$(event.relatedTarget).is(':last-child')) {\n ConnectingToSSID.ssid = $(event.relatedTarget).children('td:eq(1)').text();\n $('#manual_ssid').val(ConnectingToSSID.ssid);\n }\n else {\n ConnectingToSSID.Action = ConnectingToActions.MAN;\n ConnectingToSSID.ssid = '';\n $('#manual_ssid').val(ConnectingToSSID.ssid);\n }\n }\n }\n\n\n if (ConnectingToSSID.Action !== ConnectingToActions.STS) {\n $('.connecting-init').show();\n $('#manual_ssid').trigger('focus');\n }\n else {\n handleWifiDialog();\n }\n });\n\n $('#WifiConnectDialog')[0].addEventListener('hidden.bs.modal', function () {\n $('#WifiConnectDialog input').val('');\n });\n\n $('#uCnfrm')[0].addEventListener('shown.bs.modal', function () {\n $('#selectedFWURL').text($('#fw-url-input').val());\n });\n\n $('input#show-commands')[0].checked = LastCommandsState === 1;\n $('a[href^=\"#tab-commands\"]').hide();\n $('#load-nvs').on('click', function () {\n $('#nvsfilename').trigger('click');\n });\n $('#nvsfilename').on('change', function () {\n if (typeof window.FileReader !== 'function') {\n throw \"The file API isn't supported on this browser.\";\n }\n if (!this.files) {\n throw 'This browser does not support the `files` property of the file input.';\n }\n if (!this.files[0]) {\n return undefined;\n }\n\n const file = this.files[0];\n let fr = new FileReader();\n fr.onload = function (e) {\n let data = {};\n try {\n data = JSON.parse(e.target.result);\n } catch (ex) {\n alert('Parsing failed!\\r\\n ' + ex);\n }\n $('input.nvs').each(function (_index, entry) {\n $(this).parent().removeClass('bg-warning').removeClass('bg-success');\n if (data[entry.id]) {\n if (data[entry.id] !== entry.value) {\n console.log(\n 'Changed ' + entry.id + ' ' + entry.value + '==>' + data[entry.id]\n );\n $(this).parent().addClass('bg-warning');\n $(this).val(data[entry.id]);\n }\n else {\n $(this).parent().addClass('bg-success');\n }\n }\n });\n var changed = $(\"input.nvs\").children('.bg-warning');\n if (changed) {\n alert('Highlighted values were changed. Press Commit to change on the device');\n }\n }\n fr.readAsText(file);\n this.value = null;\n\n }\n );\n $('#clear-syslog').on('click', function () {\n messagecount = 0;\n messageseverity = 'MESSAGING_INFO';\n $('#msgcnt').text('');\n $('#syslogTable').html('');\n });\n\n $('#ok-credits').on('click', function () {\n $('#credits').slideUp('fast', function () { });\n $('#app').slideDown('fast', function () { });\n });\n\n $('#acredits').on('click', function (event) {\n event.preventDefault();\n $('#app').slideUp('fast', function () { });\n $('#credits').slideDown('fast', function () { });\n });\n\n $('input#show-commands').on('click', function () {\n this.checked = this.checked ? 1 : 0;\n if (this.checked) {\n $('a[href^=\"#tab-commands\"]').show();\n LastCommandsState = 1;\n } else {\n LastCommandsState = 0;\n $('a[href^=\"#tab-commands\"]').hide();\n }\n });\n\n $('input#show-nvs').on('click', function () {\n this.checked = this.checked ? 1 : 0;\n Cookies.set(\"show-nvs\", this.checked?'Y':'N');\n handleNVSVisible();\n });\n $('#btn_reboot_recovery').on('click', function () {\n handleReboot('recovery');\n });\n $('#btn_reboot').on('click', function () {\n handleReboot('reboot');\n });\n $('#btn_flash').on('click', function () {\n hFlash();\n });\n $('#save-autoexec1').on('click', function () {\n saveAutoexec1(false);\n });\n $('#commit-autoexec1').on('click', function () {\n saveAutoexec1(true);\n });\n $('#btn_disconnect').on('click', function () {\n ConnectedTo={};\n refreshAPHTML2();\n $.ajax({\n url: '/connect.json',\n dataType: 'text',\n method: 'DELETE',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify({\n timestamp: Date.now(),\n }),\n });\n });\n $('#btnJoin').on('click', function () {\n handleConnect();\n });\n $('#reboot_nav').on('click', function () {\n handleReboot('reboot');\n });\n $('#reboot_ota_nav').on('click', function () {\n handleReboot('reboot_ota');\n });\n\n $('#save-as-nvs').on('click', function () {\n const config = getConfigJson(true);\n const a = document.createElement('a');\n a.href = URL.createObjectURL(\n new Blob([JSON.stringify(config, null, 2)], {\n type: 'text/plain',\n })\n );\n a.setAttribute(\n 'download',\n 'nvs_config_' + hostName + '_' + Date.now() + 'json'\n );\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n });\n\n $('#save-nvs').on('click', function () {\n post_config(getConfigJson(false));\n });\n\n $('#fwUpload').on('click', function () {\n const fileInput = document.getElementById('flashfilename').files;\n if (fileInput.length === 0) {\n alert('No file selected!');\n } else {\n $('#fw-url-input').value = null;\n flashState.StartOTA();\n }\n\n });\n $('[name=output-tmpl]').on('click', function () {\n handleTemplateTypeRadio(this.id);\n });\n\n $('#chkUpdates').on('click', function () {\n $('#rTable').html('');\n $.getJSON(releaseURL, function (data) {\n let i = 0;\n const branches = [];\n data.forEach(function (release) {\n const namecomponents = release.name.split('#');\n const branch = namecomponents[3];\n if (!branches.includes(branch)) {\n branches.push(branch);\n }\n });\n let fwb = '';\n branches.forEach(function (branch) {\n fwb += '<option value=\"' + branch + '\">' + branch + '</option>';\n });\n $('#fwbranch').append(fwb);\n\n data.forEach(function (release) {\n let url = '';\n release.assets.forEach(function (asset) {\n if (asset.name.match(/\\.bin$/)) {\n url = asset.browser_download_url;\n }\n });\n const namecomponents = release.name.split('#');\n const ver = namecomponents[0];\n const cfg = namecomponents[2];\n const branch = namecomponents[3];\n var bits = ver.substr(ver.lastIndexOf('-') + 1);\n bits = (bits == '32' || bits == '16') ? bits : '';\n\n let body = release.body;\n body = body.replace(/'/gi, '\"');\n body = body.replace(\n /[\\s\\S]+(### Revision Log[\\s\\S]+)### ESP-IDF Version Used[\\s\\S]+/,\n '$1'\n );\n body = body.replace(/- \\(.+?\\) /g, '- ').encodeHTML();\n $('#rTable').append(`<tr class='release ' fwurl='${url}'>\n <td data-bs-toggle='tooltip' title='${body}'>${ver}</td><td>${new Date(release.created_at).toLocalShort()}\n </td><td class='upf'>${cfg}</td><td>${branch}</td><td>${bits}</td></tr>`\n );\n });\n if (i > 7) {\n $('#releaseTable').append(\n \"<tr id='showall'>\" +\n \"<td colspan='6'>\" +\n \"<input type='button' id='showallbutton' class='btn btn-info' value='Show older releases' />\" +\n '</td>' +\n '</tr>'\n );\n $('#showallbutton').on('click', function () {\n $('tr.hide').removeClass('hide');\n $('tr#showall').addClass('hide');\n });\n }\n $('#searchfw').css('display', 'inline');\n if (!setPlatformFilter(platform_name)) {\n setPlatformFilter(project_name)\n }\n $('#rTable tr.release').on('click', function () {\n var url = this.attributes['fwurl'].value;\n if (lmsBaseUrl) {\n url = url.replace(/.*\\/download\\//, lmsBaseUrl + '/plugins/SqueezeESP32/firmware/');\n }\n $('#fw-url-input').val(url);\n $('#start-flash').show();\n $('#rTable tr.release').removeClass('table-success table-warning');\n $(this).addClass('table-success table-warning');\n });\n\n }).fail(function () {\n alert('failed to fetch release history!');\n });\n });\n $('#fwcheck').on('click', function () {\n $('#releaseTable').html('');\n $('#fwbranch').empty();\n $.getJSON(releaseURL, function (data) {\n let i = 0;\n const branches = [];\n data.forEach(function (release) {\n const namecomponents = release.name.split('#');\n const branch = namecomponents[3];\n if (!branches.includes(branch)) {\n branches.push(branch);\n }\n });\n let fwb;\n branches.forEach(function (branch) {\n fwb += '<option value=\"' + branch + '\">' + branch + '</option>';\n });\n $('#fwbranch').append(fwb);\n\n data.forEach(function (release) {\n let url = '';\n release.assets.forEach(function (asset) {\n if (asset.name.match(/\\.bin$/)) {\n url = asset.browser_download_url;\n }\n });\n const namecomponents = release.name.split('#');\n const ver = namecomponents[0];\n const idf = namecomponents[1];\n const cfg = namecomponents[2];\n const branch = namecomponents[3];\n\n let body = release.body;\n body = body.replace(/'/gi, '\"');\n body = body.replace(\n /[\\s\\S]+(### Revision Log[\\s\\S]+)### ESP-IDF Version Used[\\s\\S]+/,\n '$1'\n );\n body = body.replace(/- \\(.+?\\) /g, '- ');\n const trclass = i++ > 6 ? ' hide' : '';\n $('#releaseTable').append(\n \"<tr class='release\" +\n trclass +\n \"'>\" +\n \"<td data-bs-toggle='tooltip' title='\" +\n body +\n \"'>\" +\n ver +\n '</td>' +\n '<td>' +\n new Date(release.created_at).toLocalShort() +\n '</td>' +\n '<td>' +\n cfg +\n '</td>' +\n '<td>' +\n idf +\n '</td>' +\n '<td>' +\n branch +\n '</td>' +\n \"<td><input type='button' class='btn btn-success' value='Select' data-bs-url='\" +\n url +\n \"' onclick='setURL(this);' /></td>\" +\n '</tr>'\n );\n });\n if (i > 7) {\n $('#releaseTable').append(\n \"<tr id='showall'>\" +\n \"<td colspan='6'>\" +\n \"<input type='button' id='showallbutton' class='btn btn-info' value='Show older releases' />\" +\n '</td>' +\n '</tr>'\n );\n $('#showallbutton').on('click', function () {\n $('tr.hide').removeClass('hide');\n $('tr#showall').addClass('hide');\n });\n }\n $('#searchfw').css('display', 'inline');\n }).fail(function () {\n alert('failed to fetch release history!');\n });\n });\n\n $('#updateAP').on('click', function () {\n refreshAP();\n console.log('refresh AP');\n });\n\n // first time the page loads: attempt to get the connection status and start the wifi scan\n getConfig();\n getCommands();\n getMessages();\n checkStatus();\n\n});\n\n// eslint-disable-next-line no-unused-vars\nwindow.setURL = function (button) {\n let url = button.dataset.url;\n\n $('[data-bs-url^=\"http\"]')\n .addClass('btn-success')\n .removeClass('btn-danger');\n $('[data-bs-url=\"' + url + '\"]')\n .addClass('btn-danger')\n .removeClass('btn-success');\n\n // if user can proxy download through LMS, modify the URL\n if (lmsBaseUrl) {\n url = url.replace(/.*\\/download\\//, lmsBaseUrl + '/plugins/SqueezeESP32/firmware/');\n }\n\n $('#fwurl').val(url);\n}\n\n\nfunction rssiToIcon(rssi) {\n if (rssi >= -55) {\n return `signal_wifi_statusbar_4_bar`;\n } else if (rssi >= -60) {\n return `network_wifi_3_bar`;\n } else if (rssi >= -65) {\n return `network_wifi_2_bar`;\n } else if (rssi >= -70) {\n return `network_wifi_1_bar`;\n } else {\n return `signal_wifi_statusbar_null`;\n }\n}\n\nfunction refreshAP() {\n if (ConnectedTo?.urc === connectReturnCode.ETH) return;\n $.getJSON('/scan.json', async function () {\n await sleep(2000);\n $.getJSON('/ap.json', function (data) {\n if (data.length > 0) {\n // sort by signal strength\n data.sort(function (a, b) {\n const x = a.rssi;\n const y = b.rssi;\n // eslint-disable-next-line no-nested-ternary\n return x < y ? 1 : x > y ? -1 : 0;\n });\n apList = data;\n refreshAPHTML2(apList);\n\n }\n });\n });\n}\nfunction formatAP(ssid, rssi, auth) {\n return `<tr data-bs-toggle=\"modal\" data-bs-target=\"#WifiConnectDialog\"><td></td><td>${ssid}</td><td>\n <span class=\"material-icons\" style=\"fill:white; display: inline\" >${rssiToIcon(rssi)}</span>\n \t</td><td>\n <span class=\"material-icons\">${(auth == 0 ? 'no_encryption' : 'lock')}</span>\n </td></tr>`;\n}\nfunction refreshAPHTML2(data) {\n let h = '';\n $('#wifiTable tr td:first-of-type').text('');\n $('#wifiTable tr').removeClass('table-success table-warning');\n if (data) {\n data.forEach(function (e) {\n h += formatAP(e.ssid, e.rssi, e.auth);\n });\n $('#wifiTable').html(h);\n }\n if ($('.manual_add').length == 0) {\n $('#wifiTable').append(formatAP('Manual add', 0, 0));\n $('#wifiTable tr:last').addClass('table-light text-dark').addClass('manual_add');\n }\n if (ConnectedTo.ssid && (ConnectedTo.urc === connectReturnCode.OK || ConnectedTo.urc === connectReturnCode.RESTORE)) {\n const wifiSelector = `#wifiTable td:contains(\"${ConnectedTo.ssid}\")`;\n if ($(wifiSelector).filter(function () { return $(this).text() === ConnectedTo.ssid; }).length == 0) {\n $('#wifiTable').prepend(`${formatAP(ConnectedTo.ssid, ConnectedTo.rssi ?? 0, 0)}`);\n }\n $(wifiSelector).filter(function () { return $(this).text() === ConnectedTo.ssid; }).siblings().first().html('✓').parent().addClass((ConnectedTo.urc === connectReturnCode.OK ? 'table-success' : 'table-warning'));\n $('span#foot-if').html(`SSID: <strong>${ConnectedTo.ssid}</strong>, IP: <strong>${ConnectedTo.ip}</strong>`);\n $('#wifiStsIcon').html(rssiToIcon(ConnectedTo.rssi));\n\n }\n else if (ConnectedTo?.urc !== connectReturnCode.ETH) {\n $('span#foot-if').html('');\n }\n\n}\nfunction refreshETH() {\n\n if (ConnectedTo.urc === connectReturnCode.ETH) {\n $('span#foot-if').html(`Network: Ethernet, IP: <strong>${ConnectedTo.ip}</strong>`);\n }\n}\nfunction showTask(task) {\n console.debug(\n this.toLocaleString() +\n '\\t' +\n task.nme +\n '\\t' +\n task.cpu +\n '\\t' +\n taskStates[task.st] +\n '\\t' +\n task.minstk +\n '\\t' +\n task.bprio +\n '\\t' +\n task.cprio +\n '\\t' +\n task.num\n );\n $('tbody#tasks').append(\n '<tr class=\"table-primary\"><th scope=\"row\">' +\n task.num +\n '</th><td>' +\n task.nme +\n '</td><td>' +\n task.cpu +\n '</td><td>' +\n taskStates[task.st] +\n '</td><td>' +\n task.minstk +\n '</td><td>' +\n task.bprio +\n '</td><td>' +\n task.cprio +\n '</td></tr>'\n );\n}\nfunction btExists(name) {\n return getBTSinkOpt(name).length > 0;\n}\nfunction getBTSinkOpt(name) {\n return $(`${btSinkNamesOptSel} option:contains('${name}')`);\n}\nfunction getMessages() {\n $.getJSON('/messages.json', async function (data) {\n for (const msg of data) {\n const msgAge = msg.current_time - msg.sent_time;\n var msgTime = new Date();\n msgTime.setTime(msgTime.getTime() - msgAge);\n switch (msg.class) {\n case 'MESSAGING_CLASS_OTA':\n flashState.EventOTAMessageClass(msg.message);\n break;\n case 'MESSAGING_CLASS_STATS':\n // for task states, check structure : task_state_t\n var statsData = JSON.parse(msg.message);\n console.debug(\n msgTime.toLocalShort() +\n ' - Number of running tasks: ' +\n statsData.ntasks\n );\n console.debug(\n msgTime.toLocalShort() +\n '\\tname' +\n '\\tcpu' +\n '\\tstate' +\n '\\tminstk' +\n '\\tbprio' +\n '\\tcprio' +\n '\\tnum'\n );\n if (statsData.tasks) {\n if ($('#tasks_sect').css('visibility') === 'collapse') {\n $('#tasks_sect').css('visibility', 'visible');\n }\n $('tbody#tasks').html('');\n statsData.tasks\n .sort(function (a, b) {\n return b.cpu - a.cpu;\n })\n .forEach(showTask, msgTime);\n } else if ($('#tasks_sect').css('visibility') === 'visible') {\n $('tbody#tasks').empty();\n $('#tasks_sect').css('visibility', 'collapse');\n }\n break;\n case 'MESSAGING_CLASS_SYSTEM':\n showMessage(msg, msgTime);\n break;\n case 'MESSAGING_CLASS_CFGCMD':\n var msgparts = msg.message.split(/([^\\n]*)\\n(.*)/gs);\n showCmdMessage(msgparts[1], msg.type, msgparts[2], true);\n break;\n case 'MESSAGING_CLASS_BT':\n if ($(\"#cfg-audio-bt_source-sink_name\").is('input')) {\n var attr = $(\"#cfg-audio-bt_source-sink_name\")[0].attributes;\n var attrs = '';\n for (var j = 0; j < attr.length; j++) {\n if (attr.item(j).name != \"type\") {\n attrs += `${attr.item(j).name} = \"${attr.item(j).value}\" `;\n }\n }\n var curOpt = $(\"#cfg-audio-bt_source-sink_name\")[0].value;\n $(\"#cfg-audio-bt_source-sink_name\").replaceWith(`<select id=\"cfg-audio-bt_source-sink_name\" ${attrs}><option value=\"${curOpt}\" data-bs-description=\"${curOpt}\">${curOpt}</option></select> `);\n }\n JSON.parse(msg.message).forEach(function (btEntry) {\n //<input type=\"text\" class=\"form-control bg-success\" placeholder=\"name\" hasvalue=\"true\" longopts=\"sink_name\" shortopts=\"n\" checkbox=\"false\" cmdname=\"cfg-audio-bt_source\" id=\"cfg-audio-bt_source-sink_name\" name=\"cfg-audio-bt_source-sink_name\">\n //<select hasvalue=\"true\" longopts=\"jack_behavior\" shortopts=\"j\" checkbox=\"false\" cmdname=\"cfg-audio-general\" id=\"cfg-audio-general-jack_behavior\" name=\"cfg-audio-general-jack_behavior\" class=\"form-control \"><option>--</option><option>Headphones</option><option>Subwoofer</option></select> \n if (!btExists(btEntry.name)) {\n $(\"#cfg-audio-bt_source-sink_name\").append(`<option>${btEntry.name}</option>`);\n showMessage({ type: msg.type, message: `BT Audio device found: ${btEntry.name} RSSI: ${btEntry.rssi} ` }, msgTime);\n }\n getBTSinkOpt(btEntry.name).attr('data-bs-description', `${btEntry.name} (${btEntry.rssi}dB)`)\n .attr('rssi', btEntry.rssi)\n .attr('value', btEntry.name)\n .text(`${btEntry.name} [${btEntry.rssi}dB]`).trigger('change');\n\n });\n $(btSinkNamesOptSel).append($(`${btSinkNamesOptSel} option`).remove().sort(function (a, b) {\n console.log(`${parseInt($(a).attr('rssi'))} < ${parseInt($(b).attr('rssi'))} ? `);\n return parseInt($(a).attr('rssi')) < parseInt($(b).attr('rssi')) ? 1 : -1;\n }));\n break;\n default:\n break;\n }\n }\n setTimeout(getMessages,messageInterval);\n }).fail(function (xhr, ajaxOptions, thrownError) {\n \n if (xhr.status == 404) {\n $('.orec').hide(); // system commands won't be available either\n messagesHeld = true;\n }\n else {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n }\n if(xhr.status == 0 && xhr.readyState ==0){\n // probably a timeout. Target is rebooting? \n setTimeout(getMessages,messageInterval*2); // increase duration if a failure happens\n }\n else if(!messagesHeld){\n // 404 here means we rebooted to an old recovery\n setTimeout(getMessages,messageInterval); // increase duration if a failure happens\n }\n \n }\n );\n\n /*\n Minstk is minimum stack space left\nBprio is base priority\ncprio is current priority\nnme is name\nst is task state. I provided a \"typedef\" that you can use to convert to text\ncpu is cpu percent used\n*/\n}\nfunction handleRecoveryMode(data) {\n const locRecovery = data.recovery ?? 0;\n if (locRecovery === 1) {\n recovery = true;\n $('.recovery_element').show();\n $('.ota_element').hide();\n $('#boot-button').html('Reboot');\n $('#boot-form').attr('action', '/reboot_ota.json');\n } else {\n if(!recovery && messagesHeld){\n messagesHeld=false;\n setTimeout(getMessages,messageInterval); // increase duration if a failure happens\n }\n recovery = false;\n \n $('.recovery_element').hide();\n $('.ota_element').show();\n $('#boot-button').html('Recovery');\n $('#boot-form').attr('action', '/recovery.json');\n }\n \n}\n\nfunction hasConnectionChanged(data) {\n // gw: \"192.168.10.1\"\n // ip: \"192.168.10.225\"\n // netmask: \"255.255.255.0\"\n // ssid: \"MyTestSSID\"\n\n return (data.urc !== ConnectedTo.urc ||\n data.ssid !== ConnectedTo.ssid ||\n data.gw !== ConnectedTo.gw ||\n data.netmask !== ConnectedTo.netmask ||\n data.ip !== ConnectedTo.ip || data.rssi !== ConnectedTo.rssi)\n}\nfunction handleWifiDialog(data) {\n if ($('#WifiConnectDialog').is(':visible')) {\n if (ConnectedTo.ip) {\n $('#ipAddress').text(ConnectedTo.ip);\n }\n if (ConnectedTo.ssid) {\n $('#connectedToSSID').text(ConnectedTo.ssid);\n }\n if (ConnectedTo.gw) {\n $('#gateway').text(ConnectedTo.gw);\n }\n if (ConnectedTo.netmask) {\n $('#netmask').text(ConnectedTo.netmask);\n }\n if (ConnectingToSSID.Action === undefined || (ConnectingToSSID.Action && ConnectingToSSID.Action == ConnectingToActions.STS)) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-status').show();\n }\n if (SystemConfig.ap_ssid) {\n $('#apName').text(SystemConfig.ap_ssid.value);\n }\n if (SystemConfig.ap_pwd) {\n $('#apPass').text(SystemConfig.ap_pwd.value);\n }\n if (!data) {\n return;\n }\n else {\n switch (data.urc) {\n case connectReturnCode.OK:\n if (data.ssid && data.ssid === ConnectingToSSID.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-success').show();\n ConnectingToSSID.Action = ConnectingToActions.STS;\n }\n break;\n case connectReturnCode.FAIL:\n // \n if (ConnectingToSSID.Action != ConnectingToActions.STS && ConnectingToSSID.ssid == data.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-fail').show();\n }\n break;\n case connectReturnCode.LOST:\n\n break;\n case connectReturnCode.RESTORE:\n if (ConnectingToSSID.Action != ConnectingToActions.STS && ConnectingToSSID.ssid != data.ssid) {\n $(\"*[class*='connecting']\").hide();\n $('.connecting-fail').show();\n }\n break;\n case connectReturnCode.DISC:\n // that's a manual disconnect\n // if ($('#wifi-status').is(':visible')) {\n // $('#wifi-status').slideUp('fast', function() {});\n // $('span#foot-wifi').html('');\n\n // } \n break;\n default:\n break;\n }\n }\n\n }\n}\nfunction handleNetworkStatus(data) {\n if (hasConnectionChanged(data) || !data.urc) {\n ConnectedTo = data;\n $(\".if_eth\").hide();\n $('.if_wifi').hide();\n if (!data.urc || ConnectedTo.urc != connectReturnCode.ETH) {\n $('.if_wifi').show();\n refreshAPHTML2();\n }\n else {\n $(\".if_eth\").show();\n refreshETH();\n }\n\n }\n handleWifiDialog(data);\n}\n\n\n\nfunction batteryToIcon(voltage) {\n /* Assuming Li-ion 18650s as a power source, 3.9V per cell, or above is treated\n as full charge (>75% of capacity). 3.4V is empty. The gauge is loosely\n following the graph here:\n https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages\n using the 0.2C discharge profile for the rest of the values.\n*/\n\n for (const iconEntry of batIcons) {\n for (const entryRanges of iconEntry.ranges) {\n if (inRange(voltage, entryRanges.f, entryRanges.t)) {\n return iconEntry.icon;\n }\n }\n }\n\n\n return \"battery_full\";\n}\nfunction checkStatus() {\n\n $.getJSON('/status.json', function (data) {\n handleRecoveryMode(data);\n handleNVSVisible();\n handleNetworkStatus(data);\n handlebtstate(data);\n flashState.EventTargetStatus(data);\n\n if (data.project_name && data.project_name !== '') {\n project_name = data.project_name;\n }\n if (data.platform_name && data.platform_name !== '') {\n platform_name = data.platform_name;\n }\n if (board_model === '') board_model = project_name;\n if (board_model === '') board_model = 'Squeezelite-ESP32';\n if (data.version && data.version !== '') {\n versionName = data.version;\n $(\"#navtitle\").html(`${board_model}${recovery ? '<br>[recovery]' : ''}`);\n $('span#foot-fw').html(`fw: <strong>${versionName}</strong>, mode: <strong>${recovery ? \"Recovery\" : project_name}</strong>`);\n } else {\n $('span#flash-status').html('');\n }\n if (data.Voltage) {\n $('#battery').html(`${batteryToIcon(data.Voltage)}`);\n $('#battery').show();\n } else {\n $('#battery').hide();\n }\n if ((data.message ?? '') != '' && prevmessage != data.message) {\n // supporting older recovery firmwares - messages will come from the status.json structure\n prevmessage = data.message;\n showLocalMessage(data.message, 'MESSAGING_INFO')\n }\n is_i2c_locked = data.is_i2c_locked;\n if (is_i2c_locked) {\n $('flds-cfg-hw-preset').hide();\n }\n else {\n $('flds-cfg-hw-preset').show();\n }\n $(\"button[onclick*='handleReboot']\").removeClass('rebooting');\n\n if (typeof lmsBaseUrl == \"undefined\" || data.lms_ip != prevLMSIP && data.lms_ip && data.lms_port) {\n const baseUrl = 'http://' + data.lms_ip + ':' + data.lms_port;\n prevLMSIP = data.lms_ip;\n $.ajax({\n url: baseUrl + '/plugins/SqueezeESP32/firmware/-check.bin',\n type: 'HEAD',\n dataType: 'text',\n cache: false,\n error: function () {\n // define the value, so we don't check it any more.\n lmsBaseUrl = '';\n },\n success: function () {\n lmsBaseUrl = baseUrl;\n }\n });\n }\n $('#o_jack').css({ display: Number(data.Jack) ? 'inline' : 'none' });\n setTimeout(checkStatus,statusInterval);\n }).fail(function (xhr, ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n if(xhr.status == 0 && xhr.readyState ==0){\n // probably a timeout. Target is rebooting? \n setTimeout(checkStatus,messageInterval*2); // increase duration if a failure happens\n }\n else {\n setTimeout(checkStatus,messageInterval); // increase duration if a failure happens\n }\n });\n}\n// eslint-disable-next-line no-unused-vars\nwindow.runCommand = function (button, reboot) {\n let cmdstring = button.attributes.cmdname.value;\n showCmdMessage(\n button.attributes.cmdname.value,\n 'MESSAGING_INFO',\n 'Executing.',\n false\n );\n const fields = document.getElementById('flds-' + cmdstring);\n const allfields = fields?.querySelectorAll('select,input');\n if (cmdstring === 'cfg-hw-preset') return handleHWPreset(allfields, reboot);\n cmdstring += ' ';\n if (fields) {\n\n for (const field of allfields) {\n let qts = '';\n let opt = '';\n let attr = field.attributes;\n let isSelect = $(field).is('select');\n const hasValue = attr?.hasvalue?.value === 'true';\n const validVal = (isSelect && field.value !== '--') || (!isSelect && field.value !== '');\n\n if (!hasValue || hasValue && validVal) {\n if (attr?.longopts?.value !== 'undefined') {\n opt += '--' + attr?.longopts?.value;\n } else if (attr?.shortopts?.value !== 'undefined') {\n opt = '-' + attr.shortopts.value;\n }\n\n if (attr?.hasvalue?.value === 'true') {\n if (attr?.value !== '') {\n qts = /\\s/.test(field.value) ? '\"' : '';\n cmdstring += opt + ' ' + qts + field.value + qts + ' ';\n }\n } else {\n // this is a checkbox\n if (field?.checked) {\n cmdstring += opt + ' ';\n }\n }\n }\n }\n }\n\n console.log(cmdstring);\n\n const data = {\n timestamp: Date.now(),\n };\n data.command = cmdstring;\n\n $.ajax({\n url: '/commands.json',\n dataType: 'text',\n method: 'POST',\n cache: false,\n contentType: 'application/json; charset=utf-8',\n data: JSON.stringify(data),\n error: function (xhr, _ajaxOptions, thrownError) {\n var cmd = JSON.parse(this.data).command;\n if (xhr.status == 404) {\n showCmdMessage(\n cmd.substr(0, cmd.indexOf(' ')),\n 'MESSAGING_ERROR',\n `${recovery ? 'Limited recovery mode active. Unsupported action ' : 'Unexpected error while processing command'}`,\n true\n );\n }\n else {\n handleExceptionResponse(xhr, _ajaxOptions, thrownError);\n showCmdMessage(\n cmd.substr(0, cmd.indexOf(' ') - 1),\n 'MESSAGING_ERROR',\n `Unexpected error ${(thrownError !== '') ? thrownError : 'with return status = ' + xhr.status}`,\n true\n );\n }\n },\n success: function (response) {\n $('.orec').show();\n console.log(response);\n if (\n JSON.parse(response).Result === 'Success' &&\n reboot\n ) {\n delayReboot(2500, button.attributes.cmdname.value);\n }\n },\n });\n}\nfunction getLongOps(data, name, longopts) {\n return data.values[name] !== undefined ? data.values[name][longopts] : \"\";\n}\nfunction getCommands() {\n $.getJSON('/commands.json', function (data) {\n console.log(data);\n $('.orec').show();\n data.commands.forEach(function (command) {\n if ($('#flds-' + command.name).length === 0) {\n const cmdParts = command.name.split('-');\n const isConfig = cmdParts[0] === 'cfg';\n const targetDiv = '#tab-' + cmdParts[0] + '-' + cmdParts[1];\n let innerhtml = '';\n innerhtml += `<div class=\"card text-white mb-3\"><div class=\"card-header\">${command.help.encodeHTML().replace(/\\n/g, '<br />')}</div><div class=\"card-body\"><fieldset id=\"flds-${command.name}\">`;\n if (command.argtable) {\n command.argtable.forEach(function (arg) {\n let placeholder = arg.datatype || '';\n const ctrlname = command.name + '-' + arg.longopts;\n const curvalue = getLongOps(data, command.name, arg.longopts);\n\n let attributes = 'hasvalue=' + arg.hasvalue + ' ';\n attributes += 'longopts=\"' + arg.longopts + '\" ';\n attributes += 'shortopts=\"' + arg.shortopts + '\" ';\n attributes += 'checkbox=' + arg.checkbox + ' ';\n attributes += 'cmdname=\"' + command.name + '\" ';\n attributes +=\n 'id=\"' +\n ctrlname +\n '\" name=\"' +\n ctrlname +\n '\" hasvalue=\"' +\n arg.hasvalue +\n '\" ';\n let extraclass = arg.mincount > 0 ? 'bg-success' : '';\n if (arg.glossary === 'hidden') {\n attributes += ' style=\"visibility: hidden;\"';\n }\n if (arg.checkbox) {\n innerhtml += `<div class=\"form-check\"><label class=\"form-check-label\"><input type=\"checkbox\" ${attributes} class=\"form-check-input ${extraclass}\" value=\"\" >${arg.glossary.encodeHTML()}</label>`;\n } else {\n innerhtml += `<div class=\"form-group\" ><label for=\"${ctrlname}\">${arg.glossary.encodeHTML()}</label>`;\n if (placeholder.includes('|')) {\n extraclass = placeholder.startsWith('+') ? ' multiple ' : '';\n placeholder = placeholder\n .replace('<', '')\n .replace('=', '')\n .replace('>', '');\n innerhtml += `<select ${attributes} class=\"form-control ${extraclass}\" >`;\n placeholder = '--|' + placeholder;\n placeholder.split('|').forEach(function (choice) {\n innerhtml += '<option >' + choice + '</option>';\n });\n innerhtml += '</select>';\n } else {\n innerhtml += `<input type=\"text\" class=\"form-control ${extraclass}\" placeholder=\"${placeholder}\" ${attributes}>`;\n }\n }\n\n innerhtml += `${arg.checkbox ? '</div>' : ''}<small class=\"form-text text-muted\">Previous value: ${arg.checkbox ? (curvalue ? 'Checked' : 'Unchecked') : (curvalue || '')}</small>${arg.checkbox ? '' : '</div>'}`;\n });\n }\n innerhtml += `<div style=\"margin-top: 16px;\">\n <div class=\"toast hide\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" id=\"toast_${command.name}\">\n <div class=\"toast-header\">\n <strong class=\"mr-auto\">Result</strong\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\" id=\"msg_${command.name}\"></div>\n </div>`;\n if (isConfig) {\n innerhtml +=\n `<button type=\"submit\" class=\"btn btn-info sclk\" id=\"btn-save-${command.name}\" cmdname=\"${command.name}\">Save</button>\n<button type=\"submit\" class=\"btn btn-warning cclk\" id=\"btn-commit-${command.name}\" cmdname=\"${command.name}\">Apply</button>`;\n } else {\n innerhtml += `<button type=\"submit\" class=\"btn btn-success sclk\" id=\"btn-run-${command.name}\" cmdname=\"${command.name}\">Execute</button>`;\n }\n innerhtml += '</div></fieldset></div></div>';\n if (isConfig) {\n $(targetDiv).append(innerhtml);\n } else {\n $('#commands-list').append(innerhtml);\n }\n }\n });\n $(\".sclk\").off('click').on('click', function () { runCommand(this, false); });\n $(\".cclk\").off('click').on('click', function () { runCommand(this, true); });\n data.commands.forEach(function (command) {\n $('[cmdname=' + command.name + ']:input').val('');\n $('[cmdname=' + command.name + ']:checkbox').prop('checked', false);\n if (command.argtable) {\n command.argtable.forEach(function (arg) {\n const ctrlselector = '#' + command.name + '-' + arg.longopts;\n const ctrlValue = getLongOps(data, command.name, arg.longopts);\n if (arg.checkbox) {\n $(ctrlselector)[0].checked = ctrlValue;\n } else {\n if (ctrlValue !== undefined) {\n $(ctrlselector)\n .val(ctrlValue)\n .trigger('change');\n }\n if (\n $(ctrlselector)[0].value.length === 0 &&\n (arg.datatype || '').includes('|')\n ) {\n $(ctrlselector)[0].value = '--';\n }\n }\n });\n }\n });\n loadPresets();\n }).fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 404) {\n $('.orec').hide();\n }\n else {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n }\n $('#commands-list').empty();\n\n });\n}\n\nfunction getConfig() {\n $.getJSON('/config.json', function (entries) {\n $('#nvsTable tr').remove();\n const data = (entries.config ? entries.config : entries);\n SystemConfig = data;\n Object.keys(data)\n .sort()\n .forEach(function (key) {\n let val = data[key].value;\n if (key === 'autoexec') {\n if (data.autoexec.value === '0') {\n $('#disable-squeezelite')[0].checked = true;\n } else {\n $('#disable-squeezelite')[0].checked = false;\n }\n } else if (key === 'autoexec1') {\n const re = /-o\\s?([\"][^\"]*[\"]|[^-]+)/g;\n const m = re.exec(val);\n if (m[1].toUpperCase().startsWith('I2S')) {\n handleTemplateTypeRadio('i2s');\n } else if (m[1].toUpperCase().startsWith('SPDIF')) {\n handleTemplateTypeRadio('spdif');\n } else if (m[1].toUpperCase().startsWith('\"BT')) {\n handleTemplateTypeRadio('bt');\n }\n } else if (key === 'host_name') {\n val = val.replaceAll('\"', '');\n $('input#dhcp-name1').val(val);\n $('input#dhcp-name2').val(val);\n $('#player').val(val);\n document.title = val;\n hostName = val;\n } else if (key === 'rel_api') {\n releaseURL = val;\n }\n else if (key === 'enable_airplay') {\n $(\"#s_airplay\").css({ display: isEnabled(val) ? 'inline' : 'none' })\n }\n else if (key === 'enable_cspot') {\n $(\"#s_cspot\").css({ display: isEnabled(val) ? 'inline' : 'none' })\n }\n else if (key == 'preset_name') {\n preset_name = val;\n }\n else if (key == 'board_model') {\n board_model = val;\n }\n\n $('tbody#nvsTable').append(\n '<tr>' +\n '<td>' +\n key +\n '</td>' +\n \"<td class='value'>\" +\n \"<input type='text' class='form-control nvs' id='\" +\n key +\n \"' nvs_type=\" +\n data[key].type +\n ' >' +\n '</td>' +\n '</tr>'\n );\n $('input#' + key).val(data[key].value);\n });\n $('tbody#nvsTable').append(\n \"<tr><td><input type='text' class='form-control' id='nvs-new-key' placeholder='new key'></td><td><input type='text' class='form-control' id='nvs-new-value' placeholder='new value' nvs_type=33 ></td></tr>\"\n );\n if (entries.gpio) {\n $('#pins').show();\n $('tbody#gpiotable tr').remove();\n entries.gpio.forEach(function (gpioEntry) {\n $('tbody#gpiotable').append(\n '<tr class=' +\n (gpioEntry.fixed ? 'table-secondary' : 'table-primary') +\n '><th scope=\"row\">' +\n gpioEntry.group +\n '</th><td>' +\n gpioEntry.name +\n '</td><td>' +\n gpioEntry.gpio +\n '</td><td>' +\n (gpioEntry.fixed ? 'Fixed' : 'Configuration') +\n '</td></tr>'\n );\n });\n }\n else {\n $('#pins').hide();\n }\n }).fail(function (xhr, ajaxOptions, thrownError) {\n handleExceptionResponse(xhr, ajaxOptions, thrownError);\n });\n}\nfunction showLocalMessage(message, severity) {\n const msg = {\n message: message,\n type: severity,\n };\n showMessage(msg, new Date());\n}\n\nfunction showMessage(msg, msgTime) {\n let color = 'table-success';\n\n if (msg.type === 'MESSAGING_WARNING') {\n color = 'table-warning';\n if (messageseverity === 'MESSAGING_INFO') {\n messageseverity = 'MESSAGING_WARNING';\n }\n } else if (msg.type === 'MESSAGING_ERROR') {\n if (\n messageseverity === 'MESSAGING_INFO' ||\n messageseverity === 'MESSAGING_WARNING'\n ) {\n messageseverity = 'MESSAGING_ERROR';\n }\n color = 'table-danger';\n }\n if (++messagecount > 0) {\n $('#msgcnt').removeClass('badge-success');\n $('#msgcnt').removeClass('badge-warning');\n $('#msgcnt').removeClass('badge-danger');\n $('#msgcnt').addClass(pillcolors[messageseverity]);\n $('#msgcnt').text(messagecount);\n }\n\n $('#syslogTable').append(\n \"<tr class='\" +\n color +\n \"'>\" +\n '<td>' +\n msgTime.toLocalShort() +\n '</td>' +\n '<td>' +\n msg.message.encodeHTML() +\n '</td>' +\n '</tr>'\n );\n}\n\nfunction inRange(x, min, max) {\n return (x - min) * (x - max) <= 0;\n}\n\nfunction sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"bootstrap\");\nrequire(\"./sass/main.scss\");\nrequire(\"./assets/images/favicon-32x32.png\");\nrequire(\"./js/custom.js\");\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunksqueezelite_esp32\"] = self[\"webpackChunksqueezelite_esp32\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [987], () => (__webpack_require__(607)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","he","require","Promise","handleNVSVisible","nvs_previous_checked","isEnabled","Cookies","$","checked","recovery","show","hide","val","undefined","match","window","bootstrap","String","prototype","format","Object","assign","args","arguments","this","replace","number","encodeHTML","encode","Date","toLocalShort","toLocaleString","dateStyle","timeStyle","nvsTypes","btIcons","bt_playing","bt_disconnected","bt_neutral","bt_connecting","bt_connected","bt_disabled","play_arrow","pause","stop","batIcons","icon","ranges","f","t","btStateIcons","desc","sub","pillcolors","MESSAGING_INFO","MESSAGING_WARNING","MESSAGING_ERROR","connectReturnCode","taskStates","flashState","NONE","REBOOT_TO_RECOVERY","SET_FWURL","FLASHING","DONE","UPLOADING","ERROR","UPLOADCOMPLETE","_state","olderRecovery","statusText","flashURL","flashFileName","statusPercent","Completed","prevRecovery","updateModal","Modal","document","getElementById","reset","UpdateProgress","removeClass","prop","value","isStateError","html","parent","isStateUploadComplete","isStateNone","isStateRebootRecovery","isStateSetUrl","isStateFlashing","isStateDone","isStateUploading","init","SetStateError","addClass","SetStateNone","SetStateRebootRecovery","SetStatusText","ajax","url","context","dataType","method","cache","contentType","data","JSON","stringify","timestamp","now","error","xhr","_ajaxOptions","thrownError","setOTAError","status","complete","response","SetStateSetUrl","post_config","fwurl","type","SetStateFlashing","SetStateDone","SetStateUploading","SetStateUploadComplete","isFlashExecuting","toString","keys","find","x","setOTATargets","fileInput","files","length","message","SetStatusPercent","ShowDialog","pct","pctChanged","txt","changed","css","attr","text","StartOTA","logEvent","name","TargetReadyStartOTA","UploadLocalFile","xhttp","XMLHttpRequest","boundHandleUploadProgressEvent","HandleUploadProgressEvent","bind","boundsetOTAError","upload","addEventListener","onreadystatechange","readyState","open","send","console","Math","round","loaded","total","EventTargetStatus","ota_pct","ota_dsc","EventOTAMessageClass","otaData","parse","fun","log","hideSurrounding","obj","presetsloaded","messageInterval","confPayload","config","handleExceptionResponse","handleTemplateTypeRadio","outtype","children","display","output","showLocalMessage","HideCmdMessage","cmdname","showCmdMessage","msgtype","msgtext","append","color","escapedtext","substring","hFlash","handleReboot","link","delayReboot","lmsBaseUrl","releaseURL","messagesHeld","messagecount","messageseverity","SystemConfig","LastCommandsState","hostName","versionName","prevmessage","project_name","board_model","platform_name","preset_name","btSinkNamesOptSel","ConnectedTo","ConnectingToSSID","prevLMSIP","ConnectingToActions","getConfigJson","slimMode","each","_index","entry","id","nvsType","parseInt","attributes","nvs_type","key","duration","ota","empty","resolve","delay","then","rdata","getCommands","getConfig","setPlatformFilter","filter","toUpperCase","trigger","rssiToIcon","rssi","refreshAP","urc","getJSON","sleep","sort","a","b","y","refreshAPHTML2","formatAP","ssid","auth","h","forEach","e","wifiSelector","prepend","siblings","first","ip","showTask","task","debug","nme","cpu","st","minstk","bprio","cprio","num","getBTSinkOpt","getMessages","msg","msgAge","current_time","sent_time","msgTime","setTime","getTime","statsData","ntasks","tasks","showMessage","msgparts","split","is","attrs","j","item","curOpt","replaceWith","btEntry","remove","setTimeout","fail","ajaxOptions","handleWifiDialog","gw","netmask","Action","ap_ssid","ap_pwd","handleNetworkStatus","hasConnectionChanged","checkStatus","handleRecoveryMode","tt","bt_status","bt_sub_status","iconindex","handlebtstate","version","Voltage","voltage","iconEntry","entryRanges","batteryToIcon","is_i2c_locked","lms_ip","lms_port","baseUrl","success","Number","Jack","getLongOps","longopts","values","commands","command","cmdParts","isConfig","targetDiv","innerhtml","help","argtable","arg","placeholder","datatype","ctrlname","curvalue","hasvalue","shortopts","checkbox","extraclass","mincount","glossary","includes","startsWith","choice","off","on","runCommand","ctrlselector","ctrlValue","_","jqxhr","textStatus","err","entries","autoexec","m","exec","replaceAll","title","gpio","gpioEntry","fixed","group","severity","ms","reason","_resolve","reject","saveAutoexec1","apply","commandLine","commandHeader","autoexec1","responseText","result","Result","handleDisconnect","handleConnect","pwd","dhcpname","ready","index","not","event","relatedTarget","FileReader","file","fr","onload","target","ex","alert","readAsText","slideUp","slideDown","preventDefault","createElement","href","URL","createObjectURL","Blob","setAttribute","body","appendChild","click","removeChild","branches","release","branch","push","fwb","assets","asset","browser_download_url","namecomponents","ver","cfg","bits","substr","lastIndexOf","created_at","i","idf","trclass","setURL","button","dataset","reboot","cmdstring","fields","allfields","querySelectorAll","selJson","cmd","model_config","storedval","handleHWPreset","field","qts","opt","isSelect","hasValue","validVal","test","indexOf","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","r","n","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}
|