2014-01-14 2 views
1

내 웹 사이트에 이런 종류의 블록이있는 페이지가 많이 있기 때문에 jekyll 플러그인을 코딩하여 일부 탭 블록을 처리하도록 태그를 추가하려고합니다. 나는 markdown에서 쉽게 편집하고 싶다.중첩 태그가있는 사용자 정의 태그 용 jekyll 플러그인 작성 문제

나는이 액체 코드를 사용하려고 해요 :

{% tabs %} 
    {% tab tab-1 %} 
    Content of tab #1 
    {% endtab %} 

    {% tab tab-2 %} 
    Content of tab #2 
    {% endtab %} 

    {% tab tab-3 %} 
    Content of tab #3 
    {% endtab %} 
{% endtabs %} 

이 HTML 코드주기 : 여기

<div class="tab-content"> 
    <div class="tab-pane" id="tab-1"> 
    Content of tab #1 
    </div> 
    <div class="tab-pane" id="tab-2"> 
    Content of tab #2 
    </div> 
    <div class="tab-pane" id="tab-3"> 
    Content of tab #3 
    </div> 
</div> 

내 플러그인입니다 :

module Tags 
    class TabsBlock < Liquid::Block 
     def render(context) 
      '<div class="tab-content">' + super + "</div>" 
     end 
    end 

    class TabBlock < Liquid::Block 
     def initialize(tag_name, tab, tokens) 
      super 
      @tab = tab.strip 
     end 

     def render(context) 
      return "" if @tab.empty? 

      site  = context.registers[:site] 
      converter = site.getConverterImpl(Jekyll::Converters::Markdown) 

      content = super.strip 
      content = converter.convert(content) 

      '<div id="' + @tab + '" class="tab-pane">' + content + "</div>" 
     end 
    end 
end 

Liquid::Template.register_tag("tabs", Tags::TabsBlock) 
Liquid::Template.register_tag("tab", Tags::TabBlock) 

내가하려고하면 마크 업이 올바르지 않습니다.

<div class="highlight"> 
    <pre><code class="text language-text" data-lang="text">&lt;div id=&quot;tab-1&quot; class=&quot;tab-pane&quot;&gt;&lt;p&gt;Content of tab #1&lt;/p&gt;</code></pre> 
</div> 

내가 아무 생각이 왜 내가 처리 할 루비/액체에 잘 모른다 : 만 첫 번째 탭의 마크 업 내가 다른 탭이 코드 하이 라이터를 통과하고 내가 얻을 기대하고있는 무슨이다 그것은 혼자서 :). 아이디어가 있으십니까?

감사합니다.

답변

2

나는 왜 그런지 알지 못한다. 그러나 지킬이나 액체는 들여 쓰기를 고려할 때, 고역에 대한 코드라고 생각했다.

class TabBlock < Liquid::Block 
    def initialize(tag_name, tab, tokens) 
     super 
     @tab = tab.strip 
    end 

    def render(context) 
     return "" if @tab.empty? 

     site  = context.registers[:site] 
     converter = site.getConverterImpl(Jekyll::Converters::Markdown) 

     lines = super.rstrip.split(/\r\n|\r|\n/).select { |line| line.size > 0 } 
     indentation = lines.map do |line| 
      match = line.match(/^(\s+)[^\s]+/) 
     match ? match[1].size : 0 
     end 
     indentation = indentation.min 

     content = indentation ? super.gsub(/^#{' |\t' * indentation}/, '') : super 
     content = converter.convert(content) 
     content = content.strip # Strip again to avoid "\n" 

     '<div id="' + @tab + '" class="tab-pane">' + content + "</div>" 
    end 
end 
0

이 환상적입니다 :

나는 다시 가격 인하가 줄 바꿈을 제거하는 코드를 변환 및 일부 들여 쓰기를 제거하여 제거하여 해결. 누군가를 위해 사람이 건너 온다 :

변화 :

getConverterImpl 

find_converter_instance 

관련 문제