re:dash の Dashboard で script が動かない原因(ver 5.0.2)


結論から言うと
https://github.com/getredash/redash/blob/master/client/app/filters/markdown.js
内で利用されている markdown ライブラリが、 タグエスケープしてしまうためです。
なので、 REDASH_ALLOW_SCRIPTS_IN_USER_INPUT: "true"を渡しても
Dashboard上で(プレビューも含め)入力したタグがそのまま表示されるだけになってしまう。

モジュールを marked に変えればうまく動きます。
(というか markdown0.5.0 ではどうやっても対応できない。)

marked に変更する方法

package.json

https://github.com/getredash/redash/blob/master/package.json#L69
"markdown": "0.5.0" を削除して "marked": "0.5.2" に変更。

client/app/filters/markdown.js

下記に書き換え。

// import { markdown } from 'markdown';
import marked from 'marked';

export default function init(ngModule) {
  ngModule.filter('markdown', ($sce, clientConfig) =>
    function parseMarkdown(text) {
      if (!text) {
        return '';
      }

      // let html = markdown.toHTML(String(text));
      let html = marked(String(text));
      if (clientConfig.allowScriptsInUserInput) {
        html = $sce.trustAsHtml(html);
      }

      return html;
    });
}

あとは npm run build とかすれば、ちゃんと動きます。

動いてる画像。

PRでもだすか・・・