From f6f3425cce0d48713a0b9365e5d53db78e1e9d40 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 30 Jun 2013 22:07:23 +0400 Subject: [PATCH 1/6] use wheel event on new versions of Firefox fixes #1466 --- lib/ace/lib/event.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/ace/lib/event.js b/lib/ace/lib/event.js index bb74f34c..1da47ac4 100644 --- a/lib/ace/lib/event.js +++ b/lib/ace/lib/event.js @@ -141,9 +141,9 @@ else { } exports.addMouseWheelListener = function(el, callback) { - var factor = 8; - var listener = function(e) { - if (e.wheelDelta !== undefined) { + if ("onmousewheel" in el) { + var factor = 8; + exports.addListener(el, "DOMMouseScroll", function(e) { if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor; @@ -151,8 +151,16 @@ exports.addMouseWheelListener = function(el, callback) { e.wheelX = 0; e.wheelY = -e.wheelDelta / factor; } - } - else { + callback(e); + }); + } else if ("onwheel" in el) { + exports.addListener(el, "wheel", function(e) { + e.wheelX = (e.deltaX || 0) * 5; + e.wheelY = (e.deltaY || 0) * 5; + callback(e); + }); + } else { + exports.addListener(el, "DOMMouseScroll", function(e) { if (e.axis && e.axis == e.HORIZONTAL_AXIS) { e.wheelX = (e.detail || 0) * 5; e.wheelY = 0; @@ -160,11 +168,9 @@ exports.addMouseWheelListener = function(el, callback) { e.wheelX = 0; e.wheelY = (e.detail || 0) * 5; } - } - callback(e); - }; - exports.addListener(el, "DOMMouseScroll", listener); - exports.addListener(el, "mousewheel", listener); + callback(e); + }); + } }; exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbackName) { From 4b8ab8eab91d6a31fe44678ff0b1635b86ffb4c4 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 30 Jun 2013 23:45:47 +0400 Subject: [PATCH 2/6] fix ^ in vim mode on swedish keyboard on mac --- lib/ace/keyboard/vim.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lib/ace/keyboard/vim.js b/lib/ace/keyboard/vim.js index 417bf556..7af83b05 100644 --- a/lib/ace/keyboard/vim.js +++ b/lib/ace/keyboard/vim.js @@ -80,6 +80,39 @@ exports.handler = { data.lastEvent = "keypress"; } }, + // on mac, with some keyboard layouts (e.g swedish) ^ starts composition, we don't need it in normal mode + updateMacCompositionHandlers: function(editor, enable) { + var onCompositionUpdateOverride = function(text) { + if (util.currentMode !== "insert") { + var el = this.textInput.getElement(); + el.blur(); + el.focus(); + el.value = text; + } else { + this.onCompositionUpdateOrig(text); + } + }; + var onCompositionStartOverride = function(text) { + if (util.currentMode === "insert") { + this.onCompositionStartOrig(text); + } + } + if (enable) { + if (!editor.onCompositionUpdateOrig) { + editor.onCompositionUpdateOrig = editor.onCompositionUpdate; + editor.onCompositionUpdate = onCompositionUpdateOverride; + editor.onCompositionStartOrig = editor.onCompositionStart; + editor.onCompositionStart = onCompositionStartOverride; + } + } else { + if (editor.onCompositionUpdateOrig) { + editor.onCompositionUpdate = editor.onCompositionUpdateOrig; + editor.onCompositionUpdateOrig = null; + editor.onCompositionStart = editor.onCompositionStartOrig; + editor.onCompositionStartOrig = null; + } + } + }, handleKeyboard: function(data, hashId, key, keyCode, e) { // ignore command keys (shift, ctrl etc.) @@ -132,12 +165,15 @@ exports.handler = { if (util.currentMode !== "insert") cmds.coreCommands.stop.exec(editor); editor.$vimModeHandler = this; + + this.updateMacCompositionHandlers(editor, true); }, detach: function(editor) { editor.removeListener("click", exports.onCursorMove); util.noMode(editor); util.currentMode = "normal"; + this.updateMacCompositionHandlers(editor, false); }, actions: cmds.actions, From 5f1a69a38ee5cccfdb9005a2f4ef68bda9835c3b Mon Sep 17 00:00:00 2001 From: Tenor Biel Date: Mon, 17 Jun 2013 23:11:05 -0500 Subject: [PATCH 3/6] Add vim commands for folding --- lib/ace/keyboard/vim/commands.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/ace/keyboard/vim/commands.js b/lib/ace/keyboard/vim/commands.js index b3c12049..795eafc8 100644 --- a/lib/ace/keyboard/vim/commands.js +++ b/lib/ace/keyboard/vim/commands.js @@ -83,6 +83,18 @@ var actions = exports.actions = { case "b": editor.renderer.alignCursor(null, 1); break; + case "c": + coreCommands.fold(); + break; + case "o": + coreCommands.unfold(); + break; + case "C": + coreCommands.foldall(); + break; + case "O": + coreCommands.unfoldall(); + break; } } }, From 403e45a5dd64d788ac01112b196ac50f3af7238e Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 1 Jul 2013 00:09:15 +0400 Subject: [PATCH 4/6] fix vim folding commands --- lib/ace/keyboard/vim/commands.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ace/keyboard/vim/commands.js b/lib/ace/keyboard/vim/commands.js index 795eafc8..dd3357d6 100644 --- a/lib/ace/keyboard/vim/commands.js +++ b/lib/ace/keyboard/vim/commands.js @@ -84,16 +84,16 @@ var actions = exports.actions = { editor.renderer.alignCursor(null, 1); break; case "c": - coreCommands.fold(); + editor.session.onFoldWidgetClick(range.start.row, {domEvent:{target :{}}}); break; case "o": - coreCommands.unfold(); + editor.session.onFoldWidgetClick(range.start.row, {domEvent:{target :{}}}); break; case "C": - coreCommands.foldall(); + editor.session.foldAll(); break; case "O": - coreCommands.unfoldall(); + editor.session.unfold(); break; } } From a8ac1b1e9a2da08b6ad7818ec2964b48dcf10b0e Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 2 Jul 2013 15:25:17 +0400 Subject: [PATCH 5/6] fix horizontal scrolling --- lib/ace/virtual_renderer.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 0ef71f36..dbe54ea6 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -720,7 +720,8 @@ var VirtualRenderer = function(container, theme) { changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || - changes & this.CHANGE_SCROLL + changes & this.CHANGE_SCROLL || + changes & this.CHANGE_H_SCROLL ) this.$computeLayerConfig(); @@ -1262,7 +1263,9 @@ var VirtualRenderer = function(container, theme) { if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true; - // todo: handle horizontal scrolling + // todo: better handle horizontal scrolling + if (deltaX) + return true; }; this.pixelToScreenCoordinates = function(x, y) { From dd0880afb64d829aa1e4d32a2d5be1b11b1eeec9 Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 3 Jul 2013 17:42:46 +0400 Subject: [PATCH 6/6] fix typo --- lib/ace/lib/event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/lib/event.js b/lib/ace/lib/event.js index 1da47ac4..ca210203 100644 --- a/lib/ace/lib/event.js +++ b/lib/ace/lib/event.js @@ -143,7 +143,7 @@ else { exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { var factor = 8; - exports.addListener(el, "DOMMouseScroll", function(e) { + exports.addListener(el, "mousewheel", function(e) { if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor;