diff --git a/build/standalone/config/default.js b/build/standalone/config/default.js index 8cb97e75..fcbe77bc 100644 --- a/build/standalone/config/default.js +++ b/build/standalone/config/default.js @@ -12951,9 +12951,17 @@ define("plugins/c9.ide.collab/author_layer",[], function(require, module, export function AuthorLayer(session) { var plugin = new Plugin("Ajax.org", main.consumes); - var marker = session.addDynamicMarker({ update: drawAuthInfos }, false); + var marker; function refresh() { + if (showAuthorInfo) { + session.on("changeEditor", onChangeEditor); + marker = session.addDynamicMarker({ update: drawAuthInfos }, false); + } + else { + dispose(); + } + var doc = session.collabDoc.original; var ace = doc.editor && doc.editor.ace; var aceSession = ace && ace.session; @@ -12961,178 +12969,12 @@ define("plugins/c9.ide.collab/author_layer",[], function(require, module, export return; session._emit("changeBackMarker"); - var renderer = ace.renderer; - renderer.$gutterLayer.$padding = null; - renderer.$loop.schedule(renderer.CHANGE_GUTTER); - if (showAuthorInfo) { - renderer.$gutterLayer.on("afterRender", decorateGutter); - } - else { - renderer.$gutterLayer.off("afterRender", decorateGutter); - clearGutterDecorations(renderer); - } + onChangeEditor({ editor: ace }); } - function drawAuthInfos(html, markerLayer, session, config) { - if (!showAuthorInfo || !util.isRealCollab(workspace)) - return; - - var doc = session.collabDoc; - var editorDoc = session.doc; - var colorPool = workspace.colorPool; - var reversedAuthorPool = workspace.reversedAuthorPool; - - var firstRow = config.firstRow; - var lastRow = config.lastRow; - - var range = new Range(firstRow, 0, lastRow, editorDoc.getLine(lastRow).length); - - var cache = createAuthorKeyCache(editorDoc, doc.authAttribs, range); - var authKeyCache = cache.authorKeys; - var rowScores = cache.rowScores; - - var fold = session.getNextFoldLine(firstRow); - var foldStart = fold ? fold.start.row : Infinity; - - for (var i = firstRow; i < lastRow; i++) { - if (i > foldStart) { - i = fold.end.row + 1; - fold = session.getNextFoldLine(i, fold); - foldStart = fold ? fold.start.row : Infinity; - } - if (i > lastRow) - break; - - if (!authKeyCache[i] || !rowScores[i]) - continue; - - var rowScore = rowScores[i]; - for (var authVal in rowScore) { - if (authVal == authKeyCache[i]) - continue; - var edits = rowScore[authVal].edits; - for (var j = 0; j < edits.length; j++) { - var edit = edits[j]; - var uid = reversedAuthorPool[authVal]; - var bgColor = colorPool[uid]; - var extraStyle = "position:absolute;border-bottom:solid 2px " + util.formatColor(bgColor) + ";z-index: 2000"; - var startPos = session.documentToScreenPosition(edit.pos); - markerLayer.drawSingleLineMarker(html, - new Range(startPos.row, startPos.column, startPos.row, startPos.column + edit.length), - "", config, 0, extraStyle); - } - } - } - } - - function decorateGutter(e, gutter) { - var session = gutter.session; - - var editorDoc = session.doc; - var doc = session.collabDoc; - var isCollabGutter = doc && showAuthorInfo && util.isRealCollab(workspace); - - var config = gutter.config; - var range = new Range(config.firstRow, 0, config.lastRow, Number.MAX_VALUE); - var authorKeysCache = isCollabGutter && createAuthorKeyCache(editorDoc, doc.authAttribs, range).authorKeys; - var colorPool = workspace.colorPool; - var reversedAuthorPool = workspace.reversedAuthorPool; - - if (!isCollabGutter) - return clearGutterDecorations(); - var cells = gutter.$lines.cells; - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - var authorKey = authorKeysCache[cell.row]; - var authorColor = "transparent"; - var fullname = null; - if (authorKey) { - var uid = reversedAuthorPool[authorKey]; - authorColor = util.formatColor(colorPool[uid]); - var user = workspace.users[uid]; - fullname = user && user.fullname; - } - cell.element.style.borderLeft = "solid 5px " + authorColor; - cell.element.setAttribute("uid", fullname ? uid : ""); - } - } - - function clearGutterDecorations(renderer) { - renderer.$gutterLayer.$lines.cellCache.length = 0; - var cells = renderer.$gutterLayer.$lines.cells; - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - cell.element.style.borderLeft = ""; - cell.element.setAttribute("uid", ""); - } - } - - function createAuthorKeyCache (editorDoc, authAttribs, range) { - var startI = editorDoc.positionToIndex(range.start); - var endI = editorDoc.positionToIndex(range.end); - - var authKeyCache = {}; - var rowScores = {}; - var lastPos = range.start; - - function processScore(index, length, value) { - var line = editorDoc.getLine(lastPos.row); - var rowScore = rowScores[lastPos.row] = rowScores[lastPos.row] || {}; - var score = Math.min(line.length - lastPos.column, length); - var scoreObj = rowScore[value] = rowScore[value] || { edits: [], score: 0 }; - scoreObj.edits.push({ pos: lastPos, length: score }); - scoreObj.score += score; - var pos = editorDoc.indexToPosition(index + length); - if (lastPos.row !== pos.row) { - if (value) { - for (var i = lastPos.row + 1; i < pos.row; i++) - authKeyCache[i] = value; - } - line = editorDoc.getLine(pos.row); - rowScore = rowScores[pos.row] = rowScores[pos.row] || {}; - score = pos.column; - scoreObj = rowScore[value] = rowScore[value] || { edits: [], score: 0 }; - scoreObj.edits.push({ pos: pos, length: score }); - scoreObj.score += score; - } - lastPos = pos; - } - AuthorAttributes.traverse(authAttribs, startI, endI, processScore); - - for (var rowNum in rowScores) { - var rowScore = rowScores[rowNum]; - delete rowScore[null]; - delete rowScore[undefined]; - delete rowScore[0]; - var authorKeys = Object.keys(rowScore); - - if (authorKeys.length === 0) { - delete rowScores[rowNum]; - } - else if (authorKeys.length === 1) { - authKeyCache[rowNum] = parseInt(authorKeys[0], 10); - } - else { - var biggestScore = 0; - var authKey; - for (var key in rowScore) { - if (rowScore[key].score > biggestScore) { - biggestScore = rowScore[key].score; - authKey = key; - } - } - authKeyCache[rowNum] = parseInt(authKey, 10); - } - } - - return { - authorKeys: authKeyCache, - rowScores: rowScores - }; - } - - function dispose () { - session.removeMarker(marker.id); + function dispose() { + marker && session.removeMarker(marker.id); + session.off("changeEditor", onChangeEditor); } plugin.freezePublicAPI({ @@ -13143,6 +12985,178 @@ define("plugins/c9.ide.collab/author_layer",[], function(require, module, export return plugin; } + + function onChangeEditor(e) { + var renderer = (e.editor || e.oldEditor).renderer; + renderer.$gutterLayer.$padding = null; + renderer.$loop.schedule(renderer.CHANGE_GUTTER); + if (showAuthorInfo && e.editor) { + renderer.$gutterLayer.on("afterRender", decorateGutter); + } + else { + renderer.$gutterLayer.off("afterRender", decorateGutter); + clearGutterDecorations(renderer.$gutterLayer); + } + } + + function drawAuthInfos(html, markerLayer, session, config) { + if (!showAuthorInfo || !util.isRealCollab(workspace)) + return; + + var doc = session.collabDoc; + var editorDoc = session.doc; + var colorPool = workspace.colorPool; + var reversedAuthorPool = workspace.reversedAuthorPool; + + var firstRow = config.firstRow; + var lastRow = config.lastRow; + + var range = new Range(firstRow, 0, lastRow, editorDoc.getLine(lastRow).length); + + var cache = createAuthorKeyCache(editorDoc, doc.authAttribs, range); + var authKeyCache = cache.authorKeys; + var rowScores = cache.rowScores; + + var fold = session.getNextFoldLine(firstRow); + var foldStart = fold ? fold.start.row : Infinity; + + for (var i = firstRow; i < lastRow; i++) { + if (i > foldStart) { + i = fold.end.row + 1; + fold = session.getNextFoldLine(i, fold); + foldStart = fold ? fold.start.row : Infinity; + } + if (i > lastRow) + break; + + if (!authKeyCache[i] || !rowScores[i]) + continue; + + var rowScore = rowScores[i]; + for (var authVal in rowScore) { + if (authVal == authKeyCache[i]) + continue; + var edits = rowScore[authVal].edits; + for (var j = 0; j < edits.length; j++) { + var edit = edits[j]; + var uid = reversedAuthorPool[authVal]; + var bgColor = colorPool[uid]; + var extraStyle = "position:absolute;border-bottom:solid 2px " + util.formatColor(bgColor) + ";z-index: 2000"; + var startPos = session.documentToScreenPosition(edit.pos); + markerLayer.drawSingleLineMarker(html, + new Range(startPos.row, startPos.column, startPos.row, startPos.column + edit.length), + "", config, 0, extraStyle); + } + } + } + } + + function decorateGutter(e, gutter) { + var session = gutter.session; + + var editorDoc = session.doc; + var doc = session.collabDoc; + var isCollabGutter = doc && showAuthorInfo && util.isRealCollab(workspace); + + if (!isCollabGutter) + return; + + var config = gutter.config; + var range = new Range(config.firstRow, 0, config.lastRow, Number.MAX_VALUE); + var authorKeysCache = isCollabGutter && createAuthorKeyCache(editorDoc, doc.authAttribs, range).authorKeys; + var colorPool = workspace.colorPool; + var reversedAuthorPool = workspace.reversedAuthorPool; + + var cells = gutter.$lines.cells; + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + var authorKey = authorKeysCache[cell.row]; + var authorColor = "transparent"; + var fullname = null; + if (authorKey) { + var uid = reversedAuthorPool[authorKey]; + authorColor = util.formatColor(colorPool[uid]); + var user = workspace.users[uid]; + fullname = user && user.fullname; + } + cell.element.style.borderLeft = "solid 5px " + authorColor; + cell.element.setAttribute("uid", fullname ? uid : ""); + } + } + + function clearGutterDecorations(gutter) { + gutter.$lines.cellCache.length = 0; + var cells = gutter.$lines.cells; + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + cell.element.style.borderLeft = ""; + cell.element.setAttribute("uid", ""); + } + } + + function createAuthorKeyCache(editorDoc, authAttribs, range) { + var startI = editorDoc.positionToIndex(range.start); + var endI = editorDoc.positionToIndex(range.end); + + var authKeyCache = {}; + var rowScores = {}; + var lastPos = range.start; + + function processScore(index, length, value) { + var line = editorDoc.getLine(lastPos.row); + var rowScore = rowScores[lastPos.row] = rowScores[lastPos.row] || {}; + var score = Math.min(line.length - lastPos.column, length); + var scoreObj = rowScore[value] = rowScore[value] || { edits: [], score: 0 }; + scoreObj.edits.push({ pos: lastPos, length: score }); + scoreObj.score += score; + var pos = editorDoc.indexToPosition(index + length); + if (lastPos.row !== pos.row) { + if (value) { + for (var i = lastPos.row + 1; i < pos.row; i++) + authKeyCache[i] = value; + } + line = editorDoc.getLine(pos.row); + rowScore = rowScores[pos.row] = rowScores[pos.row] || {}; + score = pos.column; + scoreObj = rowScore[value] = rowScore[value] || { edits: [], score: 0 }; + scoreObj.edits.push({ pos: pos, length: score }); + scoreObj.score += score; + } + lastPos = pos; + } + AuthorAttributes.traverse(authAttribs, startI, endI, processScore); + + for (var rowNum in rowScores) { + var rowScore = rowScores[rowNum]; + delete rowScore[null]; + delete rowScore[undefined]; + delete rowScore[0]; + var authorKeys = Object.keys(rowScore); + + if (authorKeys.length === 0) { + delete rowScores[rowNum]; + } + else if (authorKeys.length === 1) { + authKeyCache[rowNum] = parseInt(authorKeys[0], 10); + } + else { + var biggestScore = 0; + var authKey; + for (var key in rowScore) { + if (rowScore[key].score > biggestScore) { + biggestScore = rowScore[key].score; + authKey = key; + } + } + authKeyCache[rowNum] = parseInt(authKey, 10); + } + } + + return { + authorKeys: authKeyCache, + rowScores: rowScores + }; + } function getLineAuthorKey(session, authAttribs, row) { var editorDoc = session.doc; diff --git a/lib/tern/package.json b/lib/tern/package.json index 0fed9ea9..16dce41b 100644 --- a/lib/tern/package.json +++ b/lib/tern/package.json @@ -40,7 +40,6 @@ "process" ] }, - "gitHead": "39015d544d4c00c7899fea4c95c2e5bc2720e68e", "contributors": [ { "name": "List of Tern contributors. Updated before every release." @@ -241,6 +240,7 @@ "name": "vheon" } ], + "gitHead": "39015d544d4c00c7899fea4c95c2e5bc2720e68e", "readme": "# Tern\n\n[![Build Status](https://secure.travis-ci.org/ternjs/tern.png)](http://travis-ci.org/ternjs/tern)\n[![NPM version](https://img.shields.io/npm/v/tern.svg)](https://www.npmjs.org/package/tern) \n[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/)\n\nThis is [Tern][1]. Tern is a stand-alone, editor-independent\nJavaScript analyzer that can be used to improve the JavaScript\nintegration of existing editors.\n\nThanks to a group of generous [crowd funders][2], Tern is open-source\nsoftware, under an MIT license.\n\nThere are currently plugins available for [Emacs][emacs] (and Emacs\n[company-mode][cmode]), [Vim][vim], [Sublime Text][st], [Eclipse (and general Java API)][ec],\n[Light Table][lt], [Atom][atom] and [gedit][gedit], and built-in support in\n[Brackets][brackets], [Edge Code][edge_code], and [CodeLite](http://codelite.org/).\n\nFor further documentation, see the [project page][1] and the\n[manual][3]. To report issues, use the\n[issue tracker](https://github.com/ternjs/tern/issues). For questions\nand documentation, see the\n[discussion forum](https://discuss.ternjs.net).\n\n[1]: http://ternjs.net\n[2]: http://www.indiegogo.com/projects/tern-intelligent-javascript-editing\n[3]: http://ternjs.net/doc/manual.html\n\n[emacs]: http://ternjs.net/doc/manual.html#emacs\n[ec]: https://github.com/angelozerr/tern.java\n[vim]: https://github.com/ternjs/tern_for_vim\n[st]: https://github.com/ternjs/tern_for_sublime\n[lt]: https://github.com/mortalapeman/LT-TernJS\n[atom]: https://atom.io/packages/atom-ternjs\n[gedit]: https://github.com/Swatinem/tern_for_gedit\n[brackets]: http://brackets.io\n[edge_code]: http://html.adobe.com/edge/code\n[cmode]: https://github.com/proofit404/company-tern\n", "readmeFilename": "README.md", "bugs": { @@ -248,7 +248,7 @@ }, "homepage": "https://github.com/ternjs/tern#readme", "_id": "tern@0.16.1", - "_shasum": "08b41975eefb7dca8f4b80fcd9df49f4c7b6e975", + "_shasum": "17da1e5782ab1c6c62c483f20fb0bf8506907908", "_from": "git+https://github.com/cloud9ide/tern.git#39015d544d4c00c7899fea4c95c2e5bc2720e68e", "_resolved": "git+https://github.com/cloud9ide/tern.git#39015d544d4c00c7899fea4c95c2e5bc2720e68e" } diff --git a/lib/tern_from_ts/package.json b/lib/tern_from_ts/package.json index c3775213..6c3e4b08 100644 --- a/lib/tern_from_ts/package.json +++ b/lib/tern_from_ts/package.json @@ -20,7 +20,7 @@ "readme": "# tern_from_ts\n\nTern signatures extracted from typescript signatures.\n\nLicense: MIT\n\nSee also https://github.com/marijnh/tern and https://github.com/borisyankov/DefinitelyTyped\n", "readmeFilename": "README.md", "_id": "tern_from_ts@0.0.1", - "_shasum": "bc573b8c7da1d528a11b8c09ddbc63b253c74035", + "_shasum": "87a651d582f5906a2ff38f087a31de2b17f4ebff", "_from": "git+https://github.com/cloud9ide/tern_from_ts.git#66df507986bbdd63f3bc4f0c53edb39169ce4f1c", "_resolved": "git+https://github.com/cloud9ide/tern_from_ts.git#66df507986bbdd63f3bc4f0c53edb39169ce4f1c" } diff --git a/node_modules/nak/package.json b/node_modules/nak/package.json index d946aaec..4b03ce3f 100644 --- a/node_modules/nak/package.json +++ b/node_modules/nak/package.json @@ -52,7 +52,7 @@ }, "homepage": "https://github.com/gjtorikian/nak#readme", "_id": "nak@0.3.3", - "_shasum": "21dd6e2b1160557f4dfb48f4192a4607a340520d", + "_shasum": "d4bd3eb26edde97b3f5e358469247c581b12c7ff", "_from": "git+https://github.com/cloud9ide/nak.git#6deef931594", "_resolved": "git+https://github.com/cloud9ide/nak.git#6deef931594787edd167040f7352e3e7533430e4" } diff --git a/node_modules/tern/package.json b/node_modules/tern/package.json index 0fed9ea9..16dce41b 100644 --- a/node_modules/tern/package.json +++ b/node_modules/tern/package.json @@ -40,7 +40,6 @@ "process" ] }, - "gitHead": "39015d544d4c00c7899fea4c95c2e5bc2720e68e", "contributors": [ { "name": "List of Tern contributors. Updated before every release." @@ -241,6 +240,7 @@ "name": "vheon" } ], + "gitHead": "39015d544d4c00c7899fea4c95c2e5bc2720e68e", "readme": "# Tern\n\n[![Build Status](https://secure.travis-ci.org/ternjs/tern.png)](http://travis-ci.org/ternjs/tern)\n[![NPM version](https://img.shields.io/npm/v/tern.svg)](https://www.npmjs.org/package/tern) \n[Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?again)](https://marijnhaverbeke.nl/fund/)\n\nThis is [Tern][1]. Tern is a stand-alone, editor-independent\nJavaScript analyzer that can be used to improve the JavaScript\nintegration of existing editors.\n\nThanks to a group of generous [crowd funders][2], Tern is open-source\nsoftware, under an MIT license.\n\nThere are currently plugins available for [Emacs][emacs] (and Emacs\n[company-mode][cmode]), [Vim][vim], [Sublime Text][st], [Eclipse (and general Java API)][ec],\n[Light Table][lt], [Atom][atom] and [gedit][gedit], and built-in support in\n[Brackets][brackets], [Edge Code][edge_code], and [CodeLite](http://codelite.org/).\n\nFor further documentation, see the [project page][1] and the\n[manual][3]. To report issues, use the\n[issue tracker](https://github.com/ternjs/tern/issues). For questions\nand documentation, see the\n[discussion forum](https://discuss.ternjs.net).\n\n[1]: http://ternjs.net\n[2]: http://www.indiegogo.com/projects/tern-intelligent-javascript-editing\n[3]: http://ternjs.net/doc/manual.html\n\n[emacs]: http://ternjs.net/doc/manual.html#emacs\n[ec]: https://github.com/angelozerr/tern.java\n[vim]: https://github.com/ternjs/tern_for_vim\n[st]: https://github.com/ternjs/tern_for_sublime\n[lt]: https://github.com/mortalapeman/LT-TernJS\n[atom]: https://atom.io/packages/atom-ternjs\n[gedit]: https://github.com/Swatinem/tern_for_gedit\n[brackets]: http://brackets.io\n[edge_code]: http://html.adobe.com/edge/code\n[cmode]: https://github.com/proofit404/company-tern\n", "readmeFilename": "README.md", "bugs": { @@ -248,7 +248,7 @@ }, "homepage": "https://github.com/ternjs/tern#readme", "_id": "tern@0.16.1", - "_shasum": "08b41975eefb7dca8f4b80fcd9df49f4c7b6e975", + "_shasum": "17da1e5782ab1c6c62c483f20fb0bf8506907908", "_from": "git+https://github.com/cloud9ide/tern.git#39015d544d4c00c7899fea4c95c2e5bc2720e68e", "_resolved": "git+https://github.com/cloud9ide/tern.git#39015d544d4c00c7899fea4c95c2e5bc2720e68e" } diff --git a/node_modules/tern_from_ts/package.json b/node_modules/tern_from_ts/package.json index c3775213..6c3e4b08 100644 --- a/node_modules/tern_from_ts/package.json +++ b/node_modules/tern_from_ts/package.json @@ -20,7 +20,7 @@ "readme": "# tern_from_ts\n\nTern signatures extracted from typescript signatures.\n\nLicense: MIT\n\nSee also https://github.com/marijnh/tern and https://github.com/borisyankov/DefinitelyTyped\n", "readmeFilename": "README.md", "_id": "tern_from_ts@0.0.1", - "_shasum": "bc573b8c7da1d528a11b8c09ddbc63b253c74035", + "_shasum": "87a651d582f5906a2ff38f087a31de2b17f4ebff", "_from": "git+https://github.com/cloud9ide/tern_from_ts.git#66df507986bbdd63f3bc4f0c53edb39169ce4f1c", "_resolved": "git+https://github.com/cloud9ide/tern_from_ts.git#66df507986bbdd63f3bc4f0c53edb39169ce4f1c" } diff --git a/package.json b/package.json index 8f26721b..f1539b12 100644 --- a/package.json +++ b/package.json @@ -49,5 +49,5 @@ }, "devDependencies": {}, "licenses": [], - "revision": "7e901541963c791d13d8d182dcdae1abce4aee33" + "revision": "2e524ab8ba61b422d3605eafecc2140090d6a8fb" } diff --git a/version b/version index e3b644ef..d3702c0b 100644 --- a/version +++ b/version @@ -1 +1 @@ -1524106654 +1524193061