GyverLibs / GyverPortal

Простой конструктор веб интерфейса для esp8266 и ESP32
MIT License
309 stars 25 forks source link

Идеи/проблемы на обновление v3.4 #52

Closed GyverLibs closed 1 year ago

GyverLibs commented 1 year ago

CHANGELOG v3.4

TODO

v3.5

Лажа

Осмыслить

MalfurionST commented 1 year ago

из библиотеки убрали файл custom.h в котором был полезный // пример "текст-ссылка" может вернуть?

GyverLibs commented 1 year ago

Кастом файл теперь живёт в примере custom components:

MalfurionST commented 1 year ago

ок

MalfurionST commented 1 year ago

GP.TABLE_BEGIN("60px,100%,50px", nullptr, "100%"); в какой форме записывать выравнивания (GP_LEFT, GP_CENTER, GP_RIGHT) или "GP_LEFT, GP_CENTER, GP_RIGHT" ?

GyverLibs commented 1 year ago

Смотри пример, там сильно по другому. В документации этого пока нет

MalfurionST commented 1 year ago

а ок, всё увидел...

gorlanovmax commented 1 year ago

Доброго дня,

Хотелось бы реализовать в popup PROMT ввод пароля. Т.е. чтобы поле ввода было маскировано

GyverLibs commented 1 year ago

Это невозможно, всплывающее окно prompt стандартное, полностью генерируется браузером

gorlanovmax commented 1 year ago

Не думаю что это возможно, всплывающее окно стандартное, полностью генерируется браузером

Но есть же стандартное всплывающее окно, которое требует например авторизации на каком либо сайте. и там пароль маскируется

gorlanovmax commented 1 year ago

Еще интересной фичей было бы ОТА прошивки и хранилища с заданного адреса в интернете

GyverLibs commented 1 year ago

авторизации на каком либо сайте

Это стандартное окно вызывается автоматически при включении авторизации в портале, вроде бы через .setAuthorization(login pass), см доку

ОТА прошивки и хранилища с заданного адреса в интернете

Пожалуйста, стандартная библиотека httpupdate.h. Делаешь поле ввода текста для адреса и рядом кнопку "прошить"

MalfurionST commented 1 year ago

Не стал добавлять или забыл? body {-webkit-tap-highlight-color: transparent;} Чтоб элементы на мобилах не подсвечивались... hzhm82zqmm4rod6phvjqpdiaui8

GyverLibs commented 1 year ago

Не стал добавлять или забыл?

В v3.3 это есть

MalfurionST commented 1 year ago

А теперь увидел, в файлах стилей в файловой системе нет ... Кажется...

GyverLibs commented 1 year ago

Креститься надо) image image

MalfurionST commented 1 year ago

Сори, тогда не пойму почему у меня на телефоне все равно подсвечивает.... Память на есп полность чистил и заново закидывал обновленные файлы... Буду проверять...

GyverLibs commented 1 year ago

Кеш в браузере почистить надо

MalfurionST commented 1 year ago

Помогло спс...

gorlanovmax commented 1 year ago

А возможность изменения цвета кнопок OTA_FIRMWARE и OTA_FILESYSTEM не запланирована?

GyverLibs commented 1 year ago

Запланировано то, что в списке наверху. Предлагайте, запланирую)

gorlanovmax commented 1 year ago

Предложил))) А то они могут быть только зеленого цвета

gorlanovmax commented 1 year ago

Еще такую вещь обнаружил label { white-space: nowrap; font-size: 20px; margin: 0 5px; }

У LABEL намеренно убран перенос текста? Если заголовок длинный, на мобиле вылезает за блок

GyverLibs commented 1 year ago

Намеренно, без этого переносы появятся там где их быть не должно, например при форматировании бокса "лейбл + компонент". Длинные тексты можно делать при помощи plain, bold, span

MalfurionST commented 1 year ago

а стрелки для фаерфокса не убрал... input[type='number'] { -moz-appearance: textfield; }

GyverLibs commented 1 year ago

Мозильщики могут вставить нужные им стили через GP.SEND("<style></style>");, я думаю одними стрелками дело не ограничится

MalfurionST commented 1 year ago

ок, еще на мозиле при уходе со вкладки всплывает сообщение с предложением сохранить имя пользователя и пароль из поля GP.TEXT

GyverLibs commented 1 year ago

Какая назойливая лисичка

MalfurionST commented 1 year ago

Безымянный0000

MalfurionST commented 1 year ago

Screenshot_2022-11-10-00-44-22-211_com yandex browser А на тетелефоне в Яндексе такой глаз сбоку...

GyverLibs commented 1 year ago

Это печально

MalfurionST commented 1 year ago

все понял, окошко с сохранением выползает если есть поле GP.PASS а в пользователя ему пофиг что запихнуть... даже 3.14 если убрать поле GP.TEXT...

MalfurionST commented 1 year ago

да я уже понял что мозила совсем корявый браузер, у Spinner на светлой теме + и - уходят в право Безымянный00002 и лед вообще не светит... буду менять браузер наверно...

GyverLibs commented 1 year ago

А на темной нормально спиннер?

MalfurionST commented 1 year ago

Да

GyverLibs commented 1 year ago

В хроме и там и там нормально

MalfurionST commented 1 year ago

вот на темной Безымянный00003

MalfurionST commented 1 year ago

CUSTOM_CHECKBOX по примеру SWITCH

void CUSTOM_CHECKBOX(const String& name, bool state = 0, bool dis = false, PGM_P st = GP_GREEN) { String s; if (st != GPGREEN) { s += F("\n"); } s += F("<label id='_"); s += name; s += "'"; s += F(" class='custom-checkbox'><input type='checkbox' name='"); s += name; s += F("' id='"); s += name; s += "' "; if (state) s += F("checked "); if (dis) s += F("disabled "); s += F("onclick='GP_click(this)'>\n"); s += F(""); GP.SEND(s); }

MalfurionST commented 1 year ago

Безымянный00004 лед на мозиле

GyverLibs commented 1 year ago

остаётся пожелать мужества тем, кто разрабатывает фронтенд под все популярные браузеры. Хотя там bootstrap и не париться вообще

MalfurionST commented 1 year ago

со всеми остальными я так понял понял проще, а вот мозила не такая как все...

MalfurionST commented 1 year ago

не совсем конечно как у Вас, надо добавлять стили и т.д. но вот пример led через svg Безымянный0005 код: void CUSTOM_LED(byte colour) { String s; s += F("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\">\"); if (colour) { s += F("<circle r=\"11\" cy=\"13\" cx=\"13\" fill=\""); if (colour == 1) s += F("#3C0"); if (colour == 2) s += F("#D00"); s += F("\" filter=\"url(#svg_blur)\" opacity=\"0.6\"/>"); } s += F("<circle r=\"10\" cy=\"13\" cx=\"13\" fill=\""); if (colour == 0) s += F("#777"); if (colour == 1) s += F("#92E477"); if (colour == 2) s += F("#ED7777"); s += F("\"/><ellipse ry=\"8\" rx=\"9\" cy=\"15\" cx=\"13\" fill=\""); if (colour == 0) s += F("#333"); if (colour == 1) s += F("#3C0"); if (colour == 2) s += F("#D00"); s += F("\"/>"); if (colour) { s += F("\<filter id=\"svg_blur\"><feGaussianBlur stdDeviation=\"1\" in=\"SourceGraphic\"/>\\"); } s += "\"; GP.SEND(s); } проверил в нескольких браузерах вроде не искажается...

GyverLibs commented 1 year ago

svg там где достаточно css - это сильно)

MalfurionST commented 1 year ago

тупая мозила она еще и название SPOILER_BEGIN делает посередине, и ей пофиг что он должен быть слева...

B00mlex commented 1 year ago

Изменил для себя GP_update чтобы иметь возможность добавить класс при обновлении элемента. Это позволит изменять элементы со всей мощью CSS на ходу. По сути GP_update как работал так и работает обновляя значения элементов но с дополнительными возможностями. Чтобы добавить класс надо в answerпосле значения для элемента добавить; и addClass:first и в элемент добавится класс first. Чтобы удалить класс first надо к answer добавить remClass:first. Добавлять и удалять можно несколько классов разделяя имена пробелами, также удалять и добавлять можно одновременно в одном answer. addClass и remClass необходимо разделять ;. Примеры: "data; addClass:first second third; remClass:first". Здесь добавятся 3 класса first second third и удалится first, data это данные для обновления элемента. 100;remClass: second;addClass:fourth Тут в элементе будет значение 100, удалится класс second, и добавится класс forth. Можно просто добавить или удалить класс без значения для элемента addClass:fourth.

Может Алексу понравится и он добавит в портал.

Демо работы добавления классов

https://user-images.githubusercontent.com/59569595/201477690-0f0d741c-113b-4656-997c-101873732737.mp4

Код из scripts.js

function GP_update(ids) {
  var xhttp = new XMLHttpRequest();
  xhttp.open('GET', '/GP_update?' + ids + '=', true);
  xhttp.send();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var str = this.responseText.split(',');
      ids = ids.split(',');
      if (ids.length != str.length)return;
  for (let i = 0; i < ids.length; i++) {
  var item = document.getElementById(ids[i]);
    if (!item || !str[i])continue;
    resp = str[i].split(';');
    resp.forEach((cmd,j) => {
        let tmp =  cmd.split(':');      
        if(tmp[0].trim() ==='addClass'){
         item.classList.add(...tmp[1].trim().split(' '))
        }else if(tmp[0].trim() ==='remClass'){
         item.classList.remove(...tmp[1].trim().split(' '))
        }else {                     
           if (item.type == 'hidden' && item.value == '_reload') {
        if (resp[j] == '1') location.reload();
      } else if (item.type == 'checkbox' || item.type == 'radio') item.checked = Number(resp[j]);
      else if (item.type == 'select-one') document.querySelector('#' + ids[i]).value = resp[j];
      else if (item.type == undefined) item.innerHTML = resp[j];
      else item.value = resp[j];
      if (item.type == 'range') GP_change(item);
   }});}
    }
  };
}

Добавленные классы в style.css


.red{color:red;}
.yellow{color:yellow;}
.green{color: green;}

.hide {
  max-height: 99em;
  opacity: 1;
  overflow: hidden;
  transition: opacity 1s linear, max-height 1s linear;
  height: 60px;  /* Указывать высоту придется для каждой скрываемой области
  иначе анимация не работает */ 
  overflow: hidden; 
  transition: all 0.3s ease;  
}
.invisible{
   height: 0;
   opacity: 0;
}`
GyverLibs commented 1 year ago

Если это использовать чисто для скрытия компонентов - не лучше сделать чисто на js на стороне браузера? Без передачи логики на МК

B00mlex commented 1 year ago

Сокрытие так, для демонстрации. Делал для изменения цвета компонентов.

GyverLibs commented 1 year ago

Ну это шашечки)

Serega88kos commented 1 year ago

Arduino IDE что-то не видит последний релиз.

GyverLibs commented 1 year ago

3.3?

GyverLibs commented 1 year ago

В следующей версии наконец то появится dashboard layout image

А также рисование графики в браузере в стиле Processing! image