963425fd3e4aecdace5ffb28a2eb2dceec74f8a9
larrym
  Mon Oct 25 13:30:38 2010 -0700
move advancedJavascriptFeaturesEnabled to jsHelper.c
diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c
index bb89214..3d811e6 100644
--- src/hg/lib/jsHelper.c
+++ src/hg/lib/jsHelper.c
@@ -421,3 +421,37 @@
     }
 return str;
 }
+
+boolean advancedJavascriptFeaturesEnabled(struct cart *cart)
+// Returns TRUE if advanced javascript features are currently enabled
+{
+static boolean alreadyLookedForadvancedJs = FALSE;
+static boolean advancedJsEnabled = FALSE;
+if(!alreadyLookedForadvancedJs)
+    {
+    char *ua = cgiUserAgent();
+    boolean defaultVal = TRUE;
+
+    // dragZooming was broken in version 530.4 of AppleWebKit browsers (used by Safari, Chrome and some other browsers).
+    // This was explicitly fixed by the WebKit team in version 531.0.1 (see http://trac.webkit.org/changeset/45143).
+    // The AppleWebKit version provided by the browser in user agent doesn't always include the minor version number, so to
+    // be overly conservative we default drag-and-drop to off when AppleWebKit major version == 530
+
+    if(ua != NULL)
+        {
+        char *needle = "AppleWebKit/";
+        char *ptr = strstr(ua, needle);
+        if(ptr != NULL)
+            {
+            int version = 0;
+            sscanf(ptr + strlen(needle), "%d", &version);
+            defaultVal = (version != 530);
+            }
+        }
+    advancedJsEnabled = cartUsualBoolean(cart, "enableAdvancedJavascript", defaultVal);
+    alreadyLookedForadvancedJs = TRUE;
+    }
+//else
+//    warn("already looked up advancedJsEnabled");  // got msg 41 times in one page!
+return advancedJsEnabled;
+}