我决定我已经爱上了 Stack Overflow 上的 Markdown 编辑器。showdown.js
这是来自约翰弗雷泽的叉子。我想在我的一个项目上使用这个解析器,但是在分析了源代码后,我发现它对我的口味来说有点乱。
于是我着手修改 JavaScript 代码以满足我的需要,即:
- 摆脱所有的全局变量,
- 将变量声明组合到
var
每个范围内, - 将串联更改为数组连接,
- 旨在使缩小的源更小的各种其他调整。
除了一个小问题外,我的一切工作都很顺利:command.doList
函数中的自动完成代码在 Chrome 中很不稳定。我已经测试了一切在 Internet Explorer、FireFox 和 Safari 中都能正常工作。我已将此事归结为以下几行:
// Get the item prefix - e.g. " 1. " for a numbered list, " - " for a bulleted
// list.
getItemPrefix = function () {
var prefix;
if (isNumberedList) {
// the `s` variable is just a string space.
prefix = [s, num, '. '].join('');
num++;
} else {
prefix = [s, bullet, s].join('');
}
return prefix;
};
// Fixes the prefixes of the other list items.
getPrefixedItem = function (itemText) {
// The numbering flag is unset when called by autoindent.
if (isNumberedList === undefined) {
isNumberedList = /^\s*\d/.test(itemText);
}
// Renumber/bullet the list element.
// THE FOLLOWING LINES COMMENTED OUT TO FIX A BUG.
//itemText = itemText.replace(/^[ ]{0,3}([\*\+\-]|\d+[.])\s/gm,
// function () { return getItemPrefix(); });
return itemText;
};
靠近末尾的两条注释掉的行阻止 Chrome 的行为不正常,但编号列表不再自动递增。一旦我取消注释这些行,所有主要浏览器都开始正常工作,除了 Chrome。(Chrome 会发疯并使用额外的编号和项目符号自动完成列表,尝试使用无序列表时也会发生这种情况。)
Stack Overflow 上显然不存在这个问题,所以我希望这只是我的一个愚蠢的疏忽。(或者 Stack Overflow 已经更新并修复了这个错误。)