⚡ Version > Only send differences line index
This commit is contained in:
+70
-4
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user