From 5801803a73ecd2c67ce39ce550c3de7f1e54fe3a Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Fri, 30 Mar 2018 14:24:05 +0300 Subject: [PATCH] tweaking and refactoring... Signed-off-by: Alex A. Naanou --- ui (gen4)/lib/util.js | 44 ++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/ui (gen4)/lib/util.js b/ui (gen4)/lib/util.js index 0b9cfff1..a864643a 100755 --- a/ui (gen4)/lib/util.js +++ b/ui (gen4)/lib/util.js @@ -260,7 +260,9 @@ function(path){ /*********************************************************************/ -module.selectElemText = function(elem){ +var selectElemText = +module.selectElemText = +function(elem){ var range = document.createRange() range.selectNodeContents(elem) var sel = window.getSelection() @@ -269,6 +271,32 @@ module.selectElemText = function(elem){ } +// XXX make this global... +var getCaretOffset = +module.getCaretOffset = +function(elem){ + try{ + if(window.getSelection){ + var r = window.getSelection().getRangeAt(0) + var pre = r.cloneRange() + pre.selectNodeContents(elem) + pre.setEnd(r.endContainer, r.endOffset) + return pre.toString().length || 0 + // IE... + } else { + var r = document.selection.createRange() + var pre = document.body.createTextRange() + pre.moveToElementText(elem) + pre.setEndPoint("EndToEnd", r) + return pre.text.length || 0 + } + + }catch(e){ + return -1 + } +} + + /*********************************************************************/ // NOTE: repatching a date should not lead to any side effects as this @@ -413,6 +441,7 @@ if(typeof(jQuery) != typeof(undefined)){ return this } + jQuery.fn.caretOffset = function(){ return getCaretOffset(this) } var keyboard = require('lib/keyboard') @@ -548,16 +577,8 @@ if(typeof(jQuery) != typeof(undefined)){ if(!that.prop('contenteditable')){ return } - // XXX make this global... - var caretOffset = function(elem){ - var range = window.getSelection().getRangeAt(0) - var preCaretRange = range.cloneRange() - preCaretRange.selectNodeContents(elem) - preCaretRange.setEnd(range.endContainer, range.endOffset) - return preCaretRange.toString().length || 0 - } - var c = caretOffset(this) + var c = getCaretOffset(this) evt.stopPropagation() @@ -582,10 +603,11 @@ if(typeof(jQuery) != typeof(undefined)){ && options.multiline){ evt.preventDefault() + // XXX this sometimes eats newline chars... that.trigger('edit-commit', that.text()) // multi-line keep keys... - } else if(n == 'Enter' >= 0 && options.multiline){ + } else if(n == 'Enter' && options.multiline){ return // multi-line arrow keys -- keep key iff not at first/last position...