markItUp!のプレビューを設定する
タグ: jQuery PHP Markdown Javascript
jQueryで動作するJavascriptエディター、markItUp!でプレビューを有効にする設定です。
この記事はmarkItUp!でMarkdown形式を扱う設定紹介の一部です。
以降で紹介する記事中のパスやURLは、皆さんの環境に置き換えて設定してください。
markItUp!ではプレビューへの変換をJavascritpライブラリーで行ったり、サイトの変換URLに対し、Ajaxでリクエストしたりできます。今回はサイトの変換URLに対しPOSTし、PHPで書かれたMarkdownの変換ライブラリーで加工した結果を受け取るシナリオです。
PHPを利用する場合
フレームワークなどを利用せず、そのまま変換する場合は、次のようなコードになるでしょう。
<?php require_once 'path_to_markdown/markdown.php'; echo Markdown($_POST['data']);
これを例えば、ドキュメントルートにpreview.php
という名前で保存します。
デフォルトではmarkItUp!からdata
という名前で、テキストエリアへ入力中の文字列が送られてきます。それをPHP Markdownライブラリーを使用し変換し、送り返すだけです。
次に、この変換のためのURLをmarkItUp!に教えてあげます。markitup/sets/markdown/set.js
をエディターで開いてください。次に以下の一行を変更し、URIを指定します。
previewParserPath: '/preview.php',
これで、プレビューが動作するようになります。
フレームワークを使用する場合
フレームワークを使用する場合、以下のようになります。当サイトでサポートしているLaravelの場合、以下のようにします。
まず、変換のためのルートを決めます。今回はmarkdownpreview
にしましょう。続いて、ルートを定義します。application/routes.php
をエディターで開きましょう。
Route::post('markdownpreview`, function () { require_once $path('app').'vendor/markdown/markdown.php'; return Markdown(Input::get('data')); });
フレームワークを使用せず、直接PHPを利用する場合と同様にmarkitup/sets/markdown/set.js
で、MarkdownからHTMLへ変換するURIを指定しましょう。
previewParserPath: '/markdownpreview',
はいこれでおしまいです。プレビューボタンで、プレビューが表示されます。
プレビューにCSSを適用する
プレビューはiframeの中に表示されます。そのためのcssを指定する方法がありません。markItUp!はtemplatesというフォルダーにtemplate.htmlとtemplate.cssを用意していますが、これはJavascriptのライブラリーを使用して変換する場合に利用されるもののようで、今回のようにAjax活用で、サーバーサイドの変換時には適用されません。
サーバーサイドから送り返す内容は<body>
と</body>
の間に展開されます。この間にCSSを指定する<link>
があってもレビュー程度の利用であれば問題はありません。そこで、送り返す内容の先頭にCSSの指定を入れましょう。
PHPを直接使用する場合:
echo `<link href="http://yoursite.com/css/template.css" media="all" type="text/css" rel="stylesheet">`. Markdown($_POST['data']);
Laravelの場合:
return HTML::style('css/template.css'). Markdown(Input::get('data'));
当サイトの場合、コードハイライトをGoogle prettyprintで実現しています。これをプレビュー内で動作させるには、以下のようにします。
return HTML::style('css/template.css'). HTML::style('css/prittify.css'). HTML::script('js/prettify.js'). Markdown(Input::get('data')). '<script>'. 'window.onload=function() { prettyPrint(); };'. '</script>';
prettyprintを動作させるCSSとJavascriptファイルを指定し、取り込まれた後で、prettyprintを実行するように設定します。