09c638a157dd9d2ed9027215d9e254badfa019b8Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Handles tab and shift-tab indent/outdent support.
daeb6d531149c45a2ceb543ae2cf1e56e5235bbeDav Glass * @class Plugin.EditorTab
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @constructor
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @extends Base
09c638a157dd9d2ed9027215d9e254badfa019b8Dav Glass * @module editor
09c638a157dd9d2ed9027215d9e254badfa019b8Dav Glass * @submodule editor-tab
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var EditorTab = function() {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass EditorTab.superclass.constructor.apply(this, arguments);
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }, HOST = 'host';
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.extend(EditorTab, Y.Base, {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * Listener for host's nodeChange event and captures the tabkey interaction.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @private
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @method _onNodeChange
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @param {Event} e The Event facade passed from the host.
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass _onNodeChange: function(e) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass var action = 'indent';
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (e.changedType === 'tab') {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (!e.changedNode.test('li, li *')) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass e.changedEvent.halt();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass e.preventDefault();
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass if (e.changedEvent.shiftKey) {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass action = 'outdent';
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.log('Overriding TAB to ' + action, 'info', 'editorTab');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass this.get(HOST).execCommand(action, '');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass },
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass initializer: function() {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass this.get(HOST).on('nodeChange', Y.bind(this._onNodeChange, this));
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }, {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * editorTab
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property NAME
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass NAME: 'editorTab',
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass /**
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * tab
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @property NS
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass * @static
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass */
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass NS: 'tab',
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass ATTRS: {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass host: {
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass value: false
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass }
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass });
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.namespace('Plugin');
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass
dbf2c770f8178b12e8fe3c36bfa29df58ef13959Dav Glass Y.Plugin.EditorTab = EditorTab;