Follow

支持全套 啦!

概要

经过两天折腾终于把坑踩完了。实现方案:Kramdown 转换 Markdown + Rouge 渲染代码高亮 + images.weserv.nl 代理外部图片。

可以在这条嘟文查看本站 Markdown 效果: :icon_markdown: Markdown指南,本站用户可以直接在网页端看到效果,外站用户请到本站网页上查看,暂不清楚第三方 APP 兼容性。

本站代码已开源, :icon_github: mashirozx/mastodon,可以无缝和官方最新版对接,没有对数据库结构做过任何改动!Docker 镜像在此,请使用 alpha 版本: :icon_docker: Docker Hub

Markdown 介绍

Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者 HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。

它的优点:

  • 它基于纯文本,方便修改和共享;
  • 几乎可以在所有的文本编辑器中编写;
  • 有众多编程语言的实现,以及应用的相关扩展;
  • 在 GitHub 等网站中有很好的应用;
  • 很容易转换为 HTML 文档或其他格式;
  • 适合用来编写文档、记录笔记、撰写文章。

Markdown 的中文使用说明见:Markdown 入门参考

本站适配介绍

本站使用的是 Kramdown 转换器,其实还能实现更多 Markdown 标准之外的特性,比如自定义插图样式:

Here is an inline ![smiley](smiley.png){:height="36px" width="36px"}.

And here is a referenced ![smile]

[smile]: smile.png
{: height="36px" width="36px"}

Here is an inline smiley.

具体见:Kramdown Syntax

一点疑问

目前对图片代理的解决方案还不是特别满意,因为依赖的是第三方的图片代理,希望能用到 Mastodon 自己的 LinkCrawlWorker 和 MediaDownloadedWorker,但是我太菜了没找到入口。Mastodon 本身有一个 media_proxy 路由,好像可以临时代理图片,也不清楚应该怎么调用?

未测试内容及优化方向

目前还没有进行严格的测试,包括且不限于 XSS 隐患、外站兼容性、转换器本身稳定性。

在开发过程中,发现 Mastodon 的 Formatter 类(app/lib/formatter.rb)似乎是实时渲染的,也就是说每访问一次内容都要走一遍渲染流程,这次我的 Markdown parser 正好就是加在这个过程上的,是否会增加服务器负担有待观察,我想如果能直接存进数据库或者有什么方法缓存一下会更合理。

Kramdown 还支持 LaTeX 渲染数学公式,但目前我没有启用,后续会适配这个功能的。

还有如你所见,Markdown 转出来的东西,在网页上样式还不是太完美,等后续慢慢优化,当然,你也可以帮我, :icon_css: CSS 或者 :icon_sass: SCSS 样式发给我就可以啦 😁

关于网站关闭一整天的解释

服务器性能有限,而我目前必须在服务器的 Linux 环境上开发,所以就暂时把生产环境的网站关掉了。运营这个网站并没有盈利的目的,一切出于兴趣和热爱,所以虽然我无法提供服务 100% 稳定(稳定仅指网站的可访问性,网站数据我是每天自动备份的不可能有问题!!)的保证,但是我不会轻易放弃、跑路,否则我为什么要改这么多代码呢? :umaru_chan_002:

· · Web · 1 · 2 · 8

@[email protected] 大佬有没有考虑在前端进行渲染来减轻服务器压力?misskey对latex的支持就是通过Katex在前端渲染的。

@dogcraft 前端渲染的话Mastodon就把markdown格式全部转没了 :ablobangel:

Sign in to participate in the conversation
小森林

每个人都有属于自己的一片森林,也许我们从来不曾走过,但它一直在那里,总会在那里。迷失的人迷失了,相逢的人会再相逢。愿这里,成为属于你的小森林。