source: spip-zone/_plugins_/plugins_seenthis/date_relative_dynamique/js.calcul_date.html @ 87139

Last change on this file since 87139 was 87139, checked in by code@…, 5 years ago

plugins_seenthis/date_relative_dynamique : pas de rafraichissement si le page n'est pas affichée

File size: 3.4 KB
Line 
1[(#HTTP_HEADER{Content-type: text/javascript[; charset=(#CHARSET)]})]
2
3var chaines_lang = {
4        'date_il_y_a': '<:date_il_y_a:>',
5        'date_une_seconde': '<:date_une_seconde:>',
6        'date_secondes': '<:date_secondes:>',
7        'date_une_minute': '<:date_une_minute:>',
8        'date_minutes': '<:date_minutes:>',
9        'date_une_heure': '<:date_une_heure:>',
10        'date_heures': '<:date_heures:>',
11
12        'date_hier': '<:date_hier:>',
13        'date_jours': '<:date_jours:>',
14
15        'date_une_semaine': '<:date_une_semaine:>',
16        'date_semaines': '<:date_semaines:>',
17
18        'date_un_mois': '<:date_un_mois:>',
19        'date_mois': '<:date_mois:>'
20};
21
22
23function _T(chaine, nom_val, val) {
24        return chaines_lang[chaine].replace("@" + nom_val + "@", val);
25}
26
27/**
28 * Intervalles pour formatter la date
29 * [0]: intervalle valide en desous de cette valeur
30 * [1]: facteur par lequel il faut diviser le nombre de secondes pour l'affichage
31 * [2]: clé pour la traduction
32 */
33var intervalleFormattageDates = [
34        [2, 1, 'date_une_seconde'],
35        [60, 1, 'date_secondes'],
36        [120, 60, 'date_une_minute'],
37        [3600, 60, 'date_minutes'],
38        [7200, 3600, 'date_une_heure'],
39        [86400, 3600, 'date_heures'],
40        [172800, -1, 'date_hier'],
41        [1209600, 604800, 'date_une_semaine'],
42        [2419200, 604800,'date_semaines'],
43        [4838400, 2419200, 'date_un_mois'],
44        [31449600, 2419200, 'date_mois']
45];
46
47
48function afficher_dates() {
49        var date_now = Math.floor((new Date()).getTime() / 1000) + Math.floor($.cookie('dateoffset'));
50
51        $(".calcul_date").each(function () {
52                var $this = $(this);
53                var date;
54                if ($this.attr("datetime")) {
55                        var dateTime = new Date($this.attr("datetime"));
56                        date = Math.floor(dateTime.getTime() / 1000);
57                } else if ($this.attr("title")) {
58                        date = Math.floor($this.attr("title"));
59                }
60
61                // L'age de l'article depend du serveur
62                // l'age affichee depend du client
63                var age = date_now - date;
64
65                if(age < 1) {
66                        // date dans le futur :-(
67                        age = false;
68                } else {
69                        var intervalle = null;
70                        // on parcourt les intervalles jusqu en trouver
71                        for (var i = 0; i < intervalleFormattageDates.length; i++) {
72                                var intervalle_courant = intervalleFormattageDates[i];
73                                if (age < intervalle_courant[0]) {
74                                        intervalle = intervalle_courant;
75                                        break;
76                                }
77                        }
78                        if (intervalle) {
79                                if (intervalle[1] == -1) {
80                                        // formattage simplifié
81                                        age = _T(intervalle[2])
82                                } else {
83                                        age = _T("date_il_y_a", "delai", Math.max(1, Math.floor(age/ intervalle[1])) + " " + _T(intervalle[2]));
84                                }
85                        } else {
86                                age = false;
87                        }
88                }
89
90                if (age) {
91                        $this.attr('title', $this.html());
92                        $this.html(age);
93                }
94
95        });
96}
97
98// Masquer les dateServer
99// puis recuperer date serveur
100// donc reafficher dates pour calcul
101$(function () {
102        var calculDateInterval;
103        function triggerCalculDateInterval(){
104                calculDateInterval = setInterval(function(){
105                        afficher_dates();
106                }, 1000)
107        }
108
109        triggerCalculDateInterval();
110        $(document).on('visibilitychange', function(){
111                if(document.hidden) {
112                        clearInterval(calculDateInterval);
113                } else {
114                        triggerCalculDateInterval();
115                }
116        });
117
118        if ($.cookie('dateoffset') == null) {
119                var date_now = Math.floor((new Date()).getTime() / 1000);
120                $.ajax({
121                        type: "POST",
122                        url: "[(#VAL{spip.php?action=dateoffset}|url_absolue)]",
123                        data: {time: date_now},
124                        complete: function (data) {
125                                var date_sql = Math.floor(data.responseText);
126                                if (date_sql > 1200000000) // sanity check sur la reponse
127                                        $.cookie('dateoffset', date_sql - date_now, {path: "/"});
128                        }
129                });
130        }
131
132});
Note: See TracBrowser for help on using the repository browser.