about summary refs log tree commit diff
diff options
context:
space:
mode:
authorZachary Sloan2012-10-19 14:39:37 -0500
committerZachary Sloan2012-10-19 14:39:37 -0500
commitd53c70c1f2eb71077086ca7ad13eb59158d1351b (patch)
tree9b54904dc592d5b676ba047339df1d9ea9b8e273
parent99a5ce8abf6ddc7a0f3bea2189bf68a5ac10d171 (diff)
downloadgenenetwork2-d53c70c1f2eb71077086ca7ad13eb59158d1351b.tar.gz
Reindented genSelectDatasetJS as gen_select_dataset
-rwxr-xr-xweb/webqtl/maintainance/genSelectDatasetJS.py3
-rw-r--r--wqflask/maintenance/gen_select_dataset.py640
-rw-r--r--wqflask/wqflask/views.py1
3 files changed, 644 insertions, 0 deletions
diff --git a/web/webqtl/maintainance/genSelectDatasetJS.py b/web/webqtl/maintainance/genSelectDatasetJS.py
index bc88beec..d03cc7af 100755
--- a/web/webqtl/maintainance/genSelectDatasetJS.py
+++ b/web/webqtl/maintainance/genSelectDatasetJS.py
@@ -27,6 +27,9 @@
 # created by Ning Liu 07/01/2010
 # This script is to generate selectDatasetMenu.js file for cascade menu in the main search page http://www.genenetwork.org/.
 # This script will be run automatically every one hour or manually when database has been changed .
+
+from __future__ import print_function, division
+
 import sys, os
 
 current_file_name = __file__
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
new file mode 100644
index 00000000..7d2605c1
--- /dev/null
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -0,0 +1,640 @@
+# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
+# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
+#
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+#
+# Created by GeneNetwork Core Team 2010/08/10
+#
+# Last updated by NL 2011/01/27
+
+# created by Ning Liu 07/01/2010
+# This script is to generate selectDatasetMenu.js file for cascade menu in the main search page http://www.genenetwork.org/.
+# This script will be run automatically every one hour or manually when database has been changed .
+
+from __future__ import print_function, division
+
+import sys, os
+
+current_file_name = __file__
+pathname = os.path.dirname( current_file_name )
+abs_path = os.path.abspath(pathname)
+sys.path.insert(0, abs_path + '/..')
+
+import MySQLdb
+import os
+import string
+import time
+import datetime
+
+from base import template
+from base import webqtlConfig
+
+#################################################################################
+# input: searchArray, targetValue
+# function: retrieve index info of target value in designated array (searchArray)
+# output: return index info
+##################################################################################
+def getIndex(searchArray=None, targetValue=None):
+    for index in range(len(searchArray)):
+        if searchArray[index][0]==targetValue:
+            return index
+
+# build MySql database connection
+con = MySQLdb.Connect(db=webqtlConfig.DB_NAME,host=webqtlConfig.MYSQL_SERVER, user=webqtlConfig.DB_USER,passwd=webqtlConfig.DB_PASSWD)
+cursor = con.cursor()
+
+# create js_select.js file
+fileHandler = open(webqtlConfig.HTMLPATH + 'javascript/selectDatasetMenu.js', 'w')
+
+# define SpeciesString, GroupString, TypeString, DatabasingString, LinkageString for output
+# outputSpeciesStr is for building Species Array(sArr) in js file; outputGroupStr is for Group Array(gArr)
+# outputTypeStr is for Type Array(tArr); outputDatabaseStr is for Database Array(dArr)
+# outputLinkStr is for Linkage Array(lArr)
+outputTimeStr ="/* Generated Date : %s , Time : %s */ \n" % (datetime.date.today(),time.strftime("%H:%M ", time.localtime()))
+outputTimeStr =""
+outputSpeciesStr ='var sArr = [\n{txt:\'\',val:\'\'},\n'
+outputGroupStr ='var gArr = [\n{txt:\'\',val:\'\'},\n'
+outputTypeStr ='var tArr = [\n{txt:\'\',val:\'\'},\n'
+outputDatabaseStr ='var dArr = [\n{txt:\'\',val:\'\'},\n'
+outputLinkStr ='var lArr = [\n null,\n'
+
+# built speices array in js file for select menu in the main search page http://www.genenetwork.org/
+cursor.execute("select Name, MenuName from Species order by OrderId")
+speciesResult = cursor.fetchall()
+speciesTotalResult = list(speciesResult)
+speciesResultsTotalNum = cursor.rowcount
+if speciesResultsTotalNum >0:
+    for speciesItem in speciesResult:
+        speciesVal = speciesItem[0]
+        speciesTxt = speciesItem[1]
+        outputSpeciesStr += '{txt:\'%s\',val:\'%s\'},\n'%(speciesTxt,speciesVal)
+# 'All Species' option for 'Species' select menu
+outputSpeciesStr +='{txt:\'All Species\',val:\'All Species\'}];\n\n'
+#speciesTotalResult is a list which inclues all species' options
+speciesTotalResult.append(('All Species','All Species'))
+
+# built group array in js file for select menu in the main search page http://www.genenetwork.org/
+cursor.execute("select distinct InbredSet.Name, InbredSet.FullName from InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze where InbredSet.SpeciesId= Species.Id and InbredSet.Name != 'BXD300' and (PublishFreeze.InbredSetId = InbredSet.Id or GenoFreeze.InbredSetId = InbredSet.Id or ProbeFreeze.InbredSetId = InbredSet.Id) order by InbredSet.Name")
+groupResults = cursor.fetchall()
+groupTotalResults = list(groupResults)
+groupResultsTotalNum = cursor.rowcount
+if groupResultsTotalNum > 0:
+    for groupItem in groupResults:
+        groupVal = groupItem[0]
+        groupTxt = groupItem[1]
+        outputGroupStr += '{txt:\'%s\',val:\'%s\'},\n'%(groupTxt,groupVal)
+# add 'All Groups' option for 'Group' select menu
+outputGroupStr +='{txt:\'All Groups\',val:\'all groups\'}];\n\n'
+# groupTotalResults is a list which inclues all groups' options
+groupTotalResults.append(('all groups','All Groups'))
+
+# built type array in js file for select menu in the main search page http://www.genenetwork.org/
+cross = groupVal
+cursor.execute("select distinct Tissue.Name, concat(Tissue.Name, ' mRNA') from ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue where ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id and ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and ProbeSetFreeze.public > %d order by Tissue.Name" % (webqtlConfig.PUBLICTHRESH))
+typeResults = cursor.fetchall()
+typeTotalResults = list(typeResults)
+typeResultsTotalNum = cursor.rowcount
+if typeResultsTotalNum > 0:
+    for typeItem in typeResults:
+        typeVal = typeItem[0]
+        typeTxt = typeItem[1]
+        outputTypeStr += '{txt:\'%s\',val:\'%s\'},\n'%(typeTxt,typeVal)
+# add 'Phenotypes' and 'Genotypes' options for 'Type' select menu
+outputTypeStr +='{txt:\'Phenotypes\',val:\'Phenotypes\'},\n'
+outputTypeStr +='{txt:\'Genotypes\',val:\'Genotypes\'}];\n\n'
+# typeTotalResults is a list which inclues all types' options
+typeTotalResults.append(('Phenotypes','Phenotypes'))
+typeTotalResults.append(('Genotypes','Genotypes'))
+
+# built dataset array in js file for select menu in the main search page http://www.genenetwork.org/
+tissue = typeVal
+cursor.execute("select ProbeSetFreeze.Name, ProbeSetFreeze.FullName from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue where ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id and ProbeSetFreeze.public > %d order by ProbeSetFreeze.CreateTime desc" % (webqtlConfig.PUBLICTHRESH))
+datasetResults = cursor.fetchall()
+datasetTotalResults = list(datasetResults)
+datasetResultsTotalNum = cursor.rowcount
+if datasetResultsTotalNum > 0:
+    for datasetItem in datasetResults:
+        datasetVal = datasetItem[0]
+        datasetTxt = datasetItem[1]
+        outputDatabaseStr += '{txt:\'%s\',val:\'%s\'},\n'%(datasetTxt,datasetVal)
+
+# This part is to built linkage array in js file, the linkage is among Species, Group, Type and Database.
+# The format of linkage array is [speciesIndex, groupIndex, typeIndex, databaseIndex]
+if speciesResultsTotalNum >0:
+    for speciesItem in speciesResult:
+        speciesVal = speciesItem[0]
+        sIndex = getIndex(searchArray=speciesTotalResult,targetValue=speciesVal)+1
+
+        # retrieve group info based on specie
+        cursor.execute("select distinct InbredSet.Name, InbredSet.FullName from InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze where InbredSet.SpeciesId= Species.Id and Species.Name='%s' and InbredSet.Name != 'BXD300' and (PublishFreeze.InbredSetId = InbredSet.Id or GenoFreeze.InbredSetId = InbredSet.Id or ProbeFreeze.InbredSetId = InbredSet.Id) order by InbredSet.Name" % speciesVal)
+        groupResults = cursor.fetchall()
+        groupResultsNum = cursor.rowcount
+
+        if groupResultsNum > 0:
+            for groupItem in groupResults:
+                groupVal = groupItem[0]
+                gIndex = getIndex(searchArray=groupTotalResults, targetValue=groupVal)+1
+
+                cross = groupVal
+                # if group also exists in PublishFreeze table, then needs to add related Published Phenotypes in Database Array(dArr) and Linkage Array(lArr)
+                # 'MDP' case is related to 'Mouse Phenome Database'
+                cursor.execute("select PublishFreeze.Id from PublishFreeze, InbredSet where PublishFreeze.InbredSetId = InbredSet.Id and InbredSet.Name = '%s'" % cross)
+                if (cursor.fetchall()):
+                    typeVal = "Phenotypes"
+                    if cross=='MDP':
+                        datasetTxt = "Mouse Phenome Database"
+                    else:
+                        datasetTxt = "%s Published Phenotypes" % cross
+                    datasetVal = "%sPublish" % cross
+                    outputDatabaseStr += '{txt:\'%s\',val:\'%s\'},\n'% (datasetTxt,datasetVal)
+                    datasetTotalResults.append(('%s'% datasetVal,'%s' % datasetTxt))
+
+                    tIndex = getIndex(searchArray=typeTotalResults,targetValue=typeVal)+1
+                    dIndex = getIndex(searchArray=datasetTotalResults, targetValue=datasetVal)+1
+                    outputLinkStr +='[%d,%d,%d,%d],\n'%(sIndex,gIndex,tIndex,dIndex)
+
+                # if group also exists in GenoFreeze table, then needs to add related Genotypes in database Array(dArr)
+                cursor.execute("select GenoFreeze.Id from GenoFreeze, InbredSet where GenoFreeze.InbredSetId = InbredSet.Id and InbredSet.Name = '%s'" % cross)
+                if (cursor.fetchall()):
+                    typeVal = "Genotypes"
+                    datasetTxt = "%s Genotypes" % cross
+                    datasetVal = "%sGeno" % cross
+                    outputDatabaseStr += '{txt:\'%s\',val:\'%s\'},\n'%(datasetTxt,datasetVal)
+                    typeTotalResults.append(('Genotypes','Genotypes'))
+                    datasetTotalResults.append(('%s'% datasetVal,'%s' % datasetTxt))
+
+                    tIndex = getIndex(searchArray=typeTotalResults,targetValue=typeVal)+1
+                    dIndex = getIndex(searchArray=datasetTotalResults, targetValue=datasetVal)+1
+                    outputLinkStr +='[%d,%d,%d,%d],\n'%(sIndex,gIndex,tIndex,dIndex)
+
+                # retrieve type(tissue) info based on group
+                # if cross is equal to 'BXD', then need to seach for 'BXD' and 'BXD300' InbredSet
+                if cross == "BXD":
+                    cross2 = "BXD', 'BXD300"
+                else:
+                    cross2 = cross
+                cursor.execute("select distinct Tissue.Name, concat(Tissue.Name, ' mRNA') from ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue where ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id and InbredSet.Name in ('%s') and ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and ProbeSetFreeze.public > %d order by Tissue.Name" % (cross2, webqtlConfig.PUBLICTHRESH))
+                typeResults = cursor.fetchall()
+                typeResultsNum = cursor.rowcount
+
+                if typeResultsNum > 0:
+                    for typeItem in typeResults:
+                        typeVal = typeItem[0]
+                        tIndex = getIndex(searchArray=typeTotalResults, targetValue=typeVal)+1
+                        # retrieve database(dataset) info based on group(InbredSet) and type(Tissue)
+                        tissue = typeVal
+                        cursor.execute("select ProbeSetFreeze.Name, ProbeSetFreeze.FullName from ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue where ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id and InbredSet.Name in ('%s') and Tissue.name = '%s' and ProbeSetFreeze.public > %d order by ProbeSetFreeze.CreateTime desc" % (cross2, tissue, webqtlConfig.PUBLICTHRESH))
+                        datasetResults = cursor.fetchall()
+                        datasetResultsNum = cursor.rowcount
+
+                        if datasetResultsNum > 0:
+                            for datasetItem in datasetResults:
+                                datasetVal = datasetItem[0]
+                                dIndex = getIndex(searchArray=datasetTotalResults, targetValue=datasetVal)+1
+                                outputLinkStr +='[%d,%d,%d,%d],\n'%(sIndex,gIndex,tIndex,dIndex)
+
+# add 'All Phenotypes' option for 'Database' select menu
+# for 'All Species'option in 'Species' select menu, 'Database' select menu will show 'All Phenotypes' option
+outputDatabaseStr += '{txt:\'%s\',val:\'%s\'}];\n\n'%('All Phenotypes','_allPublish')
+datasetTotalResults.append(('_allPublish','All Phenotypes'))
+
+sIndex = getIndex(searchArray=speciesTotalResult,targetValue='All Species')+1
+gIndex = getIndex(searchArray=groupTotalResults, targetValue='all groups')+1
+tIndex = getIndex(searchArray=typeTotalResults,targetValue='Phenotypes')+1
+dIndex = getIndex(searchArray=datasetTotalResults, targetValue='_allPublish')+1
+outputLinkStr +='[%d,%d,%d,%d]];\n\n'%(sIndex,gIndex,tIndex,dIndex)
+
+# Combine sArr, gArr, tArr, dArr and lArr output string together
+outputStr = outputTimeStr+outputSpeciesStr+outputGroupStr+outputTypeStr+outputDatabaseStr+outputLinkStr
+outputStr +='''
+
+/*
+*  function: based on different browser use, will have different initial actions;
+*  Once the index.html page is loaded, this function will be called
+*/
+function initialDatasetSelection()
+{
+        defaultSpecies =getDefaultValue('species');
+        defaultSet =getDefaultValue('cross');
+        defaultType =getDefaultValue('tissue');
+        defaultDB =getDefaultValue('database');
+
+        if (navigator.userAgent.indexOf('MSIE')>=0)
+        {
+                sOptions = fillOptionsForIE(null,defaultSpecies);
+                var menu0 ="<SELECT NAME='species' ID='species' SIZE='1' onChange='fillOptions(\\"species\\");'>"+sOptions+"</Select>";
+                document.getElementById('menu0').innerHTML = menu0;
+
+                gOptions = fillOptionsForIE('species',defaultSet);
+                var menu1 ="<Select NAME='cross' size=1 id='cross' onchange='fillOptions(\\"cross\\");'>"+gOptions+"</Select><input type=\\"button\\" class=\\"button\\" value=\\"Info\\" onCLick=\\"javascript:crossinfo();\\">";
+                document.getElementById('menu1').innerHTML =menu1;
+
+                tOptions = fillOptionsForIE('cross',defaultType);
+                var menu2 ="<Select NAME='tissue' size=1 id='tissue' onchange='fillOptions(\\"tissue\\");'>"+tOptions+"</Select>";
+                document.getElementById('menu2').innerHTML =menu2;
+
+                dOptions = fillOptionsForIE('tissue',defaultDB);
+                var menu3 ="<Select NAME='database' size=1 id='database'>"+dOptions+"</Select><input type=\\"button\\" class=\\"button\\" value=\\"Info\\" onCLick=\\"javascript:databaseinfo();\\">";
+                document.getElementById('menu3').innerHTML =menu3;
+
+        }else{
+                fillOptions(null);
+    }
+        searchtip();
+}
+
+/*
+*  input: selectObjId (designated select menu, such as species, cross, etc... )
+*  defaultValue (default Value of species, cross,tissue or database)
+*  function: special for IE browser,setting options value for select menu dynamically based on linkage array(lArr),
+*  output: options string
+*/
+function fillOptionsForIE(selectObjId,defaultValue)
+{
+        var options='';
+        if(selectObjId==null)
+        {
+                var len = sArr.length;
+                for (var i=1; i < len; i++) {
+                    // setting Species' option
+                        if( sArr[i].val==defaultValue){
+                                options =options+"<option selected=\\"selected\\" value='"+sArr[i].val+"'>"+sArr[i].txt+"</option>";
+                        }else{
+                                options =options+"<option value='"+sArr[i].val+"'>"+sArr[i].txt+"</option>";
+                        }
+                }
+        }else if(selectObjId=='species')
+        {
+                var speciesObj = document.getElementById('species');
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get group(cross) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&!Contains(arr,lArr[i][1]))
+                        {
+                                arr[idx++]=lArr[i][1];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("cross");
+                for (var i=0; i < len; i++) {
+                        // setting Group's option
+                        if( gArr[arr[i]].val==defaultValue){
+                                options =options+"<option selected=\\"selected\\" value='"+gArr[arr[i]].val+"'>"+gArr[arr[i]].txt+"</option>";
+                        }else{
+                                options =options+"<option value='"+gArr[arr[i]].val+"'>"+gArr[arr[i]].txt+"</option>";
+                        }
+
+                }
+        }else if(selectObjId=='cross')
+        {
+                var speciesObj = document.getElementById('species');
+                var groupObj = document.getElementById('cross');
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get type(tissue) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&lArr[i][1]==(getIndexByValue('cross',groupObj.value)).toString()&&!Contains(arr,lArr[i][2]))
+                        {
+                                arr[idx++]=lArr[i][2];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("tissue");
+                for (var i=0; i < len; i++) {
+                        // setting Type's option
+                        if( tArr[arr[i]].val==defaultValue){
+                                options =options+"<option selected=\\"selected\\" value='"+tArr[arr[i]].val+"'>"+tArr[arr[i]].txt+"</option>";
+                        }else{
+                                options =options+"<option value='"+tArr[arr[i]].val+"'>"+tArr[arr[i]].txt+"</option>";
+                        }
+                }
+
+        }else if(selectObjId=='tissue')
+        {
+                var speciesObj = document.getElementById('species');
+                var groupObj = document.getElementById('cross');
+                var typeObj = document.getElementById('tissue');
+
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get dataset(database) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&lArr[i][1]==(getIndexByValue('cross',groupObj.value)).toString()&&lArr[i][2]==(getIndexByValue('tissue',typeObj.value)).toString()&&!Contains(arr,lArr[i][3]))
+                        {
+                                arr[idx++]=lArr[i][3];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("database");
+                for (var i=0; i < len; i++) {
+                        // setting Database's option
+                        if( dArr[arr[i]].val==defaultValue){
+                                options =options+"<option SELECTED value='"+dArr[arr[i]].val+"'>"+dArr[arr[i]].txt+"</option>";
+                        }else{
+                                options =options+"<option value='"+dArr[arr[i]].val+"'>"+dArr[arr[i]].txt+"</option>";
+                        }
+                }
+        }
+        return options;
+}
+/*
+*  input: selectObjId (designated select menu, such as species, cross, etc... )
+*  function: setting options value for select menu dynamically based on linkage array(lArr)
+*  output: null
+*/
+function fillOptions(selectObjId)
+{
+        if(selectObjId==null)
+        {
+
+                var speciesObj = document.getElementById('species');
+                var len = sArr.length;
+                for (var i=1; i < len; i++) {
+                    // setting Species' option
+                        speciesObj.options[i-1] = new Option(sArr[i].txt, sArr[i].val);
+                }
+                updateChocie('species');
+
+        }else if(selectObjId=='species')
+        {
+                var speciesObj = document.getElementById('species');
+                var groupObj = document.getElementById('cross');
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get group(cross) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&!Contains(arr,lArr[i][1]))
+                        {
+                                arr[idx++]=lArr[i][1];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("cross");
+                for (var i=0; i < len; i++) {
+                        // setting Group's option
+                        groupObj.options[idx++] = new Option(gArr[arr[i]].txt, gArr[arr[i]].val);
+                }
+                updateChocie('cross');
+
+        }else if(selectObjId=='cross')
+        {
+                var speciesObj = document.getElementById('species');
+                var groupObj = document.getElementById('cross');
+                var typeObj = document.getElementById('tissue');
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get type(tissue) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&lArr[i][1]==(getIndexByValue('cross',groupObj.value)).toString()&&!Contains(arr,lArr[i][2]))
+                        {
+                                arr[idx++]=lArr[i][2];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("tissue");
+                for (var i=0; i < len; i++) {
+                        // setting Type's option
+                        typeObj.options[idx++] = new Option(tArr[arr[i]].txt, tArr[arr[i]].val);
+                }
+                updateChocie('tissue');
+
+        }else if(selectObjId=='tissue')
+        {
+                var speciesObj = document.getElementById('species');
+                var groupObj = document.getElementById('cross');
+                var typeObj = document.getElementById('tissue');
+                var databaseObj = document.getElementById('database');
+
+                var len = lArr.length;
+                var arr = [];
+                var idx = 0;
+                for (var i=1; i < len; i++) {
+                        //get dataset(database) info from lArr
+                        if(lArr[i][0]==(getIndexByValue('species',speciesObj.value)).toString()&&lArr[i][1]==(getIndexByValue('cross',groupObj.value)).toString()&&lArr[i][2]==(getIndexByValue('tissue',typeObj.value)).toString()&&!Contains(arr,lArr[i][3]))
+                        {
+                                arr[idx++]=lArr[i][3];
+                        }
+                }
+                idx=0;
+                len = arr.length;
+                removeOptions("database");
+                for (var i=0; i < len; i++) {
+                        // setting Database's option
+                        databaseObj.options[idx++] = new Option(dArr[arr[i]].txt, dArr[arr[i]].val);
+                }
+                updateChocie('database');
+        }
+}
+
+/*
+*  input: arr (targeted array); obj (targeted value)
+*  function: check whether targeted array contains targeted value or not
+*  output: return true, if array contains targeted value, otherwise return false
+*/
+function Contains(arr,obj) {
+        var i = arr.length;
+        while (i--) {
+                if (arr[i] == obj) {
+                        return true;
+                }
+        }
+        return false;
+}
+
+/*
+* input: selectObj (designated select menu, such as species, cross, etc... )
+* function: clear designated select menu's option
+* output: null
+*/
+function removeOptions(selectObj) {
+        if (typeof selectObj != 'object'){
+                selectObj = document.getElementById(selectObj);
+        }
+        var len = selectObj.options.length;
+        for (var i=0; i < len; i++)     {
+                // clear current selection
+                selectObj.options[0] = null;
+        }
+}
+
+/*
+*  input: selectObjId (designated select menu, such as species, cross, etc... )
+*         Value: target value
+*  function: retrieve Index info of target value in designated array
+*  output: index info
+*/
+function getIndexByValue(selectObjId,val)
+{
+        if(selectObjId=='species')
+        {
+                for(var i=1;i<sArr.length;i++){
+                        if(sArr[i].val==val)
+                                return i;
+                }
+        }else if(selectObjId=='cross')
+        {
+                for(var i=1;i<gArr.length;i++)
+                        if(gArr[i].val==val)
+                                return i;
+        }else if(selectObjId=='tissue')
+        {
+                for(var i=1;i<tArr.length;i++)
+                        if(tArr[i].val==val)
+                                return i;
+        }
+        else return;
+}
+
+/*
+*  input: objId (designated select menu, such as species, cross, etc... )
+*                 val(targeted value)
+*  function: setting option's selected status for designated select menu based on target value, also update the following select menu in the main search page
+*  output: return true if selected status has been set, otherwise return false.
+*/
+function setChoice(objId,val)
+{
+        var Obj = document.getElementById(objId);
+        var idx=-1;
+
+        for(i=0;i<Obj.options.length;i++){
+                if(Obj.options[i].value==val){
+                        idx=i;
+                        break;
+                }
+        }
+
+        if(idx>=0){
+                //setting option's selected status
+                Obj.options[idx].selected=true;
+                //update the following select menu
+                fillOptions(objId);
+        }else{
+                Obj.options[0].selected=true;
+                fillOptions(objId);
+        }
+}
+
+// setting option's selected status based on default setting or cookie setting for Species, Group, Type and Database select menu in the main search page http://www.genenetwork.org/
+function updateChocie(selectObjId){
+
+        if (selectObjId =='species')
+        {
+                defaultSpecies= getDefaultValue('species');
+                //setting option's selected status
+                setChoice('species',defaultSpecies);
+        }else if (selectObjId =='cross')
+        {
+                defaultSet= getDefaultValue('cross');
+                //setting option's selected status
+                setChoice('cross',defaultSet);
+        }else if (selectObjId =='tissue')
+        {
+                defaultType= getDefaultValue('tissue');
+                //setting option's selected status
+                setChoice('tissue',defaultType);
+        }else if (selectObjId =='database')
+        {
+                defaultDB= getDefaultValue('database');
+                //setting option's selected status
+                setChoice('database',defaultDB);
+        }
+}
+
+//get default value;if cookie exists, then use cookie value, otherwise use default value
+function getDefaultValue(selectObjId){
+        //define default value
+        var defaultSpecies = 'mouse'
+        var defaultSet = 'BXD'
+        var defaultType = 'Hippocampus'
+        var defaultDB = 'HC_M2_0606_P'
+
+        if (selectObjId =='species')
+        {
+                //if cookie exists, then use cookie value, otherwise use default value
+                var cookieSpecies = getCookie('defaultSpecies');
+                if(cookieSpecies)
+                {
+                        defaultSpecies= cookieSpecies;
+                }
+                return defaultSpecies;
+        }else if (selectObjId =='cross'){
+                var cookieSet = getCookie('defaultSet');
+                if(cookieSet){
+                        defaultSet= cookieSet;
+                }
+                return defaultSet;
+        }else if (selectObjId =='tissue'){
+                var cookieType = getCookie('defaultType');
+                if(cookieType){
+                        defaultType= cookieType;
+                }
+                return defaultType;
+        }else if (selectObjId =='database')
+        {
+                var cookieDB = getCookie('defaultDB');
+                if(cookieDB){
+                        defaultDB= cookieDB;
+                }
+                return defaultDB;
+        }
+
+}
+
+//setting default value into cookies for the dropdown menus: Species,Group, Type, and Database
+function setDefault(thisform){
+
+        setCookie('cookieTest', 'cookieTest', 1);
+        var cookieTest = getCookie('cookieTest');
+        delCookie('cookieTest');
+        if (cookieTest){
+                var defaultSpecies = thisform.species.value;
+                setCookie('defaultSpecies', defaultSpecies, 10);
+                var defaultSet = thisform.cross.value;
+                setCookie('defaultSet', defaultSet, 10);
+                var defaultType = thisform.tissue.value;
+                setCookie('defaultType', defaultType, 10);
+                var defaultDB = thisform.database.value;
+                setCookie('defaultDB', defaultDB, 10);
+                updateChocie('species');
+                updateChocie('cross');
+                updateChocie('tissue');
+                updateChocie('database');
+                alert("The current settings are now your default");
+        }
+        else{
+                alert("You need to enable Cookies in your browser.");
+        }
+}
+
+'''
+# write all strings' info into selectDatasetMenu.js file
+fileHandler.write(outputStr)
+fileHandler.close()
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 2933b428..e7e260fe 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -33,6 +33,7 @@ def index_page():
 @app.route("/new")
 def new_index_page():
     print("Sending index_page")
+    
     return render_template("new_index_page.html")
 
 @app.route("/data_sharing")