Documentation update
This commit is contained in:
parent
7a977ace5c
commit
18dca7aee1
88 changed files with 21329 additions and 331 deletions
251
docs/assets/js/api-list.js
Normal file
251
docs/assets/js/api-list.js
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
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'
|
||||
]});
|
||||
Loading…
Add table
Add a link
Reference in a new issue