siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
126 lines (92 loc) • 4.5 kB
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>The source code</title>
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
<style type="text/css">
.highlight { display: block; background-color: #ddd; }
</style>
<script type="text/javascript">
function highlight() {
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
}
</script>
</head>
<body onload="prettyPrint(); highlight();">
<pre class="prettyprint lang-js">/*
Siesta 5.6.1
Copyright(c) 2009-2022 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license
*/
Role('Siesta.Util.Role.CanCalculatePageScroll', {
// also recognizes the "global" attribute
methods : {
getElForPageScroll : function (win) {
win = win || this.global
var doc = win.document
return doc.scrollingElement || (bowser.webkit || bowser.blink || bowser.msedge ? doc.body : doc.documentElement)
},
getPageScrollX : function (win) {
win = win || this.global
if (win.pageXOffset != null) return win.pageXOffset
var scrollEl = this.getElForPageScroll()
return scrollEl ? scrollEl.scrollLeft : 0
},
getPageScrollY : function (win) {
win = win || this.global
if (win.pageYOffset != null) return win.pageYOffset
var scrollEl = this.getElForPageScroll()
return scrollEl ? scrollEl.scrollTop : 0
},
viewportXtoPageX : function (x, win) {
win = win || this.global
var docEl = win.document.documentElement
// seems the "docEl.clientLeft" thing is copied from jQuery, not sure what kind of
// edge case it is supposed to solve
return x + this.getPageScrollX(win) - docEl.clientLeft
},
viewportYtoPageY : function (y, win) {
win = win || this.global
var docEl = win.document.documentElement
// seems the "docEl.clientLeft" thing is copied from jQuery, not sure what kind of
// edge case it is supposed to solve
return y + this.getPageScrollY(win) - docEl.clientTop
},
pageXtoViewportX : function (x, win) {
win = win || this.global
var docEl = win.document.documentElement
// seems the "docEl.clientLeft" thing is copied from jQuery, not sure what kind of
// edge case it is supposed to solve
return x - this.getPageScrollX(win) + docEl.clientLeft
},
pageYtoViewportY : function (y, win) {
win = win || this.global
var docEl = win.document.documentElement
// seems the "docEl.clientLeft" thing is copied from jQuery, not sure what kind of
// edge case it is supposed to solve
return y - this.getPageScrollY(win) + docEl.clientTop
},
// this method is only actual, when Siesta UI is embedded inside the iframe of the parent window
// in this case we don't want the scrolling position of the parent window to change in reaction
// to the Siesta tests launches / progress
maintainScrollPositionDuring : function (func, scope) {
var parent = window.parent
var isEmbedded = Boolean(parent)
var scrollLeftBefore = isEmbedded && this.getPageScrollX(parent)
var scrollTopBefore = isEmbedded && this.getPageScrollY(parent)
func.call(scope || this)
// prevent scroll position change in the parent window, if Siesta UI is embedded
if (isEmbedded) {
var scrollEl = this.getElForPageScroll(parent)
if (scrollLeftBefore !== this.getPageScrollX(parent)) scrollEl.scrollLeft = scrollLeftBefore
if (scrollTopBefore !== this.getPageScrollY(parent)) scrollEl.scrollTop = scrollTopBefore
}
}
}
})
</pre>
</body>
</html>