Skip to content

Commit d7c7e05

Browse files
authored
Tweak blob diff indicator (OctoLinker#682)
1 parent 500be4c commit d7c7e05

File tree

4 files changed

+222
-64
lines changed

4 files changed

+222
-64
lines changed

packages/blob-reader/__snapshots__/test.js.snap

Lines changed: 146 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -74,50 +74,162 @@ Array [
7474
]
7575
`;
7676

77-
exports[`blob-reader diff split 1st line 1`] = `
78-
Object {
79-
"lineNumber": 1,
80-
"value": "// Most popular rabbit names",
81-
}
77+
exports[`blob-reader diff split internals 1`] = `
78+
Array [
79+
Object {
80+
"lineNumber": 1,
81+
"side": "left",
82+
"value": "// Most popular rabbit names",
83+
},
84+
Object {
85+
"lineNumber": 1,
86+
"side": "right",
87+
"value": "// Most popular rabbit names",
88+
},
89+
Object {
90+
"lineNumber": 2,
91+
"side": "left",
92+
"value": "",
93+
},
94+
Object {
95+
"lineNumber": 2,
96+
"side": "right",
97+
"value": "",
98+
},
99+
Object {
100+
"lineNumber": 3,
101+
"side": "left",
102+
"value": "Thumper",
103+
},
104+
Object {
105+
"lineNumber": 3,
106+
"side": "right",
107+
"value": "Thumper",
108+
},
109+
Object {
110+
"lineNumber": 4,
111+
"side": "right",
112+
"value": "Mozart",
113+
},
114+
Object {
115+
"lineNumber": 4,
116+
"side": "left",
117+
"value": "Daisy",
118+
},
119+
Object {
120+
"lineNumber": 5,
121+
"side": "right",
122+
"value": "Daisy",
123+
},
124+
Object {
125+
"lineNumber": 5,
126+
"side": "left",
127+
"value": "Lily",
128+
},
129+
Object {
130+
"lineNumber": 6,
131+
"side": "right",
132+
"value": "Annelie",
133+
},
134+
]
82135
`;
83136

84-
exports[`blob-reader diff split additions 1`] = `
85-
Object {
86-
"addition": true,
87-
"lineNumber": 4,
88-
"value": "Mozart",
89-
}
137+
exports[`blob-reader diff split toString("left") 1`] = `
138+
"// Most popular rabbit names
139+
140+
Thumper
141+
Daisy
142+
Lily"
90143
`;
91144

92-
exports[`blob-reader diff split deletions 1`] = `
93-
Object {
94-
"deletion": true,
95-
"lineNumber": 5,
96-
"value": "Lily",
97-
}
145+
exports[`blob-reader diff split toString("right") 1`] = `
146+
"// Most popular rabbit names
147+
148+
Thumper
149+
Mozart
150+
Daisy
151+
Annelie"
98152
`;
99153

100-
exports[`blob-reader diff unified 1st line 1`] = `
101-
Object {
102-
"lineNumber": 1,
103-
"value": "// Most popular rabbit names",
104-
}
154+
exports[`blob-reader diff split toString() 1`] = `
155+
"// Most popular rabbit names
156+
// Most popular rabbit names
157+
158+
159+
Thumper
160+
Thumper
161+
Mozart
162+
Daisy
163+
Daisy
164+
Lily
165+
Annelie"
105166
`;
106167

107-
exports[`blob-reader diff unified additions 1`] = `
108-
Object {
109-
"addition": true,
110-
"lineNumber": 4,
111-
"value": "Mozart",
112-
}
168+
exports[`blob-reader diff unified internals 1`] = `
169+
Array [
170+
Object {
171+
"lineNumber": 1,
172+
"side": "context",
173+
"value": "// Most popular rabbit names",
174+
},
175+
Object {
176+
"lineNumber": 2,
177+
"side": "context",
178+
"value": "",
179+
},
180+
Object {
181+
"lineNumber": 3,
182+
"side": "context",
183+
"value": "Thumper",
184+
},
185+
Object {
186+
"lineNumber": 4,
187+
"side": "right",
188+
"value": "Mozart",
189+
},
190+
Object {
191+
"lineNumber": 5,
192+
"side": "context",
193+
"value": "Daisy",
194+
},
195+
Object {
196+
"lineNumber": 5,
197+
"side": "left",
198+
"value": "Lily",
199+
},
200+
Object {
201+
"lineNumber": 6,
202+
"side": "right",
203+
"value": "Annelie",
204+
},
205+
]
113206
`;
114207

115-
exports[`blob-reader diff unified deletions 1`] = `
116-
Object {
117-
"deletion": true,
118-
"lineNumber": 5,
119-
"value": "Lily",
120-
}
208+
exports[`blob-reader diff unified toString("left") 1`] = `
209+
"// Most popular rabbit names
210+
211+
Thumper
212+
Daisy
213+
Lily"
214+
`;
215+
216+
exports[`blob-reader diff unified toString("right") 1`] = `
217+
"// Most popular rabbit names
218+
219+
Thumper
220+
Mozart
221+
Daisy
222+
Annelie"
223+
`;
224+
225+
exports[`blob-reader diff unified toString() 1`] = `
226+
"// Most popular rabbit names
227+
228+
Thumper
229+
Mozart
230+
Daisy
231+
Lily
232+
Annelie"
121233
`;
122234

123235
exports[`blob-reader issue contains lines 1`] = `

packages/blob-reader/blob.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,32 @@ export default class Blob {
1818
this.path = getPath(el);
1919
this.lines = readLines(el);
2020
this.isDiff =
21-
this.lines.filter(line => line.addition || line.deletion).length > 0;
21+
this.lines.filter(({ side }) => ['left', 'right'].includes(side)).length >
22+
0;
23+
this.firstLineNumber = this.isDiff
24+
? parseInt(
25+
el.querySelector('tr:nth-child(2n) [data-line-number]').dataset
26+
.lineNumber,
27+
10,
28+
)
29+
: 1;
2230
}
2331

24-
toString() {
25-
return this.lines.map(({ value }) => value).join('\n');
32+
toString(type = null) {
33+
let filterFunc = () => true;
34+
35+
// Diff left side
36+
if (type === 'left') {
37+
filterFunc = ({ side }) => ['left', 'context'].includes(side);
38+
}
39+
// Diff right side
40+
if (type === 'right') {
41+
filterFunc = ({ side }) => ['right', 'context'].includes(side);
42+
}
43+
return this.lines
44+
.filter(filterFunc)
45+
.map(({ value }) => value)
46+
.join('\n');
2647
}
2748

2849
toJSON() {

packages/blob-reader/helper.js

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,38 @@ function getLineNumber(el) {
150150
}
151151

152152
function diffMetaInformation(el) {
153-
const $td = $(el).closest('td');
153+
const td = $(el)
154+
.closest('td')
155+
.get(0);
156+
157+
// Blob view
158+
if (td.classList.contains('js-file-line')) {
159+
return {};
160+
}
161+
162+
let side;
163+
164+
// split diff
165+
if (td.cellIndex === 1) {
166+
side = 'left';
167+
} else if (td.cellIndex === 3) {
168+
side = 'right';
169+
}
170+
171+
// unified diff
172+
if (!side && td.cellIndex === 2) {
173+
if (td.classList.contains('blob-code-addition')) {
174+
side = 'right';
175+
} else if (td.classList.contains('blob-code-deletion')) {
176+
side = 'left';
177+
} else if (td.classList.contains('blob-code-context')) {
178+
side = 'context';
179+
}
180+
}
181+
182+
// Diff view
154183
return {
155-
deletion: $td.hasClass('blob-code-deletion'),
156-
addition: $td.hasClass('blob-code-addition'),
184+
side,
157185
};
158186
}
159187

@@ -164,23 +192,14 @@ function readLine(el) {
164192
return null;
165193
}
166194

167-
const { deletion, addition } = diffMetaInformation(el);
168-
169195
// Each array element represents a single line.
170196
// Therefore we can get ride of the newline here.
171197
const ret = {
172198
value: el.textContent.replace(/\n/, ''),
173199
lineNumber,
200+
...diffMetaInformation(el),
174201
};
175202

176-
if (deletion) {
177-
ret.deletion = deletion;
178-
}
179-
180-
if (addition) {
181-
ret.addition = addition;
182-
}
183-
184203
return ret;
185204
}
186205

packages/blob-reader/test.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,21 @@ describe('blob-reader', () => {
164164
expect(blob.isDiff).toBe(true);
165165
});
166166

167-
it('1st line', () => {
168-
expect(blob.lines[0]).toMatchSnapshot();
167+
it('internals', () => {
168+
expect(blob.firstLineNumber).toBe(1);
169+
expect(blob.lines).toMatchSnapshot();
170+
});
171+
172+
it('toString()', () => {
173+
expect(blob.toString()).toMatchSnapshot();
169174
});
170175

171-
it('additions', () => {
172-
expect(blob.lines[6]).toMatchSnapshot();
176+
it('toString("left")', () => {
177+
expect(blob.toString('left')).toMatchSnapshot();
173178
});
174179

175-
it('deletions', () => {
176-
expect(blob.lines[9]).toMatchSnapshot();
180+
it('toString("right")', () => {
181+
expect(blob.toString('right')).toMatchSnapshot();
177182
});
178183
});
179184

@@ -192,20 +197,21 @@ describe('blob-reader', () => {
192197
expect(blob.isDiff).toBe(true);
193198
});
194199

195-
it('contains four lines', () => {
196-
expect(blob.lines).toHaveLength(7);
200+
it('internals', () => {
201+
expect(blob.firstLineNumber).toBe(1);
202+
expect(blob.lines).toMatchSnapshot();
197203
});
198204

199-
it('1st line', () => {
200-
expect(blob.lines[0]).toMatchSnapshot();
205+
it('toString()', () => {
206+
expect(blob.toString()).toMatchSnapshot();
201207
});
202208

203-
it('additions', () => {
204-
expect(blob.lines[3]).toMatchSnapshot();
209+
it('toString("left")', () => {
210+
expect(blob.toString('left')).toMatchSnapshot();
205211
});
206212

207-
it('deletions', () => {
208-
expect(blob.lines[5]).toMatchSnapshot();
213+
it('toString("right")', () => {
214+
expect(blob.toString('right')).toMatchSnapshot();
209215
});
210216
});
211217

0 commit comments

Comments
 (0)