Connexion

Récupérer mon mot de passe

Derniers sujets
» [AWESOMEBB] Changer la police titre forum
par Milouze14 Mar 2 Juin 2020 - 20:11

» *RESOLU*[PHPBB3] Le fil d'ariane en bas
par Milouze14 Mar 2 Juin 2020 - 20:10

» *RESOLU*[PHPBB3] Bouton chatbox sur barre de notification
par Milouze14 Mar 2 Juin 2020 - 17:59

» *RESOLU*[PHPBB3] Erreur dans template
par Milouze14 Lun 1 Juin 2020 - 15:56

» [PHPBB2] Mettre en résolu via la réponse rapide
par Morane Lun 1 Juin 2020 - 14:28

» *RESOLU*[PHPBB2] Installation Messenger - Template modifié
par Milouze14 Sam 30 Mai 2020 - 20:16

» [PHPBB2] Cacher les infos du profil sous l'avatar, en hover
par Milouze14 Jeu 28 Mai 2020 - 18:54

» [AWESOMEBB] Supprimer le soulignement des liens
par Milouze14 Mer 27 Mai 2020 - 18:28

» *RESOLU*[PHPBB2] Champs du profil en fonction de la couleur de groupe.
par Milouze14 Mar 26 Mai 2020 - 17:54

» [PUNBB] Codage qeel
par Milouze14 Mar 26 Mai 2020 - 17:44

» [TOUTES VERSIONS] Changer les boutons Nouveau MP et Répondre au MP par du texte
par croklivre Lun 25 Mai 2020 - 18:25

» [TOUTES VERSIONS] Faire clignoter les images des nouveaux messages
par croklivre Lun 25 Mai 2020 - 18:17

» [PUNBB] Couleurs des Catégories et des cellules qui ne changent pas de couleurs
par Milouze14 Lun 25 Mai 2020 - 14:47

» [BESTOF] [AWESOMEBB] Modifier le en ligne hors ligne
par Milouze14 Dim 24 Mai 2020 - 5:38

» [AWESOMEBB] Taille de la zone.
par Milouze14 Dim 24 Mai 2020 - 5:38

» [PUNBB] Agencement du profil
par Milouze14 Sam 23 Mai 2020 - 19:06

» *RESOLU*[MODERNBB] Chatbox - Enlever les deux points après le pseudo
par Milouze14 Sam 23 Mai 2020 - 17:26

» *RESOLU*[PHPBB3] Anomalies certains éléments
par Milouze14 Sam 23 Mai 2020 - 16:05

» [AWESOMEBB]Refonte du profil dans un sujet.
par Milouze14 Sam 23 Mai 2020 - 3:31

» [PHPBB2] Alignement du champ masculin/féminin
par Milouze14 Jeu 21 Mai 2020 - 20:24

*RESOLU*[AWESOMEBB] Adapter un code pour afficher les événements du calendrier dans un widget

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

avatar
Tony L
Milouzien

MessageTony L le Jeu 21 Mar 2019 - 21:07

Rappel du premier message :

Bonsoir à tous,


Je suis passé dernièrement sur la version awesomeBB.
De ce fait j'ai plusieurs codes qui ne sont plus adaptés (ils étaient prévus pour la version punbb).

Notamment j'avais un code qui récupéré les événements qui étaient dans le calendrier pour les afficher dans un widget, celui ci :

Code:
$(function(){(function(){
      try{
      var max_jours=999;
      var tri=[],i=0,ii,d=new Date(),$liste=$("<ul>",{class:'mon_calendrier'}),genObjet=function(d){
            try{
            var a,b=[],d=d;
            $('#main-content table.table.calendar td[class^="row"]',d).each(function(i,e){
            var $e=$(e),oC={},AAAA,MM,JJ;
            oC[i]={},oC=oC[i];
            oC.evenements=false;
            oC.anniversaires=false;
            oC.date=$e.find('p').eq(0).text();
            //Timestamps
            oC.annee=/\d{4}/.exec(oC.date)[0]*1;
            oC.jour=/\d{2}/.exec(oC.date)[0]*1;
            //Un peu plus compliqué pour le mois
            oC.date.replace(/[^\s]{3,4}(?=\s+\d{4})/,function($$){
            var mois=['jan','fév','mar','avr','mai','juin','juil','aoû','sep','oct','nov','déc'];
            oC.mois=mois.indexOf($$.toLowerCase());
            });
            //Création d'un timestamp déterminant le début du jour
            oC.dJ_timestamp=(new Date(oC.annee,oC.mois,oC.jour,0,0,0,0)).getTime();
            //Création d'un timestamp déterminant la fin du jour
            oC.fJ_timestamp=oC.dJ_timestamp+86400000;
            //on incrémente de 1 le mois
            oC.mois+=1;
            //Le jour dans le calendrier est stocké.
            oC.object=$e;
            if(!$e.find('ul a.genmed').length){b.push(oC);return}
                  a=$e.find('ul a.genmed');
                  a.each(function(i,e){
                      $(e).each(function(ii,e){
                        var ev;
                        if(e.href.indexOf('display=birth')!=-1){
                        !oC.anniversaires&&(oC.anniversaires={});
                        oC.anniversaires[i]={};
                        ev=oC.anniversaires[i]}else{
                        !oC.evenements&&(oC.evenements={});
                        oC.evenements[i]={};
                        ev=oC.evenements[i]}
                      ev.titre=$(e).text();
                      ev.html=$(e).parents('li').eq(0).html();
                      })
                      });
                      b.push(oC);
            });
          return b}catch(e){console.log(e)}
          },nouvelle_url=function(){
      var AAAA,MM;
      AAAA=d.getFullYear();
      MM=d.getMonth()+1+i;
      if(!(MM<=12)){AAAA+=1;MM=1;}
      if(MM<10)MM='0'+MM;
      i++;
      return '/calendar?start='+AAAA+MM+'01';
      };
      $.when(
      $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
      $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
      $.ajax({method:'GET',cache:false,url:nouvelle_url()})
      ).done(function(){
          'use strict';
          var date=(new Date()).getTime(),i,ii,mois=[],tri=[];
          /*
          C'est la fonction genObjet déclarée plus haut qui crée un objet avec tous les jours du mois.
          On l'utilise sur toutes les requêtes AJAX faites.
          */
          for(i in arguments){
                var d=arguments[i][0];
                mois.push(genObjet(d));
          }
          /*On parcourt le tableau des mois*/
          for(i in mois){/*1 mois*/
            for(ii in mois[i]){/*1 jour*/
                /*on teste pour chaque jour*/
                if(date<mois[i][ii].fJ_timestamp&&mois[i][ii].evenements&&tri.length<max_jours)tri.push(mois[i][ii]);
            }
          }
      /*
      Notre tableau de tri contient à présent les jours où il y a un évènement à venir...
      Il est temps de s'attaquer à la mise en forme de notre liste
      */
      for(i in tri){
          $("<li>",{class:'center date',text:tri[i].date}).appendTo($liste);
          for(ii in tri[i].evenements){
            $("<li>",{class:'center evenement'}).html(tri[i].evenements[ii].html).appendTo($liste)
          }
      }
      /*
      Et voila notre liste est déjà créée :O !
      Ne nous reste donc plus qu'à l'ajouter à un élément du DOM disposant d'un identifiant,
      prochains_evenements
      par exemple.
      */
      $liste.appendTo('#prochains_evenements');
      }
      );
      }catch(e){console.log(e)}
    })()});

Ma demande est donc de savoir quelles modifications ils faut faire pour qu'il fonctionne à nouveau svp.


Merci de l'aide,
Tony


Dernière édition par Tony L le Sam 4 Mai 2019 - 15:40, édité 1 fois

no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:47

Je t'en prie, script modifié, essaie avec cette version:
Code:
class calendrier{
    constructor(date=new Date()){
        this.mois=date.getMonth()+1;
        if(this.mois<10)this.mois='0'+this.mois;
        this.annee=date.getFullYear();
    }
    entrees(){
        return new Promise((res,rej)=>{
            const m=this.obtention();
            m.then(
                d=>{
                    const doc=d.target.response;
                    let t,jours=doc.querySelectorAll('.calendar-day-date'),mois={};
                    for(let j of jours){
                        let jour_num=/\D*(\d{1,2})\D*/.exec(j.textContent)[1]*1;
                        let debut_jour=new Date(this.annee,this.mois*1-1,jour_num).getTime();
                        let fin_jour=new Date(this.annee,this.mois*1-1,jour_num+1).getTime();
                        let list=j.nextSibling;
                        let anniversaires=(t=list.querySelectorAll('a[href*="display=birth"]'),t.length?t:!1);
                        if(anniversaires)for(let a of anniversaires){
                            a.href=a.href.replace(/\??change_version=\w+/,'');
                            a.removeAttribute("onmouseover");
                            a.removeAttribute("onmouseout");
                        }
                        let evenements=(t=list.querySelectorAll('a[href*="/t"],a[href*="/e"]'),t.length?t:!1);
                        if(evenements)for(let a of evenements){
                            a.href=a.href.replace(/\??change_version=\w+/,'');
                            a.removeAttribute("onmouseover");
                            a.removeAttribute("onmouseout");
                        }
                        mois[j.textContent]={"date":j.textContent,"jour":jour_num,"mois":this.mois*1,"annee":this.annee,debut_jour,fin_jour,anniversaires,evenements};
                    }
                    res(mois);
                },
                e=>rej(e)
            )
        })
    }
    obtention(){
        return new Promise((res,rej)=>{
            try{
                let xhr=new XMLHttpRequest();
                xhr.addEventListener("error",e=>rej(e));
                xhr.addEventListener("timeout",e=>rej(e));
                xhr.addEventListener("load",d=>res(d));
                xhr.responseType="document";
                xhr.timeout=3000;
                xhr.open("GET",`/calendar?change_version=modernbb&start=${this.annee}${this.mois}01`);
                xhr.send();
            }catch(e){
                rej(e);
            }
        })
    }
};
$(function(){
    let d=new Date();
    /*On compte extraire 3 mois du calendrier à partir du mois en cours*/
    const moisCalendrier=[new calendrier().entrees(),new calendrier((d.setMonth(d.getMonth()+1),d)).entrees(),new calendrier((d.setMonth(d.getMonth()+1),d)).entrees()];
    Promise.all(moisCalendrier).then(v=>{
        for(let entrees of v){
            /*tri*/
            let x=Object.getOwnPropertyNames(entrees).sort((c,f)=>{
                return /\D*(\d{1,2})\D*/.exec(c)[1]</\D*(\d{1,2})\D*/.exec(f)[1]?-1:1;
            });
            /*Exploitation des données*/
            for(let i of x){
                let jour=entrees[i];
                if(!jour.anniversaires&&!jour.evenements)continue;
                $("<h4>",{text:jour.date,class:"date"}).appendTo("#prochains_evenements");
                if(jour.anniversaires){
                    for(let a of jour.anniversaires){
                        $("<div>").append(a).addClass("anniversaire").appendTo("#prochains_evenements");
                    }
                }
                if(jour.evenements){
                    for(let a of jour.evenements){
                        $("<div>").append(a).addClass("evenement").appendTo("#prochains_evenements");
                    }
                }
            }
        }
    });
});

Au passage, sois le bienvenu parmi nous ;)
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:01

Hum, par contre un anniversaire vient d'apparaitre au 20 juillet sur le widget, bizarre
papa pig
papa pig
Milouzien

Messagepapa pig le Sam 4 Mai 2019 - 14:04

Merci ça fonctionne !
@no_way a écrit:Au passage, sois le bienvenu parmi nous ;)
Merci ! hinhin
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:05

Oui c'est normal, l'anniversaire est bien indiqué sur ton calendrier, si tu ne souhaites pas afficher les anniversaires c'est possible, il suffit d'ajouter dans ta feuille de style:
Code:
#prochains_evenements .anniversaire{
    display:none;
}
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:21

Super ! Merci encore Arnaud :))

Ce serait beaucoup de travail pour aller pour afficher les événements sur une durée plus longue que 3 mois ? Ou il faut peut être modifier une variable ?
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:29

Je t'en prie, non c'est au contraire très simple mais combien de mois veux-tu afficher ?
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:37

Hum, en fait il n'y à pas de concours d'oiseaux tout les mois.. C'est souvent en fin d'année après septembre.
Bref :-)

Sur 6 mois, voir sur l'année en cours serait l'idéal
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:49

J'ai directement modifié le script sur ton forum pour traiter une année complète d'avance.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:49

Je viens de mettre le code sur mon forum officiel. Je n'obtiens pas le meme resultat arf, toutes les dates s'affichent dans le widget, tu peux le voir ici : https://www.diamant-mandarin-evo.com/portal , tout en bas
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 15:00

Sans doute trop de requêtes à la fois, modifie:
Code:
moisCalendrier.length<12
par:
Code:
moisCalendrier.length<6
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 15:02

Hum apparemment non, j'ai testé avec celui sur 3 mois, meme resultat
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 15:29

12 mois à récupérer prenait trop de temps (ajax timeout), j'ai limité à 6 mois et augmenté le délai maximal d'attente à 10 secondes, ça devrait fonctionner à présent.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 15:40

Oui, génial ! C'est parfait et super pratique :))))

Un grand merci Arnaud ! Je mets en résolu

Bon week-end hinhin
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Sam 4 Mai 2019 - 15:45


Coucou

Sujet résolu et déplacé dans le forum adéquate

A bientôt pour une prochaine demande clin oeil



Le respect mutuel est le fondement de la véritable harmonie.(Dalaï Lama).

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Revenir en haut

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum