Fix element blurring (removing focus) #116

Merged
BehindTheMath merged 3 commits from fix/blur into master 2018-01-29 15:03:24 -05:00
3 changed files with 30 additions and 1 deletions
Showing only changes of commit fa05e94f07 - Show all commits

View File

@@ -6,6 +6,7 @@ var forEachEls = require("./lib/foreach-els.js")
var newUid = require("./lib/uniqueid.js")
var noop = require("./lib/util/noop")
var contains = require("./lib/util/contains.js")
robinnorth commented 2018-01-25 04:58:32 -05:00 (Migrated from github.com)
Review

I think these vars were originally alphabetically ordered, but grouping modules by path is also something that makes sense -- another thing to standardise on for #97?

I think these vars were originally alphabetically ordered, but grouping modules by path is also something that makes sense -- another thing to standardise on for #97?
BehindTheMath commented 2018-01-25 19:14:45 -05:00 (Migrated from github.com)
Review

Good idea. I'll mention that there.

Good idea. I'll mention that there.
var on = require("./lib/events/on.js")
// var off = require("./lib/events/on.js")
@@ -129,7 +130,7 @@ Pjax.prototype = {
// Clear out any focused controls before inserting new page contents.
// we clear focus on non form elements
if (document.activeElement && !document.activeElement.value) {
if (document.activeElement && !document.activeElement.value && contains(this.options.selectors, document.activeElement)) {
try {
document.activeElement.blur()
} catch (e) { }

12
lib/util/contains.js Normal file
View File

@@ -0,0 +1,12 @@
module.exports = function contains(doc, selectors, el) {
for (var i = 0; i < selectors.length; i++) {
var selectedEls = doc.querySelectorAll(selectors[i])
for (var j = 0; j < selectedEls.length; j++) {
if (selectedEls[j].contains(el)) {
return true
}
}
}
return false
}

View File

@@ -0,0 +1,16 @@
var tape = require("tape")
var contains = require("../../../lib/util/contains.js")
tape("test contains function", function(t) {
var tempDoc = document.implementation.createHTMLDocument()
tempDoc.body.innerHTML = "<div><p id='el' class='js-Pjax'></p></div><span></span>"
var selectors = ["div"]
var el = tempDoc.body.querySelector("#el")
t.equal(contains(tempDoc, selectors, el), true, "contains() returns true when a selector contains the element")
selectors = ["span"]
t.equal(contains(tempDoc, selectors, el), false, "contains() returns false when the selectors do not contain the element")
t.end()
})