Author: Lars Michelsen <[email protected]>
Date: Sat Mar 31 13:31:47 2012 +0200
Committer: Lars Michelsen <[email protected]>
Commit-Date: Sat Mar 31 13:31:47 2012 +0200
Improved scrolling event handler; Fixed state refresh in frontend
---
ChangeLog | 3 ++
share/frontend/nagvis-js/js/frontend.js | 12 +++++---
share/frontend/nagvis-js/js/nagvis.js | 45 +++++++++++++++++++++++-------
3 files changed, 44 insertions(+), 16 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 4c7af74..b8ffa65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,9 @@ Automap
(Thanks to Pedro)
* Added new rankdir and overlap options (Thanks to Pedro)
+Frontend
+ * Improved scrolling eventhandler
+
1.6.5
Core
* Added line_weather_colors option to nagvis.ini.php [defaults] section
diff --git a/share/frontend/nagvis-js/js/frontend.js
b/share/frontend/nagvis-js/js/frontend.js
index d03c251..558e107 100644
--- a/share/frontend/nagvis-js/js/frontend.js
+++ b/share/frontend/nagvis-js/js/frontend.js
@@ -257,7 +257,7 @@ function searchObjects(sMatch) {
// - Scroll to object
if(len == 1) {
// Detach the handler
- setTimeout('scrollSlow('+oMapObjects[objectId].conf.x+',
'+oMapObjects[objectId].conf.y+', 15)', 0);
+ setTimeout('scrollSlow('+oMapObjects[objectId].conf.x+',
'+oMapObjects[objectId].conf.y+', 1)', 0);
}
objectId = null;
@@ -277,7 +277,7 @@ function getObjectsToUpdate() {
var arrReturn = [];
// Assign all object which need an update indexes to return Array
- for(var i in oMapObjects)
+ for(var i in oMapObjects) {
if(oMapObjects[i].lastUpdate <= iNow -
oWorkerProperties.worker_update_object_states)
// Do not update shapes where enable_refresh=0
if(oMapObjects[i].conf.type !== 'shape'
@@ -285,6 +285,7 @@ function getObjectsToUpdate() {
&& oMapObjects[i].conf.enable_refresh
&& oMapObjects[i].conf.enable_refresh == '1'))
arrReturn.push(i);
+ }
// Now spread the objects in the available timeslots
var iNumTimeslots =
Math.ceil(oWorkerProperties.worker_update_object_states /
oWorkerProperties.worker_interval);
@@ -741,8 +742,9 @@ function updateObjects(aMapObjectInformations, sType) {
}
// - Scroll to object
- if(oPageProperties.event_scroll === '1')
- setTimeout(function() {
scrollSlow(oMapObjects[objectId].conf.x, oMapObjects[objectId].conf.y, 15); },
0);
+ if(oPageProperties.event_scroll === '1') {
+ setTimeout('scrollSlow('+oMapObjects[objectId].conf.x+',
'+oMapObjects[objectId].conf.y+', 1)', 0);
+ }
// - Eventlog
if(oMapObjects[objectId].conf.type == 'service') {
@@ -1901,7 +1903,7 @@ function runWorker(iCount, sType, sIdentifier) {
* Do these actions every run (every second) excepting the first run
*/
- var iNow = String(Date.parse(new Date())).substr(0, 10);
+ iNow = String(Date.parse(new Date())).substr(0, 10);
// Countdown the rotation counter
// Not handled by ajax frontend. Reload the page with the new url
diff --git a/share/frontend/nagvis-js/js/nagvis.js
b/share/frontend/nagvis-js/js/nagvis.js
index 2f2c779..4e39de7 100644
--- a/share/frontend/nagvis-js/js/nagvis.js
+++ b/share/frontend/nagvis-js/js/nagvis.js
@@ -53,6 +53,11 @@ var oStates = {};
var isIE = navigator.appVersion.indexOf("MSIE") != -1;
+// These vars are used to stop earlier scrollings that mess between
+var crawlX = 0;
+var crawlY = 0;
+var crawling = 0;
+
// This is a dummy fucntion which is overwritten by the definition in
// the header template when it is enabled.
function getSidebarWidth() {
@@ -584,7 +589,17 @@ function scrollSlow(iTargetX, iTargetY, iSpeed) {
var iWidth;
var iHeight;
- var iStep = 2;
+ var iStep = 10;
+
+ iTargetX = parseInt(iTargetX);
+ iTargetY = parseInt(iTargetY);
+
+ if((iTargetX !== crawlX || iTargetY !== crawlY) && crawlX !== 0 && crawlY
!== 0) {
+ crawling = 1;
+ } else if(crawlX == 0 && crawlY == 0) {
+ crawlX = iTargetX;
+ crawlY = iTargetY;
+ }
// Get offset of the map div
var oMap = document.getElementById('map');
@@ -596,41 +611,49 @@ function scrollSlow(iTargetX, iTargetY, iSpeed) {
oMap = null;
// Get measure of the screen
- iWidth = pageWidth();
+ iWidth = pageWidth();
iHeight = pageHeight() - iMapOffsetTop;
- if(iTargetY <= (currentScrollTop+iHeight) && iTargetY >=
currentScrollTop) {
+ if((iTargetY < (currentScrollTop+iHeight/2+iStep) && iTargetY >=
(currentScrollTop+iHeight/2-iStep)) || (currentScrollTop<iStep &&
iTargetY<iHeight/2)) {
// Target is in current view
scrollTop = 0;
- } else if(iTargetY < currentScrollTop) {
+ } else if(iTargetY < (currentScrollTop+iHeight/2) &&
currentScrollTop>iStep) {
// Target is above current view
scrollTop = -iStep;
- } else if(iTargetY > currentScrollTop) {
+ } else if(iTargetY > (currentScrollTop+iHeight/2)) {
// Target is below current view
scrollTop = iStep;
+ } else {
+ eventlog("js-error", "critical", "JS-Error occured: iTargetY: "
+iTargetY);
+ scrollTop = 0;
}
- if(iTargetX <= (currentScrollLeft+iWidth) && iTargetX >=
currentScrollLeft) {
+ if((iTargetX < (currentScrollLeft+iWidth/2+iStep) && iTargetX >=
(currentScrollLeft+iWidth/2-iStep)) || (currentScrollLeft<iStep &&
iTargetX<iWidth/2)) {
// Target is in current view
scrollLeft = 0;
- } else if(iTargetX < currentScrollLeft) {
+ } else if(iTargetX < (currentScrollLeft+iWidth/2) &&
currentScrollLeft>iStep) {
// Target is left from current view
scrollLeft = -iStep;
- } else if(iTargetX > currentScrollLeft) {
+ } else if(iTargetX > (currentScrollLeft+iWidth/2)) {
// Target is right from current view
scrollLeft = iStep;
} else {
+ eventlog("js-error", "critical", "JS-Error occured: iTargetX: "
+iTargetX);
scrollLeft = 0;
}
eventlog("scroll", "debug", currentScrollLeft+" to "+iTargetX+" =
"+scrollLeft+", "+currentScrollTop+" to "+iTargetY+" = "+scrollTop);
- if(scrollTop !== 0 || scrollLeft !== 0) {
+ if((scrollTop !== 0 || scrollLeft !== 0) && crawling == 0) {
window.scrollBy(scrollLeft, scrollTop);
-
- setTimeout(function() { scrollSlow(iTargetX, iTargetY, iSpeed); },
iSpeed);
+ if (currentScrollTop !== getScrollTop() || currentScrollLeft !==
getScrollLeft()) {
+ setTimeout(function() { scrollSlow(iTargetX, iTargetY, iSpeed); },
iSpeed);
+ };
} else {
eventlog("scroll", "debug", 'No need to scroll: '+currentScrollLeft+'
- '+iTargetX+', '+currentScrollTop+' - '+iTargetY);
+ crawlX=0;
+ crawlY=0;
+ crawling=0;
}
}
------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Nagvis-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nagvis-checkins