जेड: एक पैराग्राफ के अंदर लिंक


118

मैं जेड के साथ कुछ पैराग्राफ को लेखक करने की कोशिश कर रहा हूं, लेकिन जब एक पैराग्राफ के अंदर लिंक होते हैं तो यह मुश्किल है।

सबसे अच्छा मैं साथ आ सकता हूं, और मैं सोच रहा हूं कि क्या कम मार्कअप के साथ ऐसा करने का कोई तरीका है:

p
  span.
   this is the start
   of the para.
  a(href="http://example.com") a link
  span.
    and this is the rest of
    the paragraph.

जवाबों:


116

जेड 1.0 के रूप में इससे निपटने का एक आसान तरीका है, दुर्भाग्य से मैं इसे आधिकारिक दस्तावेज में कहीं भी नहीं पा सकता हूं।

आप निम्न सिंटैक्स के साथ इनलाइन तत्व जोड़ सकते हैं:

#[a.someClass A Link!]

तो, एपी में कई लाइनों में जाने के बिना एक उदाहरण, कुछ इस तरह होगा:

p: #[span this is the start of the para] #[a(href="http://example.com") a link] #[span and this is the rest of the paragraph]

आप नेस्टेड इनलाइन तत्वों को भी कर सकते हैं:

p: This is a #[a(href="#") link with a nested #[span element]]

6
यह यहाँ प्रलेखित है: "टैग इंटरपोलेशन" के तहत jade-lang.com/reference/interpolation
जैतून

94

आप एक मार्कडाउन फिल्टर का उपयोग कर सकते हैं और अपने पैराग्राफ को लिखने के लिए मार्कडाउन (और अनुमत HTML) का उपयोग कर सकते हैं।

:markdown
  this is the start of the para.
  [a link](http://example.com)
  and this is the rest of the paragraph.

वैकल्पिक रूप से ऐसा लगता है कि आप बिना किसी समस्या के बस HTML को हटा सकते हैं:

p
  | this is the start of the para.
  | <a href="http://example.com">a link</a>
  | and this is he rest of the paragraph

मुझे खुद इस बारे में जानकारी नहीं थी और मैंने जेड कमांड लाइन टूल का उपयोग करके इसका परीक्षण किया। यह ठीक काम करने लगता है।

संपादित करें: ऐसा लगता है कि यह वास्तव में जेड में पूरी तरह से किया जा सकता है:

p
  | this is the start of the para  
  a(href='http://example.com;) a link
  |  and this is the rest of the paragraph

पैरा के अंत में एक अतिरिक्त स्थान मत भूलना (हालाँकि आप इसे नहीं देख सकते। और बीच में | and। अन्यथा यह इस तरह दिखेगाpara.a linkand नहींpara a link and


1
धन्यवाद। इसके लिए मार्कडाउन एकदम सही है। मैंने पाया कि NPM छूट पैकेज संकलित नहीं था और 0.5 के साथ NPM मार्कडाउन (शुद्ध JS) पैकेज के साथ एक समस्या है (यह क्रोम से हटाए गए कार्यों के रूप में नियमित अभिव्यक्ति का उपयोग कर रहा है)। किसी और को पढ़ने के लिए, एक समाधान स्पष्ट रूप से "एनपीएम स्थापित मार्कडाउन-जेएस" है, फिर इसे "मार्कडाउन" नाम दें। (जैसा कि मैंने पाया कि जेड "मार्कडाउन-जेएस" में नहीं दिखता है।) मेरे लिए काम किया।
mahemoff

9
ऐसा लगता है कि निकट भविष्य में प्रक्षेप के साथ संबोधित किया जा सकता है, ताकि आप कर सकें p This is a paragraph #[a(href="#") with a link] in it। देखें github.com/visionmedia/jade/issues/936
विल

3
यदि आप तीसरे विकल्प का उपयोग करते हैं तो सावधान रहें कि आप किस संपादक का उपयोग कर रहे हैं, मैं उदात्त का उपयोग कर रहा हूं और यह पैराग्राफ के अंत में स्थान को डिफ़ॉल्ट रूप से हटा देगा। अंततः, मैंने विकल्प 2 को ऊपर चुना क्योंकि यह सबसे कम दर्दनाक था।
रयान ईस्टाब्रुक

यदि आप इसे बता चुके हैं तो सबलाइम केवल अनुगामी रिक्त स्थान को स्ट्रिप्स करता है। मेरे पास है, इसलिए मैं &nbsp;पहली पंक्ति के अंत में उपयोग करता हूं , लेकिन मैं भविष्य में अपने दृष्टिकोणों पर बहस कर रहा हूं।
डेव न्यूटन

1
इसे जेड 1.0 में हल किया गया है, देखें stackoverflow.com/questions/6989653#answer-23923895
एमिलीन

45

इसे करने का दूसरा तरीका:

p
  | this is the start of the para
  a(href="http://example.com") a link
  | this is he rest of the paragraph.

4
यह सबसे सुरुचिपूर्ण समाधान है।
सुपरलिंउरी

3

एक और पूरी तरह से अलग दृष्टिकोण, एक फिल्टर बनाने के लिए होगा, जिसमें लिंक की जगह पर पहले छुरा होता है, और फिर जेड दूसरी के साथ प्रस्तुत होता है

h1 happy days
:inline
  p this can have [a link](http://going-nowhere.com/) in it

प्रस्तुत करता है:

<h1>happy days</h1><p>this can have <a href='http://going-nowhere.com/'>a link</a> in it</p>

पूर्ण कार्य उदाहरण: index.js (नोडज के साथ रन)

var f, jade;

jade = require('jade');

jade.filters.inline = function(txt) {
  // simple regex to match links, might be better as parser, but seems overkill
  txt = txt.replace(/\[(.+?)\]\((.+?)\)/, "<a href='$2'>$1</a>");
  return jade.compile(txt)();
};

jadestring = ""+ // p.s. I hate javascript's non-handling of multiline strings
  "h1 happy days\n"+
  ":inline\n"+
  "  p this can have [a link](http://going-nowhere.com/) in it"


f = jade.compile(jadestring);

console.log(f());

एक अधिक सामान्य समाधान एक अद्वितीय ब्लॉक में जेड के मिनी उप-ब्लॉकों को प्रस्तुत करेगा (शायद कुछ इस तरह से पहचाना जाता है ${jade goes here}), इसलिए ...

p some paragraph text where ${a(href="wherever.htm") the link} is embedded

इसे ठीक उसी तरह लागू किया जा सकता है, जैसा ऊपर बताया गया है।

सामान्य समाधान का कार्यशील उदाहरण:

var f, jade;

jade = require('jade');

jade.filters.inline = function(txt) {
  txt = txt.replace(/\${(.+?)}/, function(a,b){
    return jade.compile(b)();
  });
  return jade.compile(txt)();
};

jadestring = ""+ // p.s. I hate javascript's non-handling of multiline strings
  "h1 happy days\n"+
  ":inline\n"+
  "  p this can have ${a(href='http://going-nowhere.com/') a link} in it"


f = jade.compile(jadestring);

console.log(f());

1
यह एक समाधान के रूप में बहुत जटिल है। अब आसान तरीके हैं।
जेगलार्डो


3

यदि आपके लिंक एक डेटा स्रोत से आते हैं, जिसका आप उपयोग कर सकते हैं:

  ul
    each val in results
      p
        | blah blah 
        a(href="#{val.url}") #{val.name}
        |  more blah

प्रक्षेप देखें


2

संपादित करें: यह सुविधा लागू की गई थी और इसे बंद कर दिया गया था, ऊपर उत्तर देखें।


मैंने इस सुविधा को जेड में जोड़े जाने के लिए एक समस्या पोस्ट की है

https://github.com/visionmedia/jade/issues/936

हालांकि इसे लागू करने का समय नहीं था, अधिक + 1s मदद कर सकता है!


2
उस मुद्दे को बनाने के लिए @jpillora का बहुत बहुत धन्यवाद, जो इस इनलाइनिंग सुविधा को लागू किए जाने पर समाप्त हो गया।
एमिलीन

1

यह सबसे अच्छा मैं साथ आ सकता है

-var a = function(href,text){ return "<a href='"+href+"'>"+text+"</a>" }

p this is an !{a("http://example.com/","embedded link")} in the paragraph

Renders ...

<p>this is an <a href='http://example.com/'>embedded link</a> in the paragraph</p>

ठीक काम करता है, लेकिन एक हैक की तरह महसूस करता है - इसके लिए वास्तव में एक वाक्यविन्यास होना चाहिए!


0

मुझे महसूस नहीं हुआ कि जेड को प्रति टैग लाइन की आवश्यकता है। मुझे लगा कि हम अंतरिक्ष को बचा सकते हैं। बहुत बेहतर है अगर इसे उल> ली> ए [क्लास = "एम्मेट"] {टेक्स्ट} समझा जा सके


0

मुझे एक लिंक के पीछे सीधे एक अवधि जोड़ना था, जैसे:

This is your test [link].

मैंने इसे इस तरह हल किया:

label(for="eula").lbl.lbl-checkbox.lbl-eula #{i18n.signup.text.accept_eula}
    | <a href="#about/termsandconditions" class=".lnk.lnk-eula">#{i18n.signup.links.eula}</a>.

0

जैसा कि डैनियल बॉलीग द्वारा सुझाया गया है, नीचे गतिशील पारामों के साथ प्रयोग किया गया है

| <a href=!{aData.link}>link</a>

0

बाहर मुड़ता है (अब कम से कम) एक पूरी तरह से सरल विकल्प है

p Convert a .fit file using <a href="http://connect.garmin.com/"> Garmin Connect's</a> export functionality.

2
यदि आप मुसीबत के पहले संकेत पर html में वापस डुबाना है, तो प्रीप्रोसेसर का उपयोग करने के उद्देश्य को हरा देता है।
सुपरलिंउरी

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

2
मुझे भी, मैं haml से आया हूँ जहाँ एक टैग% के साथ उपसर्ग करता है। जेड हालांकि बहुत सुंदर है।
superluminary


-1

अब तक की सबसे सरल बात;) लेकिन मैं खुद कुछ सेकंड के लिए इससे जूझ रहा था। कुछ भी हो, आपको "@" चिह्न के लिए एक HTML इकाई का उपयोग करने की आवश्यकता है -> &#64; यदि आप किसी लिंक को शामिल करना चाहते हैं, तो मान लें कि आपका / कुछ ईमेल पता इसका उपयोग करते हैं:

p
    a(href="mailto:me@myemail.com" target="_top") me&#64;myemail.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.