|
4 | 4 |
|
5 | 5 | var classNone = 'none';
|
6 | 6 | var classHeader = 'header';
|
| 7 | + |
| 8 | + var selectorNone = '.' + classNone; |
| 9 | + var selectorNotNone = ':not(' + selectorNone + ')'; |
| 10 | + var selectorItem = '.item-list > li:not(.' + classHeader + '):not(.parent)'; |
| 11 | + var selectorItemNone = selectorItem + selectorNone; |
| 12 | + var selectorItemNotNone = selectorItem + selectorNotNone; |
| 13 | + |
7 | 14 | var leavingEvent = typeof window.onpagehide !== strUndef ? 'pagehide' : 'beforeunload';
|
8 | 15 |
|
9 | 16 | var Enter = 'Enter';
|
|
100 | 107 |
|
101 | 108 | var clear = filter.querySelector('button');
|
102 | 109 |
|
103 |
| - var selectorNone = '.' + classNone; |
104 |
| - var selectorNotNone = ':not(' + selectorNone + ')'; |
105 |
| - var selectorItem = '.item-list > li:not(.' + classHeader + '):not(.parent)'; |
106 |
| - var selectorItemNone = selectorItem + selectorNone; |
107 |
| - var selectorItemNotNone = selectorItem + selectorNotNone; |
108 |
| - |
109 | 110 | // event handler
|
110 | 111 | var timeoutId;
|
111 | 112 | var lastFilterText = '';
|
|
228 | 229 | }
|
229 | 230 | }
|
230 | 231 |
|
| 232 | + function focusChildOnNavUp() { |
| 233 | + if (!document.querySelector) return; |
| 234 | + |
| 235 | + function extractCleanUrl(url) { |
| 236 | + var sepIndex = url.indexOf('?'); |
| 237 | + if (sepIndex < 0) sepIndex = url.indexOf('#'); |
| 238 | + if (sepIndex >= 0) { |
| 239 | + url = url.substring(0, sepIndex); |
| 240 | + } |
| 241 | + return url; |
| 242 | + } |
| 243 | + |
| 244 | + var prevUrl = document.referrer; |
| 245 | + if (!prevUrl) return; |
| 246 | + prevUrl = extractCleanUrl(prevUrl); |
| 247 | + |
| 248 | + var currUrl = extractCleanUrl(location.href); |
| 249 | + |
| 250 | + if (prevUrl.length <= currUrl.length) return; |
| 251 | + if (prevUrl.substring(0, currUrl.length) !== currUrl) return; |
| 252 | + var goesUp = prevUrl.substring(currUrl.length); |
| 253 | + if (currUrl[currUrl.length - 1] !== '/' && goesUp[0] !== '/') return; |
| 254 | + var matchInfo = /[^/]+/.exec(goesUp); |
| 255 | + if (!matchInfo) return; |
| 256 | + var prevChildName = matchInfo[0]; |
| 257 | + if (!prevChildName) return; |
| 258 | + prevChildName = decodeURIComponent(prevChildName); |
| 259 | + |
| 260 | + var items = document.body.querySelectorAll(selectorItem); |
| 261 | + items = Array.prototype.slice.call(items); |
| 262 | + var selectorName = '.field.name'; |
| 263 | + var selectorLink = 'a'; |
| 264 | + for (var i = 0, len = items.length; i < len; i++) { |
| 265 | + var item = items[i]; |
| 266 | + var elName = item.querySelector(selectorName); |
| 267 | + if (!elName) continue; |
| 268 | + var text = elName.textContent; |
| 269 | + if (text[text.length - 1] === '/') { |
| 270 | + text = text.substring(0, text.length - 1); |
| 271 | + } |
| 272 | + if (text !== prevChildName) continue; |
| 273 | + var elLink = item.querySelector(selectorLink); |
| 274 | + if (elLink) { |
| 275 | + elLink.focus(); |
| 276 | + elLink.scrollIntoView({block: 'center'}); |
| 277 | + } |
| 278 | + break; |
| 279 | + } |
| 280 | + } |
| 281 | + |
231 | 282 | function enableKeyboardNavigate() {
|
232 | 283 | if (
|
233 | 284 | !document.querySelector ||
|
|
1265 | 1316 | }
|
1266 | 1317 |
|
1267 | 1318 | enableFilter();
|
| 1319 | + focusChildOnNavUp(); |
1268 | 1320 | enableKeyboardNavigate();
|
1269 | 1321 | enhanceUpload();
|
1270 | 1322 | enableNonRefreshDelete();
|
|
0 commit comments