Несколько редакторов WMD (ЗНАЧИТ, раздвоенная версия) на одной странице?

StackOverflow https://stackoverflow.com/questions/670909

  •  21-08-2019
  •  | 
  •  

Вопрос

Чтобы было понятно, я имею в виду использование раздвоенное ОМУ stackoverflow, нет тот самый оригинальная версия от attacklab.

Я бы хотел использовать разветвленную версию, однако кажется, что идентификаторы div, которые используются скриптом для идентификации элементов страницы для WMDify, жестко закодированы в wmd.js:66:

// A collection of the important regions on the page.
// Cached so we don't have to keep traversing the DOM.
wmd.PanelCollection = function(){
    this.buttonBar = doc.getElementById("wmd-button-bar");
    this.preview = doc.getElementById("wmd-preview");
    this.output = doc.getElementById("wmd-output");
    this.input = doc.getElementById("wmd-input");
};

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

Это непонимание, скорее всего, является результатом моего почти полного отсутствия знаний js.Правильная вещь ™ - это просто правильно выучить javascript, но я нахожусь в середине проекта со сжатыми сроками.Я бы действительно хотел использовать эту версию WMD, но мне нужны некоторые подсказки о том, как изменить скрипт WMD, или, возможно, просто пример того, как вызвать его таким образом, чтобы я мог указать, какой идентификатор div использовать.

Подсказки оценены!

Это было полезно?

Решение

У меня были похожие проблемы, поэтому я пересчитал ОМУ, чтобы иметь возможность делать именно это.моя версия оружия массового уничтожения

Недавно я перепроверил это.Версия в Google Code поддерживает несколько версий на странице.
форк кода Google и это самое последнее, что есть на рынке.

Другие советы

В "проекте с ограниченным сроком выполнения" разрешается обходить некоторые ограничения.В этом случае я бы просто сделал несколько копий скрипта WMD editor (или сгенерировал его на стороне сервера) и заменил идентификаторы на необходимые вам идентификаторы.Таким образом, вы можете сразу разместить несколько ОМУ на одной странице.

Вы просто должны четко понимать одну вещь:Ты являются нарастающий технический долг ("возможные последствия небрежной архитектуры программного обеспечения и поспешной разработки программного обеспечения") для вашего проекта там.Ты будет вам придется пересмотреть этот вопрос, чтобы погасить этот долг, иначе вы погрязнете в выплате процентов при проведении технического обслуживания.

Строка 2339 из wmd.js может быть хорошим местом для начала:

Attacklab.wmd_defaults = {version:1, output:"HTML", lineLength:40, delayLoad:false};

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

Вы переопределяете эти параметры, добавляя блок сценария перед включением wmd.js, например:

<script type="text/javascript">wmd_options = {"output": "Markdown"};</script>

Затем измените wmd.PanelCollection функция для..

wmd.PanelCollection = function(){
        this.buttonBar = doc.getElementById(wmd.wmd_env["wmd-button-bar"]);
        this.preview = doc.getElementById(wmd.wmd_env["wmd-preview"]);
        this.output = doc.getElementById(wmd.wmd_env["wmd-output"]);
        this.input = doc.getElementById(wmd.wmd_env["wmd-input"]);
};

Обратите внимание, что это полностью непроверено и может не сработать, но по сравнению с автоматической генерацией редактора WMD или созданием нескольких копий это слегка более элегантный..

Редактировать:Я попытался внести правки, но это не так просто, как добавить в wmd_defaults - различные элементы (в основном панель кнопок) используют идентификатор, а не класс, но это близко..

Правка 2:После долгих размышлений я бы сказал, что ответ в основном "нет".

Лучший ответ - нет, не без некоторых довольно значительных изменений в WMD (изменений, которые выходят за рамки моего очень ограниченного опыта работы с javascript)..

Я попытался переместить все жестко закодированные имена div в настройки и добавил параметр "elementNamePrefix" для всех имен классов кнопок, а не использовать "wmd-spacer1" он использовал wmd.wmd_env["elementNamePrefix"] + "spacer1"...но даже при этом вам нужно дублировать элементы в файле CSS, и изменения вызвали странное поведение, которое я не смог исправить (я думаю, из-за глобальной переменной AttackLab, определенной в первой строке?Не уверен)..

Возможно, в качестве альтернативы наличию нескольких элементов управления WMD у вас мог бы быть выпадающий список, который загружает разные записи через AJAX?Это, безусловно, было бы проще, чем модифицировать ОМУ, чтобы разрешить использование нескольких экземпляров..

Это проект может стать хорошим началом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top