knowthelist / fhem-tablet-ui

UI builder framework for FHEM
MIT License
148 stars 84 forks source link

Update widget_popup.js #145

Closed fhainz closed 8 years ago

fhainz commented 8 years ago

https://forum.fhem.de/index.php?topic=52594

knowthelist commented 8 years ago

I'm currently thinking about the naming. I don't like 'only-autoclose' and I prefer to use class="..." for boolean values.

fhainz commented 8 years ago

Nachdem mein Englisch nicht das beste ist, Antworte ich dir auf Deutsch ;-)

Mir gefällt der Name auch nicht. Hast du einen Vorschlag? Wenn nicht, lasse ich mir noch etwas anderes einfallen und baue das inzwischen nach class="" um.

fhainz commented 8 years ago

Ich hab das jetzt in einen class="..." Aufruf umgebaut. Den Namen hab ich erstmal gleich gelassen. Mir ist noch nicht viel eingefallen. Vielleicht irgendwas mit security?

Ein Problem hab ich aber noch. Ich will ja verhindern das im Hintergrund irgendetwas geklickt werden kann. Also muss shade immer aktiv sein bis sich das Popup automatisch schließt. Wenn außer dem Alarm Popup noch ein anderes Popup auf der selben Seite definiert ist, wird der Klick auf shade von dem Alarm Popup ignoriert, aber das andere Popup deaktiviert shade. Somit ist der Hintergrund wieder klickbar. Zeile 131-135 ist dafür verantwortlich. Auf einer anderen Seite ohne 2. Popup funktioniert das alles wunderbar.

Hast du eine Idee wie ich das fixen kann?

Grüße

knowthelist commented 8 years ago

Wie wäre der Name "interlock" für Verriegelung, Sperre, Zugriffssperre ? Dann müssen wir die Eigenschaft "DarfNichtReagierenBeiKlickAufShade" für alle Popups verfügbar machen, im Modul also und nicht nur für einzelne Elemente (elem.data('only-autoclose')). Wenn ein Element "interlock" hat und aktiviert ist, setzt er ein isLocked=true im Popup-Modul und alle Reaktionen auf shadeclicked werden ignoriert. Nur noch die Popups ohne "interlock" dürfen sich per X schließen lassen.

fhainz commented 8 years ago

Name klingt gut!

Dann müssen wir die Eigenschaft "DarfNichtReagierenBeiKlickAufShade" für alle Popups verfügbar machen, im Modul also

Hast du das schon irgendwo ähnlich umgesetzt wo ich mir etwas abschauen kann? Oder kannst du mich in die richtige Richtig stoßen wie ich das angehen kann? Bin in js nicht so drinnen, aber werde mich morgen näher mit der sache beschäftigen.

fhainz commented 8 years ago

Meinst du in etwa so? Leider funktioniert das auch nicht.

fhainz commented 8 years ago

Ich denke ich es habe nun geschafft. shadeClick wird jetzt bei gesetzter class interlock nicht ausgeführt. Was meinst du zu diesem Entwurf?

knowthelist commented 8 years ago

Changes accepted with small changes from my side. Please test it again.

fhainz commented 8 years ago

Please test it again.

Funktioniert leider nicht. Das interlock popup wird bei klick auf shade immer ausgeblendet. Auch wenn es kein 2. Popup auf der Seite gibt.

Edit: Ich glaube daran liegt es: Du prüfst in der hide() Funktion elem.hasClass. Der hide Funktion wird aber als elem dialog übergeben - hide(dialog,elem.data('mode')); Das Problem hatte ich bei meinen Tests auch einmal, deswegen habe ich die Prüfung vor dem Aufruf der hide Funktion gemacht und das visible eingebaut.

fhainz commented 8 years ago

So funktioniert es für mich. https://github.com/fhainz/fhem-tablet-ui/blob/patch-3/www/tablet_eval/js/widget_popup.js Falls du es ohne visible haben möchtest, könntest du nochmals schauen? Ich schaffe es nicht ohne. :)

knowthelist commented 8 years ago

Meine Variante, die ich vorhin hochgeladen habe, funktionierte bei mir aber. Bei dir nicht?

fhainz commented 8 years ago

Sry, gar nicht mitbekommen das du heute schon was geändert hast. Mit der Version von gestern wurde, bei klick auf shade, shade und Popup geschlossen, mit der aktuellen Version bleibt das Popup stehen, shade verschwindet aber.

fhainz commented 8 years ago

Ich habe gerade meine komplette Tablet UI einem update unterzogen. Deine Version funktioniert bei mir nicht. Wenn die Klasse interstate gesetzt ist wird bei einem Klick auf den Hintergrund das shade div ausgeblendet. Getestet mit Safari und Chrome. Könntest du das bitte nochmal bei dir testen?

knowthelist commented 8 years ago

Bei mir geht es wirklich! Siehe Testpage: test-popup.html

fhainz commented 8 years ago

Danke für die testpage. Ich hab ausgiebig getestet und rausgefunden das Problem nur in Zusammenhang mit einem 2. Popup und pagebutton besteht. Eventuell wegen der unterschiedlichen seiten?

Ich hab die testpage mal umgebaut. Könntest du diese mal bitte bei dir testen?

https://gist.github.com/fhainz/5d07bf3c06573e410f77b20f818c0811

Grüße

knowthelist commented 8 years ago

jetzt kann ich es nachvollziehen, danke. Es ist die zweite Instanz von popup, die auf das shadeClicked reagiert und schließt. Wenn es die Instanz wäre, wo auch das popup mit dem interlock als Element drin ist wäre, würde auch das Popup selbst zugehen. Ich überlege mir was ...

fhainz commented 8 years ago

Es ist die zweite Instanz von popup, die auf das shadeClicked reagiert und schließt

Genau das ist das Problem. Aus diesem Grund hatte ich bei bei meinem patch die visible variable eingeführt.

Ich überlege mir was ...

Danke!

knowthelist commented 8 years ago

Jetzt sollte es gehen. Sorry für meine Hartnäckigkeit, aber ich versuche es immer so minimalistisch wie möglich zu halten.

fhainz commented 8 years ago

Danke, jetzt funktioniert es wunderbar.

Sorry für meine Hartnäckigkeit, aber ich versuche es immer so minimalistisch wie möglich zu halten.

Schon ok. Am ende musst du dich ja im code auskennen :)