1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace dokuwiki\plugin\prosemirror\parser; |
4
|
|
|
|
5
|
|
|
use dokuwiki\File\PageResolver; |
6
|
|
|
|
7
|
|
|
class InternalLinkNode extends LinkNode |
8
|
|
|
{ |
9
|
|
|
public function toSyntax() |
10
|
|
|
{ |
11
|
|
|
return $this->getDefaultLinkSyntax($this->attrs['data-inner']); |
12
|
|
|
} |
13
|
|
|
|
14
|
|
|
public static function render(\renderer_plugin_prosemirror $renderer, $originalId, $name) |
15
|
|
|
{ |
16
|
|
|
global $ID; |
17
|
|
|
$additionalAttributes = []; |
18
|
|
|
|
19
|
|
|
$resolvedAttributes = self::resolveLink($originalId, $ID); |
20
|
|
|
$additionalAttributes['data-resolvedTitle'] = $resolvedAttributes['id']; |
21
|
|
|
$additionalAttributes['data-resolvedID'] = $resolvedAttributes['id']; |
22
|
|
|
if (!is_array($name)) { |
23
|
|
|
$additionalAttributes['data-resolvedName'] = $name ?: $resolvedAttributes['heading']; |
24
|
|
|
if ($resolvedAttributes['exists']) { |
25
|
|
|
$class = 'wikilink1'; |
26
|
|
|
} else { |
27
|
|
|
$class = 'wikilink2'; |
28
|
|
|
} |
29
|
|
|
$additionalAttributes['data-resolvedClass'] = $class; |
30
|
|
|
} |
31
|
|
|
|
32
|
|
|
self::renderToJSON( |
33
|
|
|
$renderer, |
34
|
|
|
'internallink', |
35
|
|
|
$originalId, |
36
|
|
|
$name, |
37
|
|
|
$additionalAttributes |
38
|
|
|
); |
39
|
|
|
} |
40
|
|
|
|
41
|
|
|
public static function resolveLink($inner, $curId) |
42
|
|
|
{ |
43
|
|
|
$params = ''; |
44
|
|
|
$parts = explode('?', $inner, 2); |
45
|
|
|
$resolvedPageId = $parts[0]; |
46
|
|
|
if (count($parts) === 2) { |
47
|
|
|
$params = $parts[1]; |
48
|
|
|
} |
49
|
|
|
$xhtml_renderer = p_get_renderer('xhtml'); |
50
|
|
|
$default = $xhtml_renderer->_simpleTitle($parts[0]); |
51
|
|
|
$resolver = new PageResolver($curId); |
52
|
|
|
$resolvedPageId = $resolver->resolveId($resolvedPageId); |
53
|
|
|
|
54
|
|
|
if (useHeading('content')) { |
55
|
|
|
$heading = p_get_first_heading($resolvedPageId); |
56
|
|
|
} |
57
|
|
|
if (empty($heading)) { |
58
|
|
|
$heading = $default; |
59
|
|
|
} |
60
|
|
|
|
61
|
|
|
$url = wl($resolvedPageId, $params); |
62
|
|
|
|
63
|
|
|
return [ |
64
|
|
|
'id' => $resolvedPageId, |
65
|
|
|
'exists' => page_exists($resolvedPageId), |
66
|
|
|
'heading' => $heading, |
67
|
|
|
'url' => $url, |
68
|
|
|
]; |
69
|
|
|
} |
70
|
|
|
|
71
|
|
|
protected static function getLinkTitle($title, $default, $id) |
72
|
|
|
{ |
73
|
|
|
if (null === $title || trim($title) == '') { |
74
|
|
|
if (useHeading('content') && $id) { |
75
|
|
|
$heading = p_get_first_heading($id); |
76
|
|
|
if (!blank($heading)) { |
77
|
|
|
return hsc($heading); |
78
|
|
|
} |
79
|
|
|
} |
80
|
|
|
return hsc($default); |
81
|
|
|
} |
82
|
|
|
return hsc($title); |
83
|
|
|
} |
84
|
|
|
} |
85
|
|
|
|