Несколько редакторов оружия массового поражения (раздвоенная версия) на одной странице?

Чтобы было ясно, я имею в виду использование разветвленного ОЗУ 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? Это, конечно, было бы проще, чем модифицировать ОМУ, чтобы разрешить несколько экземпляров.

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

Другие вопросы по тегам