6

需要明确的是,我指的是stackoverflow 的分叉 WMD的使用,而不是来自 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 知识的产物。The Right Thing To Do™ 就是正确地学习 javascript,但我正在进行一个有截止日期的项目。我真的很想使用这个版本的 WMD,但我需要一些关于如何修改 WMD 脚本的线索,或者只是一个如何以我可以指定使用哪个 div id 的方式调用它的示例。

线索赞赏!

4

4 回答 4

7

我有类似的问题,所以我重新考虑了 WMD 以便能够做到这一点。 我的 wmd 版本

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

于 2009-07-12T15:40:25.710 回答
3

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

您只需要非常清楚一件事:您在那里的项目积累了技术债务(“草率的软件架构和仓促的软件开发的最终后果”)。您不得不重新审视这一点以偿还这笔债务,否则您将在进行维护时淹没在利息支付中。

于 2009-03-22T12:24:57.627 回答
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 以允许多个实例更容易..

于 2009-05-16T17:35:13.497 回答
0

这个项目可能是一个好的开始。

于 2009-11-16T02:49:10.917 回答