Несколько редакторов WMD (ЗНАЧИТ, раздвоенная версия) на одной странице?
-
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?Это, безусловно, было бы проще, чем модифицировать ОМУ, чтобы разрешить использование нескольких экземпляров..
Это проект может стать хорошим началом.