// processing repository listing
// Resort the repositories by sortorder
var sorted_repositories = [];
- for (var i in this.options.repositories) {
+ var i;
+ for (i in this.options.repositories) {
sorted_repositories[i] = this.options.repositories[i];
}
sorted_repositories.sort(function(a,b){return a.sortorder-b.sortorder});
list.removeChild(reponode);
for (i in sorted_repositories) {
var repository = sorted_repositories[i];
+ var h = (parseInt(i) == 0) ? parseInt(i) : parseInt(i) - 1,
+ j = (parseInt(i) == Object.keys(sorted_repositories).length - 1) ? parseInt(i) : parseInt(i) + 1;
+ var previousrepository = sorted_repositories[h];
+ var nextrepository = sorted_repositories[j];
var node = reponode.cloneNode(true);
list.appendChild(node);
node.
this.hide_header();
this.list({'repo_id':repository_id});
}, this /*handler running scope*/, repository.id/*second argument of handler*/);
+ node.on('key', function(e, previousrepositoryid, nextrepositoryid, clientid, repositoryid) {
+ this.changeHighlightedRepository(e, clientid, repositoryid, previousrepositoryid, nextrepositoryid);
+ }, 'down:38,40', this, previousrepository.id, nextrepository.id, client_id, repository.id);
+ node.on('key', function(e, repositoryid) {
+ e.preventDefault();
+ this.set_preference('recentrepository', repositoryid);
+ this.hide_header();
+ this.list({'repo_id': repositoryid});
+ }, 'enter', this, repository.id);
node.one('.fp-repo-name').setContent(Y.Escape.html(repository.name));
node.one('.fp-repo-icon').set('src', repository.icon);
if (i==0) {
this.mainui.show();
this.show_recent_repository();
},
+ /**
+ * Change the highlighted repository to a new one.
+ *
+ * @param {object} event The key event
+ * @param {integer} clientid The client id to identify the repo class.
+ * @param {integer} oldrepositoryid The repository id that we are removing the highlight for
+ * @param {integer} previousrepositoryid The previous repository id.
+ * @param {integer} nextrepositoryid The next repository id.
+ */
+ changeHighlightedRepository: function(event, clientid, oldrepositoryid, previousrepositoryid, nextrepositoryid) {
+ event.preventDefault();
+ var newrepositoryid = (event.keyCode == '40') ? nextrepositoryid : previousrepositoryid;
+ this.fpnode.one('#fp-repo-' + clientid + '-' + oldrepositoryid).setAttribute('tabindex', '-1');
+ this.fpnode.one('#fp-repo-' + clientid + '-' + newrepositoryid)
+ .setAttribute('tabindex', '0')
+ .focus();
+ },
parse_repository_options: function(data, appendtolist) {
if (appendtolist) {
if (data.list) {
display_response: function(id, obj, args) {
var scope = args.scope;
// highlight the current repository in repositories list
- scope.fpnode.all('.fp-repo.active').removeClass('active');
- scope.fpnode.all('#fp-repo-'+scope.options.client_id+'-'+obj.repo_id).addClass('active')
+ scope.fpnode.all('.fp-repo.active')
+ .removeClass('active')
+ .setAttribute('aria-selected', 'false')
+ .setAttribute('tabindex', '-1');
+ scope.fpnode.all('#fp-repo-'+scope.options.client_id+'-'+obj.repo_id)
+ .addClass('active')
+ .setAttribute('aria-selected', 'true')
+ .setAttribute('tabindex', '0');
// add class repository_REPTYPE to the filepicker (for repository-specific styles)
for (var i in scope.options.repositories) {
scope.fpnode.removeClass('repository_'+scope.options.repositories[i].type)