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

Чтобы было ясно, я имею в виду использование разветвленного WMD * stackoverflow , not оригинальной версии от 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 ]

7 голосов
/ 12 июля 2009

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

Недавно я перепроверил это. Версия в коде Google поддерживает несколько версий на странице.
google code fork и является самым последним.

3 голосов
/ 22 марта 2009

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

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

0 голосов
/ 16 ноября 2009

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

0 голосов
/ 16 мая 2009

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

...