불행히도 여전히 문제가 있습니다. 테마 설정에서 정규식 순서를 바꿔 보았지만, 여전히 “짧은” 항목이 먼저 실행됩니다.
안녕하세요 @jrgong! CSV 파일을 사용해 일괄 업로드를 해보셨나요? 방법을 알아보고 있는데, 정확히 어디를 클릭해야 할지 모르겠네요. 참고로 개발자는 아닙니다 ![]()
저희도 마찬가지입니다. 다음을 확인했습니다:
discourse,https://discourse.org
discourse meta,https://meta.discourse.org
meta discourse,https://meta.discourse.org
그 결과는 다음과 같습니다:
discourse
discourse meta
meta discourse
테마 설정(그리고 presumably 그 아래에 있는 데이터베이스)에서 이 항목들이 나열된 순서는 차이가 없는 것 같습니다. 대신, 기존에 링크화된 단어를 확장하면 그 차이를 반영하지만, 앞에 단어를 추가하는 경우에는 반영되지 않습니다.
음, 좀 이상하네요. 맞아요, 설정의 순서는 중요하지 않아야 해요. 왜냐하면 우리는 단어들을 길이 기준으로 정렬하니까요:
AFAIK 이 기능이 Discourse 코어로 이식되고 있다고 하니까, 이 부분에 얼마나 시간을 투자해야 할지 잘 모르겠네요.
안녕하세요,
링크화된 단어에는 다른 링크에 있는 것과 같은 클릭 카운터가 없다는 걸 방금 알았습니다(개인적으로는 있으면 좋은 기능이라고 생각해요). 의도적인 건가요, 아니면 버그인가요?
특정 카테고리/태그로 제한하여, 게시물이 해당 카테고리에 속하거나 태그가 지정되어야만 링크가 생성되도록 할 수 있나요?
링크에 제목을 지정할 수 있나요? 즉, "ghost"가 "ghost (경고 참고!)"가 되는 것처럼요?
마크다운 링크 구문을 사용하는 것도 가능합니다:
ghost,[ghost (경고 참고!)](https://warning.example.com)
또는 제목을 세 번째 매개변수로 지정하는 방법도 있습니다:
ghost,https://warning.example.com,ghost (경고 참고!)
@Paracelsus 이 테마에서는 클릭 카운터가 지원되지 않습니다. 죄송합니다.
정확히 말하면 버그는 아닙니다. 이 테마는 브라우저에서 실행되는 JavaScript 코드일 뿐이며, 서버와 통신하지 않으므로 클릭 수를 저장할 수 있는 방법이 없습니다.
이제 Discourse의 단어 교체(Replace words)에서:
/admin/customize/watched_words/action/replace
단어를 입력한 뒤 마크다운 없이 URL만 넣으면 작동합니다! 이것이 autolink 테마 컴포넌트 없이 작동하게 하는 방법입니다.
(테마 컴포넌트에서는 단어/구문을 넣고 쉼표, 그리고 사용할 링크를 넣는 반면, 감시 단어 교체(watched word replace)에서는 한 필드에 단어를 넣고 다른 필드에는 링크만 입력하면 됩니다… 처음 제가 시도했던 것처럼 교체 문자열에 마크다운을 입력하려 하지 마세요.)
안녕하세요, 정말 멋진 컴포넌트네요! 만들어 주셔서 감사합니다.
하지만 작은 문제가 하나 있습니다. 링크화(linkification) 기능이 특정 단어 뒤에 공백을 요구하는 것 같아서, 중국어와 일본어(한국어도 마찬가지일까요? 이 언어를 잘 모르지만) Discourse 인스턴스에서 컴포넌트가 제대로 작동하지 않는 것 같습니다.
저는 중국어 모국어 화자이고 일본어도 할 줄 압니다. 중국어에서는 편지나 메시지 등 일상적인 글쓰기에서 Apple, Office, BB(Blackboard), DNA 같은 고정된 외래어를 자주 사용하는데, 이런 단어의 번역어는 일상 언어에서 거의 쓰이지 않습니다. 또한, 이런 단어가 중국어 사이에 있을 때 비공식적인 글쓰기에서는 단어 앞뒤에 공백을 넣지 않는 것이 일반적입니다.
예를 들면 다음과 같습니다:
你会用Office吗?
Office 스위트를 사용할 줄 아시나요?
일본어도 비슷한 상황입니다.
革新に満ちたAppleの世界へようこそ。(Apple Japan 공식 사이트에서 인용)
혁신으로 가득한 Apple의 세계로 오신 것을 환영합니다.
이 컴포넌트를 이 두 언어에 맞게 수정하는 것이 상당한 작업이 될 수 있다는 것을 잘 알고 있습니다. 알파벳을 사용하는 언어에서 의도치 않은 링크화가 발생할 수 있기 때문입니다. 그래서 단순히 작은 불완전함의 존재를 지적해 드리는 것입니다. 이 멋진 컴포넌트를 만들어 주신 아이디어에 다시 한번 감사드립니다. ![]()
이것은 아주 잘 작동합니다. 과거의 링크에도 소급 적용할 수 있나요, 아니면 모든 링크를 수동으로 검색해서 변경해야 하나요?
해당 게시물들을 다시 베이킹(rebake)할 수 있어야 합니다. 렌치 아이콘을 클릭하여 HTML을 다시 빌드할 수 있습니다. 이렇게 하면 작동하는지 확인한 후, rake 태스크를 사용하여 일치하는 게시물들을 다시 베이킹하는 방법을 검색할 수 있습니다.
실제로 이 테마는 게시글이 브라우저에 로드될 때 동적으로 링크를 생성하므로 별도로 할 필요가 없습니다. ![]()
아, 정말 멋지네요. 몰랐는데, 그럴 수 있겠네요.
저희 FOSS 계보학 소프트웨어 용어집은 게시물(Posting)이나 링크화(Linkifying)로 처리하기에는 너무 방대했습니다.
각 용어집 항목을 단순히 링크화했다면, 모든 게시물이 파란색 링크의 바다에 잠겨버렸을 것입니다. 사용자들은 링크를 클릭하는 것을 그만두었을 가능성이 높습니다. 또한 우리는 용어집에 대한 감사 추적(audit trail)이 필요했습니다.
그래서 저는 MediaWiki 기반 위키의 해당 문서로 "Gramps Glossary"를 링크화했습니다. 그리고 지금은 "( Gramps Glossary에서 [용어] 참고)"와 같은 주석(annotation)을 사용하고 있습니다.
(저희 소프트웨어에 특화된 것이 아니라 계보학이라는 주제에 일반적인 용어를 위한 두 번째 Genealogy Glossary도 있습니다.)
파이프를 허용하도록 어떤 조치가 취해졌나요?
현재는 다음을 우회 방법으로 사용하고 있습니다:

또한, 제외 클래스의 대대손손(그랜드-그랜드-[…]자손) 안에 있는 월드가 링크화(linkify)되지 않도록 하는 방법이 있을까요?
저는 문서화(Documentation) 카테고리가 있는 포럼을 구축 중인데, 이 카테고리 안의 단어는 링크화되면 중복이 되므로 원하지 않습니다. 다른 카테고리의 단어들은 링크화되어 이 문서화 카테고리의 토픽으로 링크되도록 할 계획입니다.
게다가 링크화된 단어는 새 창에서 열립니다.
그래서 이렇게 시도해 보았지만 작동하지 않았습니다:

제가 겪고 있는 문제의 예시입니다. 이것은 문서화 토픽 내부 텍스트의 일부입니다.
22° halo를 클릭하면… 같은 페이지의 같은 위치로 링크되는 페이지가 열립니다.
제목 안의 단어는 제외할 수 있습니다. 특히 제목에는 목차가 포함되어 있기 때문이죠. 하지만 그 후속 단락들은 특정 클래스가 없습니다. 그냥 일반적인 단락입니다.
아마 제외 클래스 설정이 CSS 선택자를 받을 수 있도록 하면 어떨까요?
예를 들어, d-toc-cooked > * 같은 것요.
수정: 제 단어가 제외 클래스의 직접 자식(direct child)인데 왜 이것이 작동하지 않는지 이해가 가지 않습니다:
![]()
"22° Halo"는 여전히 링크화되어 있습니다:
<h3 id="toc-h3-22-halo" data-d-toc="toc-h3-22-halo" class="d-toc-post-heading">
<a name="h-22-halo-7" class="anchor" href="#h-22-halo-7"></a>
<a href="https://discourse.canapin.com/t/ice-halos-information-and-list/28#h-22-halo-7" rel="nofollow" target="_blank" class="linkify-word no-track-link">22° Halo</a>
</h3>
이는 목차 HTML 코드가 “링크화(linkification)” 이후에 생성될 수 있기 때문일까요?
네, 아마도 여기서는 그 문제가 맞을 겁니다. 이 둘 모두 JavaScript 컴포넌트이므로 레이스 컨디션(race condition)이 발생하며, 결과가 어느 쪽이 먼저 실행되는지에 따라 달라집니다.
HTML 허용 목록(allowlist)에 클래스를 추가하여 해당 문제를 우회했습니다.
다만, 버튼에서 **제외된 속성(excluded attributes)**을 사용할 수 있다면, Discourse에서 기본적으로 허용되는 내장 data-(anything) HTML 속성을 활용하여 링크 자동 생성(linkify)을 방지하는 등 더 유연한 처리가 가능할 것입니다.
예시:
<span data-nolinkify> text </span> → text
이 기능을 테마 컴포넌트에 추가할 수 있게 되면, 푸시 요청(push request)이 받아들여질까요?
불행히도 이 방식은 이러한 문자(특히 링크의 약어(예: ID.1 또는 id2.5)에 유용한 .)가 명시적으로 포함된 단어의 링크 생성을 방해합니다.
이 문제는 코어에서 해결하는 것이 가장 좋겠지만, 그 때까지는 위의 문제를 수정하는 PR을 공유합니다:
https://github.com/discourse/discourse-linkify-words/pull/21
샘플 정규식 규칙 (id1.1부터 id10.100까지 매칭하며, id m.n, IDm.n, ID m.n 변형 포함)
/(ID¦id)\s?(([1-9]¦10)\.([1-9]¦[1-9][0-9]¦100))/, https://example.com/id$2

