Canapin
(Coin-coin le Canapin)
17.Сентябрь.2020 13:46:27
1
Привет!
Я хотел бы попробовать изменить функцию buildQuote, чтобы она добавляла новую строку перед открывающим тегом [quote].
По сути, изменить это:
return `[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;
на это:
return `\n[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;
Возможно ли сделать что-то подобное с компонентом темы? Как переопределить эту функцию?
Canapin
(Coin-coin le Canapin)
17.Сентябрь.2020 16:03:07
2
Мне удалось это реализовать, но есть ли более изящное решение?
<script type="text/discourse-plugin" version="0.8.23">
function buildQuote(post, contents, opts = {}) {
if (!post || !contents) {
return "";
}
const params = [
opts.username || post.username,
`post:${opts.post || post.post_number}`,
`topic:${opts.topic || post.topic_id}`
];
if (opts.full) params.push("full:true");
return `\n[quote="${params.join(", ")}"]\n${contents.trim()}\n[/quote]\n\n`;
}
api.modifyClass('controller:composer', {
actions: {
importQuote(toolbarEvent) {
const postStream = this.get("topic.postStream");
let postId = this.get("model.post.id");
// Если текущего поста нет, используем ID первого поста из потока
if (!postId && postStream) {
postId = postStream.get("stream.firstObject");
}
// Если мы редактируем пост, при импорте цитаты получаем ответ
if (this.get("model.editingPost")) {
const replyToPostNumber = this.get("model.post.reply_to_post_number");
if (replyToPostNumber) {
const replyPost = postStream.posts.findBy(
"post_number",
replyToPostNumber
);
if (replyPost) {
postId = replyPost.id;
}
}
}
if (postId) {
this.set("model.loading", true);
return this.store.find("post", postId).then(post => {
const quote = buildQuote(post, post.raw, {
full: true
});
toolbarEvent.addText(quote);
this.set("model.loading", false);
});
}
}
}
});
</script>
asc
27.Февраль.2023 23:10:13
3
Извините, что поднимаю старую тему, но это у вас всё ещё работает / приходилось ли вам что-то обновлять? Я пытаюсь заставить это работать, но у меня ничего не получается, и я уже совсем запутался во всём, что связано с modifyClass.
Canapin
(Coin-coin le Canapin)
28.Февраль.2023 08:05:10
4
Я только что проверил, и это всё ещё работает
Я буквально скопировал и вставил это в свою тему, и оно сработало без каких-либо изменений.
merefield
(Robert)
28.Февраль.2023 08:42:43
5
asc
28.Февраль.2023 14:10:30
6
Спасибо @merefield и @Canapin . Я пытаюсь изучить API плагинов Discourse, возясь с тем, что кажется простыми вещами, но modifyClass работает настолько непоследовательно: то срабатывает, то нет. У меня есть небольшой компонент темы (тот самый, о котором вы упоминали, @merefield ), где два вызова modifyClass работают, а третий — нет. Очень раздражает пытаться понять, ошибаюсь ли я или проблема именно в modifyClass.
Извините за оффтоп в вашей теме и спасибо за быстрый ответ, @Canapin .
Обновление:
Canapin
(Coin-coin le Canapin)
28.Февраль.2023 14:16:47
7
Ничего страшного, я не знаю, что означает ОФТ, но мы здесь, чтобы помочь!