Здравствуйте. Подскажите, пожалуйста, возможно ли по умолчанию выделять неопределённую область красной рамкой на мобильных устройствах? Какой файл или часть кода мне нужно изменить? Спасибо.
Хотя скриншот в OP, кажется, относится к редактированию темы, поля заголовка темы, категории и тегов также занимают дополнительное пространство по сравнению с ответом.
Да, для ответов нормально, но для новой темы это мало
Также есть существующая тема ux с более подробным обсуждением, если вы хотите добавить свои мысли туда:
Вы можете скрыть панель форматирования (область в вашей красной рамке), нажав на иконку «бургер» (три горизонтальные линии) в правом верхнем углу.
Да, вы правы. Но не каждый новый пользователь об этом знает. Это может стать проблемой с точки зрения UX.
Вы можете попробовать этот небольшой скрипт. Добавьте его в тему или в новый компонент HTML на вкладке Head.
Он скрывает панель инструментов при соблюдении следующих условий:
- Только для новых тем / редактирования первого сообщения темы / черновика темы
- Мобильный вид
- Если у пользователя нет сохраненных предпочтений. [1]
Код не влияет на предпочтения пользователя.
<script type="text/discourse-plugin" version="0.8">
const { on, observes } = require("discourse-common/utils/decorators");
const serviceComposer = api.container.lookup("service:composer");
function canUpdateToolbar(context) {
return (
// Новая тема / Редактирование первого сообщения / Черновик темы
context._isNewTopic &&
// Панель инструментов не скрыта
context.showToolbar &&
// Только мобильный вид
context.site.mobileView &&
// Не переопределять предпочтения пользователя
context.keyValueStore.get("toolbar-enabled") === undefined
);
}
function updateShowToolBar(value) {
serviceComposer._wasToolbarEnabled = !value;
// Скрывает панель инструментов, не сохраняя состояние в браузере пользователя.
serviceComposer._toolbarEnabled = value;
// Обновляет вычисляемый геттер
serviceComposer.notifyPropertyChange("showToolbar");
}
api.modifyClass("component:composer-editor", {
pluginId: "composer-editor-toolbar",
@observes("composer.action")
_composerSwitchAction() {
// Обрабатывает ситуацию при переключении с ответа на новую тему
// без закрытия композера.
if (canUpdateToolbar(this)) {
updateShowToolBar(false);
}
},
@on("didInsertElement")
_composerEditorInit() {
this.appEvents.one(`${this.composerEventPrefix}:will-open`, () => {
if (canUpdateToolbar(this)) {
updateShowToolBar(false);
}
});
this._super(...arguments);
},
@on("willDestroyElement")
_composerClosed() {
this._super(...arguments);
// Восстанавливает панель инструментов, если она была скрыта вручную.
if (serviceComposer._wasToolbarEnabled) {
updateShowToolBar(true);
}
},
});
</script>
Как только пользователь нажмет на переключатель, браузер запомнит состояние ↩︎
Привет, Arkshine, спасибо за твой ответ.
Я добавил это в раздел head своей темы, но это не работает.
Неправильно ли я это сделал?
Где это нужно? Нажатие на «гамбургер» делает это нативно — по крайней мере, на iPhone.
Я думаю, мы обсуждаем много повторяющейся информации из Such a tiny window to edit here on a cell phone
Давайте закроем эту тему и сосредоточимся на обсуждении там.




