Jade: Tautan di dalam paragraf

118

Saya mencoba menulis beberapa paragraf dengan Jade, tetapi merasa kesulitan ketika ada tautan di dalam paragraf.

Yang terbaik yang bisa saya dapatkan, dan saya bertanya-tanya apakah ada cara untuk melakukannya dengan lebih sedikit markup:

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.
mahemoff
sumber

Jawaban:

116

Mulai giok 1.0 ada cara yang lebih mudah untuk menangani ini, sayangnya saya tidak dapat menemukannya di mana pun di dokumentasi resmi.

Anda dapat menambahkan elemen sebaris dengan sintaks berikut:

#[a.someClass A Link!]

Jadi, contoh tanpa masuk ke beberapa baris di ap, akan menjadi seperti ini:

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]

Anda juga bisa melakukan elemen inline bersarang:

p: This is a #[a(href="#") link with a nested #[span element]]
Clayton Gulick
sumber
6
Ini didokumentasikan di sini: jade-lang.com/reference/interpolation di bawah "Interpolasi Tag".
olan
94

Anda dapat menggunakan filter penurunan harga dan menggunakan penurunan harga (dan HTML yang diizinkan) untuk menulis paragraf Anda.

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

Sebagai alternatif, sepertinya Anda dapat menggunakan HTML tanpa masalah:

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

Saya sendiri tidak menyadarinya dan hanya mengujinya menggunakan alat baris perintah giok. Sepertinya bekerja dengan baik.

EDIT: Sepertinya itu benar-benar dapat dilakukan sepenuhnya di Jade sebagai berikut:

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

Jangan lupa ruang ekstra di akhir ayat (meskipun Anda tidak dapat melihatnya. Dan antara | and. Jika tidak, akan terlihat seperti ini para.a linkandtidakpara a link and

Daniel Baulig
sumber
1
Terima kasih. Penurunan harga sempurna untuk ini. Saya menemukan paket diskon NPM tidak dapat dikompilasi dan ada masalah dengan paket penurunan harga NPM (JS murni) dengan 0,5 (menggunakan ekspresi reguler sebagai fungsi, dihapus dari Chrome). Bagi orang lain yang membaca, solusinya adalah "npm install markdown-js", lalu ganti namanya menjadi "markdown". (Karena saya menemukan Jade tidak melihat "markdown-js".) Berhasil untuk saya.
mahemoff
9
Sepertinya ini mungkin bisa dibenahi dalam waktu dekat dengan interpolasi, sehingga bisa Anda lakukan p This is a paragraph #[a(href="#") with a link] in it. Lihat github.com/visionmedia/jade/issues/936
Akan
3
Jika Anda menggunakan opsi ketiga, berhati-hatilah dengan editor mana yang Anda gunakan, saya menggunakan Sublime dan ini akan menghapus spasi di akhir paragraf secara default. Akhirnya, saya memilih opsi 2 di atas karena itu paling tidak menyakitkan.
Ryan Eastabrook
Sublim hanya menghapus spasi jika Anda sudah menyuruhnya. Ya, jadi saya menggunakan &nbsp;di akhir baris pertama, tapi saya memperdebatkan pendekatan saya di masa depan.
Dave Newton
1
Ini telah diselesaikan di Jade 1.0, lihat stackoverflow.com/questions/6989653#answer-23923895
Emilien
45

Cara lain untuk melakukannya:

p
  | this is the start of the para
  a(href="http://example.com") a link
  | this is he rest of the paragraph.
pera
sumber
4
Ini adalah solusi paling elegan.
superluminary
3

Pendekatan lain yang sama sekali berbeda, adalah membuat filter, yang pertama kali menusuk mengganti tautan, dan kemudian merender dengan giok kedua.

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

Merender:

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

Contoh kerja penuh: index.js (dijalankan dengan nodejs)

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());

Solusi yang lebih umum akan membuat sub-blok giok mini dalam blok unik (mungkin diidentifikasi oleh sesuatu seperti ${jade goes here}), jadi ...

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

Ini dapat diterapkan dengan cara yang persis sama seperti di atas.

Contoh kerja solusi umum:

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());
Billy Moon
sumber
1
Ini terlalu rumit sebagai solusi. Ada cara yang lebih mudah sekarang.
JGallardo
3

Jika tautan Anda berasal dari sumber data, Anda dapat menggunakan:

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

Lihat interpolasi

P. Brian.Mackey
sumber
2

Edit: Fitur ini telah diimplementasikan dan masalah ditutup, lihat jawaban di atas.


Saya telah memposting masalah untuk menambahkan fitur ini ke Jade

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

Belum punya waktu untuk menerapkannya, lebih banyak +1 dapat membantu!

jpillora.dll
sumber
2
Terima kasih banyak @jpillora untuk membuat masalah itu, yang berakhir dengan penerapan fitur sebaris ini.
Emilien
1

Ini yang terbaik yang bisa saya lakukan

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

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

Merender ...

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

Bekerja dengan baik, tetapi terasa seperti sedikit retasan - harus ada sintaks untuk ini!

Billy Moon
sumber
0

Saya tidak menyadari bahwa batu giok membutuhkan garis per tag. Saya pikir kita bisa menghemat ruang. Jauh lebih baik jika ini bisa dipahami ul> li> a [class = "emmet"] {text}

paoloumali.dll
sumber
0

Saya harus menambahkan titik tepat di belakang tautan, seperti ini:

This is your test [link].

Saya menyelesaikannya seperti ini:

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>.
Rick Pastoor
sumber
0

Seperti yang disarankan oleh Daniel Baulig, digunakan di bawah ini dengan parameter dinamis

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

Ternyata ada (setidaknya sekarang) opsi yang sangat sederhana

p Convert a .fit file using <a href="http://connect.garmin.com/"> Garmin Connect's</a> export functionality.
Simon H.
sumber
2
Jenis kekalahan tujuan menggunakan preprocessor jika Anda harus masuk kembali ke html pada tanda pertama masalah.
superluminary
2
Setuju tetapi menggunakan pipa dan baris baru setiap kali Anda perlu menambahkan tag inline kami hampir tidak ideal. Baru mengenal giok tetapi tampaknya ini kelalaian besar
Simon H
2
Saya juga, saya datang dari haml di mana tag diawali dengan%. Jade jauh lebih cantik.
superluminary
0
p
    | At Times Like These We Suggest Just Going:
    a(ui-sref="app") HOME
    | &nbsp;
Dr Manhattan
sumber
-1

Hal paling sederhana yang pernah ada;) tetapi saya berjuang dengan ini sendiri selama beberapa detik. Siapa pun, Anda perlu menggunakan entitas HTML untuk tanda "@" -> &#64; Jika Anda ingin menyertakan tautan, katakanlah / beberapa alamat email Anda menggunakan ini:

p
    a(href="mailto:[email protected]" target="_top") me&#64;myemail.com
pit tanenbaum.dll
sumber