summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js
new file mode 100644
index 0000000000..e88ecb8d94
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/helpers.js
@@ -0,0 +1,61 @@
+export {qs, qsa, $on, $delegate, $parent, remove}
+
+// Get element(s) by CSS selector:
+function qs(selector, scope) {
+ return (scope || document).querySelector(selector)
+}
+
+function qsa(selector, scope) {
+ return (scope || document).querySelectorAll(selector)
+}
+
+// addEventListener wrapper:
+function $on(target, type, callback, useCapture) {
+ target.addEventListener(type, callback, !!useCapture)
+}
+
+// Attach a handler to event for all elements that match the selector,
+// now or in the future, based on a root element
+function $delegate(target, selector, type, handler) {
+ // https://developer.mozilla.org/en-US/docs/Web/Events/blur
+ var useCapture = type === 'blur' || type === 'focus'
+ $on(target, type, dispatchEvent, useCapture)
+
+ function dispatchEvent(event) {
+ var targetElement = event.target
+ var potentialElements = qsa(selector, target)
+ var hasMatch = Array.prototype.indexOf.call(potentialElements, targetElement) >= 0
+
+ if (hasMatch) {
+ handler.call(targetElement, event)
+ }
+ }
+}
+
+// Find the element's parent with the given tag name:
+// $parent(qs('a'), 'div');
+function $parent(element, tagName) {
+ if (!element.parentNode) {
+ return undefined
+ }
+ if (element.parentNode.tagName.toLowerCase() === tagName.toLowerCase()) {
+ return element.parentNode
+ }
+ return $parent(element.parentNode, tagName)
+}
+
+// removes an element from an array
+// const x = [1,2,3]
+// remove(x, 2)
+// x ~== [1,3]
+function remove(array, thing) {
+ const index = array.indexOf(thing)
+ if (index === -1) {
+ return array
+ }
+ array.splice(index, 1)
+}
+
+// Allow for looping on nodes by chaining:
+// qsa('.foo').forEach(function () {})
+NodeList.prototype.forEach = Array.prototype.forEach