Skip to content

Commit 6287b80

Browse files
committed
feat(tpl): focus child item when goes to parent directory
1 parent 4811b94 commit 6287b80

File tree

1 file changed

+58
-6
lines changed

1 file changed

+58
-6
lines changed

src/tpl/defaultTheme/frontend/index.js

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44

55
var classNone = 'none';
66
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+
714
var leavingEvent = typeof window.onpagehide !== strUndef ? 'pagehide' : 'beforeunload';
815

916
var Enter = 'Enter';
@@ -100,12 +107,6 @@
100107

101108
var clear = filter.querySelector('button');
102109

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-
109110
// event handler
110111
var timeoutId;
111112
var lastFilterText = '';
@@ -228,6 +229,56 @@
228229
}
229230
}
230231

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+
231282
function enableKeyboardNavigate() {
232283
if (
233284
!document.querySelector ||
@@ -1265,6 +1316,7 @@
12651316
}
12661317

12671318
enableFilter();
1319+
focusChildOnNavUp();
12681320
enableKeyboardNavigate();
12691321
enhanceUpload();
12701322
enableNonRefreshDelete();

0 commit comments

Comments
 (0)