diff --git a/src/static/js/AttributePool.js b/src/static/js/AttributePool.js
index 78d3e7c5b..79849f4d3 100644
--- a/src/static/js/AttributePool.js
+++ b/src/static/js/AttributePool.js
@@ -1,3 +1,4 @@
+'use strict';
/**
* This code represents the Attribute Pool Object of the original Etherpad.
* 90% of the code is still like in the original Etherpad
@@ -69,7 +70,7 @@ AttributePool.prototype.getAttribValue = function (num) {
};
AttributePool.prototype.eachAttrib = function (func) {
- for (const n in this.numToAttrib) {
+ for (const n of Object.keys(this.numToAttrib)) {
const pair = this.numToAttrib[n];
func(pair[0], pair[1]);
}
@@ -86,7 +87,7 @@ AttributePool.prototype.fromJsonable = function (obj) {
this.numToAttrib = obj.numToAttrib;
this.nextNum = obj.nextNum;
this.attribToNum = {};
- for (const n in this.numToAttrib) {
+ for (const n of Object.keys(this.numToAttrib)) {
this.attribToNum[String(this.numToAttrib[n])] = Number(n);
}
return this;
diff --git a/src/static/js/caretPosition.js b/src/static/js/caretPosition.js
index e59fb4be5..32f6d919b 100644
--- a/src/static/js/caretPosition.js
+++ b/src/static/js/caretPosition.js
@@ -1,18 +1,20 @@
+'use strict';
+
// One rep.line(div) can be broken in more than one line in the browser.
// This function is useful to get the caret position of the line as
// is represented by the browser
-exports.getPosition = function () {
+exports.getPosition = () => {
let rect, line;
- const editor = $('#innerdocbody')[0];
const range = getSelectionRange();
- const isSelectionInsideTheEditor = range && $(range.endContainer).closest('body')[0].id === 'innerdocbody';
+ const isSelectionInsideTheEditor = range &&
+ $(range.endContainer).closest('body')[0].id === 'innerdocbody';
if (isSelectionInsideTheEditor) {
// when we have the caret in an empty line, e.g. a line with only a
,
// getBoundingClientRect() returns all dimensions value as 0
const selectionIsInTheBeginningOfLine = range.endOffset > 0;
if (selectionIsInTheBeginningOfLine) {
- var clonedRange = createSelectionRange(range);
+ const clonedRange = createSelectionRange(range);
line = getPositionOfElementOrSelection(clonedRange);
clonedRange.detach();
}
@@ -20,7 +22,7 @@ exports.getPosition = function () {
// when there's a
or any element that has no height, we can't get
// the dimension of the element where the caret is
if (!rect || rect.height === 0) {
- var clonedRange = createSelectionRange(range);
+ const clonedRange = createSelectionRange(range);
// as we can't get the element height, we create a text node to get the dimensions
// on the position
@@ -36,8 +38,8 @@ exports.getPosition = function () {
return line;
};
-var createSelectionRange = function (range) {
- clonedRange = range.cloneRange();
+const createSelectionRange = (range) => {
+ const clonedRange = range.cloneRange();
// we set the selection start and end to avoid error when user selects a text bigger than
// the viewport height and uses the arrow keys to expand the selection. In this particular
@@ -48,7 +50,7 @@ var createSelectionRange = function (range) {
return clonedRange;
};
-const getPositionOfRepLineAtOffset = function (node, offset) {
+const getPositionOfRepLineAtOffset = (node, offset) => {
// it is not a text node, so we cannot make a selection
if (node.tagName === 'BR' || node.tagName === 'EMPTY') {
return getPositionOfElementOrSelection(node);
@@ -66,7 +68,7 @@ const getPositionOfRepLineAtOffset = function (node, offset) {
return linePosition;
};
-function getPositionOfElementOrSelection(element) {
+const getPositionOfElementOrSelection = (element) => {
const rect = element.getBoundingClientRect();
const linePosition = {
bottom: rect.bottom,
@@ -74,15 +76,15 @@ function getPositionOfElementOrSelection(element) {
top: rect.top,
};
return linePosition;
-}
+};
// here we have two possibilities:
-// [1] the line before the caret line has the same type, so both of them has the same margin, padding
-// height, etc. So, we can use the caret line to make calculation necessary to know where is the top
-// of the previous line
+// [1] the line before the caret line has the same type, so both of them has the same margin,
+// padding height, etc. So, we can use the caret line to make calculation necessary to know
+// where is the top of the previous line
// [2] the line before is part of another rep line. It's possible this line has different margins
// height. So we have to get the exactly position of the line
-exports.getPositionTopOfPreviousBrowserLine = function (caretLinePosition, rep) {
+exports.getPositionTopOfPreviousBrowserLine = (caretLinePosition, rep) => {
let previousLineTop = caretLinePosition.top - caretLinePosition.height; // [1]
const isCaretLineFirstBrowserLine = caretLineIsFirstBrowserLine(caretLinePosition.top, rep);
@@ -91,13 +93,14 @@ exports.getPositionTopOfPreviousBrowserLine = function (caretLinePosition, rep)
if (isCaretLineFirstBrowserLine) { // [2]
const lineBeforeCaretLine = rep.selStart[0] - 1;
const firstLineVisibleBeforeCaretLine = getPreviousVisibleLine(lineBeforeCaretLine, rep);
- const linePosition = getDimensionOfLastBrowserLineOfRepLine(firstLineVisibleBeforeCaretLine, rep);
+ const linePosition =
+ getDimensionOfLastBrowserLineOfRepLine(firstLineVisibleBeforeCaretLine, rep);
previousLineTop = linePosition.top;
}
return previousLineTop;
};
-function caretLineIsFirstBrowserLine(caretLineTop, rep) {
+const caretLineIsFirstBrowserLine = (caretLineTop, rep) => {
const caretRepLine = rep.selStart[0];
const lineNode = rep.lines.atIndex(caretRepLine).lineNode;
const firstRootNode = getFirstRootChildNode(lineNode);
@@ -105,37 +108,28 @@ function caretLineIsFirstBrowserLine(caretLineTop, rep) {
// to get the position of the node we get the position of the first char
const positionOfFirstRootNode = getPositionOfRepLineAtOffset(firstRootNode, 1);
return positionOfFirstRootNode.top === caretLineTop;
-}
+};
// find the first root node, usually it is a text node
-function getFirstRootChildNode(node) {
+const getFirstRootChildNode = (node) => {
if (!node.firstChild) {
return node;
} else {
return getFirstRootChildNode(node.firstChild);
}
-}
+};
-function getPreviousVisibleLine(line, rep) {
- if (line < 0) {
- return 0;
- } else if (isLineVisible(line, rep)) {
- return line;
- } else {
- return getPreviousVisibleLine(line - 1, rep);
- }
-}
-
-function getDimensionOfLastBrowserLineOfRepLine(line, rep) {
+const getDimensionOfLastBrowserLineOfRepLine = (line, rep) => {
const lineNode = rep.lines.atIndex(line).lineNode;
const lastRootChildNode = getLastRootChildNode(lineNode);
// we get the position of the line in the last char of it
- const lastRootChildNodePosition = getPositionOfRepLineAtOffset(lastRootChildNode.node, lastRootChildNode.length);
+ const lastRootChildNodePosition =
+ getPositionOfRepLineAtOffset(lastRootChildNode.node, lastRootChildNode.length);
return lastRootChildNodePosition;
-}
+};
-function getLastRootChildNode(node) {
+const getLastRootChildNode = (node) => {
if (!node.lastChild) {
return {
node,
@@ -144,39 +138,42 @@ function getLastRootChildNode(node) {
} else {
return getLastRootChildNode(node.lastChild);
}
-}
+};
// here we have two possibilities:
// [1] The next line is part of the same rep line of the caret line, so we have the same dimensions.
// So, we can use the caret line to calculate the bottom of the line.
-// [2] the next line is part of another rep line. It's possible this line has different dimensions, so we
-// have to get the exactly dimension of it
-exports.getBottomOfNextBrowserLine = function (caretLinePosition, rep) {
+// [2] the next line is part of another rep line.
+// It's possible this line has different dimensions, so we have to get the exactly dimension of it
+exports.getBottomOfNextBrowserLine = (caretLinePosition, rep) => {
let nextLineBottom = caretLinePosition.bottom + caretLinePosition.height; // [1]
- const isCaretLineLastBrowserLine = caretLineIsLastBrowserLineOfRepLine(caretLinePosition.top, rep);
+ const isCaretLineLastBrowserLine =
+ caretLineIsLastBrowserLineOfRepLine(caretLinePosition.top, rep);
// the caret is at the end of a rep line, so we can get the next browser line dimension
// using the position of the first char of the next rep line
if (isCaretLineLastBrowserLine) { // [2]
const nextLineAfterCaretLine = rep.selStart[0] + 1;
const firstNextLineVisibleAfterCaretLine = getNextVisibleLine(nextLineAfterCaretLine, rep);
- const linePosition = getDimensionOfFirstBrowserLineOfRepLine(firstNextLineVisibleAfterCaretLine, rep);
+ const linePosition =
+ getDimensionOfFirstBrowserLineOfRepLine(firstNextLineVisibleAfterCaretLine, rep);
nextLineBottom = linePosition.bottom;
}
return nextLineBottom;
};
-function caretLineIsLastBrowserLineOfRepLine(caretLineTop, rep) {
+const caretLineIsLastBrowserLineOfRepLine = (caretLineTop, rep) => {
const caretRepLine = rep.selStart[0];
const lineNode = rep.lines.atIndex(caretRepLine).lineNode;
const lastRootChildNode = getLastRootChildNode(lineNode);
// we take a rep line and get the position of the last char of it
- const lastRootChildNodePosition = getPositionOfRepLineAtOffset(lastRootChildNode.node, lastRootChildNode.length);
+ const lastRootChildNodePosition =
+ getPositionOfRepLineAtOffset(lastRootChildNode.node, lastRootChildNode.length);
return lastRootChildNodePosition.top === caretLineTop;
-}
+};
-function getPreviousVisibleLine(line, rep) {
+const getPreviousVisibleLine = (line, rep) => {
const firstLineOfPad = 0;
if (line <= firstLineOfPad) {
return firstLineOfPad;
@@ -185,10 +182,12 @@ function getPreviousVisibleLine(line, rep) {
} else {
return getPreviousVisibleLine(line - 1, rep);
}
-}
+};
+
+
exports.getPreviousVisibleLine = getPreviousVisibleLine;
-function getNextVisibleLine(line, rep) {
+const getNextVisibleLine = (line, rep) => {
const lastLineOfThePad = rep.lines.length() - 1;
if (line >= lastLineOfThePad) {
return lastLineOfThePad;
@@ -197,31 +196,28 @@ function getNextVisibleLine(line, rep) {
} else {
return getNextVisibleLine(line + 1, rep);
}
-}
+};
exports.getNextVisibleLine = getNextVisibleLine;
-function isLineVisible(line, rep) {
- return rep.lines.atIndex(line).lineNode.offsetHeight > 0;
-}
+const isLineVisible = (line, rep) => rep.lines.atIndex(line).lineNode.offsetHeight > 0;
-function getDimensionOfFirstBrowserLineOfRepLine(line, rep) {
+const getDimensionOfFirstBrowserLineOfRepLine = (line, rep) => {
const lineNode = rep.lines.atIndex(line).lineNode;
const firstRootChildNode = getFirstRootChildNode(lineNode);
// we can get the position of the line, getting the position of the first char of the rep line
const firstRootChildNodePosition = getPositionOfRepLineAtOffset(firstRootChildNode, 1);
return firstRootChildNodePosition;
-}
+};
-function getSelectionRange() {
- let selection;
+const getSelectionRange = () => {
if (!window.getSelection) {
return;
}
- selection = window.getSelection();
+ const selection = window.getSelection();
if (selection.rangeCount > 0) {
return selection.getRangeAt(0);
} else {
return null;
}
-}
+};
diff --git a/src/static/js/colorutils.js b/src/static/js/colorutils.js
index 6feba3a75..9688b8e59 100644
--- a/src/static/js/colorutils.js
+++ b/src/static/js/colorutils.js
@@ -1,3 +1,5 @@
+'use strict';
+
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
@@ -26,24 +28,24 @@ const colorutils = {};
// Check that a given value is a css hex color value, e.g.
// "#ffffff" or "#fff"
-colorutils.isCssHex = function (cssColor) {
- return /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(cssColor);
-};
+colorutils.isCssHex = (cssColor) => /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(cssColor);
// "#ffffff" or "#fff" or "ffffff" or "fff" to [1.0, 1.0, 1.0]
-colorutils.css2triple = function (cssColor) {
+colorutils.css2triple = (cssColor) => {
const sixHex = colorutils.css2sixhex(cssColor);
- function hexToFloat(hh) {
- return Number(`0x${hh}`) / 255;
- }
- return [hexToFloat(sixHex.substr(0, 2)), hexToFloat(sixHex.substr(2, 2)), hexToFloat(sixHex.substr(4, 2))];
+ const hexToFloat = (hh) => Number(`0x${hh}`) / 255;
+ return [
+ hexToFloat(sixHex.substr(0, 2)),
+ hexToFloat(sixHex.substr(2, 2)),
+ hexToFloat(sixHex.substr(4, 2)),
+ ];
};
// "#ffffff" or "#fff" or "ffffff" or "fff" to "ffffff"
-colorutils.css2sixhex = function (cssColor) {
+colorutils.css2sixhex = (cssColor) => {
let h = /[0-9a-fA-F]+/.exec(cssColor)[0];
- if (h.length != 6) {
+ if (h.length !== 6) {
const a = h.charAt(0);
const b = h.charAt(1);
const c = h.charAt(2);
@@ -53,66 +55,54 @@ colorutils.css2sixhex = function (cssColor) {
};
// [1.0, 1.0, 1.0] -> "#ffffff"
-colorutils.triple2css = function (triple) {
- function floatToHex(n) {
+colorutils.triple2css = (triple) => {
+ const floatToHex = (n) => {
const n2 = colorutils.clamp(Math.round(n * 255), 0, 255);
return (`0${n2.toString(16)}`).slice(-2);
- }
+ };
return `#${floatToHex(triple[0])}${floatToHex(triple[1])}${floatToHex(triple[2])}`;
};
-colorutils.clamp = function (v, bot, top) {
- return v < bot ? bot : (v > top ? top : v);
-};
-colorutils.min3 = function (a, b, c) {
- return (a < b) ? (a < c ? a : c) : (b < c ? b : c);
-};
-colorutils.max3 = function (a, b, c) {
- return (a > b) ? (a > c ? a : c) : (b > c ? b : c);
-};
-colorutils.colorMin = function (c) {
- return colorutils.min3(c[0], c[1], c[2]);
-};
-colorutils.colorMax = function (c) {
- return colorutils.max3(c[0], c[1], c[2]);
-};
-colorutils.scale = function (v, bot, top) {
- return colorutils.clamp(bot + v * (top - bot), 0, 1);
-};
-colorutils.unscale = function (v, bot, top) {
- return colorutils.clamp((v - bot) / (top - bot), 0, 1);
-};
+colorutils.clamp = (v, bot, top) => v < bot ? bot : (v > top ? top : v);
+colorutils.min3 = (a, b, c) => (a < b) ? (a < c ? a : c) : (b < c ? b : c);
+colorutils.max3 = (a, b, c) => (a > b) ? (a > c ? a : c) : (b > c ? b : c);
+colorutils.colorMin = (c) => colorutils.min3(c[0], c[1], c[2]);
+colorutils.colorMax = (c) => colorutils.max3(c[0], c[1], c[2]);
+colorutils.scale = (v, bot, top) => colorutils.clamp(bot + v * (top - bot), 0, 1);
+colorutils.unscale = (v, bot, top) => colorutils.clamp((v - bot) / (top - bot), 0, 1);
-colorutils.scaleColor = function (c, bot, top) {
- return [colorutils.scale(c[0], bot, top), colorutils.scale(c[1], bot, top), colorutils.scale(c[2], bot, top)];
-};
+colorutils.scaleColor = (c, bot, top) => [
+ colorutils.scale(c[0], bot, top),
+ colorutils.scale(c[1], bot, top),
+ colorutils.scale(c[2], bot, top),
+];
-colorutils.unscaleColor = function (c, bot, top) {
- return [colorutils.unscale(c[0], bot, top), colorutils.unscale(c[1], bot, top), colorutils.unscale(c[2], bot, top)];
-};
+colorutils.unscaleColor = (c, bot, top) => [
+ colorutils.unscale(c[0], bot, top),
+ colorutils.unscale(c[1], bot, top),
+ colorutils.unscale(c[2], bot, top),
+];
-colorutils.luminosity = function (c) {
- // rule of thumb for RGB brightness; 1.0 is white
- return c[0] * 0.30 + c[1] * 0.59 + c[2] * 0.11;
-};
+// rule of thumb for RGB brightness; 1.0 is white
+colorutils.luminosity = (c) => c[0] * 0.30 + c[1] * 0.59 + c[2] * 0.11;
-colorutils.saturate = function (c) {
+colorutils.saturate = (c) => {
const min = colorutils.colorMin(c);
const max = colorutils.colorMax(c);
if (max - min <= 0) return [1.0, 1.0, 1.0];
return colorutils.unscaleColor(c, min, max);
};
-colorutils.blend = function (c1, c2, t) {
- return [colorutils.scale(t, c1[0], c2[0]), colorutils.scale(t, c1[1], c2[1]), colorutils.scale(t, c1[2], c2[2])];
-};
+colorutils.blend = (c1, c2, t) => [
+ colorutils.scale(t, c1[0], c2[0]),
+ colorutils.scale(t, c1[1], c2[1]),
+ colorutils.scale(t, c1[2], c2[2]),
+];
-colorutils.invert = function (c) {
- return [1 - c[0], 1 - c[1], 1 - c[2]];
-};
+colorutils.invert = (c) => [1 - c[0], 1 - c[1], 1 - c[2]];
-colorutils.complementary = function (c) {
+colorutils.complementary = (c) => {
const inv = colorutils.invert(c);
return [
(inv[0] >= c[0]) ? Math.min(inv[0] * 1.30, 1) : (c[0] * 0.30),
@@ -121,9 +111,9 @@ colorutils.complementary = function (c) {
];
};
-colorutils.textColorFromBackgroundColor = function (bgcolor, skinName) {
- const white = skinName == 'colibris' ? 'var(--super-light-color)' : '#fff';
- const black = skinName == 'colibris' ? 'var(--super-dark-color)' : '#222';
+colorutils.textColorFromBackgroundColor = (bgcolor, skinName) => {
+ const white = skinName === 'colibris' ? 'var(--super-light-color)' : '#fff';
+ const black = skinName === 'colibris' ? 'var(--super-dark-color)' : '#222';
return colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5 ? white : black;
};
diff --git a/src/static/js/cssmanager.js b/src/static/js/cssmanager.js
index e0c5e9926..0fcdad403 100644
--- a/src/static/js/cssmanager.js
+++ b/src/static/js/cssmanager.js
@@ -1,3 +1,5 @@
+'use strict';
+
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
@@ -20,14 +22,15 @@
* limitations under the License.
*/
-function makeCSSManager(emptyStylesheetTitle, doc) {
+const makeCSSManager = (emptyStylesheetTitle, doc) => {
if (doc === true) {
doc = 'parent';
} else if (!doc) {
doc = 'inner';
}
- function getSheetByTitle(title) {
+ const getSheetByTitle = (title) => {
+ let win;
if (doc === 'parent') {
win = window.parent.parent;
} else if (doc === 'inner') {
@@ -35,46 +38,44 @@ function makeCSSManager(emptyStylesheetTitle, doc) {
} else if (doc === 'outer') {
win = window.parent;
} else {
- throw 'Unknown dynamic style container';
+ throw new Error('Unknown dynamic style container');
}
const allSheets = win.document.styleSheets;
for (let i = 0; i < allSheets.length; i++) {
const s = allSheets[i];
- if (s.title == title) {
+ if (s.title === title) {
return s;
}
}
return null;
- }
+ };
const browserSheet = getSheetByTitle(emptyStylesheetTitle);
- function browserRules() {
- return (browserSheet.cssRules || browserSheet.rules);
- }
+ const browserRules = () => (browserSheet.cssRules || browserSheet.rules);
- function browserDeleteRule(i) {
+ const browserDeleteRule = (i) => {
if (browserSheet.deleteRule) browserSheet.deleteRule(i);
else browserSheet.removeRule(i);
- }
+ };
- function browserInsertRule(i, selector) {
+ const browserInsertRule = (i, selector) => {
if (browserSheet.insertRule) browserSheet.insertRule(`${selector} {}`, i);
else browserSheet.addRule(selector, null, i);
- }
+ };
const selectorList = [];
- function indexOfSelector(selector) {
+ const indexOfSelector = (selector) => {
for (let i = 0; i < selectorList.length; i++) {
- if (selectorList[i] == selector) {
+ if (selectorList[i] === selector) {
return i;
}
}
return -1;
- }
+ };
- function selectorStyle(selector) {
+ const selectorStyle = (selector) => {
let i = indexOfSelector(selector);
if (i < 0) {
// add selector
@@ -83,23 +84,21 @@ function makeCSSManager(emptyStylesheetTitle, doc) {
i = 0;
}
return browserRules().item(i).style;
- }
+ };
- function removeSelectorStyle(selector) {
+ const removeSelectorStyle = (selector) => {
const i = indexOfSelector(selector);
if (i >= 0) {
browserDeleteRule(i);
selectorList.splice(i, 1);
}
- }
+ };
return {
selectorStyle,
removeSelectorStyle,
- info() {
- return `${selectorList.length}:${browserRules().length}`;
- },
+ info: () => `${selectorList.length}:${browserRules().length}`,
};
-}
+};
exports.makeCSSManager = makeCSSManager;
diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js
index e005d1503..919a707f1 100644
--- a/src/static/js/linestylefilter.js
+++ b/src/static/js/linestylefilter.js
@@ -1,3 +1,5 @@
+'use strict';
+
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
@@ -31,7 +33,6 @@
const Changeset = require('./Changeset');
const hooks = require('./pluginfw/hooks');
const linestylefilter = {};
-const _ = require('./underscore');
const AttributeManager = require('./AttributeManager');
const padutils = require('./pad_utils').padutils;
@@ -45,32 +46,30 @@ linestylefilter.ATTRIB_CLASSES = {
const lineAttributeMarker = 'lineAttribMarker';
exports.lineAttributeMarker = lineAttributeMarker;
-linestylefilter.getAuthorClassName = function (author) {
- return `author-${author.replace(/[^a-y0-9]/g, (c) => {
- if (c == '.') return '-';
- return `z${c.charCodeAt(0)}z`;
- })}`;
-};
+linestylefilter.getAuthorClassName = (author) => `author-${author.replace(/[^a-y0-9]/g, (c) => {
+ if (c === '.') return '-';
+ return `z${c.charCodeAt(0)}z`;
+})}`;
// lineLength is without newline; aline includes newline,
// but may be falsy if lineLength == 0
-linestylefilter.getLineStyleFilter = function (lineLength, aline, textAndClassFunc, apool) {
+linestylefilter.getLineStyleFilter = (lineLength, aline, textAndClassFunc, apool) => {
// Plugin Hook to add more Attrib Classes
for (const attribClasses of hooks.callAll('aceAttribClasses', linestylefilter.ATTRIB_CLASSES)) {
Object.assign(linestylefilter.ATTRIB_CLASSES, attribClasses);
}
- if (lineLength == 0) return textAndClassFunc;
+ if (lineLength === 0) return textAndClassFunc;
const nextAfterAuthorColors = textAndClassFunc;
- const authorColorFunc = (function () {
+ const authorColorFunc = (() => {
const lineEnd = lineLength;
let curIndex = 0;
let extraClasses;
let leftInAuthor;
- function attribsToClasses(attribs) {
+ const attribsToClasses = (attribs) => {
let classes = '';
let isLineAttribMarker = false;
top.console.log("attribs", attribs)
@@ -81,14 +80,14 @@ top.console.log("attribs", attribs)
if (key) {
const value = apool.getAttribValue(n);
if (value) {
- if (!isLineAttribMarker && _.indexOf(AttributeManager.lineAttributes, key) >= 0) {
+ if (!isLineAttribMarker && AttributeManager.lineAttributes.indexOf(key) >= 0) {
isLineAttribMarker = true;
}
- if (key == 'author') {
+ if (key === 'author') {
classes += ` ${linestylefilter.getAuthorClassName(value)}`;
- } else if (key == 'list') {
+ } else if (key === 'list') {
classes += ` list:${value}`;
- } else if (key == 'start') {
+ } else if (key === 'start') {
// Needed to introduce the correct Ordered list item start number on import
classes += ` start:${value}`;
} else if (linestylefilter.ATTRIB_CLASSES[key]) {
@@ -106,37 +105,38 @@ top.console.log("attribs", attribs)
if (isLineAttribMarker) classes += ` ${lineAttributeMarker}`;
return classes.substring(1);
- }
+ };
const attributionIter = Changeset.opIterator(aline);
let nextOp, nextOpClasses;
- function goNextOp() {
+ const goNextOp = () => {
nextOp = attributionIter.next();
nextOpClasses = (nextOp.opcode && attribsToClasses(nextOp.attribs));
- }
+ };
goNextOp();
- function nextClasses() {
+ const nextClasses = () => {
if (curIndex < lineEnd) {
extraClasses = nextOpClasses;
leftInAuthor = nextOp.chars;
goNextOp();
- while (nextOp.opcode && nextOpClasses == extraClasses) {
+ while (nextOp.opcode && nextOpClasses === extraClasses) {
leftInAuthor += nextOp.chars;
goNextOp();
}
}
- }
+ };
nextClasses();
- return function (txt, cls) {
+ return (txt, cls) => {
const disableAuthColorForThisLine = hooks.callAll('disableAuthorColorsForThisLine', {
linestylefilter,
text: txt,
class: cls,
}, ' ', ' ', '');
- const disableAuthors = (disableAuthColorForThisLine == null || disableAuthColorForThisLine.length == 0) ? false : disableAuthColorForThisLine[0];
+ const disableAuthors = (disableAuthColorForThisLine == null ||
+ disableAuthColorForThisLine.length === 0) ? false : disableAuthColorForThisLine[0];
while (txt.length > 0) {
if (leftInAuthor <= 0 || disableAuthors) {
// prevent infinite loop if something funny's going on
@@ -151,7 +151,7 @@ top.console.log("attribs", attribs)
nextAfterAuthorColors(curTxt, (cls && `${cls} `) + extraClasses);
curIndex += spanSize;
leftInAuthor -= spanSize;
- if (leftInAuthor == 0) {
+ if (leftInAuthor === 0) {
nextClasses();
}
}
@@ -160,7 +160,7 @@ top.console.log("attribs", attribs)
return authorColorFunc;
};
-linestylefilter.getAtSignSplitterFilter = function (lineText, textAndClassFunc) {
+linestylefilter.getAtSignSplitterFilter = (lineText, textAndClassFunc) => {
const at = /@/g;
at.lastIndex = 0;
let splitPoints = null;
@@ -177,66 +177,66 @@ linestylefilter.getAtSignSplitterFilter = function (lineText, textAndClassFunc)
return linestylefilter.textAndClassFuncSplitter(textAndClassFunc, splitPoints);
};
-linestylefilter.getRegexpFilter = function (regExp, tag) {
- return function (lineText, textAndClassFunc) {
- regExp.lastIndex = 0;
- let regExpMatchs = null;
- let splitPoints = null;
- let execResult;
- while ((execResult = regExp.exec(lineText))) {
- if (!regExpMatchs) {
- regExpMatchs = [];
- splitPoints = [];
- }
- const startIndex = execResult.index;
- const regExpMatch = execResult[0];
- regExpMatchs.push([startIndex, regExpMatch]);
- splitPoints.push(startIndex, startIndex + regExpMatch.length);
+linestylefilter.getRegexpFilter = (regExp, tag) => (lineText, textAndClassFunc) => {
+ regExp.lastIndex = 0;
+ let regExpMatchs = null;
+ let splitPoints = null;
+ let execResult;
+ while ((execResult = regExp.exec(lineText))) {
+ if (!regExpMatchs) {
+ regExpMatchs = [];
+ splitPoints = [];
}
+ const startIndex = execResult.index;
+ const regExpMatch = execResult[0];
+ regExpMatchs.push([startIndex, regExpMatch]);
+ splitPoints.push(startIndex, startIndex + regExpMatch.length);
+ }
- if (!regExpMatchs) return textAndClassFunc;
+ if (!regExpMatchs) return textAndClassFunc;
- function regExpMatchForIndex(idx) {
- for (let k = 0; k < regExpMatchs.length; k++) {
- const u = regExpMatchs[k];
- if (idx >= u[0] && idx < u[0] + u[1].length) {
- return u[1];
- }
+ const regExpMatchForIndex = (idx) => {
+ for (let k = 0; k < regExpMatchs.length; k++) {
+ const u = regExpMatchs[k];
+ if (idx >= u[0] && idx < u[0] + u[1].length) {
+ return u[1];
}
- return false;
}
-
- const handleRegExpMatchsAfterSplit = (function () {
- let curIndex = 0;
- return function (txt, cls) {
- const txtlen = txt.length;
- let newCls = cls;
- const regExpMatch = regExpMatchForIndex(curIndex);
- if (regExpMatch) {
- newCls += ` ${tag}:${regExpMatch}`;
- }
- textAndClassFunc(txt, newCls);
- curIndex += txtlen;
- };
- })();
-
- return linestylefilter.textAndClassFuncSplitter(handleRegExpMatchsAfterSplit, splitPoints);
+ return false;
};
+
+ const handleRegExpMatchsAfterSplit = (() => {
+ let curIndex = 0;
+ return (txt, cls) => {
+ const txtlen = txt.length;
+ let newCls = cls;
+ const regExpMatch = regExpMatchForIndex(curIndex);
+ if (regExpMatch) {
+ newCls += ` ${tag}:${regExpMatch}`;
+ }
+ textAndClassFunc(txt, newCls);
+ curIndex += txtlen;
+ };
+ })();
+
+ return linestylefilter.textAndClassFuncSplitter(handleRegExpMatchsAfterSplit, splitPoints);
};
linestylefilter.getURLFilter = linestylefilter.getRegexpFilter(padutils.urlRegex, 'url');
-linestylefilter.textAndClassFuncSplitter = function (func, splitPointsOpt) {
+linestylefilter.textAndClassFuncSplitter = (func, splitPointsOpt) => {
let nextPointIndex = 0;
let idx = 0;
// don't split at 0
- while (splitPointsOpt && nextPointIndex < splitPointsOpt.length && splitPointsOpt[nextPointIndex] == 0) {
+ while (splitPointsOpt &&
+ nextPointIndex < splitPointsOpt.length &&
+ splitPointsOpt[nextPointIndex] === 0) {
nextPointIndex++;
}
- function spanHandler(txt, cls) {
+ const spanHandler = (txt, cls) => {
if ((!splitPointsOpt) || nextPointIndex >= splitPointsOpt.length) {
func(txt, cls);
idx += txt.length;
@@ -247,7 +247,7 @@ linestylefilter.textAndClassFuncSplitter = function (func, splitPointsOpt) {
if (pointLocInSpan >= txtlen) {
func(txt, cls);
idx += txt.length;
- if (pointLocInSpan == txtlen) {
+ if (pointLocInSpan === txtlen) {
nextPointIndex++;
}
} else {
@@ -260,18 +260,18 @@ linestylefilter.textAndClassFuncSplitter = function (func, splitPointsOpt) {
spanHandler(txt.substring(pointLocInSpan), cls);
}
}
- }
+ };
return spanHandler;
};
-linestylefilter.getFilterStack = function (lineText, textAndClassFunc, abrowser) {
+linestylefilter.getFilterStack = (lineText, textAndClassFunc, abrowser) => {
let func = linestylefilter.getURLFilter(lineText, textAndClassFunc);
const hookFilters = hooks.callAll('aceGetFilterStack', {
linestylefilter,
browser: abrowser,
});
- _.map(hookFilters, (hookFilter) => {
+ hookFilters.map((hookFilter) => {
func = hookFilter(lineText, func);
});
@@ -279,16 +279,16 @@ linestylefilter.getFilterStack = function (lineText, textAndClassFunc, abrowser)
};
// domLineObj is like that returned by domline.createDomLine
-linestylefilter.populateDomLine = function (textLine, aline, apool, domLineObj) {
+linestylefilter.populateDomLine = (textLine, aline, apool, domLineObj) => {
// remove final newline from text if any
let text = textLine;
- if (text.slice(-1) == '\n') {
+ if (text.slice(-1) === '\n') {
text = text.substring(0, text.length - 1);
}
- function textAndClassFunc(tokenText, tokenClass) {
+ const textAndClassFunc = (tokenText, tokenClass) => {
domLineObj.appendSpan(tokenText, tokenClass);
- }
+ };
let func = linestylefilter.getFilterStack(text, textAndClassFunc);
func = linestylefilter.getLineStyleFilter(text.length, aline, func, apool);
diff --git a/src/static/js/rjquery.js b/src/static/js/rjquery.js
index f055d56f8..d729a25ba 100644
--- a/src/static/js/rjquery.js
+++ b/src/static/js/rjquery.js
@@ -1,4 +1,5 @@
-// Proviedes a require'able version of jQuery without leaking $ and jQuery;
+'use strict';
+// Provides a require'able version of jQuery without leaking $ and jQuery;
window.$ = require('./jquery');
const jq = window.$.noConflict(true);
exports.jQuery = exports.$ = jq;