Jade : 단락 내부 링크


118

Jade로 몇 개의 문단을 작성하려고하는데 문단 안에 링크가있을 때 어렵습니다.

내가 생각할 수있는 최선의 방법이며, 적은 마크 업으로 할 수있는 방법이 있는지 궁금합니다.

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

jade 1.0부터이 문제를 처리하는 더 쉬운 방법이 있습니다. 불행히도 공식 문서에서는 찾을 수 없습니다.

다음 구문을 사용하여 인라인 요소를 추가 할 수 있습니다.

#[a.someClass A Link!]

따라서 ap에서 여러 줄로 들어 가지 않는 예는 다음과 같습니다.

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
이것은 "Tag Interpolation"아래에 jade-lang.com/reference/interpolation 에 문서화되어 있습니다 .
olan 2015-04-03

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

나는 이것을 직접 알지 못했으며 jade 명령 줄 도구를 사용하여 테스트했습니다. 잘 작동하는 것 같습니다.

편집 : 실제로 다음과 같이 Jade에서 전적으로 수행 할 수있는 것 같습니다.

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

para 끝 부분에 여분의 공백을 잊지 마세요 (볼 수는 없지만. | and . 그렇지 않으면 다음과 같이 para.a linkand보이지 않습니다.para a link and


1
감사. Markdown은 이것에 완벽합니다. NPM 할인 패키지가 컴파일되지 않았고 NPM 마크 다운 (순수 JS) 패키지에 0.5 (정규 표현식을 함수로 사용하고 Chrome에서 제거됨)에 문제가 있음을 발견했습니다. 다른 사람을 위해, 해결책은 분명히 "npm install markdown-js"이고 이름을 "markdown"으로 바꾸는 것입니다. (내가 발견했을 때 Jade는 "markdown-js"를 보지 않습니다.) 저를 위해 일했습니다.
mahemoff

9
이것은 보간을 통해 가까운 장래에 해결 될 수 있으므로 p This is a paragraph #[a(href="#") with a link] in it. github.com/visionmedia/jade/issues/936
Will

3
세 번째 옵션을 사용하는 경우 사용중인 편집기에주의하십시오. 저는 Sublime을 사용하고 있으며 기본적으로 단락 끝의 공백을 제거합니다. 궁극적으로 위의 옵션 2는 통증이 가장 적기 때문에 선택했습니다.
Ryan Eastabrook 2014-06-02

Sublime은 지시 한 경우에만 후행 공백을 제거합니다. 나는 &nbsp;첫 번째 줄 끝에를 사용 하지만 앞으로 내 접근 방식에 대해 토론하고 있습니다.
Dave Newton

1
이 문제는 Jade 1.0에서 해결되었습니다. stackoverflow.com/questions/6989653#answer-23923895
Emilien

45

이를 수행하는 또 다른 방법 :

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

4
이것은 가장 우아한 솔루션입니다.
superluminary

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

보다 일반적인 솔루션은 고유 블록 (예 :와 같이 식별 할 수 있음 ${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
이것은 해결책으로 너무 복잡합니다. 이제 더 쉬운 방법이 있습니다.
JGallardo


3

링크가 데이터 소스에서 가져온 경우 다음을 사용할 수 있습니다.

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

보간 참조


2

편집 :이 기능이 구현되고 문제가 종료되었습니다. 위의 답변을 참조하십시오.


이 기능을 Jade에 추가하기 위해 문제를 게시했습니다.

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

구현할 시간이 없었습니다. 더 많은 +1이 도움이 될 수 있습니다!


2
이 인라인 기능이 구현되는 것으로 끝나는 문제를 만들어 주신 @jpillora에게 감사드립니다.
Emilien 2015

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

렌더링 ...

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

잘 작동하지만 약간의 해킹처럼 느껴집니다. 실제로 이에 대한 구문이 있어야합니다!


0

나는 옥이 태그 당 한 줄을 필요로한다는 것을 몰랐다. 공간을 절약 할 수 있다고 생각했습니다. 이것을 이해할 수 있다면 훨씬 좋습니다. ul> li> a [class = "emmet"] {text}


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

Daniel Baulig가 제안한대로 동적 매개 변수와 함께 아래에 사용됨

| <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로 돌아 가야하는 경우 일종의 전 처리기 사용 목적을 무력화합니다.
superluminary

2
동의하지만 인라인 태그를 추가해야 할 때마다 파이프와 새 라인을 사용하는 것은 이상적이지 않습니다. 비취를 처음 접했지만 이것은 주요 생략 인 것 같습니다
Simon H

2
나도 태그 앞에 %가 붙은 haml에서 왔습니다. 그래도 비취가 훨씬 더 예뻐요.
superluminary


-1

가장 간단한 것;) 그러나 나는 몇 초 동안 이것으로 어려움을 겪고있었습니다. 누구든지 "@"기호에 HTML 엔티티를 사용해야합니다.-> &#64; 링크를 포함하려면 다음을 사용한다고 가정 해 보겠습니다.

p
    a(href="mailto:me@myemail.com" target="_top") me&#64;myemail.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.