X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Fcontextual%2Fjs%2Fviews%2FKeyboardView.js;fp=web%2Fcore%2Fmodules%2Fcontextual%2Fjs%2Fviews%2FKeyboardView.js;h=9c247730e312ea3f8fce213b0dda62d9d1a6418d;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/contextual/js/views/KeyboardView.js b/web/core/modules/contextual/js/views/KeyboardView.js new file mode 100644 index 000000000..9c247730e --- /dev/null +++ b/web/core/modules/contextual/js/views/KeyboardView.js @@ -0,0 +1,61 @@ +/** + * @file + * A Backbone View that provides keyboard interaction for a contextual link. + */ + +(function (Drupal, Backbone) { + + 'use strict'; + + Drupal.contextual.KeyboardView = Backbone.View.extend(/** @lends Drupal.contextual.KeyboardView# */{ + + /** + * @type {object} + */ + events: { + 'focus .trigger': 'focus', + 'focus .contextual-links a': 'focus', + 'blur .trigger': function () { this.model.blur(); }, + 'blur .contextual-links a': function () { + // Set up a timeout to allow a user to tab between the trigger and the + // contextual links without the menu dismissing. + var that = this; + this.timer = window.setTimeout(function () { + that.model.close().blur(); + }, 150); + } + }, + + /** + * Provides keyboard interaction for a contextual link. + * + * @constructs + * + * @augments Backbone.View + */ + initialize: function () { + + /** + * The timer is used to create a delay before dismissing the contextual + * links on blur. This is only necessary when keyboard users tab into + * contextual links without edit mode (i.e. without TabbingManager). + * That means that if we decide to disable tabbing of contextual links + * without edit mode, all this timer logic can go away. + * + * @type {NaN|number} + */ + this.timer = NaN; + }, + + /** + * Sets focus on the model; Clears the timer that dismisses the links. + */ + focus: function () { + // Clear the timeout that might have been set by blurring a link. + window.clearTimeout(this.timer); + this.model.focus(); + } + + }); + +})(Drupal, Backbone);