);
}
// Need to regroup the modules by our own categorisation
@@ -200,8 +208,8 @@ export default class AvailableModulesMenu extends TranslatedComponent {
}
}
}
-
- return { list, currentGroup };
+ let trackingFocus = false;
+ return { list, currentGroup, trackingFocus};
}
/**
@@ -215,18 +223,18 @@ export default class AvailableModulesMenu extends TranslatedComponent {
* @param {Array} modules Available modules
* @return {React.Component} Available Module Group contents
*/
- _buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules) {
+ _buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules, firstSlotId, lastSlotId) {
let prevClass = null, prevRating = null, prevName;
let elems = [];
-
+
const sortedModules = modules.sort(this._moduleOrder);
-
+
+
// Calculate the number of items per class. Used so we don't have long lists with only a few items in each row
const tmp = sortedModules.map((v, i) => v['class']).reduce((count, cls) => { count[cls] = ++count[cls] || 1; return count; }, {});
const itemsPerClass = Math.max.apply(null, Object.keys(tmp).map(key => tmp[key]));
let itemsOnThisRow = 0;
-
for (let i = 0; i < sortedModules.length; i++) {
let m = sortedModules[i];
let mount = null;
@@ -248,8 +256,23 @@ export default class AvailableModulesMenu extends TranslatedComponent {
let eventHandlers;
if (disabled || active) {
- eventHandlers = {};
+ /**
+ * ToDo: possibly create an "activeSlotId" variable to allow
+ * focus to be set on active slot when slot menu is opened
+ */
+ eventHandlers = {
+ onKeyDown: this._keyDown.bind(this, null),
+ onKeyUp: this._keyUp.bind(this, null)
+
+ };
} else {
+ /**
+ * Get the ids of the first and last
elements in the
that are focusable (i.e. are not active or disabled)
+ * Will be used to keep focus inside the
on Tab and Shift-Tab while it is visible
+ */
+ if (this.firstSlotId == null) this.firstSlotId = sortedModules[i].id;
+ this.lastSlotId = sortedModules[i].id;
+
let showDiff = this._showDiff.bind(this, mountedModule, m);
let select = onSelect.bind(null, m);
@@ -258,7 +281,9 @@ export default class AvailableModulesMenu extends TranslatedComponent {
onTouchStart: this._touchStart.bind(this, showDiff),
onTouchEnd: this._touchEnd.bind(this, select),
onMouseLeave: this._hideDiff,
- onClick: select
+ onClick: select,
+ onKeyDown: this._keyDown.bind(this, select),
+ onKeyUp: this._keyUp.bind(this, select)
};
}
@@ -275,20 +300,20 @@ export default class AvailableModulesMenu extends TranslatedComponent {
elems.push( );
itemsOnThisRow = 0;
}
-
- elems.push(
-