2009-03-22 2 views
6

Чтобы быть ясным, я имею в виду использование stackoverflow's forked WMD, неoriginal version from attacklab.Несколько редакторов WMD (SO forked version) на одной странице?

Я хотел бы использовать раздвоенный версию, однако, кажется, что 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 на одной странице. Мне нужен способ сообщить каждому экземпляру ОМУ о регионах страницы, на которые он должен повлиять, но я не вижу никаких «крючков» для этого.

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

Ключи оценены!

+0

может кто-нибудь помочь мне с этим http://stackoverflow.com/questions/3616788/wmd-how-to-get-the-generated-markdown-html-code – Moon

ответ

7

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

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

+0

Прекрасный кусок работы! – MrFox

+0

Спасибо! Но настоящая тяжелая работа была сделана дробинами. –

+0

любой шанс рабочей ссылки? – Andy

3

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

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

+0

А, я не полностью уточнил: мне нужно использовать * переменные * числа редакторов на каждой странице на основе содержимого. И да, если быстрое решение слишком хакерское, я просто откажусь от wmd на этот раз в пользу другого решения. Существует ограничение на хакерство. :) –

+0

для переменного количества wmds вы _can_ сходите по скрипту generate-wmd-source-with-servers-side. Если вы сделаете это правильно, довольно просто преобразовать его в однорежимное решение с параметрами JS. –

+0

Я пробовал это и даже с несколькими файлами .js, я не могу заставить его работать. Он будет загружать только кнопки в первой текстовой области. Если я удалю первый, кнопки будут нормально загружаться во вторую текстовую область. Я вырыл JS и убедился, что все ссылки были обновлены, но все равно не повезло. –

0

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

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

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

перенастройка этих параметров, добавив блок сценария перед включением 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 или создания нескольких копий это немного более элегантно ..

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

Редактировать 2: После долгих возиться, я бы сказал, что ответ в основном «нет».

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

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

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