/ / नेस्टेड टैग वाले कस्टम टैग के लिए एक जेकिल प्लगइन लिखना जारी करें - रूबी, जेकील, तरल

नेस्टेड टैग वाले कस्टम टैग के लिए एक जेकिल प्लगइन लिखना जारी करें - रूबी, जेकील, तरल

मैं कुछ टैबड ब्लॉक को संभालने के लिए कुछ टैग जोड़ने के लिए एक जेकिल प्लगइन को कोड करने की कोशिश कर रहा हूं क्योंकि मेरी वेबसाइट में इस तरह के ब्लॉक वाले बहुत सारे पेज होंगे। मैं इसे आसानी से मार्कडाउन में संपादित करना चाहता हूं।

मैं इस तरल कोड का उपयोग करने की कोशिश कर रहा हूँ:

{% 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 %}

यह एचटीएमएल कोड देना:

<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 № 1

मुझे नहीं पता क्यों, लेकिन जेकील या तरल ने माना कि, इंडेंटेशन दिया गया है, यह कुछ कोड था।

मैंने लाइन ब्रेक को हटाने और कुछ इंडेंटेशन को हटाकर फिर से मार्कडाउन रूपांतरित कोड को अलग करके इसे हल किया:

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(/rn|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

उत्तर № 2 के लिए 1

यह शानदार है। जो भी इस पर आता है उसके लिए:

परिवर्तन:

getConverterImpl

सेवा मेरे

find_converter_instance