Séparer le thème Javascript en plusieurs fichiers

Les thèmes complexes de javascript peuvent être divisés en plusieurs fichiers, afin de maintenir une bonne organisation.

Pour utiliser cette fonctionnalité, ajoutez simplement des fichiers au dossier /javascripts dans votre répertoire de thème. Ces fichiers ne peuvent pas être modifiés depuis l’interface utilisateur de Discourse, vous devez donc utiliser le Theme CLI ou sourcer le thème depuis git.

Les fichiers Javascript sont traités exactement de la même manière qu’ils le sont dans le cœur/les plugins, vous devez donc suivre la même structure de fichiers/dossiers. Les fichiers de thème sont chargés après le cœur/les plugins, donc si les noms de fichiers correspondent, la version du thème aura la priorité.


À titre d’exemple, vous pouvez désormais réaliser ce qui est décrit dans Using Plugin Outlet Connectors from a Theme or Plugin en ajoutant un seul fichier à votre thème :

/javascripts/my-theme/connectors/discovery-list-container-top/add-header-message.gjs

import Component from "@glimmer/component"; import { service } from
"@ember/service"; export default class HeaderMessage extends Component {
@service currentUser;

<template>
  Welcome
  {{this.currentUser.username}}
</template>
}

Pour utiliser l’API JS, créez un initialisateur :

/javascripts/discourse/api-initializers/init-theme.gjs

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  // Votre code ici
});

Si vous avez besoin d’un actif .js totalement différent (par exemple pour un web worker), consultez ce sujet.


Ce document est contrôlé par version - suggérez des modifications sur github.

27 « J'aime »

Supposons que je ne connaisse rien aux hiérarchies de fichiers core/plugins, car je suis juste venu ici pour créer un nouveau composant de thème. Où dois-je chercher pour le savoir ? Quelles sont les conventions de nommage pour les répertoires et les fichiers qu’ils contiennent ?

En regardant simplement différents thèmes/composants qui circulent, il existe toutes sortes de schémas d’imbrication et de sous-répertoires différents. Je n’ai pas réussi à trouver de modèle, ni à trouver de documentation. (Par exemple, quelle est la différence entre /initializers, /api-initializers et /pre-initializers ? :crying_cat_face:)

1 « J'aime »

Les fichiers ici utilisent l’API. Je me suis honnêtement aussi posé la question pendant un moment, pourquoi ne puis-je pas mettre les fichiers api-initializers dans initializers ?

Ouais. C’est difficile à comprendre. Je préfère ne pas penser au nombre de fois où j’ai passé 3 heures sur quelque chose pour finalement me rendre compte que j’avais mal nommé quelque chose ou que je l’avais mis au mauvais endroit, ou parfois, j’ai oublié de l’inclure dans l’une des nombreuses façons qui existent pour le faire (dans plugin.rb, dans un include dans un fichier js - quel chemin ? Ai-je besoin d’une extension ?)

Le mieux est d’utiliser Installer l’application console Discourse Theme CLI pour vous aider à créer des thèmes et de la laisser créer un squelette de thème pour vous. Et cela rend le débogage très facile car il le télécharge automatiquement sur votre serveur (un simple serveur de production) et (généralement) recharge automatiquement votre navigateur.

Aucune idée de ce qu’est la différence ou s’il y en a une (je ne pense pas ? Mais je n’en sais pas grand-chose). J’utiliserais celui qui se trouve dans le squelette du thème.

Il existe un dépôt appelé all-the-themes. Vous pouvez le récupérer et y rechercher des exemples. Et utilisez toujours celui qui a été modifié plus récemment.

3 « J'aime »

Une grande partie d’EmberJS (et de Rails) repose sur la Convention. C’est génial la plupart du temps, mais cela peut être incroyablement frustrant lorsque l’on fait ne serait-ce qu’une petite erreur, par exemple dans la dénomination.

3 « J'aime »

Soit dit en passant, j’ai trouvé une explication de api-initializers/ ici :

(Et cela le relie à la documentation Ember, et ensuite cela commence à avoir du sens.)

Il serait toujours agréable d’avoir une énumération/explication de base des possibilités de structure de répertoires en un seul document. (Par exemple, je sais que connectors/ est une chose… y en a-t-il d’autres ?)

Aussi, soit dit en passant : l’application Theme CLI récupère le squelette de :

Elle ne mentionne que api-initializers/.

(J’utilise en fait l’application Theme CLI, mais j’ai commencé à l’utiliser après avoir déjà les débuts d’un composant de thème, j’avais donc sauté l’étape du squelette.)

2 « J'aime »