Easy Code Prettify は、Ex Code Prettify(その場で編集/実行できるシンタックスハイライター jQuery プラグイン)を簡易的に実行することができる jQuery プラグインです。
クラス名等の HTML 属性値によるパラメータ指定を必要としないため、マークダウン形式でブログを書いてる場合等に利用すると便利です。
使い方
jQuery、Google Code Prettify の JS ファイル、Ex Code Prettify の JS/CSS ファイル、Easy Code Prettify の JS ファイルを読み込みます。
DEMO
- <link href="jquery.ex-code-prettify.css" type="text/css" rel="stylesheet">
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
- <script src="google-code-prettify/prettify.js"></script>
- <script src="jquery.ex-code-prettify.js"></script>
- <script src="jquery.easy-code-prettify.js"></script>
コードの記述を 含む 要素に対し、easyCodePrettify() メソッドを実行します。
例えば div.article-body 内にコードの記述が有る場合は以下のように実行します。
DEMO
- $('div.article-body').easyCodePrettify();
コードは以下の規則に従ってマークアップすることで、実行パターンを制御できます。
コードのハイライト表示のみ行う
PRE 要素で記述した内容がハイライト表示の対象になります。
以下の様に表示されます。(コードを参照する)
css
DEMO
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
html
DEMO
- <div class="logo">Design</div>
script
DEMO
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コード種別をヘッダに表示する
各 PRE 要素の直前に H5 要素で css、html、script のいづれかを記述します。
以下の様に表示されます。(コードを参照する)
DEMO
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
DEMO
- <div class="logo">Design</div>
DEMO
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コードの記述をグルーピングする
グルーピングしたいまとまりの単位で H4 要素に code と記述します。
以下の様に表示されます。(コードを参照する)
DEMO
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
- <div class="logo">Design</div>
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コードを実行する
H4 要素に demo と記述します。
以下の様に表示されます。(コードを参照する)
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
- <div class="logo">Design</div>
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コードを表示・実行する
H4 要素に code + demo と記述します。
以下の様に表示されます。(コードを参照する)
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
- <div class="logo">Design</div>
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コードを編集し実行できるようにする
H4 要素に code + demo + edit と記述します。
コードの見出し部にある EDIT のクリックで、コードが編集可能になります。
以下の様に表示されます。(コードを参照する)
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
- <div class="logo">Design</div>
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
コードを手動で実行する
H4 要素に noAuto と記述すると JavaScript のコードが手動で実行できるようになります。
デモの見出し部にある RUN で実行、RESET で初期化が行われます。
以下の様に表示されます。(コードを参照する)
- .logo{
- text-align : center;
- font-size : 20px;
- opacity:.3;
- font-family:impact;
- color:#5588cc;
- }
- <div class="logo">Design</div>
- $DEMO.find('div.logo').animate(
- {opacity:1, 'font-size':60,'margin-top':30}, 1500,
- function(){
- var t = $(this);
- var method = t.is(':hidden') ? 'fadeIn' : 'fadeOut';
- t[method](1500,arguments.callee);
- }
- );
外部ファイルを読み込む
H5 要素に cssFile 又は jsFile と記述することで、それぞれ js ファイルと css ファイルを読み込むことができます。CSS、HTML、JavaScript は、外部ファイルの読み込み完了後に実行されます。
以下の様に表示されます。(コードを参照する)
- http://cyokodog.github.io/jquery.ex-code-prettify/jquery.ex-inplace-editor/jquery.ex-inplace-editor.css
- http://cyokodog.github.io/jquery.ex-code-prettify/jquery.ex-inplace-editor/jquery.ex-inplace-editor.js
- form{
- padding: 16px;
- }
- input.inplace-editor,
- a.ex-ipe-label{
- padding: 4px;
- }
- <form>
- <input type="text" class="inplace-editor"/>
- </form>
- $('input.inplace-editor').exInplaceEditor({
- nullText : '編集する'
- });
パラメータ
プラグイン実行時、下記パラメータを指定できます。
DEMO
- defaults : {
- codeNode : 'H4', // グルーピングを指定する要素
- codeTypeNode : 'H5', // コード種別を指定する要素
- demoText : 'demo', // コード実行の判定テキスト
- codeText : 'code', // コード表示の判定テキスト
- editText : 'edit', // コード編集の判定テキスト
- noAutoText : 'noAuto' // 自動実行の判定テキスト
- },
所感
上記のデモコードを編集して気付かれた方もいるかもしれませんが、同一ページ上にデモエリアを生成してるため、他のデモコードと干渉しあうケースがあります。
時間の余裕ができたら動的に生成した iframe 内でデモを実行する実装も検討したいと思います。
ダウンロード
MIT ライセンスです。こちらからどうぞ。