Octopressでの小技。
Markdown記法の[]()
で書くリンクだと、
通常はクラス指定や属性指定など出来ないので
別ウィンドウで開くリンクにはなりませんが、いくつか方法があるのでそれらについて。
Htmlで直接書く
Octopressの作者の人が、Issueに上がってきた時にバッサリと、直接書けば、と言った方法。
1
|
|
もちろん、単にHtmlでtarget属性を指定(_blank
)してるだけなのでこのまま
別ウィンドウに開きます。
Markdown
Markdownでも
Kramdown
ではMarkdown記法の後に{: attribute="value"}
みたいな感じで属性を追加することが出来るので1
、これを使って
[Link](http://example.com){:target="_blank"}
と書くことで出力に上と同様target="_blank"
を足すことが出来ます。
他にも
Maruku: http://maruku.rubyforge.org/proposal.html とかでも同じ書き方です。
ただし、これらはPHP Markdown Extraを取り入れた拡張バージョンですが、
PHP Markdown Extra自身は違う文法(:
が無しなのと、属性については取り敢えず言及がない
2)
の様で、他のパーサーでは少し違った書き方が必要かもしれません。
RDiscountは多分出来ない、と思う。
JavaScript (jQuery)
上のOctopressのIssueでも載っていた方法。 JavaScriptでa要素にtarget属性を追加します。
Issueに載ってた簡単な方はこれ。
1 2 3 4 5 6 7 8 |
|
DOMNodeInsertedを使ってやってますが、 もうちょっとシンプルにこんな感じで十分です。
1 2 3 4 |
|
これで、外部のサイトは新しいウィンドウで開かれて、
自分のサイトを/blog/..
の様にルート相対パスで書いておけば
上の関数には無視されるので新たなウィンドウは出ません。
この場合は、自分のサイトをhttp://..
からフルに書いてあげると
これは新しいウィンドウを作ります。
これだけでほとんど十分ですが、
自分でhtmlタグ等で直接target
を指定したい時がある場合は
target
が指定されてない時だけ加える様に
1 2 3 4 5 6 |
|
こんな感じで。ついでにクリックした時に適用する様にして、
更にftp
サイトも追加してあります。
どんな場合でも自分のサイトは新しいウィンドウにしたくない場合は
1 2 3 4 5 6 |
|
こんな風にhttp
から始まっても自分のホスト名と同じじゃない
事を確認してからtarget
属性を加えてやるようにしてあげればOK。
プラグインで新たなタグを作る
OctopressではimgもLiquidタグで書けるようにプラグインが用意されてますが、 同じ様に、
こんなプラグインを作れば
{% link http://example.com This is an external link. %}
こんな感じで書くとこうなります。
1
|
|
/
の場合は_blank
を加えないようにしてあります。
また、上のプラグインではURLの前に何かを書けばそのままa要素に渡す様になってるので、 class等も
{% link class="myclass" target="_self" http://example.com This is opend in the same window. %}
こんな感じで渡してあげると、
1
|
|
こんな感じの出力に。target
属性を渡してあげれば渡した方を優先して使うようにしてあります。
Octopress専用の書物だと思えば、上みたいに余計なJavaScriptを加えなくて済むので 最初から導入するのであれば便利かな、と。
ただ、途中から導入するには書き換えるのに適当なスクリプトでも書いて
かいてあげないと面倒なのと、
Markdownビューではリンクにならないので、
Markdownで見ることがある場合にはあまりLiquidタグに頼りすぎると良くないかもしれません。
まあ、どちらかというとそれはimg
タグの方がより強く言えることなので、
それなら別に良いじゃないか、ともなる気もしますが。
-
全くの余談ですが、Kramdownのページがしょっちゅうダウンしてて見れなくて困る。。。 ↩