Несколько редакторов оружия массового поражения (раздвоенная версия) на одной странице?
Чтобы было ясно, я имею в виду использование разветвленного ОЗУ stackru, а не оригинальную версию от 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");
};
Если бы я просто хотел использовать разные названия регионов, у меня все было бы в порядке, но я хочу использовать на одной странице переменное количество редакторов ОМУ. Мне нужен был бы способ рассказать каждому экземпляру ОМУ об областях страницы, на которые он должен влиять, но я не вижу никаких "зацепок" для этого.
Незнакомость, скорее всего, является результатом моего почти полного отсутствия знаний. Правильно сделать ™ - это просто правильно изучить javascript, но я нахожусь в середине проекта с крайним сроком. Я бы очень хотел использовать эту версию WMD, но мне нужны некоторые подсказки о том, как изменить скрипт WMD, или, возможно, просто пример того, как его вызвать таким образом, чтобы я мог точно определить, какой div id использовать.
Подсказки приветствуются!
4 ответа
У меня были похожие проблемы, поэтому я пересмотрел ОМУ, чтобы иметь возможность сделать это. моя версия wmd
Недавно я перепроверил это. Версия в коде Google поддерживает несколько версий на странице.
Google Code Fork и является последним там.
На "проекте с крайним сроком" разрешено взламывать некоторые ограничения. В этом случае я бы просто сделал несколько копий сценария редактора WMD (или сгенерировал бы его на стороне сервера) и заменил бы идентификаторы на нужные вам идентификаторы. Таким образом, вы можете сразу развернуть несколько ОМУ на одной странице.
Вам просто нужно четко понимать одну вещь: вы накапливаете технический долг ("возможные последствия архитектуры программного обеспечения slapdash и поспешной разработки программного обеспечения") для вашего проекта. Вам нужно будет вернуться к нему, чтобы погасить эту задолженность, или вы утонете в процентных выплатах при выполнении технического обслуживания.
Строка 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_defaults - различные элементы (в основном панель кнопок) используют идентификатор, а не класс, но это близко...
Редактировать 2: После долгих раздумий, я бы сказал, что ответ в основном "нет".
Лучший ответ - нет, не без каких-либо довольно больших изменений в ОМУ (изменений, которые выходят за рамки моего очень ограниченного опыта JavaScript).
Я попытался переместить все жестко запрограммированные имена div в настройки и добавил настройку "elementNamePrefix" для всех имен классов кнопок вместо того, чтобы использовать "wmd-spacer1"
он использовал wmd.wmd_env["elementNamePrefix"] + "spacer1"
... но даже при этом вам нужно дублировать элементы в файле CSS, и изменения вызвали странное поведение, которое я не смог исправить (я думаю, из-за глобальной переменной AttackLab, определенной в первой строке? Не уверен)..
Возможно, в качестве альтернативы наличию нескольких элементов управления ОМУ, у вас может быть выпадающий список, который загружает различные сообщения через AJAX? Это, конечно, было бы проще, чем модифицировать ОМУ, чтобы разрешить несколько экземпляров.