From a600ece5c55f4869ed22a643ff808b4fd832ec79 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 12 Feb 2016 16:22:20 +0100 Subject: [PATCH] fix jshint complaints in common directory --- www/common/cursor.js | 20 +++++--- www/common/hyperjson.js | 8 ++- www/common/sharejs_textarea.js | 89 +++++++++++++++++----------------- 3 files changed, 64 insertions(+), 53 deletions(-) diff --git a/www/common/cursor.js b/www/common/cursor.js index e805ab3ca..3ab79fa86 100644 --- a/www/common/cursor.js +++ b/www/common/cursor.js @@ -140,12 +140,17 @@ define([ log("No element provided!"); return null; } + + var el2, + adjusted, + initialLength; + log("Seeking to offset"); // FIXME better debugging // console.log(el, offset); if (!el.textContent) { // FIXME wat - var el2 = Tree.previousNode(el, inner); + el2 = Tree.previousNode(el, inner); log("No text content available!"); return null; } @@ -157,19 +162,20 @@ define([ } if (offset < 0) { // seek backwards - var el2 = Tree.previousNode(el, inner); + el2 = Tree.previousNode(el, inner); if (!el2) { return null; } - var adjusted = el2.textContent.length; + adjusted = el2.textContent.length; // FIXME TypeError: el.textContent is undefined return seekToOffset(el2, (l - 1) - el.textContent.length); } else { - var l = el.textContent.length; + initialLength = el.textContent.length; if (offset > l) { - var el2 = Tree.nextNode(el, inner); + el2 = Tree.nextNode(el, inner); if (!el2) { return null; } - var adjusted = el2.textContent.length; + adjusted = el2.textContent.length; + // FIXME TypeError: el.textContent is undefined - return seekToOffset(el2, (l - 1) - el.textContent.length); + return seekToOffset(el2, (initialLength - 1) - el.textContent.length); } else { return { el: el, diff --git a/www/common/hyperjson.js b/www/common/hyperjson.js index 12eb9a4ac..991317a66 100644 --- a/www/common/hyperjson.js +++ b/www/common/hyperjson.js @@ -47,7 +47,9 @@ define([], function () { return; } var attributes = {}; - for(var i = 0; i < el.attributes.length; i++){ + + var i = 0; + for(;i < el.attributes.length; i++){ var attr = el.attributes[i]; if(attr.name && attr.value){ if(attr.name == "style"){ @@ -81,7 +83,9 @@ define([], function () { // third element of the array is an array of child nodes var children = []; - var i = 0; + + // js hint complains if we use 'var' here + i = 0; for(; i < el.childNodes.length; i++){ children.push(DOM2HyperJSON(el.childNodes[i])); } diff --git a/www/common/sharejs_textarea.js b/www/common/sharejs_textarea.js index 3ad0655bd..89c761f3e 100644 --- a/www/common/sharejs_textarea.js +++ b/www/common/sharejs_textarea.js @@ -51,19 +51,19 @@ define(function () { * This algorithm is O(N). I suspect you could speed it up somehow using regular expressions. */ var applyChange = function(ctx, oldval, newval) { - // Strings are immutable and have reference equality. I think this test is O(1), so its worth doing. - if (oldval === newval) return; + // Strings are immutable and have reference equality. I think this test is O(1), so its worth doing. + if (oldval === newval) return; - var commonStart = 0; - while (oldval.charAt(commonStart) === newval.charAt(commonStart)) { - commonStart++; - } + var commonStart = 0; + while (oldval.charAt(commonStart) === newval.charAt(commonStart)) { + commonStart++; + } - var commonEnd = 0; - while (oldval.charAt(oldval.length - 1 - commonEnd) === newval.charAt(newval.length - 1 - commonEnd) && - commonEnd + commonStart < oldval.length && commonEnd + commonStart < newval.length) { - commonEnd++; - } + var commonEnd = 0; + while (oldval.charAt(oldval.length - 1 - commonEnd) === newval.charAt(newval.length - 1 - commonEnd) && + commonEnd + commonStart < oldval.length && commonEnd + commonStart < newval.length) { + commonEnd++; + } var bugz = { commonStart:commonStart, @@ -71,14 +71,14 @@ var applyChange = function(ctx, oldval, newval) { oldvalLength: oldval.length, newvalLength: newval.length }; - if (oldval.length !== commonStart + commonEnd) { - ctx.localChange && ctx.localChange(true); - ctx.remove(commonStart, oldval.length - commonStart - commonEnd); - } - if (newval.length !== commonStart + commonEnd) { - ctx.localChange && ctx.localChange(true); - ctx.insert(commonStart, newval.slice(commonStart, newval.length - commonEnd)); - } + if (oldval.length !== commonStart + commonEnd) { + if (ctx.localChange) { ctx.localChange(true); } + ctx.remove(commonStart, oldval.length - commonStart - commonEnd); + } + if (newval.length !== commonStart + commonEnd) { + if (ctx.localChange) { ctx.localChange(true); } + ctx.insert(commonStart, newval.slice(commonStart, newval.length - commonEnd)); + } }; /** @@ -95,31 +95,32 @@ var cannonicalize = function (content) { // specified. var attachTextarea = function(elem, ctx) { - // initial state will always fail the !== check in genop. - var content = {}; - - // Replace the content of the text area with newText, and transform the - // current cursor by the specified function. - var replaceText = function(newText, transformCursor) { - if (transformCursor) { - var newSelection = [transformCursor(elem.selectionStart), transformCursor(elem.selectionEnd)]; - } - - // Fixate the window's scroll while we set the element's value. Otherwise - // the browser scrolls to the element. - var scrollTop = elem.scrollTop; - elem.value = newText; - content = elem.value; // Not done on one line so the browser can do newline conversion. - if (elem.scrollTop !== scrollTop) elem.scrollTop = scrollTop; - - // Setting the selection moves the cursor. We'll just have to let your - // cursor drift if the element isn't active, though usually users don't - // care. - if (newSelection && window.document.activeElement === elem) { - elem.selectionStart = newSelection[0]; - elem.selectionEnd = newSelection[1]; - } - }; + // initial state will always fail the !== check in genop. + var content = {}; + var newSelection; + + // Replace the content of the text area with newText, and transform the + // current cursor by the specified function. + var replaceText = function(newText, transformCursor) { + if (transformCursor) { + newSelection = [transformCursor(elem.selectionStart), transformCursor(elem.selectionEnd)]; + } + + // Fixate the window's scroll while we set the element's value. Otherwise + // the browser scrolls to the element. + var scrollTop = elem.scrollTop; + elem.value = newText; + content = elem.value; // Not done on one line so the browser can do newline conversion. + if (elem.scrollTop !== scrollTop) elem.scrollTop = scrollTop; + + // Setting the selection moves the cursor. We'll just have to let your + // cursor drift if the element isn't active, though usually users don't + // care. + if (newSelection && window.document.activeElement === elem) { + elem.selectionStart = newSelection[0]; + elem.selectionEnd = newSelection[1]; + } + }; //replaceText(ctx.get());