summaryrefslogtreecommitdiffstats
path: root/layout/reftests/css-grid/support/dyn.js
diff options
context:
space:
mode:
Diffstat (limited to 'layout/reftests/css-grid/support/dyn.js')
-rw-r--r--layout/reftests/css-grid/support/dyn.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/layout/reftests/css-grid/support/dyn.js b/layout/reftests/css-grid/support/dyn.js
new file mode 100644
index 0000000000..816a6f9b61
--- /dev/null
+++ b/layout/reftests/css-grid/support/dyn.js
@@ -0,0 +1,127 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * vim: sw=2 ts=2 sts=2 et filetype=javascript
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+function loadURL(url,callback) {
+ var xhttp = new XMLHttpRequest();
+ xhttp.onreadystatechange = function() {
+ if (xhttp.readyState == 4 && xhttp.status == 200) {
+ callback(xhttp.responseText);
+ }
+ };
+ xhttp.open("GET", url, true);
+ xhttp.send();
+}
+
+function dyn1(selector) {
+ // get an array of elements matching |selector|
+ var elems = Array.prototype.slice.call(document.querySelectorAll(selector))
+
+ // remove the first item in each grid
+ var removed = elems.map(function(e) {
+ var child = e.children[0];
+ if (child) {
+ var next = child.nextSibling;
+ e.removeChild(child);
+ return [ e, child, next ];
+ } else {
+ return null;
+ }
+ });
+
+ document.body.style.display = 'block';
+ document.body.offsetHeight;
+
+ // insert the removed item
+ removed.map(function(a) {
+ if (a) {
+ a[0].insertBefore(a[1],a[2]);
+ }
+ });
+}
+
+function dyn2(selector) {
+ // get an array of elements matching |selector|
+ var elems = Array.prototype.slice.call(document.querySelectorAll(selector))
+
+ // inject a new first item in each grid
+ var inserted = elems.map(function(e) {
+ var child = document.createElement('span');
+ e.insertBefore(child, e.firstChild);
+ return [ e, child ];
+ });
+
+ document.body.style.display = 'block';
+ document.body.offsetHeight;
+
+ // remove the inserted item
+ inserted.map(function(a) {
+ a[0].removeChild(a[1]);
+ });
+}
+
+function dyn3(selector) {
+ // get an array of elements matching |selector|
+ var elems = Array.prototype.slice.call(document.querySelectorAll(selector))
+
+ // remove the second item in each grid
+ var removed = elems.map(function(e) {
+ var child = e.children[1];
+ if (child) {
+ var next = child.nextSibling;
+ e.removeChild(child);
+ return [ e, child, next ];
+ } else {
+ return null;
+ }
+ });
+
+ document.body.style.display = 'block';
+ document.body.offsetHeight;
+
+ // insert the removed items
+ removed.map(function(a) {
+ if (a) {
+ a[0].insertBefore(a[1],a[2]);
+ }
+ });
+}
+
+function dyn4(selector) {
+ dyn3(selector);
+ dyn2(selector);
+}
+
+function dyn5(selector) {
+ // get an array of elements matching |selector|
+ var elems = Array.prototype.slice.call(document.querySelectorAll(selector))
+
+ // inject 20 new items in each grid
+ var inserted = elems.map(function(e) {
+ var a = new Array;
+ for (var i = 0; i < 20; ++i) {
+ var child = document.createElement('span');
+ e.insertBefore(child, e.firstChild);
+ a.push(child);
+ }
+ return [ e, a ];
+ });
+
+ document.body.style.display = 'block';
+ document.body.offsetHeight;
+
+ // remove the inserted item
+ inserted.map(function(a) {
+ a[1].forEach(function(child) {
+ a[0].removeChild(child);
+ });
+ });
+}
+
+function dynamicTest(url, callback) {
+ document.body.style.display='';
+ document.body.offsetHeight;
+ loadURL(url,callback);
+}