Skip to content

Commit 2626029

Browse files
committed
fix(smalltalk) click: stopPropagation
1 parent a75135e commit 2626029

File tree

2 files changed

+98
-2
lines changed

2 files changed

+98
-2
lines changed

lib/smalltalk.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,12 @@ function showDialog(title, msg, value, buttons, options) {
125125
});
126126

127127
['click', 'contextmenu'].forEach((event) =>
128-
dialog.addEventListener(event, () =>
128+
dialog.addEventListener(event, (e) => {
129+
e.stopPropagation();
129130
find(dialog, ['ok', 'input']).forEach((el) =>
130131
el.focus()
131132
)
132-
)
133+
})
133134
);
134135

135136
dialog.addEventListener('keydown', keyDown(dialog, ok(), cancel()));

test/smalltalk.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,101 @@ test('smalltalk: alert: keydown: tab: preventDefault', (t) => {
273273
t.end();
274274
});
275275

276+
test.only('smalltalk: alert: click: stopPropagation: called', (t) => {
277+
before();
278+
279+
const parentElement = {
280+
addEventListener: sinon.stub(),
281+
removeChild: sinon.stub()
282+
};
283+
284+
const el = {
285+
parentElement,
286+
querySelector: (a) => {
287+
if (a === '[data-name="js-ok"]')
288+
return ok;
289+
}
290+
};
291+
292+
const ok = {
293+
getAttribute: () => 'js-ok',
294+
focus: sinon.stub(),
295+
addEventListener: sinon.stub(),
296+
};
297+
298+
const createElement = getCreateElement(el);
299+
document.createElement = createElement;
300+
301+
const querySelector = sinon.stub().returns(el);
302+
document.querySelector = querySelector;
303+
304+
smalltalk.alert('title', 'message');
305+
306+
const [, click] = el.addEventListener.args.filter(([event]) => {
307+
return event === 'click';
308+
}).pop();
309+
310+
const event = {
311+
stopPropagation: sinon.stub()
312+
};
313+
314+
click(event);
315+
after();
316+
317+
t.ok(event.stopPropagation.called, 'should call stopPropagation');
318+
t.end();
319+
});
320+
321+
test('smalltalk: alert: keydown: tab: preventDefault', (t) => {
322+
before();
323+
324+
const parentElement = {
325+
removeChild: sinon.stub()
326+
};
327+
328+
const el = {
329+
parentElement,
330+
querySelector: (a) => {
331+
if (a === '[data-name="js-ok"]')
332+
return ok;
333+
},
334+
getAttribute: () => 'js-ok'
335+
};
336+
337+
const ok = {
338+
getAttribute: () => 'js-ok',
339+
focus: sinon.stub(),
340+
addEventListener: sinon.stub(),
341+
};
342+
343+
const createElement = getCreateElement(el);
344+
document.createElement = createElement;
345+
346+
const querySelector = sinon.stub().returns(el);
347+
document.querySelector = querySelector;
348+
349+
smalltalk.alert('title', 'message');
350+
351+
const [, keydown] = el.addEventListener.args
352+
.filter(([event]) => event === 'keydown')
353+
.pop();
354+
355+
const TAB = 9;
356+
357+
const event = {
358+
keyCode: TAB,
359+
preventDefault: sinon.stub(),
360+
stopPropagation: sinon.stub(),
361+
target: el,
362+
};
363+
364+
keydown(event);
365+
after();
366+
367+
t.ok(event.preventDefault.called, 'should call preventDefault');
368+
t.end();
369+
});
370+
276371
test('smalltalk: alert: keydown: tab: active name', (t) => {
277372
before();
278373

0 commit comments

Comments
 (0)