Chrome Extension APIの国際化では、言語ごとに下記のようなmessage.jsonを_locales/<言語>フォルダに用意して、chrome.i18n.getMessage(key)とやるわけですが、いちいち書いてたら面倒なのと、messages.jsonに該当キーがないときにエラーになって開発の妨げになるので、存在しないときはkeyをそのまま返すようにしました。
タグ別アーカイブ: JavaScript
Chrome拡張機能のPopupとBackground/Event Pagesで情報をやりとりする
タイトルの通り、Google Chrome拡張機能APIで、popup.jsからbackground.jsやeventPages.jsになんらかのメッセージを通知したいときに利用する。
たとえば、popup.jsでstorageのデータを上書きして、それをbackground.js/eventPages.jsで読み込みなおしたいときなど。
highlight.jsでインラインのソースコードもハイライトする
highlight.jsとは
highlight.jsはソースコードをきれいにシンタックスハイライトしてくれるJavaScriptライブラリだ。しかもCrayon Syntax HighlighterのようにPHPではなくJavaScriptで動作するので、サーバー側に負荷がかからず高速に動作する。
しかし、このhighlight.jsは基本的にブロック要素(初期設定では<pre><code></code></pre>という2重タグ)を前提に考えられているため、この<code>のようにインラインのソースコードに適用できない。
どうせならインラインタグもシンタックスハイライトして表示したいので、やってみた。
JavaScript
通常、highlight.jsを利用するときは
<script>hljs.initHighlightingOnLoad();</script>
のように記述するが、これだと<pre><code>にのみ適用されてしまうので、これをすべての<code>がハイライトされるよう、下記のように修正する(要jQuery)。
<script>
$(document).ready(function() {
$('code').each(function(i, block) { hljs.highlightBlock(block); });
});
</script>
これですべての<code>がハイライトされるが、<code>タグに自動で追加される.hljsクラスにdisplay:block;が含まれており、すべてがブロック要素として表示されてしまうので、これをCSSで打ち消してやる必要がある。
CSS
<style>
code.hljs { display: inline; margin: 0 2px; padding: 1px 3px; }
pre code.hljs { display: block; margin: 0; padding: .5em; }
</style>
code.hljsだけならdisplay:inline;、preの中のcode.hljsならdisplay:block;とした。marginやpaddingもそのままだと気持ち悪いので調整した。
都合によってfont-familyやfont-size、line-heightを調整するといい。
こんな感じで無事、すべての<code>タグがハイライトされるようになった。