Documentation Frappe Framework

Frappe Framework

Améliorer un contrôle standard

Pour ne pas répéter une fonction sur chaque DocType, on enrichit le contrôle. Le mot Translatable dans options décide quels champs sont concernés.

1 min de lectureMis à jour le Source : docs.frappe.io

L’idée

Les widgets standard se retouchent pour un petit ajout. L’exemple veut proposer plusieurs traductions de remplacement sur de nombreux enregistrements et de nombreux DocTypes. Comme l’élément commun est le contrôle (Control), le changement se fait là, pas fiche par fiche. Le code de base cité est frappe/public/js/frappe/form/controls/control.js.

Un contrôle est une instance de DocField. Le champ options distingue les champs concernés. Le mot choisi est Translatable.

Le code publié

La classe frappe.ui.form.ControlData est remplacée par une extension d’elle-même.

make_input lit this.df.options. Si la valeur est absente ou différente de Translatable, elle appelle _super() et s’arrête. Sinon elle construit une zone de saisie et un bouton. Le HTML de cette zone est vide dans le texte publié : les balises ont été retirées. Au focus, le bouton s’affiche. Au blur, il disparaît après 500 ms. Puis setup_button.

setup_button retire le bouton si only_input est vrai. Au clic, si la valeur existe et que options vaut exactement Translatable, open_dialog est appelé. Dans l’extrait, this.open_dialog() est dans le gestionnaire de clic : this y est le bouton, pas le contrôle.

open_dialog ne continue que si this.frm existe et que le formulaire n’est pas modifié (is_dirty() faux). Elle crée frappe.ui.form.TranslationSelector avec doc, df: this.doc et text: this.value. La page annonce cette classe « dans le code ci-dessous », mais le texte publié s’arrête là.

Point d’attention

Sans le mot exact Translatable dans options, le contrôle d’origine est gardé. Le sélecteur de traduction n’est pas fourni dans la page. Le HTML du champ étendu non plus. La source renvoie à un article de base de connaissances ERPNext pour personnaliser les options d’un champ lien, sans le reproduire.