Am Ende des Tages benötige ich einen neuen Button für das Thema im Hauptbereich der Themenliste im Discourse Central Theme. Jeder Ingenieur beschwert sich, dass ihm der Button “Neue Konversation starten” nur am Ende der Themenliste innerhalb jeder Kategorie nicht gefällt. Sie möchten nicht die Option “Neues Thema” oben verwenden, da dies das Thema nicht in der Kategorie startet, in der sie sich gerade befinden.
Ich habe dies sowohl mit Llama 3.1 405B als auch mit GPT-4 über ask.discourse.com ausprobiert, konnte aber keine JavaScript-Version erhalten, die kompiliert. Ich erhalte ständig den Kompilierungsfehler: SyntaxError: Private field must be used in an enclosing class.
Ich erhalte auch einen Widget-Registrierungsfehler, aber das liegt daran, dass das benutzerdefinierte Widget aufgrund des JS-Kompilierungsfehlers nie erstellt wird.
Ich verwende das Discourse Central Theme.
Mit diesem Header-Abschnitt:
"<script type=\"text/discourse-plugin\" version=\"0.8.18\">
api.createWidget('custom-new-topic-button', {
tagName: 'div.custom-new-topic-button',
buildKey: () => `custom-new-topic-button`,
html() {
return [
this.attach('button', {
className: 'btn btn-primary',
action: 'createNewTopic',
contents: 'New Topic'
})
];
},
click() {
const composerController = this.container.lookup("controller:composer");
const currentCategory = this.container.lookup("controller:navigation/category").get("model.id");
composerController.open({
action: require("discourse/models/composer").default.CREATE_TOPIC,
draftKey: require("discourse/models/composer").default.DRAFT,
categoryId: currentCategory,
});
return false;
},
});
api.decorateWidget('topic-list:before', (helper) => {
if (api.getCurrentUser()) {
helper.appendChild(helper.createWidget('custom-new-topic-button'));
}
});
</script>"
Mit diesem Kopfbereich:
"<script>
{{#if currentUser}}
<div class="topic-list-body-new-topic">
{{custom-new-topic-button}}
</div>
{{/if}}
</script>
Und diesem CSS:
.topic-list-body::before {
content: "";
display: block;
position: relative; /* Important to allow absolute positioning within */
}
.topic-list-body-new-topic {
position: absolute;
top: 0;
left: 0;
padding: 10px;
background: #f2f3f5;
border-bottom: 1px solid #ccc;
}
.custom-new-topic-button .btn.btn-primary {
background-color: #007bff;
border-color: #007bff;
color: #fff;
}
Das war mein ursprünglicher Code, die neueste Empfehlung ist:
<script type="text/discourse-plugin" version="0.8.18">
api.createWidget('custom-new-topic-button', {
tagName: 'div.custom-new-topic-button',
buildKey() {
return 'custom-new-topic-button';
},
defaultState() {
return {};
},
html() {
return [
this.attach('button', {
className: 'btn btn-primary',
action: 'createNewTopic',
contents: 'New Topic'
})
];
},
createNewTopic() {
const composerController = this.container.lookup("controller:composer");
const currentCategory = this.container.lookup("controller:navigation/category").get("model.id");
const Composer = require("discourse/models/composer").default;
composerController.open({
action: Composer.CREATE_TOPIC,
draftKey: Composer.DRAFT,
categoryId: currentCategory,
});
return false;
},
});
api.decorateWidget('topic-list:before', (helper) => {
if (api.getCurrentUser()) {
helper.appendChild(helper.createWidget('custom-new-topic-button'));
}
});
</script>

