Changeset 104241 in spip-zone


Ignore:
Timestamp:
May 6, 2017, 10:26:44 PM (2 years ago)
Author:
real3t@…
Message:

Avec l'aide de Ladnet et Marcimat, ça marche aussi avec l'ajax de SPIP (Bouton revenir à l'article, bouton back du navigateur, et plus d'interférences avec le mode d'édition plein écran et l'édition des documents).

Location:
_plugins_/nemequittepas
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/nemequittepas/js/nemequittepas.js

    r103437 r104241  
     1// Déclaration pour ne pas avoir de warning JS
     2var nmqp_previous_url;
     3
     4// repris de https://gist.github.com/m1r0/018ed46dd0ff96176a9d
     5jQuery.fn.bindFirst = function(/*String*/ eventType, /*[Object], Function*/ eventData, /*Function*/ handler) {
     6        var indexOfDot = eventType.indexOf(".");
     7        var eventNameSpace = indexOfDot > 0 ? eventType.substring(indexOfDot) : "";
     8
     9        eventType = indexOfDot > 0 ? eventType.substring(0, indexOfDot) : eventType;
     10        handler = handler == undefined ? eventData : handler;
     11        eventData = typeof eventData == "function" ? {} : eventData;
     12
     13        return this.each(function() {
     14                var jQuerythis = jQuery(this);
     15                var currentAttrListener = this["on" + eventType];
     16
     17                if (currentAttrListener) {
     18                        jQuerythis.bind(eventType, function(e) {
     19                                return currentAttrListener(e.originalEvent);
     20                        });
     21
     22                        this["on" + eventType] = null;
     23                }
     24
     25                jQuerythis.bind(eventType + eventNameSpace, eventData, handler);
     26
     27                var allEvents = jQuery._data(jQuerythis[0], "events");
     28                var typeEvents = allEvents[eventType];
     29                var newEvent = typeEvents.pop();
     30                typeEvents.unshift(newEvent);
     31        });
     32};
     33
     34function nemequittepas_confirm() {
     35        if (jQuery('.formulaire_editer form').hasClass('dirty')) {
     36                return window.confirm('Voulez-vous vraiment quitter la page et perdre votre saisie ?');
     37        }
     38        return true;
     39}
     40
    141function init_nemequittepas() {
    2         jQuery('.formulaire_editer form').areYouSure( {'message':'Voulez-vous vraiment quitter la page et perdre votre saisie ?'} );
     42        var current_url = window.location.pathname+window.location.search;
     43
     44        // On ne fait l'initialisation que si on arrive sur une nouvelle url (résout le problème pour la prévisualisation grand écran et édition des documents)
     45        if ((current_url!=nmqp_previous_url) && (jQuery('.formulaire_editer form').length)) {
     46                jQuery('.formulaire_editer form').areYouSure( {'message':'Voulez-vous vraiment quitter la page et perdre votre saisie ?'} );
     47
     48                // on cherche les liens de retour ajaxés (seulement si on est arrivé par Ajax)
     49                if (nmqp_previous_url) {
     50                        jQuery('.retour a').not('.allreadybind').bindFirst('click', function() {
     51                                return nemequittepas_confirm();
     52                        });
     53                        // Et on pose un marqueur pour ne pas ajouter l'évenement plusieurs fois
     54                        jQuery('.retour a').addClass('allreadybind');
     55
     56                        // Il faut aussi gérer le cas du bouton back dans l'historique du navigateur
     57                        if (!window.spip_onpopstate) {
     58                                window.spip_onpopstate = window.onpopstate;
     59                        }
     60                        window.onpopstate = function(popState){
     61                                if (nemequittepas_confirm()==false) {
     62                                        // On n'a pas confirmé. Mais le bouton back ne se cancel pas !
     63                                        // ==> on remet dans l'historique la page d'édition
     64                                        window.history.pushState({}, 'foo', nmqp_previous_url);
     65                                } else {
     66                                        // On a confirmé ! Traitement "normal" de l'AJAX/SPIP…
     67                                        window.spip_onpopstate(popState);
     68                                }
     69                        };
     70                }
     71        }
     72
     73        nmqp_previous_url = current_url;
    374}
    475
  • _plugins_/nemequittepas/paquet.xml

    r103720 r104241  
    22        prefix="nemequittepas"
    33        categorie="edition"
    4         version="1.0.5"
     4        version="1.1.0"
    55        etat="test"
    66        compatibilite="[2.1.0;3.2.*]"
  • _plugins_/nemequittepas/plugin.xml

    r103720 r104241  
    1212        <auteur>Mehdi Cherigui - Jacques Pyrat</auteur>
    1313        <licence>GPLv3</licence>
    14         <version>1.0.5</version>
     14        <version>1.1.0</version>
    1515        <icon>images/nemequitepas-48.png</icon>
    1616        <lien>https://contrib.spip.net/4876</lien>
Note: See TracChangeset for help on using the changeset viewer.