define([ "jquery", "underscore", "crel", "classes/Extension" ], function($, _, crel, Extension) { var buttonFocusMode = new Extension("buttonFocusMode", 'Button "Focus Mode"', true, true, true); buttonFocusMode.settingsBlock = "When typing, scrolls automatically the editor to always have the caret centered verticaly."; var aceEditor = undefined; buttonFocusMode.onAceCreated = function(aceEditorParam) { aceEditor = aceEditorParam; }; var isFocusModeOn = false; var isMouseActive = false; function doFocusMode() { if(isFocusModeOn === false || isMouseActive === true) { return; } var positionInDocument = aceEditor.selection.getCursor(); var positionInScreen = aceEditor.session.documentToScreenPosition(positionInDocument.row, positionInDocument.column); aceEditor.session.setScrollTop((positionInScreen.row + 0.5) * aceEditor.renderer.lineHeight - aceEditor.renderer.$size.scrollerHeight / 2); } var $button = undefined; buttonFocusMode.onReady = function() { aceEditor.getSession().selection.on('changeCursor', doFocusMode); aceEditor.container.addEventListener('keydown', function() { isMouseActive = false; }, true); aceEditor.container.addEventListener('mousedown', function() { isMouseActive = true; }, true); if(localStorage.focusMode == 'on') { $button.click(); } }; buttonFocusMode.onCreateEditorButton = function() { $button = $([ '' ].join('')); $button.click(function() { _.defer(function() { isFocusModeOn = $button.is('.active'); localStorage.focusMode = isFocusModeOn ? 'on' : 'off'; isMouseActive = false; aceEditor.focus(); doFocusMode(); }); }); return $button[0]; }; return buttonFocusMode; });