[Plugin] AutoSave
rockyhorror
Member
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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à
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)
J'ai corrigé l'archive.
Je mettrais le delai d'enregistrement en paramètre pour la prochaine version.
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
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
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.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Reste à voir si on peut le faire fonctionner avec tinymce.
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.
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
J'ai zippé et mis à dispos sur mon site.
Merci Jerry
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.
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.
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.
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".
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 et à la remplacer par
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.
Je vais regarder ça.
Voici une nouvelle version, qui ajoute un bouton annuler dans l'edition des articles ou des pages statiques.
dispo ici
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...
Tantôt le plugin me sauve du timeout ; tantôt il ne me sauve pas.
D'où vient cette inconstance ?
Une idée ?