Stackedit/public/res/extensions/buttonFocusMode.js

61 lines
2.1 KiB
JavaScript
Raw Normal View History

2013-09-12 23:25:25 +00:00
define([
"jquery",
"underscore",
"crel",
2013-11-05 23:03:38 +00:00
"storage",
2013-09-12 23:25:25 +00:00
"classes/Extension"
2013-11-05 23:03:38 +00:00
], function($, _, crel, storage, Extension) {
2013-09-12 23:25:25 +00:00
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.";
2013-11-07 23:10:38 +00:00
var aceEditor;
2013-09-12 23:25:25 +00:00
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);
}
2013-11-07 23:10:38 +00:00
var $button;
2013-09-12 23:25:25 +00:00
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);
2013-11-05 23:03:38 +00:00
if(storage.focusMode == 'on') {
2013-09-12 23:25:25 +00:00
$button.click();
}
};
buttonFocusMode.onCreateEditorButton = function() {
$button = $([
'<button class="btn btn-info" title="Focus Mode" data-toggle="button">',
' <i class="icon-target"></i>',
'</button>'
].join(''));
$button.click(function() {
_.defer(function() {
isFocusModeOn = $button.is('.active');
2013-11-05 23:03:38 +00:00
storage.focusMode = isFocusModeOn ? 'on' : 'off';
2013-09-12 23:25:25 +00:00
isMouseActive = false;
aceEditor.focus();
doFocusMode();
});
});
return $button[0];
};
return buttonFocusMode;
});