Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit 296fb7c

Browse files
committed
Handle case where PointerGestures is loaded asynchronously
Part of Polymer/platform-dev#11
1 parent f635375 commit 296fb7c

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

build.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"src/track.js",
99
"src/flick.js",
1010
"src/pinch.js",
11-
"src/tap.js"
11+
"src/tap.js",
12+
"src/registerScopes.js"
1213
]

src/dispatcher.js

+7-10
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,11 @@
206206
}
207207
};
208208
dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);
209+
// recognizers call into the dispatcher and load later
210+
// solve the chicken and egg problem by having registerScopes module run last
211+
dispatcher.registerQueue = [];
212+
dispatcher.immediateRegister = false;
209213
scope.dispatcher = dispatcher;
210-
var registerQueue = [];
211-
var immediateRegister = false;
212214
/**
213215
* Enable gesture events for a given scope, typically
214216
* [ShadowRoots](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#shadow-root-object).
@@ -219,20 +221,15 @@
219221
* support on.
220222
*/
221223
scope.register = function(inScope) {
222-
if (immediateRegister) {
224+
if (dispatcher.immediateRegister) {
223225
var pe = window.PointerEventsPolyfill;
224226
if (pe) {
225227
pe.register(inScope);
226228
}
227229
scope.dispatcher.registerTarget(inScope);
228230
} else {
229-
registerQueue.push(inScope);
231+
dispatcher.registerQueue.push(inScope);
230232
}
231233
};
232-
// wait to register scopes until recognizers load
233-
document.addEventListener('DOMContentLoaded', function() {
234-
immediateRegister = true;
235-
registerQueue.push(document);
236-
registerQueue.forEach(scope.register);
237-
});
234+
scope.register(document);
238235
})(window.PointerGestures);

src/registerScopes.js

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright 2013 The Polymer Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style
4+
* license that can be found in the LICENSE file.
5+
*/
6+
7+
/**
8+
* Because recognizers are loaded after dispatcher, we have to wait to register
9+
* scopes until after all the recognizers.
10+
*/
11+
(function(scope) {
12+
var dispatcher = scope.dispatcher;
13+
function registerScopes() {
14+
dispatcher.immediateRegister = true;
15+
var rq = dispatcher.registerQueue;
16+
rq.forEach(scope.register);
17+
rq.length = 0;
18+
}
19+
if (document.readyState === 'complete') {
20+
registerScopes();
21+
} else {
22+
// register scopes after a steadystate is reached
23+
// less MutationObserver churn
24+
document.addEventListener('readystatechange', function() {
25+
if (document.readyState === 'complete') {
26+
registerScopes();
27+
}
28+
});
29+
}
30+
})(window.PointerGestures);

0 commit comments

Comments
 (0)