Version > Only send differences line index

This commit is contained in:
brunosimon
2017-09-03 00:33:57 +02:00
parent 8e68b6ece7
commit e1562cccad
3 changed files with 81 additions and 88 deletions
+70 -4
View File
@@ -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
}
+6 -79
View File
@@ -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
}
},
+5 -5
View File
@@ -1,12 +1,12 @@
<div class="viewer" v-if="version">
<pre class="code" v-highlightjs="version.content" contenteditable @keydown="onCodeKeyDown($event)"><code :class="[ extension ]"></code></pre>
<div class="lines">
<div class="line" v-for="line in lines" @click.prevent="onLineClick(line.index)">
<span class="added" v-if="line.added && differencesActive">+</span>
<span class="removed" v-if="line.removed && differencesActive">-</span>
<span class="index">{{ line.index }}.</span>
<div class="line" v-for="line in linesCount" @click.prevent="onLineClick(line)">
<span class="added" v-if="version.addedLines.indexOf(line - 1) !== -1 && differencesActive">+</span>
<span class="removed" v-if="version.removedLines.indexOf(line - 1) !== -1 && differencesActive">-</span>
<span class="index">{{ line }}.</span>
<span class="question">?</span>
<span class="active" v-if="line.active">!</span>
<span class="active" v-if="line === currentLine">!</span>
</div>
</div>
</div>