aboutsummaryrefslogtreecommitdiff
path: root/web/javascript/svg.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/javascript/svg.js')
-rwxr-xr-xweb/javascript/svg.js326
1 files changed, 326 insertions, 0 deletions
diff --git a/web/javascript/svg.js b/web/javascript/svg.js
new file mode 100755
index 00000000..73523b7b
--- /dev/null
+++ b/web/javascript/svg.js
@@ -0,0 +1,326 @@
+/*extracted and modified from http://www.carto.net/neumann/cartography/vienna/ */
+var openURL="/webqtl/WebQTL.py?FormID=showDatabase&database=Eye_M2_0906_R&incparentsf1=1&ProbeSetID=";
+var chrLength=[0.0, 491.91598118601547, 946.15708685124116, 1345.2216933525635, 1732.198920660242, 2111.6212086643609, 2484.8595921440615, 2847.1359103053924, 3176.8399906396698, 3486.3641319132003, 3810.7615243606533, 4114.7890532612491, 4415.4830426184499, 4716.5544971256113, 5026.024224847908, 5284.3571135528055, 5529.6098871486292, 5767.1869053349601, 5993.6795668729492, 6146.7463916706538];
+
+var statusObj;
+var zoomVal;
+var svgdoc;
+var zoomValueObj;
+var dispBoxObj;
+var probesetObj;
+var markerObj;
+var xObj;
+var yObj;
+var svgRect;
+var svgMainViewport;
+var overviewViewport;
+
+var allWidth = 8200;
+var allHeight = 8200;
+var xOriginCorner = 0;
+var yOriginCorner = 0;
+
+var evtX;
+var evtY;
+var dataPanelEvtX;
+var dataPanelEvtX;
+var rectUlXCorner;
+var rectUlYCorner
+var pluginPixWidth;
+var pluginPixHeight;
+var mainPixWidth;
+var mainPixHeight;
+var mainX;
+var mainY;
+var scaleFactor = 1;
+var width;
+var height;
+var pressed = 0;
+
+var msgObj;
+
+function initMap(evt) {
+ //initializing values
+ zoomVal = 100; //initial zoomFactor
+ //svgdoc=evt.getTarget().getOwnerDocument();
+ svgdoc = evt.target.ownerDocument;
+ statusObj = svgdoc.getElementById("statusText");
+ statusObj = statusObj.firstChild;
+
+ zoomValueObj = svgdoc.getElementById("zoomValueObj");
+ zoomValueObj = zoomValueObj.firstChild;
+
+ xObj = svgdoc.getElementById("XLabel");
+ xObj = xObj.firstChild;
+ yObj = svgdoc.getElementById("YLabel");
+ yObj = yObj.firstChild;
+
+ dispBoxObj = svgdoc.getElementById("dispBox");
+ probesetObj = svgdoc.getElementById("_probeset");
+ probesetObj = probesetObj.firstChild;
+ markerObj = svgdoc.getElementById("_marker");
+ markerObj = markerObj.firstChild;
+
+ //dispBoxObj.parent.appendChild(dispBoxObj);
+ svgRect = svgdoc.getElementById("overviewRect");
+ allWidth = svgRect.getAttribute("width");
+ allHeight = svgRect.getAttribute("height");
+ svgMainViewport = svgdoc.getElementById("mainPlot");
+ mainPixWidth = svgMainViewport.getAttribute("width");
+ mainPixHeight = svgMainViewport.getAttribute("height");
+ mainX = svgMainViewport.getAttribute("x");
+ mainY = svgMainViewport.getAttribute("y");
+ //overviewObjects
+ overviewViewport = svgdoc.getElementById("overviewPlot");
+ pluginPixWidth = overviewViewport.getAttribute("width");
+ pluginPixHeight = overviewViewport.getAttribute("height");
+
+ //msgObj = svgdoc.getElementById("msgText")
+ //msgObj = msgObj.firstChild;
+}
+
+//simulating statusbar
+function statusChange(text) {
+ //statusObj.setData(text);
+ statusObj.nodeValue=text;
+}
+
+//magnifier glass mouse-over effects
+function magnify(evt,scaleFact,inOrOut) {
+ if (inOrOut == "in") {
+ if (zoomVal < 1000) {
+ statusChange("click to zoom in");
+ scaleObject(evt,scaleFact);
+ }
+ else {
+ statusChange("maximum zoom factor reached! cannot zoom in any more!");
+ }
+ }
+ if (inOrOut == "out") {
+ if (zoomVal >= 100) {
+ statusChange("click to zoom out");
+ scaleObject(evt,scaleFact);
+ }
+ else {
+ statusChange("minimum zoom factor reached! cannot zoom out any more!");
+ }
+ }
+ if (scaleFact == 1) {
+ statusChange("plot ready");
+ scaleObject(evt,scaleFact);
+ }
+}
+
+// Lei Yan
+// 2009/03/26
+
+//scale any object that has a transform-value
+function scaleObject(evt,factor) {
+ //reference to the currently selected object
+ var element = evt.target;
+
+ //query old transform value (we need the translation value)
+ var curTransform = element.getAttribute("transform");
+ curTransform = new String(curTransform); //Wert in ein String umwandeln
+ //no fear from Regular expressions ... just copy it, I copied it either ...
+ var translateRegExp=/translate\(([-+]?\d+)(\s*[\s,]\s*)([-+]?\d+)\)\s*/;
+
+ //This part extracts the translation-value from the whole transform-string
+ if (curTransform.length != 0)
+ {
+ var result = curTransform.match(translateRegExp);
+ if (result == null || result.index == -1)
+ {
+ oldTranslateX = 0;
+ oldTranslateY = 0;
+ }
+ else
+ {
+ oldTranslateX = result[1];
+ oldTranslateY = result[3];
+ }
+ //concatenate the string again, add scale-factor
+ var newtransform = "translate(" + oldTranslateX + " " + oldTranslateY + ") " + "scale(" + factor + ")";
+ }
+ //set transform-factor
+ element.setAttribute('transform', newtransform);
+}
+
+function zoomIt(inOrOut) {
+ if (zoomVal>=300) step=100.0;
+ else step=50.0;
+ if (inOrOut == "in") {
+ if (zoomVal < 1000) {
+ statusChange("click to zoom in");
+ zoomVal = zoomVal + step;
+ zoomItReally();
+ }
+ else {
+ statusChange("maximum zoom factor reached! cannot zoom in any more!");
+ }
+ }
+ if (inOrOut == "out") {
+ if (zoomVal > 100) {
+ statusChange("click to zoom out");
+ zoomVal = zoomVal - step;
+ zoomItReally();
+ }
+ else {
+ statusChange("minimum zoom factor reached! cannot zoom out any more!");
+ }
+ }
+}
+
+function zoomItReally() {
+ statusChange("panning plot - please be patient ...");
+
+ //get values from draggable rectangle
+ xulcorner = parseFloat(svgRect.getAttribute("x"));
+ yulcorner = parseFloat(svgRect.getAttribute("y"));
+ width = parseFloat(svgRect.getAttribute("width"));
+ height = parseFloat(svgRect.getAttribute("height"));
+
+ //calcs
+ xcenter = xulcorner + width / 2;
+ ycenter = yulcorner + height / 2;
+ xnulcorner = xcenter - allWidth / 2 * (100/zoomVal);
+ ynulcorner = ycenter - allHeight / 2 * (100/zoomVal);
+ nWidth = allWidth * (100/zoomVal);
+ nHeight = allHeight * (100/zoomVal);
+
+ if (zoomVal == 100) {
+ xnulcorner = 0;
+ ynulcorner = 0;
+ }
+ //set values of draggable rectangle
+ svgRect.setAttribute("x",xnulcorner);
+ svgRect.setAttribute("y",ynulcorner);
+ svgRect.setAttribute("width",nWidth);
+ svgRect.setAttribute("height",nHeight);
+
+ //set viewport of main map
+ newViewport = xnulcorner + " " + ynulcorner + " " + nWidth + " " + nHeight;
+ svgMainViewport.setAttribute("viewBox",newViewport);/**/
+ //zoomValueObj.setData("ZOOM: " + zoomVal+"%");
+ zoomValueObj.nodeValue="ZOOM: " + zoomVal+"%";
+ statusChange("plot ready ...");
+}
+
+function beginPan(evt) {
+ pressed = 1;
+ width = parseFloat(svgRect.getAttribute("width"));
+ height = parseFloat(svgRect.getAttribute("height"));
+ evtX = parseFloat(evt.clientX) * scaleFactor;
+ evtY = parseFloat(evt.clientY) * scaleFactor;
+ rectUlXCorner = parseFloat(svgRect.getAttribute("x"));
+ rectUlYCorner = parseFloat(svgRect.getAttribute("y"));
+}
+
+function doPan(evt) {
+ if (pressed == 1) {
+ newEvtX = parseFloat(evt.clientX) * scaleFactor; //scaleFactor is because of resizable interface
+ newEvtY = parseFloat(evt.clientY) * scaleFactor;
+ toMoveX = rectUlXCorner + (newEvtX - evtX) * allWidth / pluginPixWidth;
+ toMoveY = rectUlYCorner + (newEvtY - evtY) * allHeight / pluginPixHeight;
+
+ //restrict to borders of overviewmap
+ if (toMoveX < xOriginCorner) {
+ svgRect.setAttribute("x",xOriginCorner);
+ }
+ else if ((toMoveX + width) > (xOriginCorner + allWidth)) {
+ svgRect.setAttribute("x",xOriginCorner + allWidth - width);
+ }
+ else {
+ svgRect.setAttribute("x",toMoveX);
+ }
+ if (toMoveY < yOriginCorner) {
+ svgRect.setAttribute("y",yOriginCorner);
+ }
+ else if ((toMoveY + height) > (yOriginCorner + allHeight)) {
+ svgRect.setAttribute("y",yOriginCorner + allHeight - height);
+ }
+ else {
+ svgRect.setAttribute("y",toMoveY);
+ }
+
+ evtX = newEvtX;
+ evtY = newEvtY;
+ rectUlXCorner = parseFloat(svgRect.getAttribute("x"));
+ rectUlYCorner = parseFloat(svgRect.getAttribute("y"));
+ }
+}
+
+function endPan() {
+ statusChange("panning plot - please be patient ...");
+ pressed = 0;
+ //set viewport of main plot
+ xulcorner = parseFloat(svgRect.getAttribute("x"));
+ yulcorner = parseFloat(svgRect.getAttribute("y"));
+ width = parseFloat(svgRect.getAttribute("width"));
+ height = parseFloat(svgRect.getAttribute("height"));
+ newViewport = xulcorner + " " + yulcorner + " " + width + " " + height;
+ svgMainViewport.setAttribute("viewBox",newViewport);
+ statusChange("plot ready ...");
+}
+
+function showChr(evt) {
+ xulcorner = parseFloat(svgRect.getAttribute("x"));
+ yulcorner = parseFloat(svgRect.getAttribute("y"));
+ width = parseFloat(svgRect.getAttribute("width"));
+ height = parseFloat(svgRect.getAttribute("height"));
+ myX = parseFloat(evt.clientX-mainX) * scaleFactor;
+ myY = parseFloat(evt.clientY-mainY) * scaleFactor;
+ myX = xulcorner + (myX*100/zoomVal -0.1*mainPixWidth)* allWidth/ mainPixWidth;
+ myY = allHeight*0.8-(yulcorner + (myY*100/zoomVal -0.1*mainPixWidth)* allHeight/ mainPixHeight);
+
+ for (i=0; i<chrLength.length; i++){
+ if (chrLength[i] > myX) break;
+ }
+ i = (i==chrLength.length)? "X":i;
+ //xObj.setData("Marker GMb (Chr "+ i+")");
+ xObj.nodeValue="Marker GMb (Chr "+ i+")";
+
+ for (i=0; i<chrLength.length; i++){
+ if (chrLength[i] > myY) break;
+ }
+ i = (i==chrLength.length)? "X":i;
+ //yObj.setData("Transcript GMb (Chr "+ i+")");
+ yObj.nodeValue="Transcript GMb (Chr "+ i+")";
+}
+
+function showNoChr(evt) {
+ //xObj.setData("Marker GMb");
+ xObj.nodeValue="Marker GMb.";
+ //yObj.setData("Transcript GMb");
+ yObj.nodeValue="Transcript GMb.";
+}
+
+function mvMsgBox(evt) {
+ var element = evt.target;
+ var myX = parseFloat(evt.clientX)+2;
+ var myY = parseFloat(evt.clientY)-2;
+ var newtransform = "translate(" + myX + " " + myY + ") " + "scale(0.8)";
+ dispBoxObj.setAttribute('transform', newtransform);
+ dispBoxObj.setAttribute('visibility', 'visible');
+ //probesetObj.setData("ProbeSet : " + element.getAttribute("ps"));
+ probesetObj.nodeValue="ProbeSet : " + element.getAttribute("ps");
+ //markerObj.setData("Marker : " + element.getAttribute("mk"));
+ markerObj.nodeValue="Marker : " + element.getAttribute("mk");
+}
+
+function hdMsgBox() {
+ dispBoxObj.setAttribute('visibility', 'hidden');
+}
+
+function openPage(evt) {
+ var element = evt.target;
+ var windowName = 'formTarget' + (new Date().getTime());
+ //var openWinString = "openNewWin('"+openURL+element.getAttribute("ps")+"')";
+ //var aURL = "http://www.genenetwork.org"+openURL+element.getAttribute("ps");
+ var aURL = openURL+element.getAttribute("ps");
+ var newWin = window.open(aURL);
+ newWin.focus();
+ return false;
+
+ //browserEval(openWinString);
+}