FHEM Forum

FHEM => Frontends => TabletUI => Thema gestartet von: peterk_de am 04 August 2016, 15:48:14

Titel: CSS-Klasse entsprechend Reading ändern
Beitrag von: peterk_de am 04 August 2016, 15:48:14
Hallo zusammen,

ich wollte etwas eigentlich "gaaanz" einfaches machen: Um zwei andere Widgets sollte einen roten Rahmen, wenn ein bestimmtes Reading "Ja" wird - und sonst nicht.

Da ich auf die schnelle nix gefunden habe, ist dafür ein sehr kleines und simples Widget für die aktuelle Eval-Version (!) entstanden, mit dem man die css-Klasse eines divs in Abhängigkeit eines Readings setzen kann. Ist daher etwas für "Fortgeschritte" - insbesondere muss man sich grundlegend mit CSS auskennen.

Den besagten roten Rahmen macht damit man z.B. so:


<div data-type="classchanger"
     data-device="dummyDevice"
     data-get="meinReading"
     data-get-on="ja"
     data-on-class ="roterRahmen"
     class = "meineButtonsammlung">

  <div data-type="symbol"
       data-device="meinDummy1"></div>
     
  <div data-type="symbol"
       data-device="meinDummy2"></div>     
     
</div>     


Hier werden einfach die entsprechenden Widgets, die wir umranden wollen, in das classchanger-widget hineingepackt. Dem äußeren div, das von Haus aus nur die Klasse "meineButtonsammlung" hat, wird entsprechend eines Readings von "dummyDevice" die Klasse "roterRahmen" zusätzlich gegeben - bzw. wieder weggenommen, wenn das Raeading nicht "ja" ist. Die CSS-Klassen legen wir dazu natürlich auch noch an ...



div.meineButtonsammlung {
  padding:5px;
  border-radius:5px;
}

div.roterRahmen {
  background-color:#880000;
  border: 1px solid red;
}


... fertig! Natürlich ist es auf diese Weise auch möglich, mehrere Symbole komplett auszublenden (per display:none), umzufärben und per css selektoren auch noch einzelne Unterelemente gezielt zu beeinflussen etc. Ach ja: mit off geht es genauso, das heißt man kann noch eine off-Klasse und einen off-wert definieren und zwischen beiden Klassen hin- und herschalten.

Vielleicht hilft es ja dem ein oder anderen :-)

Edit: Beispiel korrigiert, danke 50watt!
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: setstate am 04 August 2016, 15:54:21
Na fein, das hatte ich auch schon vor, in ein eigenes Widget zu packen, aber da das Label-Widget diese Funktionalität schon mitbringt, haben ich den Gedanken wieder verworfen.
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: peterk_de am 04 August 2016, 16:58:03
Hu, das geht? Hab ich wohl überlesen - hab aber zugegebenerweise auch nicht lang nach gesucht - dank der sehr tollen Struktur von Tablet UI ging das sehr einfach zu bauen ;)
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: setstate am 04 August 2016, 17:25:46
Ja, wenn man nach "data-classes" sucht, findet man 2,3 Sachen.

https://forum.fhem.de/index.php/topic,53868.msg455225.html#msg455225

Aber als spezielles Plugin/Widget ist das bestimmt optimaler gelöst.
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: 50watt am 19 August 2016, 00:21:45
@peterk_de: Danke für das classchanger widget. Würde mich freuen, wenn das in die "default widgets" mit aufgenommen werden kann, idealerweise mit
div.hide {
  display: none;
}
zum Ausblenden von Widgets abhängig von readings.

Im Beispielcode ist ein Fehler. Es sollte wohl "data-on-class" und nicht data-class-on heißen. Detto data-off-class

<div data-type="classchanger"
     data-device="dummyDevice"
     data-get="meinReading"
     data-get-on="ja"
     data-on-class="roterRahmen"
     class = "meineButtonsammlung">

  <div data-type="symbol"
       data-device="meinDummy1"></div>
     
  <div data-type="symbol"
       data-device="meinDummy2"></div>     
     
</div>   
 
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: setstate am 19 August 2016, 01:15:05
Hab's mit ins Repository übernommen.
Danke für die Arbeit
Titel: Antw:CSS-Klasse entsprechend Reading ändern
Beitrag von: Tobias am 01 September 2016, 11:14:16
Hi,
klappt auch mit "Wenn ein Reading nicht existiert, zeige das eingebettet Widget nicht an"

              <div data-type="classchanger"
                data-device="par_HZ_dev"
                data-get="R-btnLock"
                data-get-on='["on","off","set_on","set_off"]'
                data-off-class="hide"
                data-on-class="small inline left-narrow right-narrow-10" >

                <div
                  data-type="switch"
                  data-device="par_HZ_dev"
                  data-get="R-btnLock"
                  data-states='["on","off","set_on","set_off"]'
                  data-set-states='["regSet btnLock off","regSet btnLock on","",""]'
                  data-icons='["oa-secur_locked","oa-secur_open","oa-secur_locked fa-blink","oa-secur_open fa-blink"]'
                  data-colors='["red","green","red","green"]'
                  data-background-icons='["","","",""]'
                  data-background-colors='["SeaGreen","IndianRed","SeaGreen","IndianRed"]' >
                </div>
              </div>