|
59 | 59 |
|
60 | 60 | <script> |
61 | 61 | import { resolvePage } from '../util' |
62 | | -import isString from 'lodash/isString' |
63 | | -import isNil from 'lodash/isNil' |
64 | 62 |
|
65 | 63 | export default { |
66 | 64 | name: 'PageNav', |
@@ -103,43 +101,44 @@ function resolvePageLink ( |
103 | 101 | linkType, |
104 | 102 | { $themeConfig, $page, $route, $site, sidebarItems } |
105 | 103 | ) { |
106 | | - const { resolveLink, getThemeLinkConfig, getPageLinkConfig } = linkType |
| 104 | + const { resolveLink, getThemeLinkConfig, getPageLinkConfig } = linkType; |
107 | 105 |
|
108 | | - // Get link config from theme |
109 | | - const themeLinkConfig = getThemeLinkConfig($themeConfig) |
| 106 | + const link = getPageLinkConfig($page) ?? getThemeLinkConfig($themeConfig); |
110 | 107 |
|
111 | | - // Get link config from current page |
112 | | - const pageLinkConfig = getPageLinkConfig($page) |
| 108 | + if (link === false) return null; |
| 109 | + if (typeof link === "string") return resolvePage($site.pages, link, $route.path); |
113 | 110 |
|
114 | | - // Page link config will overwrite global theme link config if defined |
115 | | - const link = isNil(pageLinkConfig) ? themeLinkConfig : pageLinkConfig |
116 | | -
|
117 | | - if (link === false) { |
118 | | - return |
119 | | - } else if (isString(link)) { |
120 | | - return resolvePage($site.pages, link, $route.path) |
121 | | - } else { |
122 | | - return resolveLink($page, sidebarItems) |
123 | | - } |
| 111 | + return resolveLink($page, sidebarItems); |
124 | 112 | } |
125 | 113 |
|
126 | | -function find (page, items, offset) { |
127 | | - const res = [] |
128 | | - flatten(items, res) |
| 114 | +function find(page, items, offset) { |
| 115 | + const res = []; |
| 116 | + flatten(items, res); |
| 117 | +
|
129 | 118 | for (let i = 0; i < res.length; i++) { |
130 | | - const cur = res[i] |
131 | | - if (cur.type === 'page' && cur.path === decodeURIComponent(page.path)) { |
132 | | - return res[i + offset] |
| 119 | + const cur = res[i]; |
| 120 | +
|
| 121 | + const isPageMatch = |
| 122 | + cur.type === 'page' && cur.path === decodeURIComponent(page.path); |
| 123 | +
|
| 124 | + const isGroupMatch = |
| 125 | + cur.type === 'group' && cur.title === decodeURIComponent(page.title); |
| 126 | +
|
| 127 | + if (isPageMatch || isGroupMatch) { |
| 128 | + return res[i + offset] || null; |
133 | 129 | } |
134 | 130 | } |
| 131 | +
|
| 132 | + return null; |
135 | 133 | } |
136 | 134 |
|
137 | 135 | function flatten (items, res) { |
138 | | - for (let i = 0, l = items.length; i < l; i++) { |
139 | | - if (items[i].type === 'group') { |
140 | | - flatten(items[i].children || [], res) |
141 | | - } else { |
142 | | - res.push(items[i]) |
| 136 | + for (let i = 0; i < items.length; i++) { |
| 137 | + const currentItem = items[i]; |
| 138 | + res.push(currentItem); |
| 139 | +
|
| 140 | + if (currentItem.type === 'group') { |
| 141 | + flatten(currentItem.children || [], res); |
143 | 142 | } |
144 | 143 | } |
145 | 144 | } |
|
0 commit comments