blob: e207e5d32a6a816ad2d8f8f578af58a6650e5069 [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// @dart = 2.9
/// @assertion Point offsetTo(Element parent)
/// Provides the offset of this element's borderEdge relative to the specified
/// parent.
/// This is the Dart equivalent of jQuery's position method. Unlike jQuery's
/// position, however, parent can be any parent element of this, rather than
/// only this's immediate offsetParent. If the specified element is not an
/// offset parent or transitive offset parent to this element, an ArgumentError
/// is thrown.
/// @description Checks expected offset values
/// @needsreview: ief2.offsetTo(ief1).x causes error
/// "Specified element is not a transitive offset parent of this element"
import "dart:html";
import "../testcommon.dart";
void check(int a, int b, String m) {
// Expect.equals(a, b, m);
if (a == b) {
print("$m: ok");
} else {
print("$m: $a expected $b actual");
}
}
main() {
var b = document.body;
b.setInnerHtml('''<iframe class="ief1"
style="position: absolute; left: 10px; top: 10px">
some text
</iframe>''', treeSanitizer: new NullTreeSanitizer());
IFrameElement ief1 = b.getElementsByClassName("ief1")[0];
var ref = ief1.childNodes[0];
IFrameElement ief2 = new Element.html('''<iframe class="ief1"
style="position: absolute; left: 50px; top: 50px">
</iframe>''', treeSanitizer: new NullTreeSanitizer());
ief1.insertBefore(ief2, ref);
print("ief1=${ief1.outerHtml}");
check(10, ief1.offsetTo(b).x, "id1 relative to body x");
check(20, ief1.offsetTo(b).y, "id1 relative to body y");
check(50, ief2.offsetTo(ief1).x, "id2 relative to id1 x");
check(50, ief2.offsetTo(ief1).y, "id2 relative to id1 y");
// indirect offsetParent
check(60, ief2.offsetTo(b).x, "id2 relative to body x");
check(60, ief2.offsetTo(b).y, "id2 relative to body y");
}