%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/ce/ |
Current File : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/ce/ve.ce.KeyDownHandlerFactory.js |
/*! * VisualEditor KeyDownHandlerFactory class. * * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org */ /** * Key down handler factory. * * @class * @extends OO.Factory * @constructor */ ve.ce.KeyDownHandlerFactory = function VeCeKeyDownHandlerFactory() { // Parent constructor ve.ce.KeyDownHandlerFactory.super.apply( this, arguments ); // Handlers which match all kinds and a specific type this.handlerNamesByKeys = {}; }; /* Inheritance */ OO.inheritClass( ve.ce.KeyDownHandlerFactory, OO.Factory ); /* Methods */ /** * @inheritdoc */ ve.ce.KeyDownHandlerFactory.prototype.register = function ( constructor ) { var i, ilen, keys, name; // Parent method ve.ce.KeyDownHandlerFactory.super.prototype.register.call( this, constructor ); keys = constructor.static.keys; name = constructor.static.name; // TODO: Clean up handlerNamesByKeys in unregister for ( i = 0, ilen = keys.length; i < ilen; i++ ) { this.handlerNamesByKeys[ keys[ i ] ] = this.handlerNamesByKeys[ keys[ i ] ] || []; if ( this.handlerNamesByKeys[ keys[ i ] ].indexOf( name ) === -1 ) { this.handlerNamesByKeys[ keys[ i ] ].push( name ); } } }; /** * Get the handler for a specific key * * @param {number} key Key code * @param {string} selectionName Selection type name * @return {Function[]} Matched handlers */ ve.ce.KeyDownHandlerFactory.prototype.lookupHandlersForKey = function ( key, selectionName ) { var i, constructor, supportedSelections, constructors = [], names = this.handlerNamesByKeys[ key ] || []; // Length is likely to be 1 or 0 so don't cache for ( i = 0; i < names.length; i++ ) { constructor = this.registry[ names[ i ] ]; supportedSelections = constructor.static.supportedSelections; if ( !supportedSelections || supportedSelections.indexOf( selectionName ) !== -1 ) { constructors.push( constructor ); } } return constructors; }; /** * Execute the handlers for a specific key * * @param {number} key Key code * @param {string} selectionName Selection type name * @param {ve.ce.Surface} surface Surface * @param {jQuery} e Key down event * @return {boolean} Some handlers acted */ ve.ce.KeyDownHandlerFactory.prototype.executeHandlersForKey = function ( key, selectionName, surface, e ) { var i, acted, handlers = this.lookupHandlersForKey( key, selectionName ); // Length is likely to be 1 or 0 so don't cache for ( i = 0; i < handlers.length; i++ ) { if ( handlers[ i ].static.execute( surface, e ) ) { acted = true; } } return acted; }; /* Initialization */ ve.ce.keyDownHandlerFactory = new ve.ce.KeyDownHandlerFactory();