[Plugin] AutoSave

rockyhorrorrockyhorror Member
février 2015 modifié dans Plugins
Bonjour,


Voici un petit plugin, qui permet de récupérer les données de l'article ou de la page statique en cours de rédaction en cas de timeout du login pluxml (ou autre erreurs de manipulation: fermeture de l'onglet, changement de page...)


A utiliser avec un navigateur récent car se base sur les fonctions "local storage" du HTML5.


Téléchargement ici


N'hésitez pas à tester, et me remonter vos remarques.

Réponses

  • Est-ce que ça fonctionne avec plxEditor ? Car j'avais essayé de coder un plugin similaire mais j'avais été confronté au problème avec plxEditor qui transforme le textarea en iframe, et je n'avais pas réussi.
  • Effectivement, ça ne marche pas avec plxEditor.
  • Le plugin de Stephane ne fonctionne pas également avec plxEditor.
  • Bonjour,

    Voici une nouvelle version de ce plugin que j'ai délaissé depuis un petit moment.

    Cela fonctionne maintenant même si vous utilisez le plugin CkEditor (et sans doute la plxToolbar mais pas testé)

    Par là
  • Cool mais il manque la vérification et l'appel à jquery (qui n'est pas forcément présent partout).
  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    Dans le code tu appelles le fichier sisyphus.js
    alors qu'il n'y a que le fichier sisyphus.min.js de dispo

    nb: il faut charger jquery avant le plugin

    Sinon le plugin fonctionne avec CKeditor (testé et validé). il faut attendre 30 secondes avant de voir une mention "AutoSave" s'affiché dans un encart vert. On change de page, on revient sur l'article: on récupère bien le texte qui était en cours de rédaction

    NOTE: rendre paramétrable le délai de 30 secondes serait pas mal.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Je suis curieux de savoir comment il fonctionne ce plugin. Il récupère le contenu de la div générée par CKeditor ? Est-ce qu'il fonctionne avec d'autres wysiwyg ?
  • Oups, merci Stéphane, petite erreur d'inattention.
    J'ai corrigé l'archive.

    Je mettrais le delai d'enregistrement en paramètre pour la prochaine version.
  • Jerry WhamJerry Wham Member
    février 2015 modifié
    J'ai regardé un peu vite fait le code javascript et en fait, il est prévu pour fonctionner aussi avec CKeditor.

    sisyphus.js vérifie si une instance de CKeditor existe, sinon, si j'ai bien compris, il part du principe qu'il s'agit d'un textarea "nu".

    J'ai aussi regardé le code php et il peut être optimisé en plaçant le js tout en bas de page et en utilisant qu'un seul hook. Vu que rockyhorror, tu n'as pas de profil sur github, je posterai mes modif comme un fork sur mon github afin que vous puissiez voir et charger ce que j'ai fait.

    Mais là, c'est dodo :P

    Vraiment merci rockyhorror d'avoir posté ce script qui va être vraiment utile à tous. J'opterais, si j'en avais la possibilité et une fois le code nettoyé, de le passer comme plugin officiel. Il ne sauve pas des chatons, mais pas loin :D
  • Jerry WhamJerry Wham Member
    février 2015 modifié
    Voici la version que je vous propose suite au travail de rockyhorror. Je l'ai mis sur github à l'adresse https://github.com/jerrywham/AutoSave.

    L'archive est disponible ici

    Les modifications que j'ai apportées :
    [list=*]
    [*]correction de l'appel du fichier javascript sisyphus[/*]
    [*]suppression des hooks inutiles[/*]
    [*]appel des javascripts en bas de page[/*]
    [*]déport du javascript en ligne, dans un fichier séparé. Il ne reste plus que l'appel à une fonction.[/*]
    [*]création d'un panneau de configuration pour régler la durée entre chaque sauvegarde.[/*]
    [*]suppression de jquery.notify au profil des fonctions natives de pluxml.[/*]
    [*]vérification du chargement de jquery préalablement au chargement des autres fichiers javascript.[/*]
    [/list]

    Enjoy :p
  • Jerry WhamJerry Wham Member
    février 2015 modifié
    Je viens de nouveau de modifier le code.

    Il n'est en fait pas nécessaire de préciser un délai d'enregistrement. Il y a une option de sisyphus qui permet de n'enregistrer que si les formulaires sont modifiés. J'ai donc supprimé l'affichage régulier de la vignette "AutoSave" au profit d'une image fixe qui précise que le plugin est actif. S'il y a un bug, elle ne s'affiche pas et donc il n'y a pas de sauvegarde.

    Sisyphus peut également prendre en compte les paramètres passés dans l'url pour les considérer comme des pages différentes. Cela corrige le bug qui redirigeait automatiquement vers un nouvel article quel que soit le lien cliqué (nouvel article ou article anciennement rédigé).

    J'ai supprimé la page de config qui ne sert plus à rien.

    J'ai ajouté une icône.

    Le code est ainsi simplifié.

    Les sources sont disponibles sur github.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Excellent Jerry

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Merci.

    Reste à voir si on peut le faire fonctionner avec tinymce.
  • Hello,

    Beau travail. Pas grand chose à dire. juste si tu peux corriger le titre de l'icone "Sauvegarde locale activée". J'avais laissé avec un timeout, parce que sinon la sauvegarde se fait à chaque appui sur une touche, ce qui peux sembler un peut trop. A voir.
  • Je viens de mettre à jour les sources sur github afin que sisyphus prenne en charge tinymce.

    J'ai corrigé le titre de l'icône.

    Je n'ai pas ajouté de timeout car cela permet :
    [list=*]
    [*]d'éviter d'avoir une alerte régulièrement, ce qui peut être saoulant à force[/*]
    [*]de n'enregistrer que s'il y a un changement dans le textearea[/*]
    [/list]


    Enjoy :p
  • :) cool merci jerry.
  • Attention quand même dans les premiers temps de bien vérifier que le plugin fonctionne comme prévu. Des bugs ne sont potentiellement pas à exclure.
  • Plop,

    J'ai zippé et mis à dispos sur mon site.

    Merci Jerry
  • Bon, j'ai trouvé un bug très génant : l'ensemble des plugins d'un site peut être désactivé d'un coup. Je pense que le problème vient d'autosave. Il va falloir que je vérifie.
    Faites donc attention que cela ne vous arrive pas. Désactivez le plugin si nécessaire jusqu'à ce que le bug soit résolu.

    Si d'autres ont eu ce désagrément, merci de nous en faire part.
  • Ce plugin il poutre. J'utilise la version 0.4ter avec spxtynimce.

    Je regrette seulement de ne pas l'avoir utilisé plus tôt.

    Il sauvegarde tout, même si je ferme mon onglet pendant que je tape, je récupère bien le dernier caractère, aucune perte !
    Bravo rockyhorror pour le script, et merci Jerry Wham pour toutes les améliorations.
  • De rien. :P
  • Vraiment chouette, ce plugin, merci rockyhorror et Jerry !

    Il y aurait une amélioration possible, qui rendrait bien service à l'occasion :
    Quand l'utilisateur a mis un joli bazar dans une page, la méthode la plus rationnelle est de quitter sans sauvegarder, puis de rouvrir la page.
    Mais là, crac, toutes les modifications reviennent !

    Evidemment, puisque c'est le but du plugin !
    Mais ce serait utile de pouvoir effacer la sauvegarde, pour pouvoir quitter et retrouver ensuite le contenu initial.

    Je pense éventuellement au remplacement de la coche qui est à gauche de l'icône par une vraie case à cocher,
    qu'on pourrait décocher pour effacer la sauvegarde de toutes les modifs depuis le dernier enregistrement (ou éventuellement un raccourci clavier, si c'est trop compliqué avec la case à cocher).

    J'ai vu une méthode "remove" dans sisyphus.js, qui me fait penser que cette fonction est prévue.
  • En fait, j'ai dit une bêtise : une case à cocher ne correspondrait pas à la fonction remove, qui annule la dernière mémorisation de la page en cours de modification, mais ne désactive pas la sauvegarde automatique.
    Ce serait plutôt un bouton RAZ (ou un logo ayant le même sens) qui correspondrait à cette fonction "remove".

    D'où le fonctionnement si on veut fermer la page sans la sauvegarder et retrouver sa version initiale : un petit coup de RAZ, on ferme la page et on peut la rouvrir sans affichage des modifs effectuées depuis le dernier enregistrement par le bouton "Enregistrer".
  • FrancisFrancis Member
    juin 2015 modifié
    Ma question n'a pas eu beaucoup de succès, je pense que personne n'avait la solution sous la main et que tout le monde est très occupé !
    Alors j'ai potassé la question, j'ai eu un peu de mal à trouver la doc mais finalement j'ai résolu le problème :)

    Pour permettre à l'utilisateur de fermer sa page et la rouvrir ensuite sans retrouver les modifications qu'il n'a pas enregistré lui-même (en cliquant sur le bouton "Enregistrer"), j'ai ajouté à côté du logo "Autosave" un lien "Fermer sans enregistrer".

    Ce lien utilise la méthode manuallyReleaseData() de Sisyphus, qui efface la mémoire du formulaire indiqué. Pour éviter un test entre formulaire d'article ou formulaire de page statique, je n'ai pas fait dans le détail et j'ai utilisé la balise form : on efface tout ce qui a pu être mémorisé et on recommence !

    Ça consiste à modifier la ligne 33 du fichier js/AutoSave.js
    [== JavaScript ==]
    newBlocMsg.innerHTML = '<img src="'+PLX_PLUGINS+'AutoSave/autosave.png" alt="Save locally enable" title="Sauvegarde locale activée"/>' ;
    
    et à la remplacer par
    [== JavaScript ==]
    newBlocMsg.innerHTML = '<img src="'+PLX_PLUGINS+'AutoSave/autosave.png" alt="Save locally enable" title="Sauvegarde locale activée"/>'
                           + '&nbsp;<a href="#" onclick="$(\'form\').sisyphus().manuallyReleaseData(); window.history.back(); return false;"'
                           + ' style="position: relative; bottom: 4px; font-size: 0.45em;">Fermer sans enregistrer</a>' ;
    

    Le retour se fait sur la page précédente, donc sur la liste des articles ou des pages statiques, suivant le type de page qu'on est en train d'éditer.
  • Bonjour Francis,

    Je vais regarder ça.
  • Entendu rockyhorror, merci.
  • Pour mieux coller à la nouvelle interface admin de PluXml 5.4 et améliorer la visibilité du lien "Fermer sans enregistrer", je l'ai transformé en bouton sur ma version modifiée, ce qui donne le code suivant :
    [== JavaScript ==]
    newBlocMsg.innerHTML = '<img src="'+PLX_PLUGINS+'AutoSave/autosave.png" alt="Save locally enable" title="Sauvegarde locale activée"/>'
                              + '&nbsp;<input type="button" value="Fermer sans enregistrer" name="closenosaving"'
                                          + ' onclick="$(\'form\').sisyphus().manuallyReleaseData(); window.history.back(); return false;"'
                                          + ' style="position: relative; bottom: 4px; font-size: 0.45em;">' ;
    
    
  • Bonjour,

    Voici une nouvelle version, qui ajoute un bouton annuler dans l'edition des articles ou des pages statiques.

    dispo ici
  • belcikowskibelcikowski Member
    janvier 2019 modifié
    Bonjour,
    Je tente d'utiliser le plugin Autosave, car il me semble qu'avec la version de PluXml, les timeouts du login s'accélèrent.
    J'ai donc installé le plugin. J'ai bien l'étiquette Autosave. Mais après un timeout qui m'a renvoyé à la case login/password de PluXml, j'ai tout perdu.
    Y a-t-il quelque chose que j'ai omis ou pas compris ?
    Je suis sous Safari. Pas de plugin d'édition dans mon PluXml. Seuls plugins : codemirror ; plxMySearch ; plxMyContact.
    NB ; la configuration des plugins ne peut pas se faire sous Safari. Je passe par Firefox.

    Si quelqu'un peut me conseiller...
  • Quelques jours plus tard...
    Tantôt le plugin me sauve du timeout ; tantôt il ne me sauve pas.
    D'où vient cette inconstance ?
    Une idée ?
Connectez-vous ou Inscrivez-vous pour répondre.