зеркало из https://github.com/mozilla/pjs.git
Converting the autoscroll code to attach to the browser binding and folding it directly into Firebird. Thanks to the folks at autoscroll.mozdev.org for providing this great functionality!
This commit is contained in:
Родитель
874126b90f
Коммит
ecddd53c23
|
@ -239,6 +239,20 @@
|
|||
</field>
|
||||
|
||||
<field name="_mStrBundle">null</field>
|
||||
<field name="_AUTOSCROLL_SPEED">3</field>
|
||||
<field name="_AUTOSCROLL_SNAP">10</field>
|
||||
<field name="_clientFrameDoc">null</field>
|
||||
<field name="_clientFrameBody">null</field>
|
||||
<field name="_isScrolling">false</field>
|
||||
<field name="_hasScrolled">false</field>
|
||||
<field name="_autoScrollMarkerImage">null</field>
|
||||
<field name="_overlayContainer">null</field>
|
||||
<field name="_snapOn">false</field>
|
||||
<field name="_scrollCount">0</field>
|
||||
<field name="_startX">null</field>
|
||||
<field name="_startY">null</field>
|
||||
<field name="_clientX">null</field>
|
||||
<field name="_clientY">null</field>
|
||||
|
||||
<property name="mStrBundle">
|
||||
<getter>
|
||||
|
@ -436,6 +450,48 @@
|
|||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="stopScroll">
|
||||
<body>
|
||||
<![CDATA[
|
||||
this._isScrolling = false;
|
||||
if (this._autoScrollMarkerImage) {
|
||||
this._autoScrollMarkerImage.style.display = 'none'; // seems to avoid blocking when autoscroll is initited during pageload
|
||||
this._autoScrollMarkerImage.parentNode.removeChild(this._autoScrollMarkerImage);
|
||||
}
|
||||
if (this._overlayContainer) {
|
||||
this._overlayContainer.style.display = 'none';
|
||||
this._overlayContainer.parentNode.removeChild(this._overlayContainer);
|
||||
}
|
||||
|
||||
this._overlayContainer = null;
|
||||
this._autoScrollMarkerImage = null;
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="autoScrollLoop">
|
||||
<body>
|
||||
<![CDATA[
|
||||
if (this._isScrolling) {
|
||||
var x = (this._clientX - this._startX) / this._AUTOSCROLL_SPEED;
|
||||
var y = (this._clientY - this._startY) / this._AUTOSCROLL_SPEED;
|
||||
|
||||
if(Math.abs(x) > 0 && Math.abs(y) > 0)
|
||||
{
|
||||
if (this._scrollCount++ % 2)
|
||||
y = 0;
|
||||
else
|
||||
x = 0;
|
||||
}
|
||||
|
||||
this._clientFrameDoc.defaultView.scrollBy(x, y);
|
||||
setTimeout(function foo(a) { a.autoScrollLoop() }, 5, this);
|
||||
}
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
</implementation>
|
||||
|
||||
<handlers>
|
||||
|
@ -485,6 +541,94 @@
|
|||
}
|
||||
]]>
|
||||
</handler>
|
||||
<handler event="mouseup">
|
||||
<![CDATA[
|
||||
if (!this._snapOn)
|
||||
this.stopScroll();
|
||||
]]>
|
||||
</handler>
|
||||
<handler event="mousedown" button="1">
|
||||
<![CDATA[
|
||||
if (!this._isScrolling) {
|
||||
this._startX = event.clientX;
|
||||
this._startY = event.clientY;
|
||||
this._clientFrameDoc = event.originalTarget.ownerDocument;
|
||||
this._clientFrameBody = (this._clientFrameDoc.getElementsByTagName('body')[0]) ? this._clientFrameDoc.getElementsByTagName('body')[0] : this._clientFrameDoc.getElementsByTagName('*')[0];
|
||||
this._isScrolling = true;
|
||||
this._hasScrolled = true;
|
||||
this._snapOn = true;
|
||||
|
||||
var scrollCursor = new Array("move", "n-resize", "e-resize");
|
||||
var docBox = this._clientFrameDoc.getBoxObjectFor(this._clientFrameDoc.documentElement);
|
||||
var left = event.screenX - docBox.screenX;
|
||||
var top = event.screenY - docBox.screenY;
|
||||
|
||||
|
||||
var documentWidth = docBox.width;
|
||||
var documentHeight = docBox.height;
|
||||
var windowWidth = window.innerWidth;
|
||||
var windowHeight = window.innerHeight;
|
||||
var scrollType = 0;
|
||||
if (windowHeight < documentHeight && windowWidth >= documentWidth)
|
||||
scrollType = 1;
|
||||
else if (windowHeight >= documentHeight && windowWidth < documentWidth)
|
||||
scrollType = 2;
|
||||
|
||||
var imageWidth = 28;
|
||||
var imageHeight = 28;
|
||||
|
||||
// overlay
|
||||
var el = this._clientFrameDoc.createElementNS("http://www.w3.org/1999/xhtml", "div");
|
||||
el.style.position = "fixed";
|
||||
el.style.left = "0px";
|
||||
el.style.top = "0px";
|
||||
el.style.width = documentWidth + "px";
|
||||
el.style.height = documentHeight + "px";
|
||||
el.style.cursor = scrollCursor[scrollType];
|
||||
|
||||
this._clientFrameBody.appendChild(el);
|
||||
this._overlayContainer = el;
|
||||
|
||||
// marker
|
||||
el = this._clientFrameDoc.createElementNS("http://www.w3.org/1999/xhtml", "img");
|
||||
|
||||
var scrollImages = new Array("chrome://global/skin/arrow/autoscroll_all.png",
|
||||
"chrome://global/skin/arrow/autoscroll_v.png",
|
||||
"chrome://global/skin/arrow/autoscroll_h.png");
|
||||
|
||||
el.src = scrollImages[scrollType];
|
||||
|
||||
el.style.position = "fixed";
|
||||
el.style.left = left - imageWidth / 2 + "px";
|
||||
el.style.top = top - imageHeight / 2 + "px";
|
||||
el.style.width = imageWidth + "px";
|
||||
el.style.height = imageHeight + "px";
|
||||
el.style.cursor = scrollCursor[scrollType];
|
||||
|
||||
this._clientFrameBody.appendChild(el);
|
||||
|
||||
this._autoScrollMarkerImage = el;
|
||||
|
||||
window.setTimeout(function foo(a) { a.autoScrollLoop() }, 5, this);
|
||||
}
|
||||
else if (this._hasScrolled)
|
||||
stopScroll();
|
||||
]]>
|
||||
</handler>
|
||||
<handler event="mousemove">
|
||||
<![CDATA[
|
||||
this._clientX = event.clientX;
|
||||
this._clientY = event.clientY;
|
||||
|
||||
if (this._isScrolling) {
|
||||
var x = this._clientX - this._startX;
|
||||
var y = this._clientY - this._startY;
|
||||
|
||||
if((x > this._AUTOSCROLL_SNAP || x < -this._AUTOSCROLL_SNAP) || (y > this._AUTOSCROLL_SNAP || y < -this._AUTOSCROLL_SNAP))
|
||||
this._snapOn = false;
|
||||
}
|
||||
]]>
|
||||
</handler>
|
||||
</handlers>
|
||||
|
||||
</binding>
|
||||
|
|
|
@ -49,6 +49,9 @@ classic.jar:
|
|||
+ skin/classic/global/arrow/arrow-up-hov.gif (arrow/arrow-up-hov.gif)
|
||||
+ skin/classic/global/arrow/arrow-up-sharp.gif (arrow/arrow-up-sharp.gif)
|
||||
+ skin/classic/global/arrow/arrow-up.gif (arrow/arrow-up.gif)
|
||||
+ skin/classic/global/arrow/autoscroll_all.png (arrow/autoscroll_all.png)
|
||||
+ skin/classic/global/arrow/autoscroll_h.png (arrow/autoscroll_h.png)
|
||||
+ skin/classic/global/arrow/autoscroll_v.png (arrow/autoscroll_v.png)
|
||||
+ skin/classic/global/checkbox/cbox-check-dis.gif (checkbox/cbox-check-dis.gif)
|
||||
+ skin/classic/global/checkbox/cbox-check.gif (checkbox/cbox-check.gif)
|
||||
+ skin/classic/global/icons/Error.png (icons/Error.png)
|
||||
|
|
Загрузка…
Ссылка в новой задаче