Changeset 26963 in spip-zone


Ignore:
Timestamp:
Feb 28, 2009, 2:30:55 AM (10 years ago)
Author:
patfr@…
Message:

Horloge (suisse?) : prise en compte du cookie indiquant la différence d'heure serveur/client
Lecookie est valable sur toute la session

+ changement de syntaxe pour la balise. Exemples : #HORLOGE - #HORLOGE{utc=GMT, id=2}
+ modèles. Exemples : <horloge2> - <horloge|utc=GMT, id=2>
+ compatibilité avec AJAX (notamment les crayons...)
+ qq optimisations JS
+ qq optimisations PHP

L'heure affichée chez le visiteur est maintenant en rapport avec l'heure du serveur, non avec la sienne.
Pour avoir l'heure du serveur brute (tests?), annuler le format : #HORLOGE{format=}

Paramètres disponibles (tous optionnels) :

  • format (dates PHP)
  • utc (ACDT, ACST, etc.)
  • id (nombre)
Location:
_plugins_/_stable_/couteau_suisse
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/couteau_suisse/config_outils.php

    r26916 r26963  
    11551155        'id' => 'horloge',
    11561156        'categorie' => 'spip',
    1157         'pipelinecode:insert_head' => '$flux.=\'<script type="text/javascript" src="\'.generer_url_public(\'cout_dates.js\',\'lang=\'.$GLOBALS[\'spip_lang\']).\'"></script>\'."\n";
    1158 $flux.=\'<script type="text/javascript" src="'.url_absolue(find_in_path("outils/jquery.jclock.js")).'"></script>\'."\n";',
     1157        'pipelinecode:insert_head' => '$flux.=\'<script type="text/javascript" src="\'.generer_url_public(\'cout_dates.js\',\'lang=\'.$GLOBALS[\'spip_lang\']).\'"></script>
     1158<script type="text/javascript" src="'.url_absolue(find_in_path("outils/jquery.jclock.js")).'"></script>\'."\n";',
     1159        'code:jq_init' => 'jclock_init.apply(this);',
    11591160));
    11601161
  • _plugins_/_stable_/couteau_suisse/modeles/horloge.html

    r26927 r26963  
    11#CACHE{0}[(#REM)
    22
    3         Modele horloge : #HORLOGE{format, zone, id}
    4         Par defaut : #HORLOGE{24, CET}
     3        Modele horloge : # HORLOGE{parametre:valeur,parametre:valeur,etc.}
     4        Par defaut : # HORLOGE{format=H:i:s, utc=CET}
     5        parametres disponibles, tous optionnels :
     6                - format (dates PHP)
     7                - utc (valeurs ci-dessous)
     8                - id (nombre)
    59
    610        Valeurs pour la zone :
     
    5458
    5559
    56 ][(#EVAL{defined('_CS_horloge')}|oui)#HORLOGE{#ENV{format},#ENV{utc},#ENV{id},}]
     60][(#EVAL{defined('_CS_horloge')}|oui)[(#HORLOGE{[format=(#ENV{format})],[utc=(#ENV{utc})],[id=(#ENV{id})]})]]
  • _plugins_/_stable_/couteau_suisse/outils/horloge_fonctions.php

    r26916 r26963  
    1010// La balise #HORLOGE{format,utc,id}
    1111function balise_HORLOGE_dist($p) {
    12         $format = sinon(interprete_argument_balise(1,$p), "'H:i:s'");
    13         $utc = sinon(interprete_argument_balise(2,$p), "''");
    14         $id = sinon(interprete_argument_balise(3,$p), "'0'");
    15         $p->code = "'<div class=\"jclock'.(intval($id)?' jclock'.$id:'').'\" title=\"'.$utc.'|'.$format.'\"></div>'";
     12        $i = 1; $ar = array();
     13        while(($a = interprete_argument_balise($i++,$p)) != null) $ar[] = $a;
     14        $ar = count($ar)?join(".'|'.", $ar):"''";
     15        $p->code = "'<span class=\"jclock\" title=\"'.$ar.'\"></span> '";
    1616        $p->type = 'php'; 
    1717        return $p;
  • _plugins_/_stable_/couteau_suisse/outils/jquery.jclock.js

    r26925 r26963  
    22// pour SPIP < 2.0, il faut le plugin jquery.cookie.js
    33
    4 $(function($) {
    5         if($('.jclock').length) {
     4// compatibilite Ajax : ajouter "this" a "jQuery" pour mieux localiser les actions
     5// et tagger avec cs_done pour eviter de traiter plrs fois la meme horloge
     6function jclock_init() {
     7        if(jQuery('.jclock', this).length) {
    68                if(typeof $.cookie!='function')
    7                         $.getScript(cs_CookiePlugin, function(){
     9                        jQuery.getScript(cs_CookiePlugin, function(){
    810                                var diff = $.cookie('cs_jclock_diff');
    911                                if(diff===null) set_jclock_ajax(); else each_jclock(diff);
     
    1214                        set_jclock_ajax();
    1315   }
    14 });
     16}
    1517
    1618function set_jclock_ajax() {
     
    1820                var local = new Date();
    1921                var diff = local.dateFormat("U") - $("U", resultat).text();
    20                 var serveurgmt = $("O", resultat).text();
    21                 each_jclock();
     22//              var serveurgmt = $("O", resultat).text();
     23                each_jclock(diff);
    2224                if(typeof $.cookie=='function')
    2325                        $.cookie('cs_jclock_diff', diff);
     
    2628
    2729function each_jclock(diff) {
    28         $('.jclock').each(function(){
    29                 var reg = /([^|]*)\|(.*$)/g;
    30                 reg = reg.exec(this.title);
    31                 if(!reg)
    32                         var options = { offset: diff };
    33                 else
    34                         var options = { offset: diff, utc: reg[1], format: reg[2] };
     30        jQuery('.jclock')
     31        .not('.cs_done').addClass('cs_done')
     32        .each(function(){
     33                var options = { serveur_offset: diff };
     34                var opt = this.title.split('|');
     35                for (i=0; i<opt.length; i++) {
     36                        j = opt[i].indexOf('=');
     37//                      if(j>0) options[opt[i].substr(0,j).trim()] = opt[i].substring(j+1).trim();
     38                        if(j>0) options[opt[i].substr(0,j)] = opt[i].substring(j+1);
     39                }
     40                if(typeof options.id != "undefined") $(this).addClass('jclock'+options.id)
     41                this.title = "";
    3542                $(this).jclock(options);
    3643        });
    3744}
     45
     46//String.prototype.trim = function() { return this.replace(/(?:^\s+|\s+$)/g, ''); };
    3847
    3948/*
     
    127136        WET : Western Europe Time (GMT + 00:00)
    128137*/
    129  
     138
    130139(function($) {
    131         var gmtDataBase = '/ACDT:37800/ACST:34200/AEDT:36000/AEST:36000/AHST:-36000/AKST:-32400/AWST:28800/BRADT:-14400/BRAST:-18000/BRDT:-7200/BREDT:-3600/BREST:-7200/BRST:-10800/BRWDT:-10800/BRWST:-14400/CCT:28800/CDT:-18000/CET:3600/CST:-21600/EAT:7200/EET:7200/EST:-18000/GMT:0/GMT0100:3600/GMT0200:7200/GMT0300:10800/GMT0330:12600/GMT0400:14400/GMT0430:16200/GMT0500:18000/GMT0530:19800/GMT0545:20700/GMT0600:21600/GMT0630:23400/GMT0700:25200/GMT0710:25800/GMT0730:27000/GMT0800:28800/GMT0830:30600/GMT0900:32400/GMT0930:34200/GMT1000:36000/GMT1100:39600/GMT1200:43200/GMT1300:46800/GMT-0100:-3600/GMT-0200:-7200/GMT-0230:-5400/GMT-0300:-10800/GMT-0330:-9000/GMT-0400:-14400/GMT-0430:-12600/GMT-0500:-18000/GMT-0600:-21600/GMT-0700:-25200/GMT-0800:-28800/GMT-0900:-32400/GMT-1000:-36000/GMT-1100:-39600/GMT-1200:-43200/ICT:25200/IST:7200/JOG:25200/JST:32400/MST:-25200/MX-CST:-21600/MX-MST:-25200/MX-PST:-28800/NZT:43200/PST:-28800/R1T:7200/R2T:10800/SAST:34200/USZ3:14400/USZ4:18000/USZ5:21600/USZ6:25200/USZ7:28800/USZ8:32400/USZ9:36000/WET:0';
    132         var jclockFormatDefaut = 'H:i:s';
     140        var gmtDataBase = { 'ACDT':3780,'ACST':3420,'AEDT':3600,'AEST':3600,'AHST':-3600,'AKST':-3240,'AWST':2880,'BRADT':-1440,'BRAST':-1800,'BRDT':-720,'BREDT':-360,'BREST':-720,'BRST':-1080,'BRWDT':-1080,'BRWST':-1440,'CCT':2880,'CDT':-1800,'CET':360,'CST':-2160,'EAT':720,'EET':720,'EST':-1800,'GMT':0,'GMT0100':360,'GMT0200':720,'GMT0300':1080,'GMT0330':1260,'GMT0400':1440,'GMT0430':1620,'GMT0500':1800,'GMT0530':1980,'GMT0545':2070,'GMT0600':2160,'GMT0630':2340,'GMT0700':2520,'GMT0710':2580,'GMT0730':2700,'GMT0800':2880,'GMT0830':3060,'GMT0900':3240,'GMT0930':3420,'GMT1000':3600,'GMT1100':3960,'GMT1200':4320,'GMT1300':4680,'GMT-0100':-360,'GMT-0200':-720,'GMT-0230':-540,'GMT-0300':-1080,'GMT-0330':-900,'GMT-0400':-1440,'GMT-0430':-1260,'GMT-0500':-1800,'GMT-0600':-2160,'GMT-0700':-2520,'GMT-0800':-2880,'GMT-0900':-3240,'GMT-1000':-3600,'GMT-1100':-3960,'GMT-1200':-4320,'ICT':2520,'IST':720,'JOG':2520,'JST':3240,'MST':-2520,'MX-CST':-2160,'MX-MST':-2520,'MX-PST':-2880,'NZT':4320,'PST':-2880,'R1T':720,'R2T':1080,'SAST':3420,'USZ3':1440,'USZ4':1800,'USZ5':2160,'USZ6':2520,'USZ7':2880,'USZ8':3240,'USZ9':3600,'WET':0 };
    133141
    134142  $.fn.jclock = function(options) {
     
    141149                $this.timerID = null;
    142150                $this.running = false;
    143                
     151
    144152                var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
    145                
    146                 $this.format = o.format?o.format:jclockFormatDefaut;
    147                 $this.offset = o.offset;
    148                 $this.utc = o.utc;
     153                $this.format = o.format;
     154                $this.serveur_offset = o.serveur_offset;
     155                $this.utc = o.utc.toUpperCase();
    149156                $this.utc_offset = o.utc_offset;
    150                 if (o.utc.length && ((index = gmtDataBase.indexOf("/"+o.utc+":")) != -1)) {
    151                   var utc_offset = gmtDataBase.substring(index);
    152                   var reg = new RegExp(":(-?[0-9]+)","g");
    153                   utc_offset = reg.exec(utc_offset);
    154                   $this.utc_offset = utc_offset[1]*1000;
    155                 }
    156 
    157       $.fn.jclock.startClock($this);
     157                if (o.utc) $this.utc_offset = gmtDataBase[$this.utc]*10000;
     158
     159                $.fn.jclock.startClock($this);
    158160 
    159161    });
     
    178180  $.fn.jclock.getTime = function(el) {
    179181    var now = new Date();
    180     if(el.utc.length) {
     182        if(!el.format) {
     183                // ici on veut l'horloge du serveur
     184                now = new Date(now.getTime() - el.serveur_offset * 1000);
     185                el.format = 'H:i:s';
     186        } else if(el.utc.length) {
    181187                var localTime = now.getTime();
    182188                var localOffset = now.getTimezoneOffset() * 60000;
    183189                var utc = localTime + localOffset;
    184190                var utcTime = utc + el.utc_offset;
    185                 now = new Date(utcTime);
     191                now = new Date(utcTime - el.serveur_offset * 1000);
    186192    }
    187193        return now.dateFormat(el.format);
     
    189195       
    190196  $.fn.jclock.defaults = {
    191     format: jclockFormatDefaut,
     197    format: 'H:i:s',
    192198        utc: '',
    193199        utc_offset: 0,
    194         offset:0,
     200        serveur_offset:0,
    195201  };
    196202 
Note: See TracChangeset for help on using the changeset viewer.