
Fixed issue where alpha not being set correctly in canvas spriteBatch Fixed issue where previous stage events did not get removed correctly
251 lines
6.4 KiB
JavaScript
251 lines
6.4 KiB
JavaScript
YUI.add('api-list', function (Y) {
|
|
|
|
var Lang = Y.Lang,
|
|
YArray = Y.Array,
|
|
|
|
APIList = Y.namespace('APIList'),
|
|
|
|
classesNode = Y.one('#api-classes'),
|
|
inputNode = Y.one('#api-filter'),
|
|
modulesNode = Y.one('#api-modules'),
|
|
tabviewNode = Y.one('#api-tabview'),
|
|
|
|
tabs = APIList.tabs = {},
|
|
|
|
filter = APIList.filter = new Y.APIFilter({
|
|
inputNode : inputNode,
|
|
maxResults: 1000,
|
|
|
|
on: {
|
|
results: onFilterResults
|
|
}
|
|
}),
|
|
|
|
search = APIList.search = new Y.APISearch({
|
|
inputNode : inputNode,
|
|
maxResults: 100,
|
|
|
|
on: {
|
|
clear : onSearchClear,
|
|
results: onSearchResults
|
|
}
|
|
}),
|
|
|
|
tabview = APIList.tabview = new Y.TabView({
|
|
srcNode : tabviewNode,
|
|
panelNode: '#api-tabview-panel',
|
|
render : true,
|
|
|
|
on: {
|
|
selectionChange: onTabSelectionChange
|
|
}
|
|
}),
|
|
|
|
focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, {
|
|
circular : true,
|
|
descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a',
|
|
keys : {next: 'down:40', previous: 'down:38'}
|
|
}).focusManager,
|
|
|
|
LIST_ITEM_TEMPLATE =
|
|
'<li class="api-list-item {typeSingular}">' +
|
|
'<a href="{rootPath}{typePlural}/{name}.html">{displayName}</a>' +
|
|
'</li>';
|
|
|
|
// -- Init ---------------------------------------------------------------------
|
|
|
|
// Duckpunch FocusManager's key event handling to prevent it from handling key
|
|
// events when a modifier is pressed.
|
|
Y.before(function (e, activeDescendant) {
|
|
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
|
|
return new Y.Do.Prevent();
|
|
}
|
|
}, focusManager, '_focusPrevious', focusManager);
|
|
|
|
Y.before(function (e, activeDescendant) {
|
|
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
|
|
return new Y.Do.Prevent();
|
|
}
|
|
}, focusManager, '_focusNext', focusManager);
|
|
|
|
// Create a mapping of tabs in the tabview so we can refer to them easily later.
|
|
tabview.each(function (tab, index) {
|
|
var name = tab.get('label').toLowerCase();
|
|
|
|
tabs[name] = {
|
|
index: index,
|
|
name : name,
|
|
tab : tab
|
|
};
|
|
});
|
|
|
|
// Switch tabs on Ctrl/Cmd-Left/Right arrows.
|
|
tabviewNode.on('key', onTabSwitchKey, 'down:37,39');
|
|
|
|
// Focus the filter input when the `/` key is pressed.
|
|
Y.one(Y.config.doc).on('key', onSearchKey, 'down:83');
|
|
|
|
// Keep the Focus Manager up to date.
|
|
inputNode.on('focus', function () {
|
|
focusManager.set('activeDescendant', inputNode);
|
|
});
|
|
|
|
// Update all tabview links to resolved URLs.
|
|
tabview.get('panelNode').all('a').each(function (link) {
|
|
link.setAttribute('href', link.get('href'));
|
|
});
|
|
|
|
// -- Private Functions --------------------------------------------------------
|
|
function getFilterResultNode() {
|
|
return filter.get('queryType') === 'classes' ? classesNode : modulesNode;
|
|
}
|
|
|
|
// -- Event Handlers -----------------------------------------------------------
|
|
function onFilterResults(e) {
|
|
var frag = Y.one(Y.config.doc.createDocumentFragment()),
|
|
resultNode = getFilterResultNode(),
|
|
typePlural = filter.get('queryType'),
|
|
typeSingular = typePlural === 'classes' ? 'class' : 'module';
|
|
|
|
if (e.results.length) {
|
|
YArray.each(e.results, function (result) {
|
|
frag.append(Lang.sub(LIST_ITEM_TEMPLATE, {
|
|
rootPath : APIList.rootPath,
|
|
displayName : filter.getDisplayName(result.highlighted),
|
|
name : result.text,
|
|
typePlural : typePlural,
|
|
typeSingular: typeSingular
|
|
}));
|
|
});
|
|
} else {
|
|
frag.append(
|
|
'<li class="message">' +
|
|
'No ' + typePlural + ' found.' +
|
|
'</li>'
|
|
);
|
|
}
|
|
|
|
resultNode.empty(true);
|
|
resultNode.append(frag);
|
|
|
|
focusManager.refresh();
|
|
}
|
|
|
|
function onSearchClear(e) {
|
|
|
|
focusManager.refresh();
|
|
}
|
|
|
|
function onSearchKey(e) {
|
|
var target = e.target;
|
|
|
|
if (target.test('input,select,textarea')
|
|
|| target.get('isContentEditable')) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
|
|
inputNode.focus();
|
|
focusManager.refresh();
|
|
}
|
|
|
|
function onSearchResults(e) {
|
|
var frag = Y.one(Y.config.doc.createDocumentFragment());
|
|
|
|
if (e.results.length) {
|
|
YArray.each(e.results, function (result) {
|
|
frag.append(result.display);
|
|
});
|
|
} else {
|
|
frag.append(
|
|
'<li class="message">' +
|
|
'No results found. Maybe you\'ll have better luck with a ' +
|
|
'different query?' +
|
|
'</li>'
|
|
);
|
|
}
|
|
|
|
|
|
focusManager.refresh();
|
|
}
|
|
|
|
function onTabSelectionChange(e) {
|
|
var tab = e.newVal,
|
|
name = tab.get('label').toLowerCase();
|
|
|
|
tabs.selected = {
|
|
index: tab.get('index'),
|
|
name : name,
|
|
tab : tab
|
|
};
|
|
|
|
switch (name) {
|
|
case 'classes': // fallthru
|
|
case 'modules':
|
|
filter.setAttrs({
|
|
minQueryLength: 0,
|
|
queryType : name
|
|
});
|
|
|
|
search.set('minQueryLength', -1);
|
|
|
|
// Only send a request if this isn't the initially-selected tab.
|
|
if (e.prevVal) {
|
|
filter.sendRequest(filter.get('value'));
|
|
}
|
|
break;
|
|
|
|
case 'everything':
|
|
filter.set('minQueryLength', -1);
|
|
search.set('minQueryLength', 1);
|
|
|
|
if (search.get('value')) {
|
|
search.sendRequest(search.get('value'));
|
|
} else {
|
|
inputNode.focus();
|
|
}
|
|
break;
|
|
|
|
default:
|
|
// WTF? We shouldn't be here!
|
|
filter.set('minQueryLength', -1);
|
|
search.set('minQueryLength', -1);
|
|
}
|
|
|
|
if (focusManager) {
|
|
setTimeout(function () {
|
|
focusManager.refresh();
|
|
}, 1);
|
|
}
|
|
}
|
|
|
|
function onTabSwitchKey(e) {
|
|
var currentTabIndex = tabs.selected.index;
|
|
|
|
if (!(e.ctrlKey || e.metaKey)) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
|
|
switch (e.keyCode) {
|
|
case 37: // left arrow
|
|
if (currentTabIndex > 0) {
|
|
tabview.selectChild(currentTabIndex - 1);
|
|
inputNode.focus();
|
|
}
|
|
break;
|
|
|
|
case 39: // right arrow
|
|
if (currentTabIndex < (Y.Object.size(tabs) - 2)) {
|
|
tabview.selectChild(currentTabIndex + 1);
|
|
inputNode.focus();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
}, '3.4.0', {requires: [
|
|
'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview'
|
|
]});
|