Introduces abstract superclass of all keyboard navigatable objects.
This commit is contained in:
parent
85c1801fba
commit
70da9faa90
|
@ -205,11 +205,55 @@
|
||||||
KEY = MathJax.Extension.MathEvents.Event.KEY;
|
KEY = MathJax.Extension.MathEvents.Event.KEY;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************/
|
||||||
|
/*
|
||||||
|
* Abstract class of all keyboard navigatable objects.
|
||||||
|
*/
|
||||||
|
var NAV = MathJax.Object.Subclass({
|
||||||
|
/*
|
||||||
|
* Moving in the list of items.
|
||||||
|
*/
|
||||||
|
Keydown: function(event, menu) {
|
||||||
|
switch (event.keyCode) {
|
||||||
|
case KEY.ESCAPE:
|
||||||
|
this.Remove(event, menu);
|
||||||
|
break;
|
||||||
|
case KEY.RIGHT:
|
||||||
|
this.Right(event, menu);
|
||||||
|
break;
|
||||||
|
case KEY.LEFT:
|
||||||
|
this.Left(event, menu);
|
||||||
|
break;
|
||||||
|
case KEY.UP:
|
||||||
|
this.Up(event, menu);
|
||||||
|
break;
|
||||||
|
case KEY.DOWN:
|
||||||
|
this.Down(event, menu);
|
||||||
|
break;
|
||||||
|
case KEY.RETURN:
|
||||||
|
case KEY.SPACE:
|
||||||
|
this.Space(event, menu);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return FALSE(event);
|
||||||
|
},
|
||||||
|
Escape: function(event, menu) { },
|
||||||
|
Right: function(event, menu) { },
|
||||||
|
Left: function(event, menu) { },
|
||||||
|
Up: function(event, menu) { },
|
||||||
|
Down: function(event, menu) { },
|
||||||
|
Space: function(event, menu) { }
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
/*
|
/*
|
||||||
* The main menu class
|
* The main menu class
|
||||||
*/
|
*/
|
||||||
var MENU = MathJax.Menu = MathJax.Object.Subclass({
|
var MENU = MathJax.Menu = NAV.Subclass({
|
||||||
version: VERSION,
|
version: VERSION,
|
||||||
items: [],
|
items: [],
|
||||||
posted: false,
|
posted: false,
|
||||||
|
@ -342,38 +386,6 @@
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
|
||||||
* Moving in the list of items.
|
|
||||||
*/
|
|
||||||
Keydown: function(event, menu) {
|
|
||||||
if (!this.posted) {
|
|
||||||
return FALSE(event);
|
|
||||||
}
|
|
||||||
switch (event.keyCode) {
|
|
||||||
case KEY.ESCAPE:
|
|
||||||
this.Remove(event, menu);
|
|
||||||
break;
|
|
||||||
case KEY.RIGHT:
|
|
||||||
this.Right(event, menu);
|
|
||||||
break;
|
|
||||||
case KEY.LEFT:
|
|
||||||
this.Left(event, menu);
|
|
||||||
break;
|
|
||||||
case KEY.UP:
|
|
||||||
this.Up(event, menu);
|
|
||||||
break;
|
|
||||||
case KEY.DOWN:
|
|
||||||
this.Down(event, menu);
|
|
||||||
break;
|
|
||||||
case KEY.RETURN:
|
|
||||||
case KEY.SPACE:
|
|
||||||
this.Space(event, menu);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return FALSE(event);
|
|
||||||
},
|
|
||||||
Right: function(event, menu) {
|
Right: function(event, menu) {
|
||||||
MENU.Right(event, menu);
|
MENU.Right(event, menu);
|
||||||
},
|
},
|
||||||
|
@ -385,10 +397,10 @@
|
||||||
item.Activate(item.GetNode());
|
item.Activate(item.GetNode());
|
||||||
},
|
},
|
||||||
Down: function(event, menu) {
|
Down: function(event, menu) {
|
||||||
|
console.log('In menu');
|
||||||
var item = this.items[0];
|
var item = this.items[0];
|
||||||
item.Activate(item.GetNode());
|
item.Activate(item.GetNode());
|
||||||
},
|
}
|
||||||
Space: function(event, menu) { }
|
|
||||||
},{
|
},{
|
||||||
|
|
||||||
config: CONFIG,
|
config: CONFIG,
|
||||||
|
@ -410,6 +422,7 @@
|
||||||
return MENU.Event(event,this.menu||this.parentNode,(this.menu?"Touchend":"Remove"));
|
return MENU.Event(event,this.menu||this.parentNode,(this.menu?"Touchend":"Remove"));
|
||||||
},
|
},
|
||||||
Event: function (event,menu,type,force) {
|
Event: function (event,menu,type,force) {
|
||||||
|
console.log(type);
|
||||||
if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
|
if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
|
||||||
if (MENU.skipUp) {
|
if (MENU.skipUp) {
|
||||||
if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
|
if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
|
||||||
|
@ -418,6 +431,8 @@
|
||||||
}
|
}
|
||||||
if (!event) {event = window.event}
|
if (!event) {event = window.event}
|
||||||
var item = menu.menuItem;
|
var item = menu.menuItem;
|
||||||
|
console.log(item);
|
||||||
|
console.log(item[type]);
|
||||||
if (item && item[type]) {return item[type](event,menu)}
|
if (item && item[type]) {return item[type](event,menu)}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -460,7 +475,6 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
/*
|
/*
|
||||||
* Keyboard navigation of menu.
|
* Keyboard navigation of menu.
|
||||||
|
@ -537,7 +551,7 @@
|
||||||
MENU.Move(event, menu, function(x) {return x - 1;});
|
MENU.Move(event, menu, function(x) {return x - 1;});
|
||||||
},
|
},
|
||||||
|
|
||||||
//TODO: Helper. To move
|
//TODO: Move to utility class.
|
||||||
// Computes a mod n.
|
// Computes a mod n.
|
||||||
Mod: function(a, n) {
|
Mod: function(a, n) {
|
||||||
return ((a % n) + n) % n;
|
return ((a % n) + n) % n;
|
||||||
|
@ -548,11 +562,13 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
MathJax.Menu.NAV = NAV;
|
||||||
|
|
||||||
/*************************************************************/
|
/*************************************************************/
|
||||||
/*
|
/*
|
||||||
* Abstract class of menu items.
|
* Abstract class of menu items.
|
||||||
*/
|
*/
|
||||||
var ITEM = MENU.ITEM = MathJax.Object.Subclass({
|
var ITEM = MENU.ITEM = NAV.Subclass({
|
||||||
|
|
||||||
name: "", // The menu item's label as [id,label] pair.
|
name: "", // The menu item's label as [id,label] pair.
|
||||||
node: null, // The HTML node of the item.
|
node: null, // The HTML node of the item.
|
||||||
|
@ -676,32 +692,6 @@
|
||||||
}
|
}
|
||||||
return def;
|
return def;
|
||||||
},
|
},
|
||||||
Keydown: function(event, item) {
|
|
||||||
switch (event.keyCode) {
|
|
||||||
case KEY.ESCAPE:
|
|
||||||
this.Remove(event, item);
|
|
||||||
break;
|
|
||||||
case KEY.UP:
|
|
||||||
this.Up(event, item);
|
|
||||||
break;
|
|
||||||
case KEY.DOWN:
|
|
||||||
this.Down(event, item);
|
|
||||||
break;
|
|
||||||
case KEY.RIGHT:
|
|
||||||
this.Right(event, item);
|
|
||||||
break;
|
|
||||||
case KEY.LEFT:
|
|
||||||
this.Left(event, item);
|
|
||||||
break;
|
|
||||||
case KEY.SPACE:
|
|
||||||
case KEY.RETURN:
|
|
||||||
this.Space(event, item);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return FALSE(event);
|
|
||||||
},
|
|
||||||
Move: function(event, item, move) {
|
Move: function(event, item, move) {
|
||||||
var items = this.menu.menuItem.items;
|
var items = this.menu.menuItem.items;
|
||||||
var len = items.length;
|
var len = items.length;
|
||||||
|
@ -720,6 +710,7 @@
|
||||||
this.Move(event, item, function(x) { return x - 1; });
|
this.Move(event, item, function(x) { return x - 1; });
|
||||||
},
|
},
|
||||||
Down: function(event, item) {
|
Down: function(event, item) {
|
||||||
|
console.log('?????');
|
||||||
this.Move(event, item, function(x) { return x + 1; });
|
this.Move(event, item, function(x) { return x + 1; });
|
||||||
},
|
},
|
||||||
Right: function(event, item) {
|
Right: function(event, item) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user