mirror of
https://github.com/ADElectronics/RTL00_WEB_WS2812.git
synced 2025-07-31 20:31:07 +00:00
first release
This commit is contained in:
parent
9e39a46764
commit
8d743effde
63 changed files with 90030 additions and 93047 deletions
|
|
@ -1,5 +1,21 @@
|
|||
body {font-family: Arial;}
|
||||
form{
|
||||
width:100%;
|
||||
}
|
||||
#child_page{
|
||||
margin:0 auto;width:700px;height:800px;display: block;
|
||||
}
|
||||
|
||||
#picker-wrapper{
|
||||
position:relative;
|
||||
float:left;
|
||||
width:100%;
|
||||
|
||||
}
|
||||
#picker{
|
||||
margin:0 auto;width:300px;
|
||||
display: block;
|
||||
}
|
||||
.hblockcont {
|
||||
text-align:center;
|
||||
align:center;
|
||||
|
|
@ -46,11 +62,18 @@ fieldset {
|
|||
}
|
||||
|
||||
.tabcontent {
|
||||
display: none;
|
||||
/*display: none;*/
|
||||
padding: 6px 12px;
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
}
|
||||
.tabcontentframe {
|
||||
border-style:none;
|
||||
width:100%;
|
||||
margin-top:20px;
|
||||
height:1150px;
|
||||
border-spacing:0px;
|
||||
}
|
||||
|
||||
.filtercontent {
|
||||
display: none;
|
||||
|
|
@ -95,7 +118,7 @@ table {
|
|||
font-family: arial, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
|
||||
}
|
||||
|
||||
.td1st {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
function openTab(evt, tabID)
|
||||
/*
|
||||
function openTab(evt, tabID)
|
||||
{
|
||||
// Показываем выбранный контент
|
||||
var i, tabcontent, tablinks;
|
||||
|
|
@ -19,7 +20,7 @@ function openTab(evt, tabID)
|
|||
}
|
||||
evt.currentTarget.className += " active";
|
||||
}
|
||||
|
||||
*/
|
||||
function openFilterSettings(chkbx)
|
||||
{
|
||||
var i, content;
|
||||
|
|
@ -128,9 +129,9 @@ function sendHSV(HSV)
|
|||
|
||||
function loadHSV(picker, HSV)
|
||||
{
|
||||
var hue = HSV[0] / 255;
|
||||
var sat = HSV[1] / 255;
|
||||
var val = HSV[2] / 255;
|
||||
var hue = HSV.ws_filt_const_hue / 255;
|
||||
var sat = HSV.ws_filt_const_sat / 255;
|
||||
var val = HSV.ws_filt_const_value / 255;
|
||||
|
||||
var rgb = hsvToRgb(hue, sat, val);
|
||||
var hex = '#' + byteToHex(rgb[0]) + byteToHex(rgb[1]) + byteToHex(rgb[2]);
|
||||
|
|
|
|||
109
Firmware/RTLGDB/WEBFiles/filters.html
Normal file
109
Firmware/RTLGDB/WEBFiles/filters.html
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<title>Глупая гирлянда - Фильтры</title>
|
||||
<link href="elements.css" rel="stylesheet">
|
||||
<style></style>
|
||||
</head>
|
||||
<body>
|
||||
<form method="post">
|
||||
<fieldset>
|
||||
<input type="checkbox" class="checkbox" id="filt0" name='ws_filt_rbw_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt0">Радуга</label>
|
||||
<input type="checkbox" class="checkbox" id="filt1" name='ws_filt_const_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt1">Оттенок</label>
|
||||
<input type="checkbox" class="checkbox" id="filt2" name='ws_filt_fd_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt2">Выцветание</label>
|
||||
<input type="checkbox" class="checkbox" id="filt3" name='ws_filt_wave_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt3">Волна</label>
|
||||
</fieldset>
|
||||
|
||||
<div id="filt0" class="filtercontent">
|
||||
<h4 align="center">Радуга</h4>
|
||||
Разместить полную радугу на пикселях, ед. :<br>
|
||||
<input type="range" class="range" step="1" min="10" name='ws_filt_rbw_huesteps' max="~ws_striplen~" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
Скорость смены оттенка:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_rbw_cyclesteps' max="10" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
</div>
|
||||
|
||||
<div id="filt1" class="filtercontent">
|
||||
<h4 align="center">Оттенок</h4>
|
||||
<canvas id="picker"></canvas><br>
|
||||
<input id="color" value="#00ffdb">
|
||||
</div>
|
||||
|
||||
<div id="filt2" class="filtercontent">
|
||||
<h4 align="center">Выцветание</h4>
|
||||
Скорость смены яркости:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_cyclesteps' max="127" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
Минимальная яркость:<br>
|
||||
<input type="range" class="range" min="0" name='ws_filt_fd_min' max="254" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
Максимальная яркость:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_max' max="255" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
<!--
|
||||
Шанс срабатывания:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_chance' onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
-->
|
||||
</div>
|
||||
|
||||
<div id="filt3" class="filtercontent">
|
||||
<h4 align="center">Волна</h4>
|
||||
Скорость:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_wave_step' max="10" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
Длина волны :<br>
|
||||
<input type="range" class="range" step="1" min="10" max="128" name='ws_filt_wave_wavesteps' max="~ws_striplen~" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="colorpicker.min.js"></script>
|
||||
<script src="elements.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* https://github.com/NC22/HTML5-Color-Picker/wiki/Документация */
|
||||
var colorPickerT = new KellyColorPicker(
|
||||
{
|
||||
place: 'picker',
|
||||
input: 'color',
|
||||
size: 300,
|
||||
});
|
||||
|
||||
var onchange = function (self) {
|
||||
var hsv = colorPickerT.getCurColorHsv();
|
||||
sendHSV(hsv);
|
||||
};
|
||||
//colorPickerT.addUserEvent("change", onchange);
|
||||
colorPickerT.addUserEvent("mouseuph", onchange);
|
||||
colorPickerT.addUserEvent("mouseupsv", onchange);
|
||||
|
||||
var cfg_hsv =
|
||||
{
|
||||
ws_filt_const_hue: "~ws_filt_const_hue~",
|
||||
ws_filt_const_sat: "~ws_filt_const_sat~",
|
||||
ws_filt_const_value: "~ws_filt_const_value~"
|
||||
}
|
||||
loadHSV(colorPickerT, cfg_hsv);
|
||||
|
||||
var cfg_f1 =
|
||||
{
|
||||
ws_filt_rbw_enbl: "~ws_filt_rbw_enbl~",
|
||||
ws_filt_rbw_huesteps: "~ws_filt_rbw_huesteps~",
|
||||
ws_filt_rbw_cyclesteps: "~ws_filt_rbw_cyclesteps~",
|
||||
|
||||
ws_filt_fd_enbl: "~ws_filt_fd_enbl~",
|
||||
ws_filt_fd_cyclesteps: "~ws_filt_fd_cyclesteps~",
|
||||
ws_filt_fd_min: "~ws_filt_fd_min~",
|
||||
ws_filt_fd_max: "~ws_filt_fd_max~",
|
||||
//ws_filt_fd_chance: "~ws_filt_fd_chance~",
|
||||
|
||||
ws_filt_wave_enbl: "~ws_filt_wave_enbl~",
|
||||
ws_filt_wave_step: "~ws_filt_wave_step~",
|
||||
ws_filt_wave_wavesteps: "~ws_filt_wave_wavesteps~",
|
||||
|
||||
ws_filt_const_enbl: "~ws_filt_const_enbl~",
|
||||
}
|
||||
setFormValues(document.forms[0], cfg_f1);
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -4,7 +4,10 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<title>Глупая гирлянда</title>
|
||||
<link href="elements.css" rel="stylesheet">
|
||||
<style></style>
|
||||
<style>
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
|
@ -13,244 +16,38 @@
|
|||
</div>
|
||||
|
||||
<div class="tab" align="center">
|
||||
<button class="tablinks" onclick="openTab(event, 0)">Режим работы</button>
|
||||
<button class="tablinks" onclick="openTab(event, 1)">Настройки Wi-Fi</button>
|
||||
<button class="tablinks" onclick="page_select(event, 0)">Режим работы</button>
|
||||
<button class="tablinks" onclick="page_select(event, 1)">Настройки Wi-Fi</button>
|
||||
</div>
|
||||
|
||||
<div style="width:100%;">
|
||||
<iframe id="child_page" frameborder="0" scrolling="auto" ></iframe>
|
||||
</div>
|
||||
<div id="0" class="tabcontent" align="center">
|
||||
<form method="post">
|
||||
<fieldset>
|
||||
<input type="checkbox" class="checkbox" id="filt0" name='ws_filt_rbw_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt0">Радуга</label>
|
||||
<input type="checkbox" class="checkbox" id="filt1" name='ws_filt_const_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt1">Оттенок</label>
|
||||
<input type="checkbox" class="checkbox" id="filt2" name='ws_filt_fd_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt2">Выцветание</label>
|
||||
<input type="checkbox" class="checkbox" id="filt3" name='ws_filt_wave_enbl' onclick="openFilterSettings(this)" />
|
||||
<label for="filt3">Волна</label>
|
||||
</fieldset>
|
||||
|
||||
<div id="filt0" class="filtercontent">
|
||||
<h4 align="center">Радуга</h4>
|
||||
Разместить полную радугу на пикселях, ед. :<br>
|
||||
<input type="range" class="range" step="1" min="10" name='ws_filt_rbw_huesteps' max="~ws_striplen~" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
Скорость смены оттенка:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_rbw_cyclesteps' max="10" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
</div>
|
||||
|
||||
<div id="filt1" class="filtercontent">
|
||||
<h4 align="center">Оттенок</h4>
|
||||
<canvas id="picker"></canvas><br>
|
||||
<input id="color" value="#007fff">
|
||||
</div>
|
||||
|
||||
<div id="filt2" class="filtercontent">
|
||||
<h4 align="center">Выцветание</h4>
|
||||
Скорость смены яркости:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_cyclesteps' max="127" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
Минимальная яркость:<br>
|
||||
<input type="range" class="range" min="0" name='ws_filt_fd_min' max="254" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
Максимальная яркость:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_max' max="255" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
<!--
|
||||
Шанс срабатывания:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_fd_chance' onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
-->
|
||||
</div>
|
||||
|
||||
<div id="filt3" class="filtercontent">
|
||||
<h4 align="center">Волна</h4>
|
||||
Скорость:<br>
|
||||
<input type="range" class="range" min="1" name='ws_filt_wave_step' max="10" onchange="sendFilterParam(this.name, this.value)" /><br>
|
||||
Длина волны :<br>
|
||||
<input type="range" class="range" step="1" min="10" max="128" name='ws_filt_wave_wavesteps' max="~ws_striplen~" onchange="sendFilterParam(this.name, this.value)"/><br>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div id="1" class="tabcontent" align="center">
|
||||
<form method="post">
|
||||
<table>
|
||||
<tr>
|
||||
<td class="td1st">Режим Wi-Fi</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_mode'>
|
||||
<option value='1'>Клиент</option>
|
||||
<option value='2'>Точка доступа</option>
|
||||
<option value='3'>Клиент + Точка доступа</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IEEE PHY</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_bgn'>
|
||||
<option value='1'>802.11b</option>
|
||||
<option value='3'>802.11g</option>
|
||||
<option value='11'>802.11n</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Мощность передачи</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_txpow'>
|
||||
<option value='0'>100%</option>
|
||||
<option value='1'>75%</option>
|
||||
<option value='2'>50%</option>
|
||||
<option value='3'>25%</option>
|
||||
<option value='4'>12.5%</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="td1st"><b>Настройки клиента:</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">SSID</td>
|
||||
<td>
|
||||
<input name="wifi_st_ssid" class="inputtext" maxlength='31' value='~wifi_st_ssid~'/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Пароль</td>
|
||||
<td>
|
||||
<input name="wifi_st_psw" class="inputtext" maxlength='63' value='~wifi_st_psw~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Аутентификация</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_st_auth'>
|
||||
<option value='0'>Open</option>
|
||||
<option value='1'>WEP PSK</option>
|
||||
<option value='2'>WEP Shared</option>
|
||||
<option value='3'>WPA TKIP</option>
|
||||
<option value='4'>WPA AES</option>
|
||||
<option value='5'>WPA2 TKIP</option>
|
||||
<option value='6'>WPA2 AES</option>
|
||||
<option value='7'>WPA2 Mixed</option>
|
||||
<option value='8'>WPA2/WPA AES</option>
|
||||
<option value='9'>Unknown</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IP</td>
|
||||
<td>
|
||||
<input name="wifi_st_ip" class="inputtext" maxlength='31' value='~wifi_st_ip~' />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="td1st"><b>Настройки точки доступа:</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">SSID</td>
|
||||
<td>
|
||||
<input name="wifi_ap_ssid" class="inputtext" maxlength='31' value='~wifi_ap_ssid~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Пароль</td>
|
||||
<td>
|
||||
<input name="wifi_ap_psw" class="inputtext" maxlength='63' value='~wifi_ap_psw~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Аутентификация</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_ap_auth'>
|
||||
<option value='0'>Open</option>
|
||||
<option value='1'>WPA_WPA2_PSK</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IP</td>
|
||||
<td>
|
||||
<input name="wifi_ap_ip" class="inputtext" maxlength='31' value='~wifi_ap_ip~' />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<input type='hidden' name='wifi_newcfg' value='0xffff' />
|
||||
<button class="button">Применить...</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script src="colorpicker.min.js"></script>
|
||||
<script src="elements.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* https://github.com/NC22/HTML5-Color-Picker/wiki/Документация */
|
||||
var colorPickerT = new KellyColorPicker(
|
||||
function page_select(evt, tabID)
|
||||
{
|
||||
place: 'picker',
|
||||
input: 'color',
|
||||
size: 300,
|
||||
});
|
||||
|
||||
var onchange = function (self)
|
||||
{
|
||||
var hsv = colorPickerT.getCurColorHsv();
|
||||
sendHSV(hsv);
|
||||
};
|
||||
//colorPickerT.addUserEvent("change", onchange);
|
||||
colorPickerT.addUserEvent("mouseuph", onchange);
|
||||
colorPickerT.addUserEvent("mouseupsv", onchange);
|
||||
// Выделяем выбранную кнопку
|
||||
tablinks = document.getElementsByClassName("tablinks");
|
||||
for (i = 0; i < tablinks.length; i++) {
|
||||
tablinks[i].className = tablinks[i].className.replace(" active", "");
|
||||
}
|
||||
evt.currentTarget.className += " active";
|
||||
|
||||
// Показываем выбранный контент
|
||||
if (tabID == '0') document.getElementById("child_page").src = "filters.html";
|
||||
else if (tabID == '1') document.getElementById("child_page").src = "settings.html";
|
||||
}
|
||||
|
||||
var cfg_f0 =
|
||||
{
|
||||
ws_isenable: "~ws_isenable~",
|
||||
}
|
||||
setFormValues(document.getElementsByName("ws_isenable"), cfg_f0);
|
||||
|
||||
var cfg_f1 =
|
||||
{
|
||||
ws_filt_rbw_enbl: "~ws_filt_rbw_enbl~",
|
||||
ws_filt_rbw_huesteps: "~ws_filt_rbw_huesteps~",
|
||||
ws_filt_rbw_cyclesteps: "~ws_filt_rbw_cyclesteps~",
|
||||
|
||||
ws_filt_fd_enbl: "~ws_filt_fd_enbl~",
|
||||
ws_filt_fd_cyclesteps: "~ws_filt_fd_cyclesteps~",
|
||||
ws_filt_fd_min: "~ws_filt_fd_min~",
|
||||
ws_filt_fd_max: "~ws_filt_fd_max~",
|
||||
//ws_filt_fd_chance: "~ws_filt_fd_chance~",
|
||||
|
||||
ws_filt_wave_enbl: "~ws_filt_wave_enbl~",
|
||||
ws_filt_wave_step: "~ws_filt_wave_step~",
|
||||
ws_filt_wave_wavesteps: "~ws_filt_wave_wavesteps~"
|
||||
}
|
||||
setFormValues(document.forms[0], cfg_f1);
|
||||
|
||||
var cfg_f2 =
|
||||
{
|
||||
wifi_mode: "~wifi_mode~",
|
||||
wifi_bgn: "~wifi_bgn~",
|
||||
wifi_txpow: "~wifi_txpow~",
|
||||
wifi_st_ssid: "~wifi_st_ssid~",
|
||||
wifi_st_psw: "~wifi_st_psw~",
|
||||
wifi_st_auth: "~wifi_st_auth~",
|
||||
wifi_st_ip: "~wifi_st_ip~",
|
||||
wifi_ap_ssid: "~wifi_ap_ssid~",
|
||||
wifi_ap_psw: "~wifi_ap_psw~",
|
||||
wifi_ap_auth: "~wifi_ap_auth~",
|
||||
wifi_ap_ip: "~wifi_ap_ip~"
|
||||
}
|
||||
setFormValues(document.forms[1], cfg_f2);
|
||||
|
||||
var cfg_hsv =
|
||||
{
|
||||
ws_filt_const_hue: "~ws_filt_const_hue~",
|
||||
ws_filt_const_sat: "~ws_filt_const_sat~",
|
||||
ws_filt_const_value: "~ws_filt_const_value~"
|
||||
}
|
||||
loadHSV(colorPickerT, cfg_hsv);
|
||||
document.addEventListener('DOMContentLoaded', function()
|
||||
{
|
||||
setFormValues(document.getElementsByName("ws_isenable"), cfg_f0);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
45
Firmware/RTLGDB/WEBFiles/multirange.css
Normal file
45
Firmware/RTLGDB/WEBFiles/multirange.css
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
@supports (--css: variables) {
|
||||
input[type="range"].multirange {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
input[type="range"].multirange.original {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
input[type="range"].multirange.original::-webkit-slider-thumb {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
input[type="range"].multirange.original::-moz-range-thumb {
|
||||
transform: scale(1); /* FF doesn't apply position it seems */
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
input[type="range"].multirange::-moz-range-track {
|
||||
border-color: transparent; /* needed to switch FF to "styleable" control */
|
||||
}
|
||||
|
||||
input[type="range"].multirange.ghost {
|
||||
position: relative;
|
||||
background: var(--track-background);
|
||||
--track-background: linear-gradient(to right,
|
||||
transparent var(--low), var(--range-color) 0,
|
||||
var(--range-color) var(--high), transparent 0
|
||||
) no-repeat 0 45% / 100% 40%;
|
||||
--range-color: hsl(190, 80%, 40%);
|
||||
}
|
||||
|
||||
input[type="range"].multirange.ghost::-webkit-slider-runnable-track {
|
||||
background: var(--track-background);
|
||||
}
|
||||
|
||||
input[type="range"].multirange.ghost::-moz-range-track {
|
||||
background: var(--track-background);
|
||||
}
|
||||
|
||||
}
|
||||
86
Firmware/RTLGDB/WEBFiles/multirange.js
Normal file
86
Firmware/RTLGDB/WEBFiles/multirange.js
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
(function() {
|
||||
"use strict";
|
||||
|
||||
var supportsMultiple = self.HTMLInputElement && "valueLow" in HTMLInputElement.prototype;
|
||||
|
||||
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value");
|
||||
|
||||
self.multirange = function(input) {
|
||||
if (supportsMultiple || input.classList.contains("multirange")) {
|
||||
return;
|
||||
}
|
||||
|
||||
var value = input.getAttribute("value");
|
||||
var values = value === null ? [] : value.split(",");
|
||||
var min = +(input.min || 0);
|
||||
var max = +(input.max || 100);
|
||||
var ghost = input.cloneNode();
|
||||
|
||||
input.classList.add("multirange", "original");
|
||||
ghost.classList.add("multirange", "ghost");
|
||||
|
||||
input.value = values[0] || min + (max - min) / 2;
|
||||
ghost.value = values[1] || min + (max - min) / 2;
|
||||
|
||||
input.parentNode.insertBefore(ghost, input.nextSibling);
|
||||
|
||||
Object.defineProperty(input, "originalValue", descriptor.get ? descriptor : {
|
||||
// Fuck you Safari >:(
|
||||
get: function() { return this.value; },
|
||||
set: function(v) { this.value = v; }
|
||||
});
|
||||
|
||||
Object.defineProperties(input, {
|
||||
valueLow: {
|
||||
get: function() { return Math.min(this.originalValue, ghost.value); },
|
||||
set: function(v) { this.originalValue = v; },
|
||||
enumerable: true
|
||||
},
|
||||
valueHigh: {
|
||||
get: function() { return Math.max(this.originalValue, ghost.value); },
|
||||
set: function(v) { ghost.value = v; },
|
||||
enumerable: true
|
||||
}
|
||||
});
|
||||
|
||||
if (descriptor.get) {
|
||||
// Again, fuck you Safari
|
||||
Object.defineProperty(input, "value", {
|
||||
get: function() { return this.valueLow + "," + this.valueHigh; },
|
||||
set: function(v) {
|
||||
var values = v.split(",");
|
||||
this.valueLow = values[0];
|
||||
this.valueHigh = values[1];
|
||||
update();
|
||||
},
|
||||
enumerable: true
|
||||
});
|
||||
}
|
||||
|
||||
if (typeof input.oninput === "function") {
|
||||
ghost.oninput = input.oninput.bind(input);
|
||||
}
|
||||
|
||||
function update() {
|
||||
ghost.style.setProperty("--low", 100 * ((input.valueLow - min) / (max - min)) + 1 + "%");
|
||||
ghost.style.setProperty("--high", 100 * ((input.valueHigh - min) / (max - min)) - 1 + "%");
|
||||
}
|
||||
|
||||
input.addEventListener("input", update);
|
||||
ghost.addEventListener("input", update);
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
multirange.init = function() {
|
||||
[].slice.call(document.querySelectorAll("input[type=range][multiple]:not(.multirange)")).forEach(multirange);
|
||||
}
|
||||
|
||||
if (document.readyState == "loading") {
|
||||
document.addEventListener("DOMContentLoaded", multirange.init);
|
||||
}
|
||||
else {
|
||||
multirange.init();
|
||||
}
|
||||
|
||||
})();
|
||||
1
Firmware/RTLGDB/WEBFiles/multirange.min.js
vendored
Normal file
1
Firmware/RTLGDB/WEBFiles/multirange.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
!function(){"use strict";var e=self.HTMLInputElement&&"valueLow"in HTMLInputElement.prototype,t=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");self.multirange=function(n){function i(){o.style.setProperty("--low",100*((n.valueLow-a)/(r-a))+1+"%"),o.style.setProperty("--high",100*((n.valueHigh-a)/(r-a))-1+"%")}if(!e&&!n.classList.contains("multirange")){var u=n.getAttribute("value"),l=null===u?[]:u.split(","),a=+(n.min||0),r=+(n.max||100),o=n.cloneNode();n.classList.add("multirange","original"),o.classList.add("multirange","ghost"),n.value=l[0]||a+(r-a)/2,o.value=l[1]||a+(r-a)/2,n.parentNode.insertBefore(o,n.nextSibling),Object.defineProperty(n,"originalValue",t.get?t:{get:function(){return this.value},set:function(e){this.value=e}}),Object.defineProperties(n,{valueLow:{get:function(){return Math.min(this.originalValue,o.value)},set:function(e){this.originalValue=e},enumerable:!0},valueHigh:{get:function(){return Math.max(this.originalValue,o.value)},set:function(e){o.value=e},enumerable:!0}}),t.get&&Object.defineProperty(n,"value",{get:function(){return this.valueLow+","+this.valueHigh},set:function(e){var t=e.split(",");this.valueLow=t[0],this.valueHigh=t[1],i()},enumerable:!0}),"function"==typeof n.oninput&&(o.oninput=n.oninput.bind(n)),n.addEventListener("input",i),o.addEventListener("input",i),i()}},multirange.init=function(){[].slice.call(document.querySelectorAll("input[type=range][multiple]:not(.multirange)")).forEach(multirange)},"loading"==document.readyState?document.addEventListener("DOMContentLoaded",multirange.init):multirange.init()}();
|
||||
144
Firmware/RTLGDB/WEBFiles/settings.html
Normal file
144
Firmware/RTLGDB/WEBFiles/settings.html
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<title>Глупая гирлянда - Настройки</title>
|
||||
<link href="elements.css" rel="stylesheet">
|
||||
<style></style>
|
||||
</head>
|
||||
<body>
|
||||
<form method="post">
|
||||
<table>
|
||||
<tr>
|
||||
<td class="td1st">Режим Wi-Fi</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_mode'>
|
||||
<option value='1'>Клиент</option>
|
||||
<option value='2'>Точка доступа</option>
|
||||
<option value='3'>Клиент + Точка доступа</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IEEE PHY</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_bgn'>
|
||||
<option value='1'>802.11b</option>
|
||||
<option value='3'>802.11g</option>
|
||||
<option value='11'>802.11n</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Мощность передачи</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_txpow'>
|
||||
<option value='0'>100%</option>
|
||||
<option value='1'>75%</option>
|
||||
<option value='2'>50%</option>
|
||||
<option value='3'>25%</option>
|
||||
<option value='4'>12.5%</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="td1st"><b>Настройки клиента:</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">SSID</td>
|
||||
<td>
|
||||
<input name="wifi_st_ssid" class="inputtext" maxlength='31' value='~wifi_st_ssid~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Пароль</td>
|
||||
<td>
|
||||
<input name="wifi_st_psw" class="inputtext" maxlength='63' value='~wifi_st_psw~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Аутентификация</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_st_auth'>
|
||||
<option value='0'>Open</option>
|
||||
<option value='1'>WEP PSK</option>
|
||||
<option value='2'>WEP Shared</option>
|
||||
<option value='3'>WPA TKIP</option>
|
||||
<option value='4'>WPA AES</option>
|
||||
<option value='5'>WPA2 TKIP</option>
|
||||
<option value='6'>WPA2 AES</option>
|
||||
<option value='7'>WPA2 Mixed</option>
|
||||
<option value='8'>WPA2/WPA AES</option>
|
||||
<option value='9'>Unknown</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IP</td>
|
||||
<td>
|
||||
<input name="wifi_st_ip" class="inputtext" maxlength='31' value='~wifi_st_ip~' />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="td1st"><b>Настройки точки доступа:</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">SSID</td>
|
||||
<td>
|
||||
<input name="wifi_ap_ssid" class="inputtext" maxlength='31' value='~wifi_ap_ssid~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Пароль</td>
|
||||
<td>
|
||||
<input name="wifi_ap_psw" class="inputtext" maxlength='63' value='~wifi_ap_psw~' />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">Аутентификация</td>
|
||||
<td>
|
||||
<select class="select" name='wifi_ap_auth'>
|
||||
<option value='0'>Open</option>
|
||||
<option value='1'>WPA_WPA2_PSK</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="td1st">IP</td>
|
||||
<td>
|
||||
<input name="wifi_ap_ip" class="inputtext" maxlength='31' value='~wifi_ap_ip~' />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<input type='hidden' name='wifi_newcfg' value='0xffff' />
|
||||
<button class="button">Применить...</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<script src="colorpicker.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var cfg_f2 =
|
||||
{
|
||||
wifi_mode: "~wifi_mode~",
|
||||
wifi_bgn: "~wifi_bgn~",
|
||||
wifi_txpow: "~wifi_txpow~",
|
||||
wifi_st_ssid: "~wifi_st_ssid~",
|
||||
wifi_st_psw: "~wifi_st_psw~",
|
||||
wifi_st_auth: "~wifi_st_auth~",
|
||||
wifi_st_ip: "~wifi_st_ip~",
|
||||
wifi_ap_ssid: "~wifi_ap_ssid~",
|
||||
wifi_ap_psw: "~wifi_ap_psw~",
|
||||
wifi_ap_auth: "~wifi_ap_auth~",
|
||||
wifi_ap_ip: "~wifi_ap_ip~"
|
||||
}
|
||||
setFormValues(document.forms[1], cfg_f2);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue