yana-server icon indicating copy to clipboard operation
yana-server copied to clipboard

rafraichissement widget sans actualisation de la page web

Open moebius911 opened this issue 8 years ago • 10 comments

Bonjour Actuellement quand on se connecte sur la page web de yana, les widgets s’actualisent au chargement. Est-ce possible de faire une mise à jour interactive des widgets sans recharger totalement la page ?

J’ai essayé de modifier ton code mais malheureusement ça dépasse de loin mes compétences

Merci d’avance

moebius911 avatar Mar 09 '16 08:03 moebius911

Bonjour, J'ai remarqué la même chose, et une solution m'interresse pour le plugin door v2, et d'autre plugin en cours de dev.

theos10 avatar Mar 10 '16 19:03 theos10

Pour un seul widget ou pour l'ensemble ? Depuis php ça sera tendu, mais je vais voir si je peux proposer une solution simple via js type Widget.refresh("uid-du-widget"); ça vous irai ?

ldleman avatar Mar 11 '16 06:03 ldleman

L idée c'est pour un widget. J'ai chercher côté jquery mais ca ne marche pas. J'ai aussi chercher pour faire un refresh div. Sans succès.

-----Message d'origine----- De : "Idleman" [email protected] Envoyé : ‎11/‎03/‎2016 07:55 À : "ldleman/yana-server" [email protected] Cc : "FOURNIER Ghislain" [email protected] Objet : Re: [yana-server] rafraichissement widget sans actualisation de lapage web (#191)

Pour un seul widget ou pour l'ensemble ? Depuis php ça sera tendu, mais je vais voir si je peux proposer une solution simple via js type Widget.refresh("uid-du-widget"); ça vous irai ? — Reply to this email directly or view it on GitHub.

theos10 avatar Mar 11 '16 07:03 theos10

Si ce n'est pas trop compliqué, un rafraîchissement de l’ensemble des widgets affichés sera pour moi la meilleure solution.

Merci

moebius911 avatar Mar 11 '16 13:03 moebius911

Il ne faut pas non plus que ça alourdisse l' interface. Mais c'est sur qu une Dashboard dynamique serai top

-----Message d'origine----- De : "moebius911" [email protected] Envoyé : ‎11/‎03/‎2016 14:30 À : "ldleman/yana-server" [email protected] Cc : "FOURNIER Ghislain" [email protected] Objet : Re: [yana-server] rafraichissement widget sans actualisation de lapage web (#191)

Si ce n'est pas trop compliqué, un rafraîchissement de l’ensemble des widgets affichés sera pour moi la meilleure solution. Merci — Reply to this email directly or view it on GitHub.

theos10 avatar Mar 11 '16 17:03 theos10

Bonjour, Je n'arrive pas a trouver une fonction qui refresh l’état du widget automatiquement. j'ai deja une approche qui indique le changement d'etat, et qui affiche l'etat au chargement de la page. `$content = '

                    <!-- CSS -->
                    <style>

                        .door_pane {
                            background: none repeat scroll 0 0 #50597b;
                            list-style-type: none;
                            margin: 0;
                            cursor:default;
                            width: 100%;
                        }
                        .door_pane li {
                            background: none repeat scroll 0 0 #50597b;
                            display: inline-block;
                            margin: 0 1px 0 0;
                            padding: 10px;
                            cursor:default;
                            vertical-align: top;
                        }
                        .door_pane li h2 {
                            color: #ffffff;
                            font-size: 16px;
                            margin: 0 0 5px;
                            padding: 0;
                            cursor:default;
                        }
                        .door_pane li h1 {
                            color: #B6BED9;
                            font-size: 14px;
                            margin: 0 0 1px;
                            padding: 0;
                            cursor:default;
                        }

                        .door_pane li.door-case{
                            background-color:  #373f59;
                            cursor:pointer;
                            width: 55px;
                        }
                        .door-case i{
                            color:#8b95b8;
                            font-size:50px;
                            transition: all 0.2s ease-in-out;
                        }
                        .door-case.active i{
                            color:#ffffff;
                            text-shadow: 0 0 10px #ffffff;
                        }

                        .door-case.active i.fa-lightbulb-o{
                            color:#FFED00;
                            text-shadow: 0 0 10px #ffdc00;
                        }
                        .door-case.active i.fa-power-off{
                            color:#BDFF00;
                            text-shadow: 0 0 10px #4fff00;
                        }

                        .door-case.active i.fa-flash{
                            color:#FFFFFF;
                            text-shadow: 0 0 10px #00FFD9;
                        }

                        .door-case.active i.fa-gears{
                            color:#FFFFFF;
                            text-shadow: 0 0 10px #FF00E4;
                        }

                    </style>

                    <!-- CSS -->


                    <ul class="door_pane">
                            <li class="door-case '.($door->getState_io($door->pinCaptor)?'active':'inactive').'" data-id="'.$door->id.'" onclick="plugin_door_change(this);" style="text-align:center;">
                                <i title="On/Off" class="'.$door->icon.'"></i>
                            </li>
                            <li>
                                <h2>'.$door->description.($door->pulse!=0?' - Pulse '.$door->pulse.'µs':'').'</h2>

                                <h1><div id="'.etat.$door->id.'">Etat : <?php plugin_door_change(this) ?></div></h1>

                                <h1>PIN Relais : '.$door->pinRelay.' - PIN Capteur : '.$door->pinCaptor.'</h1>
                            </li>

                        </ul>

                    <!-- JS -->
                    <script type="text/javascript">



                        function plugin_door_change(element){
                            var state = $(element).hasClass(\'active\') ? 0 : 1 ;

                            $("#'.etat.$door->id.'").text("Etat : "+ state);

                            $.action(
                                {
                                    action : \'door_manual_change_state\', 
                                    engine: $(element).data("id"),
                                    state: state
                                },
                                function(response){
                                    $(element).toggleClass("active");
                                }

                            );

                        }

                    </script>
                    ';
                }`

theos10 avatar May 27 '16 20:05 theos10

Normalement comme le changement d’état n’apparait pas toutes les secondes, est-ce que ça ne serai pas plus simple de rafraichir le Dashboard entier quand tu détecte un changement d’état ?

Ce n’est pas le top, mais ça serrai quand même une grande avancée ?

moebius911 avatar Jun 14 '16 08:06 moebius911

c'est pas le top mais tu peut ajouter cette modification à la fin du fichier index.php de yana (ligne 18)

<head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> </head>

Ça te rafraîchira le Dashboard toutes les minutes.

moebius911 avatar Jun 14 '16 09:06 moebius911

J’ai fait ça un peu trop rapidement Ça t’actualise tous les modules de yana.

Pour actualiser uniquement l’accueil voici le nouveau code

<?php if($_SERVER['REQUEST_URI'] == '/yana-server/index.php'){ ?> <head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> <head> <?php } ?>

if($_SERVER['REQUEST_URI'] == '/yana-server/index.php?init=1'){ ?> <head> <META HTTP-EQUIV="Refresh" CONTENT="60; URL=<?php $_SERVER['SERVER_NAME'] ?> <?php $_SERVER['REQUEST_URI'] ?> "> <head> <?php } ?>

moebius911 avatar Jun 14 '16 10:06 moebius911

Je pense que la meilleur solution serait un polling sur chaque widget, avec la possibilité de choisir dans la configuration, la fréquence. et un innerHTML.replace pour modifier l'etat.

theos10 avatar Jun 24 '16 19:06 theos10