花了五分钟改了下 V2EX 的源代码,撸了个 Markdown 支持功能出来 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
akfish
V2EX    Project Babel

花了五分钟改了下 V2EX 的源代码,撸了个 Markdown 支持功能出来

  •  1
     
  •   akfish 2014-05-06 19:55:10 +08:00 12689 次点击
    这是一个创建于 4178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到这个贴(http://www.v2ex.com/t/111379)讨论markdown支持的问题,Talk is cheap. I'll show you the code.

    大概扫了一眼源代码,等GAE SDK下载的时候顺手改好,实现了markdown的支持,css什么的没调。

    纯前端实现,用marked.js库在document ready的时候直接把conent给撸了一遍。

    效果:



    链接: http://catx2ex.appspot.com/
    第 1 条附言    2014-05-07 11:28:25 +08:00
    好吧,总结下发出来过后的各种争论吧。

    首先,这个demo的目的是技术可行性验证,以说明通过裁剪/配置已有的Markdown Parser来提供MD支持是一件很容易的事情,成本肯定是比另外创造一种阉割版Markdown然后从头实现Parser低得多。

    其次,有人纠结于外观板式,这个demo的样式的确很丑,因为我就没针对v2ex调css,也没这个必要,原因见后。

    对Markdown支持的顾虑最主要的在两点:

    1. Markdown会导致奇葩板式。不会,参见GitHub这种重度Markdown甚至连嵌入HTML都支持的站点,你很难看到奇葩板式。

    2. Markdown会增加用户负担。不会,参见GitHub这种重度Markdown甚至连嵌入HTML都支持的站点,不用Markdown的用户照样纯文本得很开心,完全不用知道Markdown的存在。

    Markdown不是Rich Text,Markdown就是纯文本。

    以上,就是为Markdown支持这种月经问题提供点干货,总是嘴仗无益。

    下次如被挖坟再说吧,撸别的项目玩去了。
    58 条回复    2014-07-27 22:53:06 +08:00
    akfish
        1
    akfish  
    OP
       2014-05-06 19:56:01 +08:00   1
    配置还没搞熟,貌似不能回复,正在撸。
    licell
        2
    licell  
       2014-05-06 19:57:14 +08:00
    打开了这么多标签!
    akfish
        3
    akfish  
    OP
       2014-05-06 19:59:08 +08:00
    @licell 这还只是一个显示器上的,-_-
    sexoutsex2011
        4
    sexoutsex2011  
       2014-05-06 20:00:56 +08:00
    你的chrome得占多少内存啊 这插件数。。。
    akfish
        5
    akfish  
    OP
       2014-05-06 20:01:55 +08:00
    @sexoutsex2011 16G内存,所以没什么感觉。
    nAODI
        6
    nAODI  
       2014-05-06 0:12:04 +08:00
    jakwings
        7
    jakwings  
       2014-05-06 20:17:31 +08:00
    我之前都说了不太喜欢长篇大论的回复了,于是Markdown的功能就被削减到行内格式文本了。然而就那一点点行内格式,实在是没有实现的必要。
    akfish
        8
    akfish  
    OP
       2014-05-06 20:18:37 +08:00
    回复也撸好:

    jakwings
        9
    jakwings  
       2014-05-06 20:21:51 +08:00
    V2EX已经自带图片链接和gist链接自动转换功能。插代码不会很麻烦。
    另外也可以看看自己平时有多喜欢长篇大论,否则真没必要搞东西搞得那么复杂。系统的讲述放在博客里是最好的,V2EX显然是个整天被刷屏的地方。
    akfish
        10
    akfish  
    OP
       2014-05-06 20:22:31 +08:00
    @jakwings
    第一实现不是你去实现
    第二你觉得没必要不代表别人不需要
    第三支持markdown不代表你非得用markdown

    Anyway,就一个纯探讨性的东西,不用搞得好像谁在求谁一样嘛。
    jakwings
        11
    jakwings  
       2014-05-06 20:37:01 +08:00
    @akfish 实现了就可以无视别人的意见?
    你不说你不需要我的意见不代表我知道你不需要我的意见。
    说得好像我的话不是探讨性的,是不是你太先入为主了?

    刚来V2EX时我都好奇过为什么没有Markdown支持呢。
    jakwings
        12
    jakwings  
       2014-05-06 20:41:11 +08:00
    @akfish 你可以直接说「支持Markdown不代表你非得用Markdown」。其余的话我再不吐槽了。
    aku
        13
    aku  
       2014-05-06 20:43:31 +08:00 via Android
    @jakwings 经常看到帖子里gist代码溢出,伸到右边去,不知道是什么原因。姿势不对还是bug?
    ddter
        14
    ddter  
       2014-05-06 20:43:40 +08:00
    小哥敢不敢截图下你的插件列表。。
    azuginnen
        15
    azuginnen  
       2014-05-06 20:46:15 +08:00
    推荐你用context管理插件
    akfish
        16
    akfish  
    OP
       2014-05-06 20:47:20 +08:00
    @jakwings
    如果支持了,那么所有人都有选择用与不用的权利
    如果不支持,所有人都只有被迫选择不用

    照你的说法,长篇大论的回复不多。
    好吧,那我们看看贴图贴代码的评论又多不多呢?
    照你的逻辑,支持图片支持gist那不就把问题搞复杂了嘛。

    你不需要markdown,你可以只用纯文本。
    你只需要内格式文本,你可以只用内格式部分的语法。
    人都各有喜好,区别就是有的喜好和别人的喜好不矛盾,而有的喜好则是完全排他的。

    这逻辑简单无比,懒得掐了。
    sanddudu
        17
    sanddudu  
       2014-05-06 20:48:43 +08:00
    @aku 是真的太长了
    mimzy
        18
    mimzy  
       2014-05-06 20:48:46 +08:00
    用俩屏蔽广告插件这内存真是大方啊……
    jakwings
        19
    jakwings  
       2014-05-06 20:50:19 +08:00
    虽然还是比较火,还是多给一条和主题相关的意见:
    就算是关闭了Markdown支持,还是得考虑内容框中的字体问题(非等宽字体),假如是代码的话,缩进全没了。

    最后,心情不爽,不想讨论了。
    akfish
        20
    akfish  
    OP
       2014-05-06 21:00:05 +08:00
    @sexoutsex2011



    好吧,才2G内存占用而已。

    @ddter
    长得截不完,还有大量看着有趣装上然后disable懒得删的。
    P233
        21
    P233  
       2014-05-06 21:06:09 +08:00   1
    @aku Gist 的 CSS 没给宽度,被内容撑开了。手动加个宽度就好,比如
    .topic_content .gist { width: 660px }
    .reply_content .gist { width: 610px }

    @Livid
    akfish
        22
    akfish  
    OP
       2014-05-06 21:07:04 +08:00
    @jakwings 回头看了下,略有些先入为主了,no hard feelings.
    54dev
        23
    54dev  
       2014-05-06 21:09:24 +08:00
    楼主的插件列表亮了。。。这个浏览器是专业用来测试用的吗。?
    akfish
        24
    akfish  
    OP
       2014-05-06 21:09:43 +08:00
    @Livid 翻了下以前的一些老帖,貌似主要的担心是会导致混乱的排版。
    但markdown本身支持的格式就那么几种,严格的说不能算rich text,只能算略增强的纯文本。
    内嵌HTML一关掉,评论禁用标题语法,css调和谐,没什么机会出现奇葩排版。
    akfish
        25
    akfish  
    OP
       2014-05-06 21:11:18 +08:00
    @54dev 日常用,仗着内存大,又懒得收拾,就变这样了。
    kehr
        26
    kehr  
       2014-05-06 22:07:35 +08:00
    支持楼主!

    如果支持 markdown,我一定会用的!
    FatGhosta
        27
    FatGhosta  
       2014-05-06 22:19:47 +08:00
    merge回去,哈哈
    ctsed
        28
    ctsed  
       2014-05-06 22:30:16 +08:00 via Android
    @jakwings 我记得那个帖子,这中间发生了什么导致你失去了兴趣?
    Seita
        29
    Seita  
       2014-05-06 22:31:17 +08:00
    我对是否是五分钟表示困惑哈哈XD

    不过看楼主标签页就明白应该是五分钟了。
    imsuwj
        30
    imsuwj  
       2014-05-06 22:35:17 +08:00
    那搞成个userscript,想用的自己用就是了
    akfish
        31
    akfish  
    OP
       2014-05-06 22:44:51 +08:00
    @Seita

    不掺水 →_→



    目录创建时间18:32就是开始clone的时间,等了几分钟下载完。
    改好等部署测试又是几分钟,无误后commit时间18:45。
    akfish
        33
    akfish  
    OP
       2014-05-06 22:54:24 +08:00
    @imsuwj Good idea,而且因为渲染是在前端,可以搞成用户自己配置要不要渲染。

    @kehr
    @FatGhosta
    今天主要是把这个原型做出来验证下可行性,还需要调下css,测试跨浏览器支持等问题,然后发pull request看看会不会merge回去。
    popo233
        34
    popo233  
       2014-05-06 22:56:57 +08:00
    @popo233 为何还是不行..需要用imgur的图么
    akfish
        35
    akfish  
    OP
       2014-05-06 22:57:06 +08:00
    @popo233 贴图一直可以,直接粘围脖图床链接。
    我的改动还没发pull request,这里还不能markdown的。
    manoon
        36
    manoon  
       2014-05-06 23:17:11 +08:00
    你确定,你拿到的是最新版?

    好吧,一看还是在GAE上的。。。。盒盒。
    akfish
        37
    akfish  
    OP
       2014-05-06 23:26:24 +08:00
    @manoon GitHub上那个不是最新的么?→_→https://github.com/livid/v2ex
    不过问题不大,纯前端实现只改了topic的template文件,除非更新版本不用template生成了。
    myang
        38
    myang  
       2014-05-07 01:00:18 +08:00
    markdown真的很难看,还是纯文本加纯图片来的整洁;话说pb2早就停止了额,v2现在用的非开源版本,你在github上提交的修改是不可能反应在v2上的。
    akfish
        39
    akfish  
    OP
       2014-05-07 01:07:12 +08:00
    @myang markdown就是好看一点的纯文本,把它认为是rich text是不对的。
    至于难看与否,纯粹取决于站点css怎么调,至少GitHub这种重度Markdown排版的地方,我就没看到难看在哪里。
    这个就是当做试验做着玩而已,纯打嘴仗空口无凭争论无益,还不如花几分钟做个原型出来,给markdown这种月经问题增加点干货。
    myang
        40
    myang  
       2014-05-07 01:24:12 +08:00
    @akfish lz似乎有点火气,你可以做试验,但既然发出来了,当然是希望大家来讨论,既然大家来讨论,当然会有各种不同的看法,你要是不喜欢别人的看法可以自己关着门做不要发出来。我只是简单的实事求是的说我个人的感受,你那个测试帖子确实很难看。
    akfish
        41
    akfish  
    OP
       2014-05-07 02:06:53 +08:00 via iPad
    @myang No no no, 只能说你误解了,我本人是支持加md的,观点和另一方针锋相对那是自然,和火气无关。
    至于外观,我实事求是的说github的好看,也没说我这原型性质的东西不难看。而你以此宣称markdown是难看的说法并不准确。
    md的优劣和效果如何请参考github等成功案例,本demo暂时只是可行性验证而已。
    Vonex
        42
    Vonex  
       2014-05-07 08:03:22 +08:00
    看到了苹果团
    hkongm
        43
    hkongm  
       2014-05-07 08:41:40 +08:00
    膜拜插件。。。
    wuyazi
        44
    wuyazi  
       2014-05-07 09:03:04 +08:00
    @aku gist代码要删掉链接后面的 '.git',貌似是这个原因,你可以试试。
    soundbbg
        45
    soundbbg  
       2014-05-07 10:35:34 +08:00
    纯前端。。
    aurorawu
        46
    aurorawu  
       2014-05-07 11:23:24 +08:00
    支持lz
    kingme
        47
    kingme  
       2014-05-07 13:24:36 +08:00
    Talk is cheap. I'll show you the code. 支持了
    davidlau
        48
    davidlau  
       2014-05-07 13:58:37 +08:00
    支持MD后 v2ex的排版会不会像这个网站一样http://code4app.com/
    davidlau
        49
    davidlau  
       2014-05-07 13:59:03 +08:00
    打错,是ourcoders.com 一样
    kurtis
        50
    kurtis  
       2014-05-07 14:02:01 +08:00
    @akfish
    支持实干,支持探讨,支持多尝试(也叫多折腾)。
    这也是v友的精神,别太介意的噪音。
    hourui
        51
    hourui  
       2014-05-07 17:59:13 +08:00
    “Talk is cheap. I'll show you the code. ” 赞!
    cyandata
        52
    cyandata  
       2014-05-07 20:57:18 +08:00
    优化下css就好看多了
    jakwings
        53
    jakwings  
       2014-05-08 05:49:56 +08:00
    @akfish 不好意思,最近烦恼很多,容易激动。

    要是用Markdown的话,最好是用GFM。还有要考虑的就是启用和不启用Markdown的回复,每个回复都要单独绑定一个开关变量,避免和已有的自动链接转换功能冲突,还要不断调整CSS达到较为一致的间隔(于是不调CSS是不太可能令人满意的,除非继续折腾如何让两种模式下的回复内容互换)。至于代码缩进问题,这会与用户配置中的自选字体配置冲突。这样提供两种模式的结果是,用户要经常根据不同的内容插入需求而切换模式。

    再想想我在这呆了几个月对本站维护团队平时对待用户反馈的态度的观察(根本不了解幕后具体都有哪些人),我都大概猜得出结果了。

    总之对不起啦。
    soli
        54
    soli  
       2014-05-08 12:47:28 +08:00
    支持增加md支持。
    jianv3
        55
    jianv3  
       2014-05-08 16:25:29 +08:00
    #支持
    PoplarDdd
        56
    PoplarDdd  
       2014-07-27 22:50:12 +08:00
    PoplarDdd
        57
    PoplarDdd  
       2014-07-27 22:52:57 +08:00
    V2EX有源码?在哪里能找到
    PoplarDdd
        58
    PoplarDdd  
       2014-07-27 22:53:06 +08:00
    @akfish V2EX有源码?在哪里能找到
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1455 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:45 PVG 00:45 LAX 09:45 JFK 12:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86