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

Reply via email to