This commit is contained in:
e2002
2025-07-11 12:26:04 +03:00
parent f60432a605
commit 297c0c20f5
31 changed files with 240 additions and 532 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1,107 +0,0 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=0.25">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<link rel="apple-touch-icon" type="image/png" href="elogo.png">
<link rel="icon" type="image/png" href="elogo.png">
<link rel="stylesheet" title="base" href="style.css?%VERSION%" type="text/css">
<title>ёRadio - Player</title>
<style> </style>
</head>
<body class="modeweb">
<div class="content">
<div class="logo"></div>
<div id="navbar">
<div class="playerbytton navbutton" id="playlistbutton" data-name="playlist"></div>
<div class="playerbytton navbutton" id="sdbutton" data-name="sdcard"></div>
<div class="playerbytton navbutton" id="settingsbutton" data-name="settings"></div>
</div>
<div class="playerwrap">
<div class="player">
<div id="nameset">&nbsp;</div>
<div id="meta">&nbsp;</div>
<div class="playerbyttonwrap">
<div class="playerbytton" id="prevbutton" data-name="prev"></div>
<div class="playerbytton stopped" id="playbutton" data-name="play"></div>
<div class="playerbytton" id="nextbutton" data-name="next"></div>
<div class="playerbytton" id="volmbutton" data-name="volm"></div>
<div class="playerbytton" id="volpbutton" data-name="volp"></div>
<div class="playerbytton" id="eqalbutton" data-name="equalizer"></div>
</div>
<div id="equalizerwrap">
<div id="equalizerbg" class="hidden">
<ul id="equalizer">
<li>
<li>
balance<span class="eqinfo" id="eqbalinfo">0</span>
<input type="range" id="eqbal" class="slider" data-slaveid="eqbalinfo" name="balance" min="-16" max="16" value="0">
</li>
<li>
<li>
treble<span class="eqinfo" id="eqtrebleinfo">0</span>
<input type="range" id="eqtreble" class="slider" data-slaveid="eqtrebleinfo" name="treble" min="-16" max="16" value="0">
</li>
<li>
middle<span class="eqinfo" id="eqmiddleinfo">0</span>
<input type="range" id="eqmiddle" class="slider" data-slaveid="eqmiddleinfo" name="middle" min="-16" max="16" value="0">
</li>
<li>
bass<span class="eqinfo" id="eqbassinfo">0</span>
<input type="range" id="eqbass" class="slider" data-slaveid="eqbassinfo" name="bass" min="-16" max="16" value="0">
</li>
<li class="formbuttons">
<div class="button" id="accept_button" data-name="equalizer">Acceptable...</div>
</li>
</ul>
</div>
<div id="volnav">
<div id="modeline"><span id="modeweb" class="modeitem" data-name="web">Web</span><span id="modesd" data-name="sd" class="modeitem">SD</span></div>
<input type="range" id="volrange" class="slider" name="volume" data-slaveid="volinfo" min="0" max="254" value="0">
</div>
<div id="sdnav" class="hidden">
<div id="sdposvals">
<div id="sdposvalscurrent">0:00</div>
<div id="snuffle" class="playerbytton active" data-name="snuffle"><span></span></div>
<div id="sdposvalsend">0:00</div>
</div>
<input type="range" id="sdpos" class="slider" name="sdpos" min="0" max="100" value="0">
</div>
<div class="infowrap">
<div class="infoitem">volume: <span id="volinfo">0</span></div>
<div class="infoitem" id="bitinfo">bitrate: 0kBit</div>
<div class="infoitem" id="rsiinfo">rssi: 0dBm</div>
</div>
<ul id="playlist">
</ul>
</div><!--equalizerwrap-->
</div><!--player-->
<div id="pleditorwrap" class="hidden">
<div id="pleditor">
<h2>Playlist Editor<span onclick="showEditor()"></span></h2>
<div id="pleheader"><span class="space"><input type="checkbox" onclick="selectAll(this)" /></span><span class="plename">Name</span><span class="pleurl">URL</span><span class="pleovol">Ovol</span></div>
<ol id="pleditorcontent">
<li class="pleitem">
<span>1.</span>
<input class="pleinput plename" type="text" value="" maxlength="140" />
<input class="pleinput pleurl" type="text" value="" maxlength="140" />
<input class="pleinput pleovol" type="number" min="-30" max="30" step="1" value="0" />
</li>
</ol><!--pleditorcontent-->
<div class="formbuttons">
<label for="file-upload" class="button" data-name="plimport">Import</label><input id="file-upload" type="file" accept=".txt, .csv" onchange="doPlUpload(this)" hidden/>
<div class="button" data-name="plexport">Export</div>
<div class="button" data-name="pladd">Add</div>
<div class="button" data-name="pldel">Remove</div>
<div class="button" data-name="plsubmit">Save</div>
</div>
</div><!--pleditor-->
</div><!--pleditorwrap-->
</div><!--playerwrap-->
<div id="copy">powered by <a target="_blank" href="https://github.com/e2002/yoradio/">ёRadio</a> | v%VERSION%</div>
</div>
<script src="script.js?%VERSION%"></script>
<script src="dragpl.js?%VERSION%"></script>
</body>
</html>

Binary file not shown.

View File

@@ -1,49 +0,0 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, minimum-scale=0.25">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<link rel="apple-touch-icon" type="image/png" href="elogo.png">
<link rel="icon" type="image/png" href="elogo.png">
<link rel="stylesheet" title="base" href="style.css?%VERSION%" type="text/css">
<link rel="stylesheet" title="base" href="ir.css?%VERSION%" type="text/css">
<title>ёRadio - IR Recorder</title>
<style> </style>
</head>
<body>
<div class="content">
<h2 class="irtitle">IR Recorder</h2>
<div class="playerwrap">
<div class="irwrap">
<div id="irremote">
<div class="irblank"></div><div class="irbutton blue">&#9650;</div><div class="irblank"></div>
<div class="irbutton blue">&#9194;</div><div class="irbutton red">&#9199;</div><div class="irbutton blue">&#9193;</div>
<div class="irblank"></div><div class="irbutton blue">&#9660;</div><div class="irblank"></div>
<div class="irbutton">1</div><div class="irbutton">2</div><div class="irbutton">3</div>
<div class="irbutton">4</div><div class="irbutton">5</div><div class="irbutton">6</div>
<div class="irbutton">7</div><div class="irbutton">8</div><div class="irbutton">9</div>
<div class="irbutton red">*</div><div class="irbutton">0</div><div class="irbutton red">#</div>
</div><!--irremote-->
<div id="irform">
<div id="irstartrecord"><h3>Welcome to IR Recorder!</h3>
Press the button on the left<br />to record the code.
<a href="/" class="button" id="done_ir">DONE</a>
</div>
<div id="irrecord" class="hidden">
<h3 id="irrecordtitle"></h3>
<form id="irrecordfields">
<div class="irrecordrow"><div class="irradio" data-id="0"><span></span></div><div class="irrecordvalue">0xAF00B5</div><div class="irclear" onclick="irClear(this)"></div></div>
<div class="irrecordrow"><div class="irradio" data-id="1"><span></span></div><div class="irrecordvalue"></div><div class="irclear" onclick="irClear(this)"></div></div>
<div class="irrecordrow"><div class="irradio" data-id="2"><span></span></div><div class="irrecordvalue"></div><div class="irclear" onclick="irClear(this)"></div></div>
</form>
<div id="protocol"></div>
<div class="button" id="back_ir" onclick="backRecord()">Back</div>
</div>
</div><!--irform-->
</div><!--irwrap-->
</div><!--playerwrap-->
<div id="copy">powered by <a target="_blank" href="https://github.com/e2002/yoradio/">ёRadio</a> | v%VERSION%</div>
</div>
<script src="ir.js?%VERSION%"></script>
</body>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,261 +0,0 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=0.25">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<link rel="apple-touch-icon" type="image/png" href="elogo.png">
<link rel="icon" type="image/png" href="elogo.png">
<link rel="stylesheet" title="base" href="style.css?%VERSION%" type="text/css">
<link rel="stylesheet" title="base" href="settings.css?%VERSION%" type="text/css">
<title>ёRadio - Settings</title>
<style> </style>
</head>
<body>
<div class="content">
<h2 class="pagetitle">SёTTINGS</h2>
<div class="navigation group group_system hidden" id="navigation">
<div class="navitem group group_system hidden" data-target="group_system">system</div>
<div class="navitem group group_display group_nextion hidden" data-target="group_display">screen</div>
<div class="navitem group group_controls hidden" data-target="group_controls">controls</div>
<div class="navitem group group_timezone hidden" data-target="group_timezone">timezone</div>
<div class="navitem group group_wifi hidden" data-target="group_wifi">wifi</div>
<div class="navitem group group_weather hidden" data-target="group_weather">weather</div>
</div>
<div class="playerwrap">
<div class="settingsirwrap" id="settingscontent"><a name="system"></a>
<section class="group group_system hidden" id="group_system">
<div class="title"><span>system</span></div><div class="reset" data-name="system"></div>
<div class="flex-row">
<div class="checkbox off nous" id="smartstart">Smart Start</div>
<div class="checkbox off nous" id="audioinfo">Audio info</div>
<div class="checkbox off nous group group_vu hidden" id="vumeter">VU Meter</div>
</div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">soft ap reboot delay (min)</span>
<span class="inputinfo" id="slsoftapinfo">0</span>
<input type="range" id="slsoftap" class="slider" data-slaveid="slsoftapinfo" name="softap" min="0" max="20" value="0">
</div>
</div>
<div class="flex-row" id="mdnsnamerow">
<div class="inputwrap">
<span class="inputtitle">mDNS name</span>
<input type="text" id="mdnsname" class="textinput inputchange" name="mdnsname" value="" maxlength="24" />
</div>
<div class="button apply hlbutton" data-name="rebootmdns" style=" margin-top: 24px; height: 37px;">save</div>
</div>
<div class="row-title"><span>update</span></div>
<div class="flex-row last">
<div class="button apply" data-name="fwupdate" id="fwupdate">Firmware</div>
<div class="button apply" data-name="webboard" id="webboard">Board</div>
</div>
</section><a name="screen"></a>
<section class="group group_display group_oled group_nextion hidden" id="group_display">
<div class="title"><span>screen</span></div><div class="reset" data-name="screen"></div>
<div class="flex-row">
<div class="checkbox off nous group group_tft hidden" id="flipscreen">Flip screen</div>
<div class="checkbox off nous group group_tft hidden" id="invertdisplay">Invert screen</div>
<div class="checkbox on nous group group_brightness group_oled hidden" id="screenon">Turn on</div>
</div>
<div class="flex-row group group_tft group_oled group_nextion hidden">
<div class="checkbox off nous" id="numplaylist">numbered playlist</div>
</div>
<div class="flex-row group group_brightness hidden">
<div class="inputwrap">
<span class="inputtitle">brightness</span>
<span class="inputinfo" id="slbrightnessinfo">0</span>
<input type="range" id="slbrightness" class="slider" data-slaveid="slbrightnessinfo" name="brightness" min="0" max="100" value="100">
</div>
</div>
<div class="flex-row group group_nokia hidden">
<div class="inputwrap">
<span class="inputtitle">contrast</span>
<span class="inputinfo" id="slcontrastinfo">0</span>
<input type="range" id="slcontrast" class="slider" data-slaveid="slcontrastinfo" name="contrast" min="0" max="100" value="55">
</div>
</div>
<div class="row-title"><span>screensaver</span></div>
<div class="flex-row group group_tft group_oled group_nextion hidden" style="margin-top:20px;">
<div class="inputwrap">
<span class="inputtitle">while not playing</span>
<div class="checkbox off nous" id="screensaverenabled" style="padding-top:16px;"></div>
</div>
<div class="inputwrap">
<span class="inputtitle">blank screen</span>
<div class="checkbox off nous" id="screensaverblank"></div>
</div>
<div class="inputwrap">
<span class="inputtitle">timeout (sec)</span>
<input type="number" id="screensavertimeout" class="textinput inputchange" name="screensavertimeout" value="" maxlength="3" min="5" max="65520" />
</div>
</div>
<div class="flex-row group group_tft group_oled group_nextion hidden">
<div class="inputwrap">
<span class="inputtitle">while playing</span>
<div class="checkbox off nous" id="screensaverplayingenabled"></div>
</div>
<div class="inputwrap">
<span class="inputtitle">blank screen</span>
<div class="checkbox off nous" id="screensaverplayingblank"></div>
</div>
<div class="inputwrap">
<span class="inputtitle">timeout (min)</span>
<input type="number" id="screensaverplayingtimeout" class="textinput inputchange" name="screensaverplayingtimeout" value="" maxlength="3" min="1" max="1080" />
</div>
</div>
</section>
<section class="group group_controls hidden" id="group_controls">
<div class="title"><span>Controls</span></div><div class="reset" data-name="controls"></div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">volume steps</span>
<span class="inputinfo" id="slvolstepsinfo">0</span>
<input type="range" id="slvolsteps" class="slider" data-slaveid="slvolstepsinfo" name="volsteps" min="1" max="10" value="1">
</div>
</div>
<div class="flex-row group group_touch hidden">
<div class="checkbox off nous" id="fliptouch">Flip touch</div>
<div class="checkbox off nous" id="dbgtouch">Debug touch</div>
</div>
<div class="flex-row group group_encoder hidden">
<div class="inputwrap">
<span class="inputtitle">encoder acceleration</span>
<span class="inputinfo" id="slencaccelerationinfo">0</span>
<input type="range" id="slencacceleration" class="slider" data-slaveid="slencaccelerationinfo" name="encacceleration" min="0" max="700" value="200">
</div>
</div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">one-click station switching</span>
<div class="checkbox off nous" id="oneclickswitching"></div>
</div>
</div>
<div class="flex-row group group_ir hidden">
<div class="inputwrap">
<span class="inputtitle">IR tolerance [<a href="https://crankyoldgit.github.io/IRremoteESP8266/doxygen/html/" target="_blank">docs</a>]</span>
<span class="inputinfo" id="slirtlpinfo">0</span>
<input type="range" id="slirtlp" class="slider" data-slaveid="slirtlpinfo" name="irtlp" min="10" max="80" value="0">
</div>
</div>
<div class="flex-row group group_ir last hidden">
<div class="button apply" data-name="setupir">IR Recorder</div>
</div>
</section><a name="timezone"></a>
<section class="group group_timezone hidden" id="group_timezone">
<div class="title"><span>timezone</span></div><div class="reset" data-name="timezone"></div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">hours</span>
<input type="number" id="tzhour" class="textinput" name="tzhour" value="" maxlength="3" min="-12" max="14" />
</div>
<div class="inputwrap">
<span class="inputtitle">minutes</span>
<input type="number" id="tzmin" class="textinput" name="tzmin" value="" maxlength="2" min="0" max="45" step="15" />
</div>
</div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">ntp server #1</span>
<input type="text" id="sntp1" class="textinput" name="sntp1" value="" maxlength="34" />
</div>
<div class="inputwrap">
<span class="inputtitle">ntp server #2</span>
<input type="text" id="sntp2" class="textinput" name="sntp2" value="" maxlength="34" />
</div>
</div>
<div class="flex-row last">
<div class="button apply hlbutton" data-name="applytz" id="applytz">Apply</div>
</div>
</section><a name="wifi"></a>
<section class="group group_wifi hidden" id="group_wifi">
<div class="title"><span>Wi-Fi</span></div>
<div class="flex-row credential">
<div class="inputwrap">
<span class="inputtitle">ssid</span>
<input type="text" id="ssid0" class="textinput" name="ssid" value="" maxlength="30" autocomplete="off" />
</div>
<div class="inputwrap">
<span class="inputtitle">pass</span>
<input type="text" id="pass0" class="textinput" name="pass" value="" placeholder="**********" maxlength="40" autocomplete="off" readonly="readonly" data-pass="" onfocus="this.removeAttribute('readonly');" />
</div>
</div>
<div class="flex-row credential">
<div class="inputwrap">
<span class="inputtitle">ssid</span>
<input type="text" id="ssid1" class="textinput" name="ssid" maxlength="30" autocomplete="off" />
</div>
<div class="inputwrap">
<span class="inputtitle">pass</span>
<input type="text" id="pass1" class="textinput" name="pass" value="" placeholder="**********" maxlength="40" autocomplete="off" readonly="readonly" data-pass="" onfocus="this.removeAttribute('readonly');" />
</div>
</div>
<div class="flex-row credential">
<div class="inputwrap">
<span class="inputtitle">ssid</span>
<input type="text" id="ssid2" class="textinput" name="ssid" value="" maxlength="30" autocomplete="off" />
</div>
<div class="inputwrap">
<span class="inputtitle">pass</span>
<input type="text" id="pass2" class="textinput" name="pass" value="" placeholder="**********" maxlength="40" autocomplete="off" readonly="readonly" data-pass="" onfocus="this.removeAttribute('readonly');" />
</div>
</div>
<div class="flex-row credential">
<div class="inputwrap">
<span class="inputtitle">ssid</span>
<input type="text" id="ssid3" class="textinput" name="ssid" value="" maxlength="30" autocomplete="off" />
</div>
<div class="inputwrap">
<span class="inputtitle">pass</span>
<input type="text" id="pass3" class="textinput" name="pass" value="" placeholder="**********" maxlength="40" autocomplete="off" readonly="readonly" data-pass="" onfocus="this.removeAttribute('readonly');" />
</div>
</div>
<div class="flex-row credential">
<div class="inputwrap">
<span class="inputtitle">ssid</span>
<input type="text" id="ssid4" class="textinput" name="ssid" value="" maxlength="30" autocomplete="off" />
</div>
<div class="inputwrap">
<span class="inputtitle">pass</span>
<input type="text" id="pass4" class="textinput" name="pass" value="" placeholder="**********" maxlength="40" autocomplete="off" readonly="readonly" data-pass="" onfocus="this.removeAttribute('readonly');" />
</div>
</div>
<div class="flex-row last">
<input id="file-upload" type="file" accept=".txt, .csv" hidden/>
<div class="button group group_system hidden" data-name="wifiexport">Export</div>
<div class="button hlbutton" data-name="wifiupload">Save &amp; Reboot</div>
</div>
</section><a name="weather"></a>
<section class="group group_weather hidden" id="group_weather">
<div class="title"><span>Weather</span></div><div class="reset" data-name="weather"></div>
<div class="flex-row center">
<div class="checkbox off nous" id="showweather">show weather</div>
</div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">latitude</span>
<input type="number" id="weatherlat" class="textinput" name="weatherlat" value="" min="-90" max="90" step="0.0001" />
</div>
<div class="inputwrap">
<span class="inputtitle">longitude</span>
<input type="number" id="weatherlon" class="textinput" name="weatherlon" value="" min="-90" max="90" step="0.0001" />
</div>
</div>
<div class="flex-row">
<div class="inputwrap">
<span class="inputtitle">openweathermap api key [<a href="https://openweathermap.org/appid" target="_blank">link</a>]</span>
<input type="text" id="weatherkey" class="textinput" name="weatherkey" value="" />
</div>
</div>
<div class="flex-row last">
<div class="button apply hlbutton" data-name="applyweather">Apply</div>
</div>
</section><a name="controls"></a>
<div class="hr">&nbsp;</div>
</div>
</div><!--playerwrap-->
<div class="button apply done group group_system hidden" data-name="settingsdone" id="settingsdone">done</div>
<div id="copy">powered by <a target="_blank" href="https://github.com/e2002/yoradio/">ёRadio</a> | v%VERSION%</div>
</div>
<script src="script.js?%VERSION%"></script>
</body>

Binary file not shown.

View File

@@ -0,0 +1,16 @@
:root {
--main-bg-color: #010101;
--main-text-color: #cccccc;
--main-hl-color: #ffffff;
--odd-bg-color: #272727;
--accent-color: #e3d25f;
--accent-dark: #ad9838;
--accent-text-color: #000000;
--input-border: #2d2d2d;
--logo: #e3d25f;
--logo-red: #ff0000;
--logo-shadow: #a89c46;
--playlist-hover: #323232;
--section-gradient: #111111;
--section-border: #555555;
}

View File

@@ -1,38 +0,0 @@
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=0.25">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<link rel="apple-touch-icon" type="image/png" href="elogo.png">
<link rel="icon" type="image/png" href="elogo.png">
<link rel="stylesheet" title="base" href="style.css?%VERSION%" type="text/css">
<title>ёRadio - Update</title>
<style>
</style>
</head>
<body>
<div class="content">
<div class="logo"></div>
<div class="playerwrap">
<div class="player" id="uploaderwrap">
<div id="uploadstatus">Please choose firmware or SPIFFS *.bin file</div>
<form id="updateform" method="POST" action="/update" enctype="multipart/form-data">
<div class="row">
<label for="uploadtype1"><input type="radio" id="uploadtype1" name="updatetarget" value="fw" checked /><span class="checkmark"></span> firmware</label>
<label for="contactChoice2"><input type="radio" id="uploadtype2" name="updatetarget" value="spiffs" /><span class="checkmark"></span> SPIFFS</label>
</div>
<div class="row rowinput">
<input id="binfile" type="file" accept=".bin,.hex" name="update" />
<input type="button" class="button" value="Update" onclick="doUpdate(this)">
</div>
</form>
<progress id="updateprogress" max="100" value="70" hidden></progress>
<a href="/" class="button" id="update_cancel_button">Cancel</a>
</div><!--player-->
</div><!--playerwrap-->
<div id="copy">powered by <a target="_blank" href="https://github.com/e2002/yoradio/">ёRadio</a> | v%VERSION%</div>
</div>
<script src="script.js?%VERSION%"></script>
</body>
</html>

Binary file not shown.