feat: add tooltip for differences overview
This commit is contained in:
@@ -116,6 +116,10 @@
|
|||||||
const lineDiffs = diffLines(prompt1, prompt2)
|
const lineDiffs = diffLines(prompt1, prompt2)
|
||||||
|
|
||||||
let resultHtml = '';
|
let resultHtml = '';
|
||||||
|
let changedLines: string[] = []
|
||||||
|
let modifiedLinesCount = 0
|
||||||
|
let addedLinesCount = 0
|
||||||
|
let removedLinesCount = 0
|
||||||
|
|
||||||
for (let i = 0; i < lineDiffs.length; i++) {
|
for (let i = 0; i < lineDiffs.length; i++) {
|
||||||
const linePart = lineDiffs[i]
|
const linePart = lineDiffs[i]
|
||||||
@@ -123,15 +127,24 @@
|
|||||||
if(linePart.removed){
|
if(linePart.removed){
|
||||||
const nextPart = lineDiffs[i + 1]
|
const nextPart = lineDiffs[i + 1]
|
||||||
if(nextPart?.added){
|
if(nextPart?.added){
|
||||||
resultHtml += `<div style="border-left: 4px solid blue; padding-left: 8px;">${await highlightChanges(linePart.value, nextPart.value)}</div>`
|
const modifiedLine = `<div style="border-left: 4px solid blue; padding-left: 8px;">${await highlightChanges(linePart.value, nextPart.value)}</div>`
|
||||||
|
changedLines.push(modifiedLine)
|
||||||
|
resultHtml += modifiedLine
|
||||||
i++;
|
i++;
|
||||||
|
modifiedLinesCount += 1
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
resultHtml += `<div style="color: red; background-color: #ffe6e6; border-left: 4px solid red; padding-left: 8px;">${escapeHtml(linePart.value)}</div>`
|
const removedLine = `<div style="color: red; background-color: #ffe6e6; border-left: 4px solid red; padding-left: 8px;">${escapeHtml(linePart.value)}</div>`
|
||||||
|
changedLines.push(removedLine)
|
||||||
|
resultHtml += removedLine
|
||||||
|
removedLinesCount += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(linePart.added){
|
else if(linePart.added){
|
||||||
resultHtml += `<div style="color: green; background-color: #e6ffe6; border-left: 4px solid green; padding-left: 8px;">${escapeHtml(linePart.value)}</div>`
|
const addedLine = `<div style="color: green; background-color: #e6ffe6; border-left: 4px solid green; padding-left: 8px;">${escapeHtml(linePart.value)}</div>`
|
||||||
|
changedLines.push(addedLine)
|
||||||
|
resultHtml += addedLine
|
||||||
|
addedLinesCount += 1
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
resultHtml += `<div>${escapeHtml(linePart.value)}</div>`
|
resultHtml += `<div>${escapeHtml(linePart.value)}</div>`
|
||||||
@@ -147,8 +160,20 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
resultHtml = `<div style="background-color: #ff9800; color: white; padding: 10px 20px; border-radius: 5px; text-align: center;">Differences detected. Please review the changes.</div>` + resultHtml
|
const modifiedCount = `<span style="border-left: 4px solid blue; padding-left: 8px; padding-right: 8px;">${modifiedLinesCount}</span>`
|
||||||
|
const addedCount = `<span style="border-left: 4px solid green; padding-left: 8px; padding-right: 8px;">${addedLinesCount}</span>`
|
||||||
|
const removedCount = `<span style="border-left: 4px solid red; padding-left: 8px; padding-right: 8px;">${removedLinesCount}</span>`
|
||||||
|
const diffCounts = `<div>${modifiedCount}${addedCount}${removedCount}</div>`
|
||||||
|
|
||||||
|
resultHtml = `<div id="differences-detected" style="background-color: #ff9800; color: white; padding: 10px 20px; border-radius: 5px; text-align: center;">Differences detected. Please review the changes.${diffCounts}</div>` + resultHtml
|
||||||
alertMd(resultHtml)
|
alertMd(resultHtml)
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
const differencesDetected = document.querySelector('#differences-detected');
|
||||||
|
if (differencesDetected) {
|
||||||
|
differencesTooltip(changedLines)
|
||||||
|
}
|
||||||
|
}, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,6 +197,40 @@
|
|||||||
})
|
})
|
||||||
.join('')
|
.join('')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function differencesTooltip(changedLines: string[]) {
|
||||||
|
const differencesDetected = document.querySelector('#differences-detected')
|
||||||
|
if(!differencesDetected){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const tooltip = document.createElement('div')
|
||||||
|
tooltip.id = 'diff-tooltip'
|
||||||
|
tooltip.style.display = 'none'
|
||||||
|
tooltip.style.position = 'absolute'
|
||||||
|
tooltip.style.backgroundColor = '#282a36'
|
||||||
|
tooltip.style.padding = '10px'
|
||||||
|
tooltip.style.borderRadius = '5px'
|
||||||
|
tooltip.style.boxShadow = '0px 5px 5px rgba(0, 0, 0, 1)'
|
||||||
|
tooltip.style.maxWidth = '500px'
|
||||||
|
tooltip.style.overflowY = 'auto'
|
||||||
|
tooltip.style.maxHeight = '300px'
|
||||||
|
tooltip.style.textAlign = 'initial'
|
||||||
|
|
||||||
|
differencesDetected.appendChild(tooltip)
|
||||||
|
|
||||||
|
differencesDetected.addEventListener('mouseenter', () => {
|
||||||
|
const tooltipContent = !changedLines.length ? '' : `<div><strong>Changed Lines</strong></div>
|
||||||
|
<div>${changedLines.join('<br>')}</div>`
|
||||||
|
|
||||||
|
tooltip.innerHTML = tooltipContent;
|
||||||
|
tooltip.style.display = 'block'
|
||||||
|
})
|
||||||
|
|
||||||
|
differencesDetected.addEventListener('mouseleave', () => {
|
||||||
|
tooltip.style.display = 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function handleDiffMode(id: number) {
|
async function handleDiffMode(id: number) {
|
||||||
|
|||||||
Reference in New Issue
Block a user