que je lie sur mon site, pour amener les utilisateurs sur le forum afin de poser une question. J’utilise diverses valeurs pour title afin de pré-remplir le titre avec le sujet qui les préoccupe, et je voudrais que l’éditeur soit le focus.
Je cherchais comment modifier cela, et j’ai trouvé le fichier composer.js avec la définition de focusTarget, qui serait assez facile à modifier pour supporter ce comportement si le titre était passé.
Le problème que je rencontre est que je ne vois pas où focusTarget est réellement appelé. Je programme depuis de nombreuses années, mais je suis nouveau sur Ember, et j’ai fait relativement peu de programmation JavaScript.
Tout conseil sur la façon d’aborder cela serait grandement apprécié (un rtfm avec un pointeur vers un manuel raisonnable serait même apprécié)
D’accord, ce code est ce qui le fait fonctionner. Ce que je ne sais pas, c’est quel code je dois modifier pour que cette méthode obtienne le titre, afin de pouvoir y définir correctement le focus sur l’éditeur…
J’ai presque réussi – lorsque le code s’exécute, j’obtiens une erreur indiquant que scheduleOnce n’est pas défini – j’ai essayé api.scheduleOnce, mais il semble que scheduleOnce soit une chose d’Ember. J’ai essayé d’ajouter cette importation à mon composant, mais j’ai obtenu une erreur indiquant que les importations ne sont autorisées qu’au niveau supérieur. import { scheduleOnce } from "@ember/runloop";
Je suppose qu’il y a quelque chose de petit qui m’échappe, et je vais continuer à essayer, mais je me suis dit que vous pourriez le voir facilement.
Dans quel fichier dois-je les mettre ? Ce que j’essayais de faire, c’était juste de l’utiliser dans <head> – comme composant – voici ce que j’ai fait, ce qui résulte dans le log “scheduling afterRender” qui s’affiche, puis une erreur concernant scheduleOnce qui n’existe pas. J’ai essayé d’utiliser l’import de quelques manières, mais ça ne fonctionne pas. Je suspecte que mon inexpérience avec les modules en javascript me cause des problèmes. Peut-être que je ne peux pas le faire via un composant, et que j’ai besoin de faire un plugin plus complet. Je vais examiner cela – merci encore pour votre aide
<script type="text/discourse-plugin" version="1.8.0">
api.onAppEvent("composer:open", ({ model }) => {
console.log("composer open happened, model is: ", model);
if (model.title !== "") {
console.log("scheduling afterRender");
scheduleOnce("afterRender", () => {
console.log("after render happening");
api.putCursorAtEnd(document.querySelector("textarea.d-editor-input"));
});
}
});
</script>
Par ailleurs, je vous encourage vivement à utiliser le Theme CLI. Vous pouvez créer un composant de thème à partir d’un modèle, le synchroniser avec un Discourse avec actualisation en direct, et mettre à jour les modifications à l’aide de votre éditeur. C’est beaucoup plus simple que d’utiliser l’interface utilisateur !
Merci beaucoup - je savais qu’il me manquait quelque chose - je vais absolument le configurer pour utiliser le CLI du thème et les modifier de cette façon
Merci encore Arkshine, j’ai créé mon premier composant en utilisant discourse_theme maintenant
Pour ceux qui trouvent ce fil, j’ai juste eu à exécuter quelques commandes :
gem install discourse_theme
npm install -g yarn
discourse_theme new <component-name>
puis modifier le fichier : javascripts/discourse/api-initializers/.js
téléchargez-le sur github, et vous pouvez l’installer / le partager.
Le mien est ici.
Il semble avoir une fonctionnalité où vous pouvez automatiquement mettre à jour la version sur votre serveur, au fur et à mesure que vous modifiez les fichiers. Cela semble bien et utile, alors que je me lance dans des composants plus complexes.