Please enable JavaScript to use regex101
/
^
r
e
g
e
x
[
\
-
_
]
?
1
0
1
$
/
i
Regular
Expressions
101
Regular
Expressions
101
Upgrade to Pro
Enterprise
Regular Expression
r"
<script\s.*src=\"((?!http).+?.js)\".*(?:\/script>|\/>)
"
gm
Input 1
1
New
<!DOCTYPE html> <html lang="de"> <head> <script> /* To debug remotely, set the IP of the device and open this file locally on a web browser. * Make sure to disable CORS, for example using https://mybrowseraddon.com/access-control-allow-origin.html */ var remoteHost = "192.168.1.207"; </script> <title data-i18n="title">ESPuino</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="preconnect" href="https://cdnjs.cloudflare.com"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> <link rel="apple-touch-icon" href="/logo"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.16/themes/default/style.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.16/themes/default-dark/style.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/11.0.2/css/bootstrap-slider.min.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.16/jstree.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/11.0.2/bootstrap-slider.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/23.7.11/i18next.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-http-backend/2.4.2/i18nextHttpBackend.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/loc-i18next@0.1.6/dist/umd/loc-i18next.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/sourcefrog/natsort@f8a6b0c/natcompare.js"></script> <link rel="stylesheet" href="/styles/management.css"> <script src="/js/management.js"></script> </head> <body> <div class="toast-container position-fixed top-0 end-0 p-3 mt-5" id="toaster"> <div class="toast align-items-center border-0" id="toast-template" role="alert" aria-live="assertive"aria-atomic="true"> <div class="d-flex"> <div class="toast-body"></div> </div> </div> </div> <nav class="navbar navbar-expand bg-primary navbar-dark"> <div class="container-fluid"> <a class="float-start navbar-brand"> <img src="/logo" width="35" height="35" class="d-inline-block align-top nav-logo" alt="" /> <span id="navbar-heading" class="header-nav-element text-light" data-i18n="title"></span> </a> <div class="d-flex justify-content-end"> <li class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav"> <li class="nav-item dropdown"> <a class="nav-link header-nav-element dropdown-toggle text-light link-body-emphasis" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fas fa-bars"></i></a> <ul class="dropdown-menu dropdown-menu-end" id="menu" style="min-width: 200px;"> <li><a class="nav-link openPopupRestart header-nav-element link-body-emphasis header-nav-restart" href="javascript:void(0);"><i class="fas fa-redo menu-icon"></i> <span data-i18n="restart"></span></a></li> <li><a class="nav-link openPopupShutdown header-nav-element link-body-emphasis" href="javascript:void(0);"><i class="fas fa-power-off menu-icon"></i> <span data-i18n="shutdown"></span></a></li> <li><a class="nav-link openPopupLog header-nav-element link-body-emphasis" href="javascript:void(0);"><i class="fas fa-book menu-icon"></i> <span data-i18n="log"></span></a></li> <li><a class="nav-link openPopupInfo header-nav-element link-body-emphasis" href="javascript:void(0);"><i class="fas fa-info menu-icon"></i> <span data-i18n="info"></span></a></li> <li> <a class="nav-link navbar-collapse header-nav-element link-body-emphasis"> <label class="form-check-label" for="lightSwitch" style="cursor: pointer"><i class="fas fa-adjust menu-icon"></i><span data-i18n="darkmode"></span></label> <input class="form-check-input" type="checkbox" id="lightSwitch" style="display:none; /* Hide it */" /> </a> </li> <li> <div class="modal-body row" style="margin-left: 0"> <i class="fas fa-earth-america menu-icon text-white" style="margin-left: 0; margin-top: 10px; margin-right: 5px;"></i> <select class="form-control form-select bg-white" id="langSel" name="langSel"> <!-- Do not translate those texts! --> <option value="de">Deutsch</option> <option value="en">English</option> <option value="fr">Française</option> </select> </div> </li> </ul> </li> </ul> </li> </div> </div> </nav> <!-- Modal dialog for info / shutdown / restart--> <div class="modal fade bd-info-modal-xl select-div" data-bs-backdrop="static" id="modalInfo" role="dialog"> <div class="modal-dialog modal-xl modal-dialog-scrollable" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="infos"></h5> </div> <div class="modal-body" style="white-space: pre" id="modalInfoContent"> </div> <div class="modal-footer"> <button type="button" id="modalInfoRefresh" class="btn btn-primary me-auto"><i class="fas fa-sync"></i><span data-i18n="refresh"></span></button> <button type="button" class="btn btn-primary" data-bs-dismiss="modal"><span data-i18n="ok"></span></button> </div> </div> </div> </div> <!-- Modal dialog for log--> <div class="modal fade bd-info-modal-xl select-div" data-bs-backdrop="static" id="modalLog" role="dialog"> <div class="modal-dialog modal-xl modal-dialog-scrollable" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="infos"></h5> </div> <div class="modal-body" style="white-space: pre; font-size: 80%;" id="modalLogContent"> </div> <div class="modal-footer"> <button type="button" id="modalLogRefresh" class="btn btn-primary me-auto"><i class="fas fa-sync"></i><span data-i18n="refresh"></span></button> <button type="button" class="btn btn-primary" data-bs-dismiss="modal"><span data-i18n="ok"></span></button> </div> </div> </div> </div> <!-- Modal dialog for equalizer--> <div class="modal fade bd-info-modal-xl select-div" data-bs-backdrop="static" id="modalEqualizer" role="dialog"> <div class="modal-dialog modal-xl modal-dialog-scrollable" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="general.equalizer.title"></h5> </div> <div class="modal-body row" id="modalEqualizerContent"> <label class="w-100" for="gainLowPass" data-i18n="[prepend]general.equalizer.gainLowPass">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input id="gainLowPass" name="gainLowPass" class="form-control float-end" data-provide="slider" type="number" required data-slider-min="-6" data-slider-max="6" min="-6" max="6" data-slider-value="0" value="0"> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> <hr> <label class="w-100" for="gainBandPass" data-i18n="[prepend]general.equalizer.gainBandPass">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input id="gainBandPass" name="gainBandPass" class="form-control float-end" data-provide="slider" type="number" required data-slider-min="-6" data-slider-max="6" min="-6" max="6" data-slider-value="0" value="0"> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> <hr> <label class="w-100" for="gainHighPass" data-i18n="[prepend]general.equalizer.gainHighPass">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input id="gainHighPass" name="gainHighPass" class="form-control float-end" data-provide="slider" type="number" required data-slider-min="-6" data-slider-max="6" min="-6" max="6" data-slider-value="0" value="0"> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> <hr> <div class="col-12"> <div class="row"> <i class="fas fa-info col-auto icon-pos"></i> <span class="col" data-i18n="general.equalizer.info"> </span> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-bs-dismiss="modal"><span data-i18n="ok"></span></button> </div> </div> </div> </div> <!-- Modal dialog for delete SSID--> <div class="modal fade select-div" data-bs-backdrop="static" id="deleteSSIDModal" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="wifi.delete.title"></h5> </div> <div class="modal-body"> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-bs-dismiss="modal" data-i18n="cancel"></button> <a class="btn btn-danger btn-ok" data-i18n="delete"></a> </div> </div> </div> </div> <!-- Modal dialog for delete NVS RFID assignment--> <div class="modal fade select-div" data-bs-backdrop="static" id="deleteRFIDModal" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="tools.nvsdelete.title"></h5> </div> <div class="modal-body"> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-bs-dismiss="modal" data-i18n="cancel"></button> <a class="btn btn-danger btn-ok" data-i18n="delete"></a> </div> </div> </div> </div> <!-- Modal dialog for delete NVS RFID assignments --> <div class="modal fade select-div" data-bs-backdrop="static" id="deleteNVSRFIDModal" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content bg-light text-dark"> <div class="modal-header"> <h5 class="modal-title" data-i18n="tools.nvserase.title"></h5> </div> <div class="modal-body"> <label data-i18n="tools.nvserase.prompt"></label> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" data-bs-dismiss="modal" data-i18n="cancel"></button> <a class="btn btn-danger btn-ok" data-i18n="delete" href="javascript:eraseNVSRFID();"></a> </div> </div> </div> </div> <br /> <nav> <div class="container nav nav-tabs select-div" id="nav-tab" role="tablist"> <a class="nav-item nav-link main-tab-item" id="nav-control-tab" data-bs-toggle="tab" href="#nav-control" data-bs-target="#nav-control" role="tab" aria-controls="nav-control" aria-selected="false"><i class="fas fa-gamepad"></i><span class=".d-sm-none .d-md-block" data-i18n="nav.control"></span></a> <a class="nav-item nav-link main-tab-item active" id="nav-rfid-tab" data-bs-toggle="tab" href="#nav-rfid" data-bs-target="#nav-rfid" role="tab" aria-controls="nav-rfid" aria-selected="true"><i class="fas fa-dot-circle"></i><span data-i18n="nav.rfid"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-wifi-tab" data-bs-toggle="tab" href="#nav-wifi" data-bs-target="#nav-wifi" role="tab" aria-controls="nav-wifi" aria-selected="false"><i class="fas fa-wifi"></i><span class=".d-sm-none .d-md-block"><span data-i18n="nav.wifi"></span></span></a> <a class="nav-item nav-link main-tab-item" id="nav-mqtt-tab" data-visible="false" data-bs-toggle="tab" href="" data-bs-target="#nav-mqtt" role="tab" aria-controls="nav-mqtt" aria-selected="false"><i class="fas fa-network-wired"></i><span data-i18n="nav.mqtt"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-ftp-tab" data-visible="false" data-bs-toggle="tab" href="#nav-ftp" data-bs-target="#nav-ftp" role="tab" aria-controls="nav-ftp" aria-selected="false"><i class="fas fa-folder"></i><span data-i18n="nav.ftp"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-bt-tab" data-visible="false" data-bs-toggle="tab" href="#nav-bt" data-bs-target="#nav-bt" role="tab" aria-controls="nav-bt" aria-selected="false"><i class="fab fa-bluetooth"></i> <span data-i18n="nav.bluetooth"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-general-tab" data-bs-toggle="tab" href="#nav-general" data-bs-target="#nav-general" role="tab" aria-controls="nav-general" aria-selected="false"><i class="fas fa-sliders-h"></i><span data-i18n="nav.general"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-tools-tab" data-bs-toggle="tab" href="#nav-tools" data-bs-target="#nav-tools" role="tab" aria-controls="nav-tools" aria-selected="false"><i class="fas fa-wrench"></i><span data-i18n="nav.tools"></span></a> <a class="nav-item nav-link main-tab-item" id="nav-help-tab" data-bs-toggle="tab" href="#nav-help" data-bs-target="#nav-help" role="tab" aria-controls="nav-help" aria-selected="false"><i class="fas fa-comment"></i><span class=".d-sm-none .d-md-block"><span data-i18n="nav.help"></span></span></a> </div> </nav> <br> <div class="tab-content" id="nav-tabContent"> <!-- ### Tab Wifi ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-wifi" role="tabpanel" aria-labelledby="nav-wifi-tab"> <div class="container" id="wifiConfig"> <div> <legend data-i18n="wifi.title"></legend> <form action="#globalWifiConfig" method="POST" onsubmit="globalWifiConfig('globalWifiConfig'); return false"> <div class="mb-3 col-md-12"> <label for="hostname" data-i18n="[prepend]wifi.hostname.title">:</label> <input type="text" class="form-control bg-white text-dark" id="hostname" data-i18n="[placeholder]wifi.hostname.placeholder" name="hostname" value="" pattern="^[0-9a-zA-Z][0-9a-zA-Z\-]{0,30}[0-9a-zA-Z]" required><br> <input type="checkbox" id="scan_wifi_on_start" name="scan_wifi_on_start" value="false"> <label for="scan_wifi_on_start" data-i18n="wifi.scan.enabled"></label> </div> <div class="text-center"> <button type="reset" class="btn btn-warning" data-i18n="reset"></button> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </div> <hr> <div> <legend data-i18n="wifi.networks"></legend> <form action="#wifiConfig" method="POST" onsubmit="wifiConfig('wifiConfig'); return false"> <div class="mb-3 col-md-12"> <label for="ssid" data-i18n="[prepend]wifi.ssid.title">:</label> <input type="text" class="form-control bg-white text-dark" id="ssid" data-i18n="[placeholder]wifi.ssid.placeholder" name="ssid" required><br> <div class="invalid-feedback" data-i18n="wifi.ssid.validation"></div> <label for="pwd" data-i18n="[prepend]wifi.password.title">:</label> <input type="password" class="form-control bg-white text-dark" id="pwd" name="pwd" data-i18n="[placeholder]wifi.password.placeholder" required><br> <input type="checkbox" id="static_enabled" name="static_enabled" value="false"> <label for="static_enabled" data-i18n="[prepend]wifi.static.enabled">:</label> <div id="wifi_static_div" style="display:none"> <label for="static_addr" data-i18n="[prepend]wifi.static.addr">:</label> <input type="text" class="form-control bg-white text-dark" id="static_addr" name="static_addr"> <label for="static_gateway" data-i18n="[prepend]wifi.static.gateway">:</label> <input type="text" class="form-control bg-white text-dark" id="static_gateway" name="static_gateway"> <label for="static_subnet" data-i18n="[prepend]wifi.static.subnet">:</label> <input type="text" class="form-control bg-white text-dark" id="static_subnet" name="static_subnet"> <label for="static_dns1" data-i18n="[prepend]wifi.static.dns1">:</label> <input type="text" class="form-control bg-white text-dark" id="static_dns1" name="static_dns1"> <label for="static_dns2" data-i18n="[prepend]wifi.static.dns2">:</label> <input type="text" class="form-control bg-white text-dark" id="static_dns2" name="static_dns2"> </div> </div> <div class="text-center"> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </div> <hr> <div class="col-md-12" style="margin-top: 20px;"> <legend data-i18n="wifi.savedNetworks"></legend> <ul class="list-group" id="wifiListSavedSSIDs"> </ul> </div> </div> <br /> </div> <!-- ### Tab Control ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-control" role="tabpanel" aria-labelledby="nav-control-tab"> <div class="container" id="navControl"> <div class="mb-3 col-md-12"> <legend data-i18n="control.title"></legend> <div class="mb-3 col-md-12"> <img src="/cover" class="coverimage-container" id="coverimg" alt=""> </div> <div class="buttons ctrl-button-grp"> <button type="button" class="btn btn-lg ctrl-button text-dark" id="nav-btn-first" onclick="sendControl(173)" data-i18n="[title]control.first"> <span class="fas fa-fast-backward"></span> </button> <button type="button" class="btn btn-lg ctrl-button text-dark" id="nav-btn-prev" onclick="sendControl(171)" data-i18n="[title]control.prev"> <span class="fas fa-backward"></span> </button> <button type="button" class="btn btn-lg ctrl-button text-dark" id="nav-btn-play" onclick="sendControl(170)" data-i18n="[title]control.playpause"> <i id="ico-play-pause" class="fas fa-lg fa-play"></i> </button> <button type="button" class="btn btn-lg ctrl-button text-dark" id="nav-btn-next" onclick="sendControl(172)" data-i18n="[title]control.forward"> <span class="fas fa-forward"></span> </button> <button type="button" class="btn btn-lg ctrl-button text-dark" id="nav-btn-last" onclick="sendControl(174)" data-i18n="[title]control.last"> <span class="fas fa-fast-forward"></span> </button> </div> </div> <br> <legend data-i18n="control.volume" class="col-auto"></legend> <div class="slider-container"> <div class="float-end"> <button type="button" class="btn btn-primary btn-lg volume-button" onclick="sendControl(177)" data-i18n="[title]control.voldown"> <span class="fas fa-volume-down"></span> </button> </div> <div class="slider-container-inner"> <input class="form-control float-end" data-provide="slider" type="number" data-slider-min="1" data-slider-max="21" min="1" max="21" id="setVolume" data-slider-value="" value="" onchange="sendVolume(Number(this.value))"> </div> <div class="float-end" style="padding-left: 10px"> <button type="button" class="btn btn-primary btn-lg volume-button float-end" onclick="sendControl(176)" data-i18n="[title]control.volup"> <span class="fas fa-volume-up"></span> </button> </div> <div class="float-end" style="padding-left: 10px"> <button type="button" class="openPopupEqualizer btn btn-primary btn-lg volume-button float-end" data-i18n="[title]general.equalizer.title"> <span class="fas fa-sliders-h"></span> </button> </div> </div> <br /> <div class="mb-3 col-md-12"> <legend data-i18n="control.current"></legend> <div id="track"></div> <div></div> <div id="trackProgressDiv" class="progress progress-sm select-div"> <div id="trackProgress" class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div> </div> <div id="playtime"> </div> </div> <hr> <div class="mb-3 col-md-12"> <legend data-i18n="control.command"></legend> <div class="tab-pane select-div" id="commandExecution" role="tabpanel"> <label for="commandId" data-i18n="files.rfid.mod.title"></label> <select class="form-control form-select bg-white" id="commandId" name="commandId"> <option value="100" data-i18n="files.rfid.mod.cmd.100"></option> <option value="179" data-i18n="files.rfid.mod.cmd.179"></option> <option value="101" data-i18n="files.rfid.mod.cmd.101"></option> <option value="102" data-i18n="files.rfid.mod.cmd.102"></option> <option value="103" data-i18n="files.rfid.mod.cmd.103"></option> <option value="104" data-i18n="files.rfid.mod.cmd.104"></option> <option value="105" data-i18n="files.rfid.mod.cmd.105"></option> <option value="106" data-i18n="files.rfid.mod.cmd.106"></option> <option value="107" data-i18n="files.rfid.mod.cmd.107"></option> <option value="110" data-i18n="files.rfid.mod.cmd.110"></option> <option value="111" data-i18n="files.rfid.mod.cmd.111"></option> <option value="120" data-i18n="files.rfid.mod.cmd.120"></option> <option value="130" data-i18n="files.rfid.mod.cmd.130"></option> <option value="140" data-i18n="files.rfid.mod.cmd.140"></option> <option value="141" data-i18n="files.rfid.mod.cmd.141"></option> <option value="142" data-i18n="files.rfid.mod.cmd.142"></option> <option value="150" data-i18n="files.rfid.mod.cmd.150"></option> <option value="151" data-i18n="files.rfid.mod.cmd.151"></option> <option value="152" data-i18n="files.rfid.mod.cmd.152"></option> <option value="0" data-i18n="files.rfid.mod.cmd.0"></option> <option value="170" data-i18n="files.rfid.mod.cmd.170"></option> <option value="171" data-i18n="files.rfid.mod.cmd.171"></option> <option value="172" data-i18n="files.rfid.mod.cmd.172"></option> <option value="173" data-i18n="files.rfid.mod.cmd.173"></option> <option value="174" data-i18n="files.rfid.mod.cmd.174"></option> <option value="180" data-i18n="files.rfid.mod.cmd.180"></option> <option value="181" data-i18n="files.rfid.mod.cmd.181"></option> </select> </div> <br> <div class="text-center"> <button type="button" class="btn btn-primary xxx" onclick="executeCommand()" data-i18n="execute"></button> </div> </div> </div> </div> <!-- ### Tab RFID ### --> <div class="tab-pane main-tab-pane fade show active select-div" id="nav-rfid" role="tabpanel" aria-labelledby="nav-rfid-tab"> <div class="container" id="filetreeContainer"> <fieldset> <legend id="fileslegend" data-i18n="files.title"></legend> <div class="filetree-container"> <div id="filebrowser"> <div class="filetree filetree-size" id="explorerTree"></div> </div> <div class="container" style="padding: 0"> <span class="input-group-text float-start bg-white text-dark" style="height:38px; width: 40px; border-bottom-right-radius: 0; border-top-right-radius: 0;"><i class="fas fa-search"></i></span> <input type="search" class="form-control border-start-0 float-start bg-white text-dark" style="height:38px; width: 200px; border-bottom-left-radius: 0; border-top-left-radius: 0;" id="filetreesearch" data-i18n="[placeholder]files.search.placeholder" onsearch="searchFiles($(this).val())" onkeyup="searchFiles($(this).val())"> <button id="expandfilelist" class="btn btn-primary float-end" onclick="resizeFileList(true)"><span class="fas fa-expand-alt"></span></button> <button id="shrinkfilelist" class="btn btn-primary float-end" onclick="resizeFileList(false)" style="display: none;"><span class="fas fa-compress-alt"></span></button> </div> <br> <div> <br> <legend id="filesupload" data-i18n="files.upload.title">Files</legend> <form id="explorerUploadForm" method="POST" enctype="multipart/form-data" action="/explorer"> <div class="input-group select-div"> <span class="input-group-btn"> <span class="btn btn-primary" onclick="let input = $(this).parent().find('input[type=file]')[0]; input.webkitdirectory=false; input.click();" data-i18n="[title]files.files.desc;files.files.title"></span> <span class="btn btn-primary" onclick="let input = $(this).parent().find('input[type=file]')[0]; input.webkitdirectory=true; input.click();" data-i18n="[title]files.directory.desc;files.directory.title"></span> <input name="uploaded_file" id="uploaded_file" onchange="$(this).parent().parent().find('.form-control').html($(this).val().split(/[\\|/]/).pop());" style="display: none;" type="file" multiple> </span> <span class="form-control" id="uploaded_file_text"></span> <span class="btn btn-primary" onclick="$(this).parent().find('input[type=file]').submit();" data-i18n="[title]files.upload.desc;files.upload.title"></span> </div> </form> <br> <div class="progress select-div upload-progress-bar"> <div id="explorerUploadProgress" class="progress-bar" role="progressbar" aria-labelledby="fileslegend"></div> </div> </div> </div> </fieldset> <hr> </div> <div class="container" id="rfidMusicTags"> <fieldset> <legend id="rfidMusicTagsAssignment" data-i18n="files.rfid.title"></legend> <form action="#rfidMusicTags" method="POST" onsubmit="rfidAssign('rfidMusicTags'); return false"> <div class="mb-3 col-md-12 select-div"> <label for="rfidIdMusic" data-i18n="files.rfid.idNumber"></label> <input type="text" class="form-control bg-white text-dark" id="rfidIdMusic" maxlength="12" pattern="[0-9]{12}" placeholder="" name="rfidIdMusic" required> <br> <div class="nav nav-tabs" id="SubTab" role="tablist" aria-labelledby="rfidMusicTagsAssignment"> <a class="nav-item nav-link active" id="rfid-music-tab" data-bs-toggle="tab" href="#rfidmusic" role="tab"><i class="fas fa-music"></i><span class=".d-sm-none .d-md-block" data-i18n="files.rfid.music"></span></a> <a class="nav-item nav-link" id="rfid-mod-tab" data-bs-toggle="tab" href="#rfidmod" role="tab"><i class="fas fa-cog"></i><span class=".d-sm-none .d-md-block" data-i18n="files.rfid.modification"></span></a> </div> <div class="tab-content" id="SubTabContent"> <div class="tab-pane show active select-div" data-bs-theme="light" id="rfidmusic" role="tabpanel"> <br> <label for="fileOrUrl" data-i18n="files.rfid.fileurl.title"></label> <input type="text" class="form-control bg-white text-dark" id="fileOrUrl" maxlength="255" pattern="^[^\^#]+$" name="fileOrUrl" data-i18n="[placeholder]files.rfid.fileurl.placeholder" required> <label for="playMode" data-i18n="files.rfid.playmode.title"></label> <select class="form-control form-select bg-white" id="playMode" name="playMode"> <option class="option-file" value="1" data-i18n="files.rfid.playmode.mode.1"></option> <option class="option-file" value="2" data-i18n="files.rfid.playmode.mode.2"></option> <option class="option-folder" value="12" data-i18n="files.rfid.playmode.mode.12"></option> <option class="option-file-and-folder" value="3" data-i18n="files.rfid.playmode.mode.3"></option> <option class="option-file-and-folder" value="4" data-i18n="files.rfid.playmode.mode.4"></option> <option class="option-folder" value="5" data-i18n="files.rfid.playmode.mode.5"></option> <option class="option-folder" value="6" data-i18n="files.rfid.playmode.mode.6"></option> <option class="option-folder" value="7" data-i18n="files.rfid.playmode.mode.7"></option> <option class="option-folder" value="9" data-i18n="files.rfid.playmode.mode.9"></option> <option class="option-folder" value="13" data-i18n="files.rfid.playmode.mode.13"></option> <option class="option-folder" value="14" data-i18n="files.rfid.playmode.mode.14"></option> <option class="option-stream" value="8" data-i18n="files.rfid.playmode.mode.8"></option> <option class="option-stream" value="11" data-i18n="files.rfid.playmode.mode.11"></option> </select> </div> <div class="tab-pane select-div" id="rfidmod" role="tabpanel"> <label for="modId" data-i18n="files.rfid.mod.title"></label> <select class="form-control form-select bg-white" id="modId" name="modId"> <option value="100" data-i18n="files.rfid.mod.cmd.100"></option> <option value="179" data-i18n="files.rfid.mod.cmd.179"></option> <option value="101" data-i18n="files.rfid.mod.cmd.101"></option> <option value="102" data-i18n="files.rfid.mod.cmd.102"></option> <option value="103" data-i18n="files.rfid.mod.cmd.103"></option> <option value="104" data-i18n="files.rfid.mod.cmd.104"></option> <option value="105" data-i18n="files.rfid.mod.cmd.105"></option> <option value="106" data-i18n="files.rfid.mod.cmd.106"></option> <option value="107" data-i18n="files.rfid.mod.cmd.107"></option> <option value="110" data-i18n="files.rfid.mod.cmd.110"></option> <option value="111" data-i18n="files.rfid.mod.cmd.111"></option> <option value="120" data-i18n="files.rfid.mod.cmd.120"></option> <option value="130" data-i18n="files.rfid.mod.cmd.130"></option> <option value="140" data-i18n="files.rfid.mod.cmd.140"></option> <option value="141" data-i18n="files.rfid.mod.cmd.141"></option> <option value="142" data-i18n="files.rfid.mod.cmd.142"></option> <option value="150" data-i18n="files.rfid.mod.cmd.150"></option> <option value="151" data-i18n="files.rfid.mod.cmd.151"></option> <option value="152" data-i18n="files.rfid.mod.cmd.152"></option> <option value="0" data-i18n="files.rfid.mod.cmd.0"></option> <option value="170" data-i18n="files.rfid.mod.cmd.170"></option> <option value="171" data-i18n="files.rfid.mod.cmd.171"></option> <option value="172" data-i18n="files.rfid.mod.cmd.172"></option> <option value="173" data-i18n="files.rfid.mod.cmd.173"></option> <option value="174" data-i18n="files.rfid.mod.cmd.174"></option> <option value="180" data-i18n="files.rfid.mod.cmd.180"></option> <option value="181" data-i18n="files.rfid.mod.cmd.181"></option> </select> </div> </div> </div> <div class="text-center"> <button type="reset" class="btn btn-warning" data-i18n="reset"></button> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </fieldset> </div> <br /> </div> <!-- ### Tab MQTT ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-mqtt" role="tabpanel" aria-labelledby="nav-mqtt-tab"> <div class="container" id="mqttConfig"> <form class="needs-validation" action="#mqttConfig" method="POST" onsubmit="mqttSettings('mqttConfig'); return false"> <legend data-i18n="mqtt.title"></legend> <div class="form-check col-md-12"> <input class="form-check-input" type="checkbox" value="1" id="mqttEnable" name="mqttEnable"> <label class="form-check-label" for="mqttEnable" data-i18n="mqtt.enable"></label> </div> <div class="mb-3 my-2 col-md-12"> <label for="mqttClientId" data-i18n="[prepend]mqtt.clientId.title">:</label> <input type="text bg-white text-dark" class="form-control bg-white text-dark" id="mqttClientId" minlength="7" maxlength="0" data-i18n="[placeholder]mqtt.clientId.placeholder" name="mqttClientId" value=""> <label for="mqttServer" data-i18n="[prepend]mqtt.server.title">:</label> <input type="text bg-white text-dark" class="form-control bg-white text-dark" id="mqttServer" minlength="7" maxlength="0" data-i18n="[placeholder]mqtt.server.placeholder" name="mqttServer" value=""> <label for="mqttUser" data-i18n="[prepend]mqtt.user.title">:</label> <input type="text bg-white text-dark" class="form-control bg-white text-dark" id="mqttUser" maxlength="" data-i18n="[placeholder]mqtt.user.placeholder" name="mqttUser" value=""> <label for="mqttPwd" data-i18n="[prepend]mqtt.pwd.title">:</label> <input type="password" class="form-control bg-white text-dark" id="mqttPwd" maxlength="" data-i18n="[placeholder]mqtt.pwd.placeholder" name="mqttPwd" value=""> <label for="mqttPort" data-i18n="[prepend]mqtt.port.title">:</label> <input type="number" class="form-control bg-white text-dark" id="mqttPort" min="1" max="65535" data-i18n="[placeholder]mqtt.port.placeholder" name="mqttPort" value="" required> </div> <div class="text-center"> <button type="reset" class="btn btn-warning" data-i18n="reset"></button> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </div> <br /> </div> <!-- ### Tab FTP ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-ftp" role="tabpanel" aria-labelledby="nav-ftp-tab"> <div class="container" id="ftpConfig"> <form action="#ftpConfig" method="POST" onsubmit="ftpSettings('ftpConfig'); return false"> <div class="mb-3 col-md-12 select-div"> <legend data-i18n="ftp.title"></legend> <label for="ftpUser" data-i18n="[prepend]ftp.user.title">:</label> <input type="text" class="form-control bg-white text-dark" id="ftpUser" maxlength="0" data-i18n="[placeholder]ftp.user.placeholder" name="ftpUser" value="" required> <label for="pwd" data-i18n="[prepend]ftp.pwd.title">:</label> <input type="password" class="form-control bg-white text-dark" id="ftpPwd" maxlength="0" data-i18n="[placeholder]ftp.pwd.placeholder" name="ftpPwd" value="" required> </div> <div class="text-center"> <button type="reset" class="btn btn-warning" data-i18n="reset"></button> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> <hr> </div> <div class="container" id="ftpStart"> <div class="mb-3 col-md-12"> <legend data-i18n="ftp.start.title"></legend> <div data-i18n="ftp.start.desc"></div> <br> <div class="text-center"> <button type="button" class="btn btn-primary" onclick="ftpStart()" data-i18n="ftp.start.button"></button> </div> </div> </div> </div> <!-- ### Tab Bluetooth ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-bt" role="tabpanel" aria-labelledby="nav-bt-tab"> <div class="container" id="btConfig"> <form action="#btConfig" method="POST" onsubmit="btSettings('btConfig'); return false"> <div class="mb-3 col-md-12"> <legend data-i18n="bt.source.configtitle"></legend> <label for="btDeviceName" data-i18n="[prepend]bt.device.title">:</label> <input type="text" class="form-control bg-white text-dark" id="btDeviceName" data-i18n="[placeholder]bt.device.placeholder" name="btDeviceName" value=""><br> <label for="btPinCode" data-i18n="[prepend]bt.pincode.title">:</label> <input type="text" class="form-control bg-white text-dark" id="btPinCode" data-i18n="[placeholder]bt.pincode.placeholder" name="btPinCode" value=""> </div> <div class="text-center"> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> <hr> </div> <div class="container" id="btStartSource"> <div class="mb-3 col-md-12"> <legend data-i18n="bt.source.title"></legend> <div data-i18n="bt.source.desc"></div> <br> <div class="text-center"> <button type="button" class="btn btn-primary" onclick="sendControl(141)" data-i18n="bt.source.button"></button> </div> </div> <hr> </div> <div class="container" id="btStartSink"> <div class="mb-3 col-md-12"> <legend data-i18n="bt.sink.title"></legend> <div data-i18n="bt.sink.desc"></div> <br> <div class="text-center"> <button type="button" class="btn btn-primary" onclick="sendControl(140)" data-i18n="bt.sink.button"></button> </div> </div> </div> </div> <!-- ### Tab General ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-general" role="tabpanel" aria-labelledby="nav-general-tab"> <div class="container" id="generalConfig"> <form action="#generalConfig" method="POST" onsubmit="genSettings('generalConfig'); return false"> <fieldset> <legend class="w-auto" data-i18n="general.volume.title"></legend><br> <label for="initialVolume" data-i18n="[prepend]general.volume.restart">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" type="number" data-slider-min="1" data-slider-max="21" min="1" max="21" class="form-control" id="initialVolume" name="initialVolume" data-slider-value="" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> <br> <label for="maxVolumeSpeaker" data-i18n="[prepend]general.volume.speakerMax">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" type="number" data-slider-min="1" data-slider-max="21" min="1" max="21" class="form-control" id="maxVolumeSpeaker" name="maxVolumeSpeaker" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> <br> <label for="maxVolumeHeadphone" data-i18n="[prepend]general.volume.headphoneMax">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="col-auto fas fa-volume-down fa-2x icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" type="number" data-slider-min="1" data-slider-max="21" min="1" max="21" class="form-control" id="maxVolumeHeadphone" name="maxVolumeHeadphone" data-slider-value="" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="col-auto fas fa-volume-up fa-2x icon-pos"></i> </div> </div> </fieldset> <br> <br> <div class="mb-3 col-md-12" id="neopixelConfig" data-visible="false"> <fieldset> <legend class="w-auto" data-i18n="general.neopixel.title"></legend><br> <label for="initBrightness" data-i18n="[prepend]general.neopixel.restart">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="far fa-sun fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" type="number" data-slider-min="0" data-slider-max="254" min="0" max="254" class="form-control" id="initBrightness" name="initBrightness" data-slider-value="" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-sun fa-2x .icon-pos"></i> </div> </div> <br> <label for="nightBrightness" data-i18n="[prepend]general.neopixel.nightmode">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="far fa-sun fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" type="number" data-slider-min="0" data-slider-max="255" min="0" max="255" class="form-control" id="nightBrightness" name="nightBrightness" data-slider-value="" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-sun fa-2x .icon-pos"></i> </div> </div> </fieldset> </div> <br> <br> <fieldset> <legend data-i18n="general.sleep.title"></legend> <label for="inactivityTime" data-i18n="general.sleep.inactivity"></label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fa-hourglass-start fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input type="number" data-provide="slider" data-slider-min="0" data-slider-max="30" min="1" max="120" class="form-control" id="inactivityTime" name="inactivityTime" data-slider-value="" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-hourglass-end fa-2x .icon-pos"></i> </div> </div> </fieldset> <br> <br> <div class="mb-3 col-md-12" id="batteryConfig" data-visible="false"> <fieldset> <legend data-i18n="general.battery.title">Batterie</legend> <div data-i18n="general.battery.desc"></div> <br> <label for="warningLowVoltage" data-i18n="[prepend]general.battery.lowWarning">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fa-battery-quarter fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" data-slider-step="0.1" data-slider-min="2.5" data-slider-max="5.0" min="2.5" max="5.0" type="text" class="form-control" id="warningLowVoltage" name="warningLowVoltage" data-slider-value="" value="" pattern="^\d{1,2}(\.\d{1,3})?" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-battery-three-quarters fa-2x .icon-pos" fa-2x .icon-pos></i> </div> </div> <br> <label for="voltageIndicatorLow" data-i18n="[prepend]general.battery.lowCritical">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fa-battery-quarter fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" min="2.5" data-slider-step="0.1" data-slider-min="2.5" data-slider-max="5.0" max="5.0" type="text" class="form-control" id="voltageIndicatorLow" name="voltageIndicatorLow" data-slider-value="" value="" pattern="^\d{1,2}(\.\d{1,3})?" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-battery-three-quarters fa-2x .icon-pos" fa-2x .icon-pos></i> </div> </div> <br> <label for="voltageIndicatorHigh" data-i18n="[prepend]general.battery.high">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fa-battery-quarter fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" data-slider-step="0.1" data-slider-min="2.0" data-slider-max="5.0" min="2.0" max="5.0" type="text" class="form-control" id="voltageIndicatorHigh" name="voltageIndicatorHigh" data-slider-value="" value="" pattern="^\d{1,2}(\.\d{1,3})?" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-battery-three-quarters fa-2x .icon-pos" fa-2x .icon-pos></i> </div> </div> <br> <div id="criticalVoltageSection" data-visible="false"> <label for="criticalVoltage" data-i18n="[prepend]general.battery.criticalShutoff">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fa-battery-quarter fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" data-slider-step="0.1" data-slider-min="2.0" data-slider-max="5.0" min="2.0" max="5.0" type="text" class="form-control" id="criticalVoltage" name="criticalVoltage" data-slider-value="" value="" pattern="^\d{1,2}(\.\d{1,3})?" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fa-battery-three-quarters fa-2x .icon-pos" fa-2x .icon-pos></i> </div> </div> </div> <br> <label for="voltageCheckInterval" data-i18n="[prepend]general.battery.measureInterval">:</label> <div class="slider-container"> <div class="float-end" style="padding-left: 30px"> <i class="fas fas fa-hourglass-start fa-2x .icon-pos"></i> </div> <div class="slider-container-inner"> <input data-provide="slider" data-slider-min="1" data-slider-max="60" type="number" min="1" max="60" class="form-control" id="voltageCheckInterval" data-slider-value="" name="voltageCheckInterval" value="" required> </div> <div class="float-end" style="padding-left: 10px"> <i class="fas fas fa-hourglass-end fa-2x .icon-pos" fa-2x .icon-pos></i> </div> </div> </fieldset> </div> <br> <div class="mb-3 col-md-12 select-div" id="playlistConfig"> <fieldset> <legend class="w-auto" data-i18n="general.playlist.title"></legend><br> <label for="playlistSortMode" data-i18n="[prepend]general.playlist.sortMode">:</label> <select id="playlistSortMode" name="playlistSortMode" class="form-control form-select bg-white"> <option value="3" selected data-i18n="general.playlist.strnatcasecmp"></option> <option value="2" data-i18n="general.playlist.strnatcmp"></option> <option value="1" data-i18n="general.playlist.strcmp"></option> </select> </fieldset> </div> <div class="text-center"> <button type="reset" class="btn btn-warning" data-i18n="reset" onclick="resetSettings()"></button> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </div> <br /> </div> <!-- ### Tab Tools ### --> <div class="tab-pane main-tab-pane fade select-div" id="nav-tools" role="tabpanel" aria-labelledby="nav-tools-tab"> <div class="container" id="savedAssignments"> <legend data-i18n="files.rfid.savedassignments"></legend> <ul class="list-group" id="rfidListSavedAssignments"> </ul> <hr> </div> <div class="container" id="eraseNvs"> <legend data-i18n="tools.nvserase.title"></legend> <div class="mb-3" data-i18n="[html]tools.nvserase.desc"> <p></p> </div> <div class="text-center"> <button type="submit" class="btn btn-danger" data-i18n="tools.nvserase.button" data-bs-toggle="modal" data-bs-target="#deleteNVSRFIDModal"></button> </div> <hr> </div> <div class="container" id="importNvs"> <legend data-i18n="tools.nvsimport.title"></legend> <form id="nvsUploadForm" action="/upload" enctype="multipart/form-data" method="POST" onsubmit="uploadNVSRFID('nvsUpload'); return false"> <div class="mb-3"> <label for="nvsUpload" data-i18n="tools.nvsimport.desc"></label><br><br> <input type="file" class="form-control-file btn btn-primary" id="nvsUpload" name="nvsUpload" accept=".txt"> </div> <div class="text-center"> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> <hr> </div> <div class="container" id="httpUpdate"> <legend id="legendfwupdate" data-i18n="tools.fwupdate.title"></legend> <form id="firmwareUploadForm" method="POST" enctype="multipart/form-data" action="/update"> <div class="mb-3"> <label for="firmwareUpload" data-i18n="tools.fwupdate.desc"></label><br><br> <input type="file" class="form-control-file btn btn-primary" id="firmwareUpload" name="firmwareUpload" accept=".bin"> </div> <div class="progress upload-progress-bar"> <div id="firmwareUploadProgress" class="progress-bar" role="progressbar" aria-labelledby="legendfwupdate"></div> </div> <br> <div class="text-center"> <button type="submit" class="btn btn-primary" data-i18n="submit"></button> </div> </form> </div> <br /> </div> <!-- ### Tab Help ### --> <div class="tab-pane main-tab-pane fade" id="nav-help" role="tabpanel" aria-labelledby="nav-help-tab"> <div class="container" id="divForum"> <legend data-i18n="help.forum.title"></legend> <p data-i18n="[html]help.forum.desc"></p> </div> <div class="container" id="divSwagger"> <legend data-i18n="help.swagger.title"></legend> <p data-i18n="[html]help.swagger.desc"></p> </div> </div> </div> </body> </html>