2014-11-23 27 views
9

我知道鏈接的target屬性不能由CSS指定。我希望能夠生成一個基於傑基爾降價文件與下面的輸出外部鏈接:Jekyll:爲外部鏈接生成自定義HTML(目標和CSS類)

<a href="the-url" class="external" target="_blank">the text</a> 

沒有訴諸這樣的:

[the text](the url){:target"_blank" class="external"} 

我不想在每個鏈接中對target進行硬編碼,因爲我可能想在某個時候更改它,而且它很嘈雜。所以最好我不得不

[the text](the url){:class="external"} 

...但隨後CSS不能加​​target="_blank"

所以我的想法是一個自定義插件,讓我寫

{% ext-link the-url the text %} 

難道這樣的插件存在嗎?有沒有更好的方法來實現這一目標?

回答

8

看來寫一個插件是直截了當的。這是我想出了:

module Jekyll 
    class ExtLinkTag < Liquid::Tag 
    @text = '' 
    @link = '' 

    def initialize(tag_name, markup, tokens) 
     if markup =~ /(.+)(\s+(https?:\S+))/i 
     @text = $1 
     @link = $3 
     end 
     super 
    end 

    def render(context) 
     output = super 
     "<a class='external' target='_blank' href='"[email protected]+"'>"[email protected]+"</a>" 
    end 
    end 
end 

Liquid::Template.register_tag('extlink', Jekyll::ExtLinkTag) 

用法示例:

Exhibition at {% extlink Forum Stadtpark http://forum.mur.at %}. 

HTML輸出:

<p>Exhibition at <a class="external" target="_blank" href="http://forum.mur.at">Forum Stadtpark</a>.</p> 
11

當你需要爲此在Github上pagesand則不能使用插件,你可以用javascript來做:

// any link that is not part of the current domain is modified 

(function() { 
    var links = document.links; 
    for (var i = 0, linksLength = links.length; i < linksLength; i++) { 
    // can also be 
    // links[i].hostname != 'subdomain.example.com' 
    if (links[i].hostname != window.location.hostname) { 
     links[i].target = '_blank'; 
     links[i].className += ' externalLink'; 
    } 
    } 
})(); 

this answer的啓發。

2

有一個小的哲基爾插件應用target="_blank"rel="nofollow",類名和您所選擇的任何其他屬性外部鏈接自動:

Jekyll ExtLinks Plugin

主機的列表,以應用rel時跳過可以配置,如果你想保持一些鏈接不變。這樣,您就不必再使用Markdown進行破解。

UPD:這個插件現已發佈到RubyGems:jekyll-extlinks。使用gem install jekyll-extlinks進行安裝。還有available on GitHub

+0

這個插件對我來說不適用於jekyll 3.3.1。 – 2017-01-07 16:11:51

+0

在Jekyll 3.4.0上測試,發現nokogiri存在問題 - 通過在項目Gemfile中指定gem'nokogiri'來修復。除此之外,該插件很好地工作。 – nourish 2017-02-24 22:46:58

相關問題