diff --git a/bricks/markdown_viewer.js b/bricks/markdown_viewer.js index 35ccfea..23f1a48 100644 --- a/bricks/markdown_viewer.js +++ b/bricks/markdown_viewer.js @@ -65,6 +65,71 @@ bricks.MdWidget = class extends bricks.JsWidget { links[i].href = '#'; links[i].onclick=this._build.bind(this, url); } + /* 媒体下载按钮:必须在上面的链接处理循环【之后】注入——否则同源 + 会被循环改成 onclick=_build(把 mp4 当 markdown 加载,下载不了)。 + marked 原生透传渲染 img/video/audio,这里只追加下载入口,不动渲染。 */ + this._add_media_download_buttons(); + } + /* 给已渲染的 / 是新建的,不会被再处理。 + 显式置空 onclick 防冒泡到父级链接拦截。 */ + a.onclick = function(e){ e.stopPropagation(); }; + if (is_data || href.indexOf(host) === 0 || href.charAt(0) === '/'){ + /* 同源/内联:a[download] 直接触发下载,不跳转 */ + } else { + a.target = '_blank'; + a.rel = 'noopener noreferrer'; + } + /* 插在媒体元素之后(同一父容器内) */ + if (el.nextSibling){ + el.parentNode.insertBefore(a, el.nextSibling); + } else { + el.parentNode.appendChild(a); + } + } } getname(){ return this.name || 'mdtext';