Skip to content

Commit eba9fb5

Browse files
committed
Wiki parser. Fix links with anchors
1 parent 2e7ff95 commit eba9fb5

File tree

8 files changed

+38
-10
lines changed

8 files changed

+38
-10
lines changed

src/outwiker/data/help/help_ru/Page types/Wiki page/Links/__content.html

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,12 @@ <h2 class="ow-wiki">Ссылки и якори</h2>
145145
</tr>
146146
<tr>
147147
<td><span class="code">[[page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor]]</span></td>
148-
<td><a class="ow-wiki ow-link-page ow-link-page-error" href="page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor">page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor</a></td>
148+
<td><a class="ow-wiki ow-link-page" href="page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor">О программе и контакты</a></td>
149+
<td>Ссылка на якорь с именем anchor на другой странице</td>
150+
</tr>
151+
<tr>
152+
<td><span class="code">page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor</span></td>
153+
<td><a class="ow-wiki ow-link-page" href="page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor">О программе и контакты</a></td>
149154
<td>Ссылка на якорь с именем anchor на другой странице</td>
150155
</tr>
151156
<tr>

src/outwiker/data/help/help_ru/Page types/Wiki page/Links/__page.opt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ expand = False
99
type = wiki
1010
order = 3
1111
tags = fixme,wiki
12-
datetime = 2026-03-17 16:14:53.977969
12+
datetime = 2026-03-17 17:00:30.003583
1313
cursorposition = 2294
1414
uid = wiki-links
1515
alias = Ссылки

src/outwiker/data/help/help_ru/Page types/Wiki page/Links/__page.text

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
||%code%[=[[#anchor | Ссылка на якорь]]=]%%||[[#anchor | Ссылка на якорь]]||Ссылка на якорь с именем anchor на открытой странице||
3131
||%code%[=[[Ссылка на якорь -> #anchor]]=]%%||[[#anchor | Ссылка на якорь]]||Ссылка на якорь с именем anchor на открытой странице||
3232
||%code%[=[[page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor]]=]%%||[[page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor]]||Ссылка на якорь с именем anchor на другой странице||
33+
||%code%[=page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor=]%%||page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor||Ссылка на якорь с именем anchor на другой странице||
3334
||%code%[=[[page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor | Ссылка на якорь на другой странице]]=]%%||[[page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor | Ссылка на якорь на другой странице]]||Ссылка на якорь с именем anchor на другой странице с комментарием||
3435
||%code%[=[[Ссылка на якорь на другой странице -> page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor]]=]%%||[[Ссылка на якорь на другой странице -> page://__8fb202a4-8a7a-40ad-8326-e744ffb102f5/#anchor]]||Ссылка на якорь с именем anchor на другой странице с комментарием||
3536

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
[Bookmarks]
2-
bookmark_1 = Пользователям/Горячие клавиши
3-
bookmark_0 = Пользователям/Типы страниц/Wiki-страница
4-
51
[Tree]
62
expand = True
73

@@ -11,6 +7,10 @@ lastviewedpage = О программе и контакты
117
[General]
128
selectedtab = 0
139

10+
[Bookmarks]
11+
bookmark_0 = Пользователям/Типы страниц/Wiki-страница
12+
bookmark_1 = Пользователям/Горячие клавиши
13+
1414
[Tabs]
1515
tab_0 = Page types/Wiki page/Links
1616

src/outwiker/pages/wiki/parser/tokenlink.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,12 @@ def _convertEmptyLink(self, text):
162162
comment = text.strip()
163163
return self._generateHtmlTag(url, html.escape(comment, False))
164164

165-
def _generateLinkToPage(self, page_uid: str) -> str:
165+
def _generateLinkToPage(self, page_uid_src: str) -> str:
166+
params_pos = page_uid_src.rfind("/")
167+
page_uid = page_uid_src[:params_pos] if params_pos != -1 else page_uid_src
168+
166169
page = self.parser.application.wikiroot.getPageByUid(page_uid)
167-
url = self.page_protocol + page_uid
170+
url = self.page_protocol + page_uid_src
168171
if page is not None:
169172
return create_link_to_page(url, page.display_title)
170173
else:

src/outwiker/pages/wiki/parser/tokenurl.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ def __getUrlTag(self, url, comment):
4747

4848
return f'<a class="{css.CSS_WIKI}" href="{url}">{comment}</a>'
4949

50-
def _generateLinkToPage(self, page_uid: str) -> str:
50+
def _generateLinkToPage(self, page_uid_src: str) -> str:
51+
params_pos = page_uid_src.rfind("/")
52+
page_uid = page_uid_src[:params_pos] if params_pos != -1 else page_uid_src
53+
5154
page = self.parser.application.wikiroot.getPageByUid(page_uid)
52-
url = self.page_protocol + page_uid
55+
url = self.page_protocol + page_uid_src
5356
if page is not None:
5457
return create_link_to_page(url, page.display_title)
5558
else:

src/outwiker/tests/wikiparser/test_parserlink.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,14 @@ def testPageProtocolLink(self):
11481148
result = self.parser.toHtml(text)
11491149
self.assertEqual(result, expected)
11501150

1151+
def testPageProtocolLinkAnchor(self):
1152+
uid = self.testPage.getUid()
1153+
text = f"бла-бла-бла [[page://{uid}/#anchor]] бла-бла-бла"
1154+
expected = f'бла-бла-бла <a class="ow-wiki ow-link-page" href="page://{uid}/#anchor">{self.testPage.display_title}</a> бла-бла-бла'
1155+
1156+
result = self.parser.toHtml(text)
1157+
self.assertEqual(result, expected)
1158+
11511159
def testPageProtocolLinkInvalidUid(self):
11521160
uid = "invalid_uid"
11531161
text = f"бла-бла-бла [[page://{uid}]] бла-бла-бла"

src/outwiker/tests/wikiparser/test_parserurl.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,14 @@ def testPageProtocolSlash(self):
327327
result = self.parser.toHtml(text)
328328
self.assertEqual(result, expected)
329329

330+
def testPageProtocolAnchor(self):
331+
uid = self.testPage.getUid()
332+
text = f"бла-бла-бла page://{uid}/#anchor бла-бла-бла"
333+
expected = f'бла-бла-бла <a class="ow-wiki ow-link-page" href="page://{uid}/#anchor">{self.testPage.display_title}</a> бла-бла-бла'
334+
335+
result = self.parser.toHtml(text)
336+
self.assertEqual(result, expected)
337+
330338
def testPageProtocolInvalidUid(self):
331339
uid = "invalid_uid"
332340
text = f"бла-бла-бла page://{uid} бла-бла-бла"

0 commit comments

Comments
 (0)