⚡ Version > Only send differences line index
This commit is contained in:
+70
-4
@@ -42,22 +42,28 @@ class File
|
|||||||
version.date = new Date()
|
version.date = new Date()
|
||||||
version.content = content
|
version.content = content
|
||||||
|
|
||||||
|
// First version
|
||||||
if(!lastVersion)
|
if(!lastVersion)
|
||||||
{
|
{
|
||||||
version.diff = false
|
version.addedLines = []
|
||||||
|
version.removedLines = []
|
||||||
}
|
}
|
||||||
|
// No content
|
||||||
else if(version.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 === '')
|
if(lastVersion.content === '')
|
||||||
{
|
{
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Content
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
version.diff = diff.diffLines(
|
const differences = diff.diffLines(
|
||||||
lastVersion.content,
|
lastVersion.content,
|
||||||
version.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
|
// No changed
|
||||||
if(version.diff.length === 1 && lastVersion.content !== '')
|
if(differences.length === 1 && lastVersion.content !== '')
|
||||||
{
|
{
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,87 +24,14 @@ export default
|
|||||||
return this.$store.state.files.currentVersion
|
return this.$store.state.files.currentVersion
|
||||||
},
|
},
|
||||||
|
|
||||||
lines()
|
linesCount()
|
||||||
{
|
{
|
||||||
const lines = []
|
return (this.version.content.match(/\n/g) || []).length + 1
|
||||||
const lineBreaks = (this.version.content.match(/\n/g) || []).length + 1
|
},
|
||||||
const currentLine = this.$store.state.files.currentLine
|
|
||||||
|
|
||||||
// Create all lines
|
currentLine()
|
||||||
for(let i = 0; i < lineBreaks; i++)
|
|
||||||
{
|
{
|
||||||
const line = {}
|
return this.$store.state.files.currentLine
|
||||||
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
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<div class="viewer" v-if="version">
|
<div class="viewer" v-if="version">
|
||||||
<pre class="code" v-highlightjs="version.content" contenteditable @keydown="onCodeKeyDown($event)"><code :class="[ extension ]"></code></pre>
|
<pre class="code" v-highlightjs="version.content" contenteditable @keydown="onCodeKeyDown($event)"><code :class="[ extension ]"></code></pre>
|
||||||
<div class="lines">
|
<div class="lines">
|
||||||
<div class="line" v-for="line in lines" @click.prevent="onLineClick(line.index)">
|
<div class="line" v-for="line in linesCount" @click.prevent="onLineClick(line)">
|
||||||
<span class="added" v-if="line.added && differencesActive">+</span>
|
<span class="added" v-if="version.addedLines.indexOf(line - 1) !== -1 && differencesActive">+</span>
|
||||||
<span class="removed" v-if="line.removed && differencesActive">-</span>
|
<span class="removed" v-if="version.removedLines.indexOf(line - 1) !== -1 && differencesActive">-</span>
|
||||||
<span class="index">{{ line.index }}.</span>
|
<span class="index">{{ line }}.</span>
|
||||||
<span class="question">?</span>
|
<span class="question">?</span>
|
||||||
<span class="active" v-if="line.active">!</span>
|
<span class="active" v-if="line === currentLine">!</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user