From e1562cccad32a40dcec2fe9027e22ea3d8b0f3c2 Mon Sep 17 00:00:00 2001 From: brunosimon Date: Sun, 3 Sep 2017 00:33:57 +0200 Subject: [PATCH] :zap: Version > Only send differences line index --- lib/file.js | 74 +++++++++++++++++++-- site/src/components/viewer/script.js | 85 ++---------------------- site/src/components/viewer/template.html | 10 +-- 3 files changed, 81 insertions(+), 88 deletions(-) diff --git a/lib/file.js b/lib/file.js index ea712d6..c47e71d 100644 --- a/lib/file.js +++ b/lib/file.js @@ -42,22 +42,28 @@ class File version.date = new Date() version.content = content + // First version if(!lastVersion) { - version.diff = false + version.addedLines = [] + version.removedLines = [] } + // No content else if(version.content === '') { - version.diff = [{ count: 1, added: true, removed: undefined, value: 'a' }] + version.addedLines = [] + version.removedLines = [] + // Don't save if last version had no content too if(lastVersion.content === '') { return false } } + // Content else { - version.diff = diff.diffLines( + const differences = diff.diffLines( lastVersion.content, version.content, { @@ -65,8 +71,68 @@ class File } ) + // Set added lines + version.addedLines = [] + + let lineProgress = 0 + + // Added lines and unchanged lines + for(const differenceKey in differences) + { + const difference = differences[differenceKey] + let lineBreaks = (difference.value.match(/\n/g) || []).length + + if(parseInt(differenceKey) === differences.length - 1) + { + lineBreaks += 1 + } + + if(difference.added) + { + for(let i = 0; i < lineBreaks; i++) + { + version.addedLines.push(lineProgress + i) + } + } + + if(!difference.removed) + { + lineProgress += lineBreaks + } + } + + // Set removed lines + version.removedLines = [] + + lineProgress = 0 + + // Removed lines + for(const differenceKey in differences) + { + const difference = differences[differenceKey] + let lineBreaks = (difference.value.match(/\n/g) || []).length + + if(parseInt(differenceKey) === differences.length - 1) + { + lineBreaks += 1 + } + + if(difference.removed) + { + if(version.addedLines.indexOf(lineProgress) === -1 && version.addedLines.indexOf(lineProgress + 1) === -1) + { + version.removedLines.push(lineProgress) + } + } + + if(!difference.removed) + { + lineProgress += lineBreaks + } + } + // No changed - if(version.diff.length === 1 && lastVersion.content !== '') + if(differences.length === 1 && lastVersion.content !== '') { return false } diff --git a/site/src/components/viewer/script.js b/site/src/components/viewer/script.js index 4381443..3e56632 100644 --- a/site/src/components/viewer/script.js +++ b/site/src/components/viewer/script.js @@ -24,87 +24,14 @@ export default return this.$store.state.files.currentVersion }, - lines() + linesCount() { - const lines = [] - const lineBreaks = (this.version.content.match(/\n/g) || []).length + 1 - const currentLine = this.$store.state.files.currentLine + return (this.version.content.match(/\n/g) || []).length + 1 + }, - // Create all lines - for(let i = 0; i < lineBreaks; i++) - { - const line = {} - line.index = lines.length + 1 - line.added = false - line.removed = false - line.active = currentLine !== null && i === currentLine - 1 - - lines.push(line) - } - - // Loop through each diff and add line infos - if(this.version.diff) - { - let lineProgress = 0 - - // Added lines and unchanged lines - for(const diffKey in this.version.diff) - { - const diff = this.version.diff[diffKey] - let lineBreaks = (diff.value.match(/\n/g) || []).length - - if(parseInt(diffKey) === this.version.diff.length - 1) - { - lineBreaks += 1 - } - - if(diff.added) - { - for(let i = 0; i < lineBreaks; i++) - { - const line = lines[lineProgress + i] - line.added = true - } - } - - if(!diff.removed) - { - lineProgress += lineBreaks - } - } - - lineProgress = 0 - - // Removed lines - for(const diffKey in this.version.diff) - { - const diff = this.version.diff[diffKey] - let lineBreaks = (diff.value.match(/\n/g) || []).length - - if(parseInt(diffKey) === this.version.diff.length - 1) - { - lineBreaks += 1 - } - - if(diff.removed) - { - const line = lines[lineProgress] - const nextLine = lines[lineProgress + 1] - - if(!line.added && (!nextLine || nextLine.added === false)) - { - line.removed = true - } - } - - if(!diff.removed) - { - lineProgress += lineBreaks - } - } - } - - return lines + currentLine() + { + return this.$store.state.files.currentLine } }, diff --git a/site/src/components/viewer/template.html b/site/src/components/viewer/template.html index 5379d9c..e805dc0 100644 --- a/site/src/components/viewer/template.html +++ b/site/src/components/viewer/template.html @@ -1,12 +1,12 @@
-
- + - - - {{ line.index }}. +
+ + + - + {{ line }}. ? - ! + !
\ No newline at end of file