多个WMD编辑器(SO分叉版)在一个页面上?

时间:2009-03-22 12:15:28

标签: javascript wmd

要说清楚,我指的是stackoverflow's forked WMD不是 original version from attacklab的用法。

我想使用分叉版本,但是似乎脚本用来识别WMDify页面元素的div id是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知识的产物。 Right Thing To Do™是为了正确学习javascript,但我正处于一个截止日期的项目中。我真的很想使用这个版本的WMD,但我需要一些关于如何修改WMD脚本的线索,或者只是一个如何以一种我可以指定使用哪个div id的方式调用它的例子。

线索赞赏!

4 个答案:

答案 0 :(得分:7)

我有类似的问题所以我重新考虑WMD能够做到这一点。 my version of wmd

最近,我重新检查了这一点。 Google代码中的版本支持页面上的多个版本 google code fork并且是最新的。

答案 1 :(得分:3)

在“有截止日期的项目”中,允许围绕某些限制进行攻击。在这种情况下,我只需要制作WMD编辑器脚本的多个副本(或在服务器端生成它),并用您需要的标识符替换ID。这样,您就可以在一个页面上立即部署多个WMD。

您必须非常清楚一件事:您 累积technical debt(“slapdash软件架构和草率软件开发的最终结果”)在您的项目上。你 必须重新审视这笔债务以偿还这笔债务,否则你将在维护时淹没利息。

答案 2 :(得分:0)

wmd.js第2339行可能是一个很好的起点:

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

为您需要更改的每个div ID添加一个选项。

通过在包含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那么简单 - 各种项目(主要是按钮栏)使用的是ID而不是类,但是,它很接近..

编辑2 :经过多次摆弄后,我会说答案基本上是“不”。

更好的答案是否定的,不是没有WMD的一些相当大的变化(超出我非常有限的javascript体验的变化)..

我尝试将所有硬编码的div名称移动到设置,并为所有按钮类名称添加了“elementNamePrefix”设置,而不是使用"wmd-spacer1"使用wmd.wmd_env["elementNamePrefix"] + "spacer1" ...但是甚至有了这个你需要复制CSS文件中的项目,并且这些更改导致了我无法解决的奇怪行为(我认为是因为第一行定义的全局AttackLab变量?不确定)..

也许,作为拥有多个WMD控件的替代方法,您可以使用下拉菜单通过AJAX加载不同的帖子?它肯定比修改WMD以允许多个实例更容易..

答案 3 :(得分:0)

This项目可能是一个良好的开端。