11540 sujets

JavaScript, DOM et API Web HTML5

bonjour à toute la communauté,

Depuis l'année dernière, ma page web fonctionne bien comme je le veux, à un iota près :
le tri de ma table par un javascript ne me laisse pas présenter celle-ci comme je le veux .
Par défaut, sur mes 5 colonnes dont 1 de dates, c'est celle des dates qui est triée par défaut, et de façon croissante .
J'ai besoin de la présenter par défaut en tri décroissant .
Faut-il modifier le script, et si oui , comment procéder, sachant que je ne sais que m'en servir ... Smiley decu ou / et faut-il modifier le code dans le <body>) ?

voici le code dans le <head> :

<!-- SCRIPT Tri table TableClips  -->
<script type="text/javascript" src="tablesort.js">
</script>
<script type="text/javascript" src="customsort.js">
</script>


voici le code dans le <body> :

     <thead class="thead">
	<tr>
        <th  width="220" class="sortable-text"scope="col">ARTISTE / GROUPE</th>
        <th  width="285" class="sortable-text" scope="col">TITRE</th>
        <th  width="60" class="sortable-text" scope="col">Media</th>
        <th  width="88" class="sortable-text" scope="col">Posteur</th>
        <th  width="137" class="sortable-sortEnglishDateTime" scope="col">Date</th>
      </tr>
    </thead>
		
<?php include('TbodyTableClips.php'); ?>


Voici le code de "customsort.js" :

var sortEnglishDateTime = fdTableSort.sortNumeric;

function sortEnglishDateTimePrepareData(tdNode, innerText) {
        // You can localise the function here
        var months = ['january','february','march','april','may','june','july','august','september','october','november','december','jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];

        // Lowercase the text
        var aa = innerText.toLowerCase();         
        
        // Replace the longhand and shorthand months with an integer equivalent
        for(var i = 0; i < months.length; i++) {                 
                aa = aa.replace(new RegExp(months[i] + '([\\s|,]{1})'), (i+13)%12 + " ");
        };

        // Replace multiple spaces and anything that is not valid in the parsing of the date, then trim
        aa = aa.replace(/\s+/g, " ").replace(/([^\d\s\/-:.])/g, "").replace(/^\s\s*/, '').replace(/\s\s*$/, '');
        
        // REMOVED: No timestamp at the end, then return -1
        //if(aa.search(/(\d){2} [decu]\d){2}( [decu]\d){2})?$/) == -1) { return -1; };

        // No timestamp at the end, then create a false one         
        if(aa.search(/(\d){2} [decu]\d){2}( [decu]\d){2})?$/) == -1) { aa += " 00:00:00"; };
        
        
        // Grab the timestamp
        var timestamp = aa.match(/(\d){2} [decu]\d){2}( [decu]\d){2})?$/)[0].replace(/:/g, "");

        // Make the timestamp 6 characters by default
        if(timestamp.length == 4) { timestamp += "00"; };

        // Remove it from the string to assist the date parser, then trim
        aa = aa.replace(/(\d){2} [decu]\d){2}( [decu]\d){2})?$/, "").replace(/\s\s*$/, '');

        // If you want the parser to favour the parsing of European dd/mm/yyyy dates then leave this set to "true"
        // If you want the parser to favour the parsing of American mm/dd/yyyy dates then set to "false"
        var favourDMY = true;

        // If you have a regular expression you wish to add, add the Object to the end of the array
        var dateTest = [
                       { regExp:/^(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])([- \/.])((\d\d)?\d\d)$/, d:3, m:1, y:5 },  // mdy
                       { regExp:/^(0?[1-9]|[12][0-9]|3[01])([- \/.])(0?[1-9]|1[012])([- \/.])((\d\d)?\d\d)$/, d:1, m:3, y:5 },  // dmy
                       { regExp:/^(\d\d\d\d)([- \/.])(0?[1-9]|1[012])([- \/.])(0?[1-9]|[12][0-9]|3[01])$/, d:5, m:3, y:1 }      // ymd
                       ];

        var start,y,m,d;
        var cnt = 0;
        var numFormats = dateTest.length;
        while(cnt < numFormats) {
               start = (cnt + (favourDMY ? numFormats + 1 : numFormats)) % numFormats;
               if(aa.match(dateTest[start].regExp)) {
                       res = aa.match(dateTest[start].regExp);
                       y = res[dateTest[start].y];
                       m = res[dateTest[start].m];
                       d = res[dateTest[start].d];
                       if(m.length == 1) m = "0" + String(m);
                       if(d.length == 1) d = "0" + String(d);
                       if(y.length != 4) y = (parseInt(y) < 50) ? "20" + String(y) : "19" + String(y);

                       return y+String(m)+d+String(timestamp);
               };
               cnt++;
        };
        return -1;
};


Merci d'avance pour votre aide .... Smiley smile

Smiley smile [/i]
Modifié par 6troen (10 Mar 2013 - 20:52)
@jo_link_noir

Malheureusement, il existe plusieurs tablesort.js et 6troen a opté pour celui qui ne propose 'plus' de doc (site fermé?).

@6troen

Ayant lu vos messages de juin 2012, et ayant appris que vous vous étiez mis au PHP, pourquoi ne pas utiliser les ressources qu'offre ce langage lié à une Base de Données ? PHP comprend des fonctions qui correspondent exactement à ce vous désirez faire Smiley cligne
lddsoft a écrit :
Ayant lu vos messages de juin 2012, et ayant appris que vous vous étiez mis au PHP, pourquoi ne pas utiliser les ressources qu'offre ce langage lié à une Base de Données ? PHP comprend des fonctions qui correspondent exactement à ce vous désirez faire Smiley cligne
Celà implique donc au minimum 2 choses à maîtriser !
PHP, et je n'ai pas été plus loin dans la compréhension de ce langage que les lignes de code qui m'étaient nécessaires pour cette page de tableau, la seule que je ai faite et que je ne referais (certainement) plus .
MYSQL (ou autre) pour la BD (les dieux me sont témoins que j'y ai consacré du temps, avant de déconnecter ... Smiley biggol ), et remettre tout en cause pour obtenir le "visuel" actuel de ma page ... Smiley smile
Votre suggestion n'est pas inintéressante, mais compte tenu de mon âge, qu'on commence à qualifier de "certain" (pour ne pas me vexer Smiley lol ), je désirerais voir le résultat définitif de ce tri descendant de colonne sur cette table avant d'être complètement "légumisé", voire "mangé par les vers de terre .... " si vous voyez ce que je veux dire .... Smiley ravi
Aussi, je pense persister sur la résolution par le chemin que j'explore actuellement : le javascript, que je ne comprends pas plus, mais qui offre plus de solutions "prêt à consommer" que les autres langages, et plus facile à utiliser avec un langage "html" vraiment basique . Smiley rolleyes

Merci quand même pour votre réponse . Smiley cligne
jo_link_noir a écrit :
Salut,

Regarde la documentation de tablesort.js, c'est le plugin que tu utilises.

La colonne "Date" est triée par "customsort.js" . Smiley decu
6troen a écrit :
Aussi, je pense persister sur la résolution par le chemin que j'explore actuellement : le javascript, que je ne comprends pas plus, mais qui offre plus de solutions "prêt à consommer" que les autres langages, et plus facile à utiliser avec un langage "html" vraiment basique .

C'est vous (qui le dites et) qui voyez (comme qui dirait ...)! Smiley smile
6troen a écrit :
La colonne "Date" est triée par "customsort.js" .

Si je ne m'abuse, ce script ne concerne que la mise en forme de la date.

P.S.: je ne suis pas beaucoup plus jeune que vous Smiley cligne .
Cordialement,
Un autre sexagénaire Smiley langue .
Modifié par lddsoft (09 Mar 2013 - 20:34)
lddsoft a écrit :
Si je ne m'abuse, ce script ne concerne que la mise en forme de la date.
Oui, c'est un add-on pour le fichier "tablesort.js". Smiley smile
Par contre je sais qu'il y a une possibilité de forcer un "reverseSort" dans les classes "sortable", mais je ne sais pas comment ni où l'employer pour arriver à mes fins ... Smiley bawling

lddsoft a écrit :
P.S.: je ne suis pas beaucoup plus jeune que vous Smiley cligne .
Cordialement,
Un autre sexagénaire Smiley langue .
Enchanté, mais auriez-vous commencé vos études des langages informatiques à 68 ans ? Smiley eek
A cette adresse vous trouverez le même script, mais dans une version antérieure. Il présente toutefois l'avantage d'être plus facile à configurer. On comprend assez rapidement comment classer les dates par ordre décroissant à l'ouverture de la page. Smiley cligne
Si vous regardez le dernier post (Gmarin), en bas de la page dont vous me donnez l'adresse, vous constaterez que j'y suis passé un tout petit peu plus tôt ! Smiley ravi Smiley ravi
Néanmoins, merci . Smiley biggrin

Le soucis, c'est que çà ne fonctionne pas avec le format de dates que j'utilise dans ma table : date-timestamp (d/m/y hh:mm) . Smiley decu
C'est pourquoi j'utilise l'add-on "custom.js" qui est complémentaire de "tablesort.js" et qui gère le timeStamp, mais où je ne trouve pas la possibilité d'afficher à l'origine ma colonne "Date" en "reverseSort" (pardon, en ordre descendant Smiley lol )

Autrement, la ligne de cette démo :
<table id="test1" class="sortable-onload-[b][#red]3-reverse[/#][/b] rowstyle-alt no-arrow" border="0" cellpadding="0" cellspacing="0">
donne déjà la possibilité de présenter la table triée en ordre descendant .
Dans cette excellente démo interactive, en sélectionnant la colonne Release Date (4, au lieu de 3), c'est donc cette colonne qui a le focus et est triée en ordre descendant, et cela même sans changer la disposition dans les lignes :

<th style="-moz-user-select: none;" class="[b]fd-column-2 sortable-text reverseSort[/b]"><a title="Sort on "Movie" href="#">Movie</a></th>
      <th style="-moz-user-select: none;" class="[b]sortable-date-dmy fd-column-3[/b]"><a title="Sort on "Release Date" href="#">Release Date</a></th>

en
<th style="-moz-user-select: none;" class="[b]sortable-text fd-column-2[/b]"><a title="Sort on "Movie" href="#">Movie</a></th>
      <th style="-moz-user-select: none;" class="[b]fd-column-3 sortable-date-dmy reverseSort[/b]"><a title="Sort on "Release Date" href="#">Release Date</a></th>


J'ai posté, mais je ne me fais pas d'illusion quand à une probable réponse .... ! Smiley rolleyes
Si c'est néanmoins le cas, je remonterais volontiers l'info et les données jusqu'ici .
Tout comme si je trouve une solution avant qu'elle me soit proposée ici ! Smiley cligne
Je me suis mal exprimé Smiley biggol , et çà prête à confusion :
mes dates sont au format suivant : "dd/mm/yyyy hh:mm", comme dans la ligne suivante :

<td class="Date">13/08/2009 22:50</td>


Comme il y a autant d'appellations pour ce format que de pages web en traitant, je retire le mot "timestamp" . Smiley confused
Modifié par 6troen (10 Mar 2013 - 17:20)
Tu peux très bien t'arranger pour ne pas avoir les heures et les minutes, à moins que tu n'y accordes de l'importance Smiley smile
Tu penses bien que si j'en avais pas l'utilité, je n'aurais pas posté pour ce soucis, puisque je dispose de scripts qui gèrent le reverseSort sur les dates ... Smiley rolleyes
Mais la source de ma table étant comme ceci :
upload/31568-ScreenShot.jpg
où la date est sous le format dd/mmm/yy hh:mm, il peut donc y avoir des messages qui se suivent dans la même heure, d'où mon obligation de respecter les minutes dans ma saisie de données ... Smiley rolleyes

Je suis sur une piste à : TableKit.Sortable et j'épluche les possibilités ... Smiley biggrin
Modifié par 6troen (10 Mar 2013 - 18:07)
La chance m'a souri ..... et la réponse est vraiment simple, tellement que si je n'avais pas d'arthrose, je me filerais des coups de pied dans le c*l ! Smiley lol
J'avais posté également sur d'autres forums, que je fréquente, et la réponse m'est arrivée .
Je refais donc remonter l'information, pour que la connaissance s'accroisse par le partage ... Smiley ravi
<table id="TableClips" class="TableClips [b]sortable-onload-4r[/b]" cellspacing="0" cellpadding="0">

le "4" désignant la colonne à trier, et le "r" la fonction "reverseSort" !

Un grand merci à lddsoft pour son dévouement . Smiley cligne
Modifié par 6troen (10 Mar 2013 - 20:53)
Merci ! J'avais tout pigé, sauf l'histoire du 'r' ! Smiley biggrin
Bonne continuation 6troen!
Modifié par lddsoft (10 Mar 2013 - 20:54)