8000 Merge pull request #98 from rtfpessoa/fix-nbsp-properly · hubgit/diff2html@1f2ffdb · GitHub
[go: up one dir, main page]

Skip to content

Commit 1f2ffdb

Browse files
authored
Merge pull request rtfpessoa#98 from rtfpessoa/fix-nbsp-properly
Fix convert &nbps; to proper white spaces with white-space wrap
2 parents 5303b2f + f43e03e commit 1f2ffdb

File tree

9 files changed

+117
-86
lines changed

9 files changed

+117
-86
lines changed

docs/assets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../dist

src/line-by-line-printer.js

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,15 @@
120120
var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, that.config);
121121

122122
processedOldLines +=
123-
that.makeLineHtml(deleteType, oldLine.oldNumber, oldLine.newNumber,
123+
that.makeLineHtml(file.isCombined, deleteType, oldLine.oldNumber, oldLine.newNumber,
124124
diff.first.line, diff.first.prefix);
125125
processedNewLines +=
126-
that.makeLineHtml(insertType, newLine.oldNumber, newLine.newNumber,
126+
that.makeLineHtml(file.isCombined, insertType, newLine.oldNumber, newLine.newNumber,
127127
diff.second.line, diff.second.prefix);
128128
}
129129

130130
lines += processedOldLines + processedNewLines;
131-
lines += that._processLines(oldLines.slice(common), newLines.slice(common));
131+
lines += that._processLines(file.isCombined, oldLines.slice(common), newLines.slice(common));
132132
});
133133

134134
oldLines = [];
@@ -145,9 +145,9 @@
145145
}
146146

147147
if (line.type === diffParser.LINE_TYPE.CONTEXT) {
148-
lines += that.makeLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
148+
lines += that.makeLineHtml(file.isCombined, line.type, line.oldNumber, line.newNumber, escapedLine);
149149
} else if (line.type === diffParser.LINE_TYPE.INSERTS && !oldLines.length) {
150-
lines += that.makeLineHtml(line.type, line.oldNumber, line.newNumber, escapedLine);
150+
lines += that.makeLineHtml(file.isCombined, line.type, line.oldNumber, line.newNumber, escapedLine);
151151
} else if (line.type === diffParser.LINE_TYPE.DELETES) {
152152
oldLines.push(line);
153153
} else if (line.type === diffParser.LINE_TYPE.INSERTS && Boolean(oldLines.length)) {
@@ -164,37 +164,46 @@
164164
}).join('\n');
165165
};
166166

167-
LineByLinePrinter.prototype._processLines = function(oldLines, newLines) {
167+
LineByLinePrinter.prototype._processLines = function(isCombined, oldLines, newLines) {
168168
var lines = '';
169169

170170
for (var i = 0; i < oldLines.length; i++) {
171171
var oldLine = oldLines[i];
172172
var oldEscapedLine = utils.escape(oldLine.content);
173-
lines += this.makeLineHtml(oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine);
173+
lines += this.makeLineHtml(isCombined, oldLine.type, oldLine.oldNumber, oldLine.newNumber, oldEscapedLine);
174174
}
175175

176176
for (var j = 0; j < newLines.length; j++) {
177177
var newLine = newLines[j];
178178
var newEscapedLine = utils.escape(newLine.content);
179-
lines += this.makeLineHtml(newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine);
179+
lines += this.makeLineHtml(isCombined, newLine.type, newLine.oldNumber, newLine.newNumber, newEscapedLine);
180180
}
181181

182182
return lines;
183183
};
184184

185-
LineByLinePrinter.prototype.makeLineHtml = function(type, oldNumber, newNumber, content, prefix) {
185+
LineByLinePrinter.prototype.makeLineHtml = function(isCombined, type, oldNumber, newNumber, content, possiblePrefix) {
186186
var lineNumberTemplate = hoganUtils.render(baseTemplatesPath, 'numbers', {
187187
oldNumber: utils.valueOrEmpty(oldNumber),
188188
newNumber: utils.valueOrEmpty(newNumber)
189189
});
190190

191+
var lineWithoutPrefix = content;
192+
var prefix = possiblePrefix;
193+
194+
if (!prefix) {
195+
var lineWithPrefix = printerUtils.separatePrefix(isCombined, content);
196+
prefix = lineWithPrefix.prefix;
197+
lineWithoutPrefix = lineWithPrefix.line;
198+
}
199+
191200
return hoganUtils.render(genericTemplatesPath, 'line',
192201
{
193202
type: type,
194203
lineClass: 'd2h-code-linenumber',
195204
contentClass: 'd2h-code-line',
196-
prefix: prefix && utils.convertWhiteSpaceToNonBreakingSpace(prefix),
197-
content: content && utils.convertWhiteSpaceToNonBreakingSpace(content),
205+
prefix: prefix,
206+
content: lineWithoutPrefix,
198207
lineNumber: lineNumberTemplate
199208
});
200209
};

src/printer-utils.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,24 @@
1515
10000 function PrinterUtils() {
1616
}
1717

18+
PrinterUtils.prototype.separatePrefix = function(isCombined, line) {
19+
var prefix;
20+
var lineWithoutPrefix;
21+
22+
if (isCombined) {
23+
prefix = line.substring(0, 2);
24+
lineWithoutPrefix = line.substring(2);
25+
} else {
26+
prefix = line.substring(0, 1);
27+
lineWithoutPrefix = line.substring(1);
28+
}
29+
30+
return {
31+
'prefix': prefix,
32+
'line': lineWithoutPrefix
33+
};
34+
};
35+
1836
PrinterUtils.prototype.getHtmlId = function(file) {
1937
var hashCode = function(text) {
2038
var i, chr, len;

src/side-by-side-printer.js

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -122,18 +122,18 @@
122122
var diff = printerUtils.diffHighlight(oldLine.content, newLine.content, that.config);
123123

124124
fileHtml.left +=
125-
that.generateSingleLineHtml(deleteType, oldLine.oldNumber,
125+
that.generateSingleLineHtml(file.isCombined, deleteType, oldLine.oldNumber,
126126
diff.first.line, diff.first.prefix);
127127
fileHtml.right +=
128-
that.generateSingleLineHtml(insertType, newLine.newNumber,
128+
that.generateSingleLineHtml(file.isCombined, insertType, newLine.newNumber,
129129
diff.second.line, diff.second.prefix);
130130
}
131131

132132
if (max > common) {
133133
var oldSlice = oldLines.slice(common);
134 F987 134
var newSlice = newLines.slice(common);
135135

136-
var tmpHtml = that.processLines(oldSlice, newSlice);
136+
var tmpHtml = that.processLines(file.isCombined, oldSlice, newSlice);
137137
fileHtml.left += tmpHtml.left;
138138
fileHtml.right += tmpHtml.right;
139139
}
@@ -154,11 +154,11 @@
154154
}
155155

156156
if (line.type === diffParser.LINE_TYPE.CONTEXT) {
157-
fileHtml.left += that.generateSingleLineHtml(line.type, line.oldNumber, escapedLine, prefix);
158-
fileHtml.right += that.generateSingleLineHtml(line.type, line.newNumber, escapedLine, prefix);
157+
fileHtml.left += that.generateSingleLineHtml(file.isCombined, line.type, line.oldNumber, escapedLine, prefix);
158+
fileHtml.right += that.generateSingleLineHtml(file.isCombined, line.type, line.newNumber, escapedLine, prefix);
159159
} else if (line.type === diffParser.LINE_TYPE.INSERTS && !oldLines.length) {
160-
fileHtml.left += that.generateSingleLineHtml(diffParser.LINE_TYPE.CONTEXT, '', '', '');
161-
fileHtml.right += that.generateSingleLineHtml(line.type, line.newNumber, escapedLine, prefix);
160+
fileHtml.left += that.generateSingleLineHtml(file.isCombined, diffParser.LINE_TYPE.CONTEXT, '', '', '');
161+
fileHtml.right += that.generateSingleLineHtml(file.isCombined, line.type, line.newNumber, escapedLine, prefix);
162162
} else if (line.type === diffParser.LINE_TYPE.DELETES) {
163163
oldLines.push(line);
164164
} else if (line.type === diffParser.LINE_TYPE.INSERTS && Boolean(oldLines.length)) {
@@ -175,7 +175,7 @@
175175
return fileHtml;
176176
};
177177

178-
SideBySidePrinter.prototype.processLines = function(oldLines, newLines) {
178+
SideBySidePrinter.prototype.processLines = function(isCombined, oldLines, newLines) {
179179
var that = this;
180180
var fileHtml = {};
181181
fileHtml.left = '';
@@ -201,14 +201,14 @@
201201
}
202202

203203
if (oldLine && newLine) {
204-
fileHtml.left += that.generateSingleLineHtml(oldLine.type, oldLine.oldNumber, oldContent, oldPrefix);
205-
fileHtml.right += that.generateSingleLineHtml(newLine.type, newLine.newNumber, newContent, newPrefix);
204+
fileHtml.left += that.generateSingleLineHtml(isCombined, oldLine.type, oldLine.oldNumber, oldContent, oldPrefix);
205+
fileHtml.right += that.generateSingleLineHtml(isCombined, newLine.type, newLine.newNumber, newContent, newPrefix);
206206
} else if (oldLine) {
207-
fileHtml.left += that.generateSingleLineHtml(oldLine.type, oldLine.oldNumber, oldContent, oldPrefix);
208-
fileHtml.right += that.generateSingleLineHtml(diffParser.LINE_TYPE.CONTEXT, '', '', '');
207+
fileHtml.left += that.generateSingleLineHtml(isCombined, oldLine.type, oldLine.oldNumber, oldContent, oldPrefix);
208+
fileHtml.right += that.generateSingleLineHtml(isCombined, diffParser.LINE_TYPE.CONTEXT, '', '', '');
209209
} else if (newLine) {
210-
fileHtml.left += that.generateSingleLineHtml(diffParser.LINE_TYPE.CONTEXT, '', '', '');
211-
fileHtml.right += that.generateSingleLineHtml(newLine.type, newLine.newNumber, newContent, newPrefix);
210+
fileHtml.left += that.generateSingleLineHtml(isCombined, diffParser.LINE_TYPE.CONTEXT, '', '', '');
211+
fileHtml.right += that.generateSingleLineHtml(isCombined, newLine.type, newLine.newNumber, newContent, newPrefix);
212212
} else {
213213
console.error('How did it get here?');
214214
}
@@ -217,14 +217,23 @@
217217
return fileHtml;
218218
};
219219

220-
SideBySidePrinter.prototype.generateSingleLineHtml = function(type, number, content, prefix) {
220+
SideBySidePrinter.prototype.generateSingleLineHtml = function(isCombined, type, number, content, possiblePrefix) {
221+
var lineWithoutPrefix = content;
222+
var prefix = possiblePrefix;
223+
224+
if (!prefix) {
225+
var lineWithPrefix = printerUtils.separatePrefix(isCombined, content);
226+
prefix = lineWithPrefix.prefix;
227+
lineWithoutPrefix = lineWithPrefix.line;
228+
}
229+
221230
return hoganUtils.render(genericTemplatesPath, 'line',
222231
{
223232
type: type,
224233
lineClass: 'd2h-code-side-linenumber',
225234
contentClass: 'd2h-code-side-line',
226-
prefix: prefix && utils.convertWhiteSpaceToNonBreakingSpace(prefix),
227-
content: content && utils.convertWhiteSpaceToNonBreakingSpace(content),
235+
prefix: prefix,
236+
content: lineWithoutPrefix,
228237
lineNumber: number
229238
});
230239
};

src/ui/css/diff2html.css

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@
4747
display: -ms-flexbox;
4848
display: flex;
4949
-webkit-box-align: center;
50-
-ms-flex-align: center;
51-
align-items: center;
50+
-ms-flex-align: center;
51+
align-items: center;
5252
width: 100%;
5353
font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif;
5454
font-size: 15px;
@@ -98,18 +98,20 @@
9898
}
9999

100100
.d2h-code-line {
101-
display: block;
101+
display: inline-block;
102102
white-space: nowrap;
103103
padding: 0 10px;
104104
margin-left: 80px;
105+
height: 20px;
106+
line-height: 20px;
105107
}
106108

107109
.d2h-code-side-line {
108-
display: block;
110+
display: inline-block;
109111
white-space: nowrap;
110112
padding: 0 10px;
111-
height: 18px;
112-
line-height: 18px;
113+
height: 20px;
114+
line-height: 20px;
113115
margin-left: 50px;
114116
}
115117

@@ -129,17 +131,23 @@
129131
text-decoration: none;
130132
background-color: #97f295;
131133
border-radius: 0.2em;
134+
text-align: left;
132135
}
133136

134137
.d2h-code-line-prefix {
135-
float: left;
138+
display: inline;
136139
background: none;
137140
padding: 0;
141+
word-wrap: normal;
142+
white-space: pre;
138143
}
139144

140145
.d2h-code-line-ctn {
146+
display: inline;
141147
background: none;
142148
padding: 0;
149+
word-wrap: normal;
150+
white-space: pre;
143151
}
144152

145153
.line-num1 {
@@ -353,7 +361,7 @@
353361
}
354362

355363
.selecting-left .d2h-code-line::-moz-selection,
356-
.selecting-left .d2h-code-line *::-moz-selection
364+
.selecting-left .d2h-code-line *::-moz-selection,
357365
.selecting-right td.d2h-code-linenumber::-moz-selection,
358366
.selecting-left .d2h-code-side-line::-moz-selection,
359367
.selecting-left .d2h-code-side-line *::-moz-selection,
@@ -363,7 +371,7 @@
363371
}
364372

365373
.selecting-left .d2h-code-line::selection,
366-
.selecting-left .d2h-code-line *::selection
374+
.selecting-left .d2h-code-line *::selection,
367375
.selecting-right td.d2h-code-linenumber::selection,
368376
.selecting-left .d2h-code-side-line::selection,
369377
.selecting-left .d2h-code-side-line *::selection,

src/utils.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@
99
function Utils() {
1010
}
1111

12-
Utils.prototype.convertWhiteSpaceToNonBreakingSpace = function(str) {
13-
return str.slice(0).replace(/ /g, '&nbsp;');
14-
};
15-
1612
Utils.prototype.escape = function(str) {
1713
return str.slice(0)
1814
.replace(/&/g, '&amp;')

0 commit comments

Comments
 (0)
0