Неудобный конфуз с преждевременной публикацией

Похоже, я страдаю от «преждевременной отправки» в различных приложениях для общения, не ориентированных на чат.

В основном это касается электронной почты (Gmail) и Discourse.

Суть проблемы в том, что я пишу сообщение и случайно отправляю его. Эта досадная ситуация происходит слишком часто, и, вероятно, из-за сочетания клавиш, например, Ctrl + Enter или (возможно, чаще?) Tab ↹ затем Enter.

В Gmail я могу с этим справиться: есть короткое окно, в течение которого отправку письма можно отменить. Ура! :raising_hands:
Чтобы полностью избежать отправки сообщения во время написания, я не заполняю поле получателя. Я делаю это в последнюю очередь, прямо перед отправкой письма.

Однако в Discourse для сообщений, не являющихся личными, это невозможно. Я пробовал удалить категорию по умолчанию из селектора категорий, чтобы при отправке поста, скорее всего, появлялось сообщение «категория не может быть пустой», но, увы, это не сработало.

Это неловко, когда тема или ответ отправляются преждевременно. Я могу сразу удалить пост, но его содержимое остается видимым для других (им достаточно нажать на иконку редактирования), поскольку это поведение по умолчанию в Discourse. При этом я не могу завершить написание контента, пока пост удален, чтобы затем отменить удаление.

В итоге либо я оставляю пост неполным (обычно посередине предложения или слова :woozy_face:) и терпеливо редактирую его, что мне не нравится, так как я и так пишу медленно, либо удаляю его и создаю новую тему/пост.

Поскольку это часто случается с длинными сообщениями или теми, над которыми нужно много подумать, я был бы рад иметь переключаемую иконку замка :locked_with_pen:, которая полностью предотвращает отправку сообщения.

Я не предлагаю обязательно добавлять эту функцию в Discourse… Разве что это случается со многими пользователями :smile:

Мне важнее поделиться этим опытом, последующим смущением из-за преждевременной отправки в Discourse, получить мнение других участников и обсудить идеи по предотвращению этого.

Что касается меня, то даже пользовательский скрипт мог бы решить проблему. К сожалению, я не знаю, как запретить сочетанию клавиш в Discourse отправлять пост, и ИИ тоже не знает.
Редактирование: см. The awkward mishap of premature posting - #10 by Canapin

Вы сталкиваетесь с преждевременной отправкой?

  • Да
  • Нет
0 voters

Хотели бы вы иметь возможность «заблокировать» редактор в Discourse?

  • Да (встроенная функция)
  • Да (стороннее решение)
  • Нет — я люблю риск
0 voters

С нетерпением жду ваших мыслей!

6 лайков

Я тоже — при использовании сенсорного экрана. Очень раздражает.

2 лайка

Это очень узнаваемо. Со мной тоже такое случается в чате[1]. Иногда хотелось бы, чтобы было всплывающее окно подтверждения или 10 секунд на отмену постоянного удаления.


  1. То есть в чате Discourse ↩︎

4 лайка

Случайная отправка постов у меня не происходит (я 99% времени за компьютером), но я понимаю, как это может быть неловко. Имеет ли смысл дать пользователю короткое время, чтобы скрыть свой пост для дальнейшего редактирования — возможно, только если на него ещё не было ответов?

Редактирование: конечно, это всё равно не скроет историю изменений… :sweat_smile:

2 лайка

Я уважаю это, но сам не пользуюсь. Мне гораздо больше нравится период на редактирование, ведь я могу перечитывать и вычитывать пост сколько угодно, и даже после публикации важного сообщения я всё ещё нахожу ошибки. Редактирование отлично скрывает мои промахи.

На каждого свой вкус, и на каждую опечатку — своё решение.

1 лайк

Я использую внешний редактор для заполнения любых длинных полей на веб-сайте, включая, конечно, посты в Discourse. В редакторе у меня все обычные сочетания клавиш для программистских редакторов, поэтому это лучше почти во всех отношениях. Только когда я доволен, что текст готов, я использую копирование и вставку, чтобы перенести его в редактор, а затем нажимаю большую кнопку.

Вы рассматривали такой рабочий процесс?

2 лайка

Интересно наблюдать за столь разными опытами. Я никогда не публикую посты по ошибке со смартфона, только с компьютера.

Да, я использую его в других ситуациях. Сначала я пишу сообщение в Google Docs, а затем копирую и вставляю его в целевое приложение для обмена сообщениями.

Но на Discourse это немного раздражает, когда нужно добавлять изображения, цитаты или использовать специфические для Discourse функции в своём посте.


Я уже несколько дней работаю над черновиком, и каждый раз, когда я к нему возвращаюсь, это немного стрессовый опыт. Мне приходится постоянно быть предельно осторожным, чтобы случайно не отправить его. :lolsob:

1 лайк

Когда я пишу более длинный пост, я использую похожее решение. Но так как я стараюсь отказаться от использования Google и других подобных сервисов и работаю в основном на iPad, моим инструментом является приложение Ulysses. В основном потому, что оно поддерживает Markdown. Немного другой, не совсем такой же синтаксис, как в Discourse.

У меня по этому поводу смешанные чувства. С одной стороны, мне не нравится, когда приходится переключаться между разными приложениями (хотя я использую его и для WordPress; создание контента там сейчас стало мучением), но в то же время у меня появляется более надёжная и централизованная среда.

Является ли это для меня большой проблемой? Нет, это просто раздражает. Когда в Discourse изменили способ сохранения черновиков, это было гораздо более катастрофично, и я потерял слишком много черновиков из-за мышечной памяти :zany_face:

1 лайк

Одним из решений может быть создание личного сообщения самому себе, которое будет служить черновиком. Даже случайная отправка не нанесёт вреда, так как оно будет видно только вам :slight_smile:

2 лайка

Вот userscript, который добавляет переключаемую блокировку в редактор.
Он также отключает сочетания клавиш и работает на мобильных устройствах.

IXlc8u1sm4

https://greasyfork.org/en/scripts/566254-discourse-composer-safety-lock

Добавьте или удалите строки @match, чтобы включить его на используемых вами форумах.

// ==UserScript==
// @name         Discourse Composer Safety Lock
// @namespace    https://meta.discourse.org
// @version      2.0
// @description  Переключаемый замок на редакторе для предотвращения случайной отправки сообщения
// @author       Canapin & AI
// @match        https://meta.discourse.org/*
// @grant        none
// @license MIT
// ==/UserScript==
(function () {
  "use strict";
 
  let locked = false;
 
  // Слушатель фазы перехвата на #reply-control для блокировки Ctrl/Cmd/Alt+Enter
  function attachBlocker(replyControl) {
    if (replyControl._safetyLockAttached) return;
    replyControl._safetyLockAttached = true;
 
    replyControl.addEventListener(
      "keydown",
      function (e) {
        if (!locked) return;
        if (e.key === "Enter" && (e.ctrlKey || e.metaKey || e.altKey)) {
          e.stopImmediatePropagation();
          e.stopPropagation();
          e.preventDefault();
        }
      },
      true
    );
  }
 
  function updateButtons() {
    const rc = document.getElementById("reply-control");
    if (!rc) return;
    rc.querySelectorAll(".save-or-cancel .btn-primary").forEach((btn) => {
      if (locked) {
        btn.style.pointerEvents = "none";
        btn.style.filter = "grayscale(1) opacity(0.4)";
        btn.setAttribute("tabindex", "-1");
      } else {
        btn.style.pointerEvents = "";
        btn.style.filter = "";
        btn.removeAttribute("tabindex");
      }
    });
  }
 
  // Блокировщик кликов фазы перехвата на кнопке сохранения
  document.addEventListener(
    "click",
    function (e) {
      if (!locked) return;
      if (e.target.closest(".save-or-cancel .btn-primary")) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  // Блокировщик нажатия Enter фазы перехвата для сфокусированной кнопки сохранения
  document.addEventListener(
    "keydown",
    function (e) {
      if (!locked) return;
      if (
        e.key === "Enter" &&
        e.target.closest(".save-or-cancel .btn-primary")
      ) {
        e.stopImmediatePropagation();
        e.stopPropagation();
        e.preventDefault();
      }
    },
    true
  );
 
  function injectPadlock() {
    if (document.getElementById("composer-lock-btn")) return;
    const title = document.querySelector(".composer-action-title");
    if (!title) return;
 
    const btn = document.createElement("span");
    btn.id = "composer-lock-btn";
    btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
    btn.style.cssText =
      "cursor:pointer;margin-left:10px;font-size:1.1em;user-select:none;opacity:" +
      (locked ? "1" : "0.5");
 
    btn.addEventListener("click", (e) => {
      e.preventDefault();
      e.stopPropagation();
      locked = !locked;
      btn.textContent = locked ? "\u{1F512}" : "\u{1F513}";
      btn.style.opacity = locked ? "1" : "0.5";
      updateButtons();
    });
 
    title.appendChild(btn);
    updateButtons();
  }
 
  const observer = new MutationObserver(() => {
    const rc = document.getElementById("reply-control");
    if (rc && rc.classList.contains("open")) {
      attachBlocker(rc);
      injectPadlock();
      updateButtons();
    }
  });
 
  observer.observe(document.body, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeFilter: ["class"],
  });
 
  const rc = document.getElementById("reply-control");
  if (rc && rc.classList.contains("open")) {
    attachBlocker(rc);
    injectPadlock();
    updateButtons();
  }
})();
6 лайков

Это не та проблема, с которой я обычно сталкиваюсь. Не знаю, почему! Однако случалось, что я отправлял письмо по ошибке — чаще, надо сказать, у меня возникали сомнения сразу после отправки (не тот получатель? Что-то забыл?), и я был очень рад, что мог их развеять с помощью ссылки «Отменить отправку», которую Gmail предоставляет в течение нескольких секунд. Хотя это происходит нечасто.

Так что, возможно, что-то подобное при публикации имело бы смысл. Несколько секунд, чтобы нажать кнопку «Ой, это не должно было уйти так» после публикации.

Я часто делаю это из-за сочетаний клавиш Shift+Enter и Ctrl+Enter.

Это не большая проблема, я просто редактирую пост.

Для конфиденциальной информации я сначала набираю текст в отдельном редакторе, а затем вставляю его в приложение перед отправкой.

Я использовал userscript, который я опубликовал на Meta, и он действительно облегчает мне жизнь при написании!

Теперь я ещё больше (чем раньше) хочу, чтобы была такая встроенная функция :face_with_tongue:

Но я вижу, что дизайнер уже высказался!

image

:laughing:

2 лайка

Я подготовил простой TC, который это делает, с кнопкой блокировки/разблокировки в редакторе. GitHub - NateDhaliwal/discourse-lock-composer · GitHub Скоро опубликую тему на Meta. РЕДАКТИРОВАНИЕ: Вот она: Lock Composer

1 лайк

Обычно я добавляю заголовок в конце создания темы, так как это предотвращает публикацию темы (хотя это не помогает для ответов).

На планшете, где экранная клавиатура сдвигает поле ввода вверх, довольно легко случайно опубликовать что-то.

2 лайка