From 293ad20c4899ec223bf13dc1ada7ecd0d19a41be Mon Sep 17 00:00:00 2001 From: chrissbarnett Date: Mon, 4 Mar 2013 08:15:35 -0500 Subject: [PATCH 01/51] GetFeatureInfoController now handles empty workspaces. layerTable.js adjusts bounds reported to solr; google map only shows +-85 degrees lat. That extent is now reported to the solr query as +-90 degrees. layers with undefined data types are included in advanced search results if all or no datatypes are selected. Unspecified dates ("0001") are rendered as "?" in the ui. 'Unknown' data type added in solr.js, so we can search for these layers. In userInterface.js, if there is a fileDownload value in the location field, we try to download directly via the client using this url. Also, a bug fix for mouse cursor behavior previously squashed was reintroduced. In includes.jsp, we are now using relative protocol notation. --- geoportal_1/pom.xml | 9 +++++ .../Controllers/GetFeatureInfoController.java | 10 ++++- .../src/main/webapp/jspf/includes.jspf | 9 +++-- .../webapp/resources/javascript/layerTable.js | 40 ++++++++++++++----- .../main/webapp/resources/javascript/solr.js | 20 ++++++++-- .../resources/javascript/userInterface.js | 35 ++++++++++++++-- .../src/main/webapp/resources/ogpConfig.json | 1 + .../target/maven-archiver/pom.properties | 2 +- 8 files changed, 102 insertions(+), 24 deletions(-) diff --git a/geoportal_1/pom.xml b/geoportal_1/pom.xml index b44f614..bc11a7a 100644 --- a/geoportal_1/pom.xml +++ b/geoportal_1/pom.xml @@ -241,6 +241,15 @@ opengeoportal + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + 1.5 + 1.5 + + org.apache.maven.plugins maven-failsafe-plugin diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java index aecaf08..fbfdc82 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java +++ b/geoportal_1/src/main/java/org/OpenGeoPortal/Proxy/Controllers/GetFeatureInfoController.java @@ -67,13 +67,21 @@ public void getFeatureInfo(@RequestParam("OGPID") String layerId, @RequestParam( bbox=a1,b1,a2,b2 bbox should be determined by the client. the size of a pixel? */ - String layerName = layerInfo.getWorkspaceName() + ":" + layerInfo.getName(); + + String workspaceName = layerInfo.getWorkspaceName(); + if (!workspaceName.trim().isEmpty()){ + workspaceName = workspaceName + ":"; + } + String layerName = workspaceName + layerInfo.getName(); String query = "service=wms&version=1.1.1&request=GetFeatureInfo&info_format=" + format + "&SRS=EPSG:900913&feature_count=" + NUMBER_OF_FEATURES + "&styles=&height=" + height + "&width=" + width +"&bbox=" + bbox + "&x=" + xCoord + "&y=" + yCoord +"&query_layers=" + layerName + "&layers=" + layerName; /*String query = "service=wfs&version=1.1.0&request=GetFeature&typeName=" + layerName + "&maxFeatures=" + NUMBER_OF_FEATURES + "&srsName=EPSG:900913&bbox=" + bbox;*/ + if (previewUrl.contains("?")){ + previewUrl = previewUrl.substring(0, previewUrl.indexOf("?")); + } logger.info("executing WMS getFeatureRequest: " + previewUrl + "?" + query); if (!previewUrl.contains("http")){ diff --git a/geoportal_1/src/main/webapp/jspf/includes.jspf b/geoportal_1/src/main/webapp/jspf/includes.jspf index ae1fc5e..1801501 100644 --- a/geoportal_1/src/main/webapp/jspf/includes.jspf +++ b/geoportal_1/src/main/webapp/jspf/includes.jspf @@ -5,11 +5,12 @@ - + - - - + + + + diff --git a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js index 3fdbfae..5eaf2b0 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js +++ b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js @@ -1110,13 +1110,7 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ //maps returned data type to appropriate image this.getTypeIcon = function (rowObj){ var typeIcon = org.OpenGeoPortal.InstitutionInfo.icons.dataTypes; - /*var oldtypeIcon = { - "Point": 'Point', - "Line": 'Line', - "Polygon": 'Polygon', - "Raster": 'Raster', - "Paper Map": 'Scanned Map' - };*/ + var dataType = rowObj.aData[that.tableHeadingsObj.getColumnIndex("DataType")]; if (dataType == "Paper Map"){ dataType = "PaperMap"; @@ -1181,7 +1175,7 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ //our layer id is being used as the openlayers layer name var layerAccess = rowObj.aData[this.tableHeadingsObj.getColumnIndex("Access")]; var layerLocation = rowObj.aData[this.tableHeadingsObj.getColumnIndex("Location")]; - if ((layerLocation.indexOf("ArcGISRest") == -1) &&(layerLocation.indexOf("wms") == -1)){ + if ((layerLocation.indexOf("ArcGISRest") == -1) &&(layerLocation.indexOf('"wms":') == -1)){ return ""; } if (layerAccess == "Public"){ @@ -1201,6 +1195,14 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ } }; + this.renderDate = function(rowObj){ + var year = rowObj.aData[rowObj.iDataColumn].substr(0, 4); + if (year == "0001"){ + year = "?"; + } + return year + }; + this.getExternalPreviewControl = function(rowObj){ //what defines external? var imgSource = this.getImage("view_external.png"); @@ -1245,7 +1247,6 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ jQuery(document).undelegate(".login"); jQuery(document).delegate(".loginButton", "click.login",function(e){org.OpenGeoPortal.ui.promptLogin(e);}); - //$(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+ }; this.getActivePreviewControl = function(rowObj){ @@ -1656,7 +1657,7 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ { if (!org.OpenGeoPortal.map.userMapAction){ //if search gets called before the map is fully loaded, you get strange results - solr.setBoundingBox(-180.0, 180.0, -85.051128779807, 85.051128779807); + solr.setBoundingBox(-180.0, 180.0, -90.0, 90.0); } else { //make sure we're getting the right values for the extent org.OpenGeoPortal.map.updateSize(); @@ -1665,6 +1666,17 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ var maxX = extent.right; var minY = extent.bottom; var maxY = extent.top; + var mapDeltaX = Math.abs(maxX - minX); + var mapDeltaY = Math.abs(maxY - minY); + if (mapDeltaX > 350){ + minX = -180.0; + maxX = 180.0; + } + if (mapDeltaY > 165){ + minY = -90; + maxY = 90; + } + solr.setBoundingBox(minX, maxX, minY, maxY); } } @@ -1787,11 +1799,17 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ var fromDate = jQuery('#advancedDateFromText').val().trim(); var toDate = jQuery('#advancedDateToText').val().trim(); solr.setDates(fromDate, toDate); + var i = jQuery(".dataTypeCheck").length; + var j = 0; jQuery(".dataTypeCheck").each(function(){ if(jQuery(this).is(":checked")){ solr.addDataType(jQuery(this).val()); + j++; } }); + if (j==0 || j == i){ + solr.addDataType("Unknown"); + } jQuery(".sourceCheck").each(function(){ if(jQuery(this).is(":checked")){ solr.addInstitution(jQuery(this).val()); @@ -2310,7 +2328,7 @@ org.OpenGeoPortal.LayerTable.TableHeadings = function(thisObj){ {"sName": "Publisher", "sTitle": "Publisher", "bVisible": false, "aTargets": [ 9 ], "sClass": "colPublisher", "bSortable": false}}, "ContentDate": {"ajax": true, "resizable": false, "organize": "numeric", "displayName": "Date", "columnConfig": {"sName": "ContentDate", "sTitle": "Date", "bVisible": false, "aTargets": [ 10 ], "sClass": "colDate", "sWidth": "25px", "bSortable": false, "bUseRendered": true, - "fnRender": function(oObj){return oObj.aData[oObj.iDataColumn].substr(0, 4);}}}, + "fnRender": function(oObj){return thisObj.renderDate(oObj);/*return oObj.aData[oObj.iDataColumn].substr(0, 4);*/}}}, "Institution": {"ajax": true, "resizable": false, "organize": "alpha", "displayName": "Repository", "columnConfig": {"sName": "Institution", "sTitle": "Rep", "bVisible": true, "aTargets": [ 11 ], "sClass": "colSource", "sWidth": "19px", "bSortable": false, "bUseRendered": false, "fnRender": function(oObj){return thisObj.getSourceIcon(oObj);}}}, diff --git a/geoportal_1/src/main/webapp/resources/javascript/solr.js b/geoportal_1/src/main/webapp/resources/javascript/solr.js index f219b1d..ca84981 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/solr.js +++ b/geoportal_1/src/main/webapp/resources/javascript/solr.js @@ -1,4 +1,3 @@ - // This code provides an interface to the spatial data in the OpenGeoServer Solr server // To use it, first create an instance. Then call member functions to set @@ -162,7 +161,7 @@ org.OpenGeoPortal.Solr.prototype.getServerPort = function getServerPort() return "executeQuery.jsp"; };*/ -org.OpenGeoPortal.Solr.prototype.DataType = {Raster: "Raster", PaperMap: "Paper+Map", Point: "Point", Line: "Line", Polygon: "Polygon"}; +org.OpenGeoPortal.Solr.prototype.DataType = {Raster: "Raster", PaperMap: "Paper+Map", Point: "Point", Line: "Line", Polygon: "Polygon", Unknown: "Unknown"}; // set the data types to search for, vector is shorthand for point, line and polygon @@ -219,6 +218,10 @@ org.OpenGeoPortal.Solr.prototype.setDataTypes = function setDataTypes(rasterFlag this.DataTypes[i] = this.DataType.PaperMap; i = i + 1; } + //console.log(i); + if (i == 0 || i == 5){ + this.DataTypes.push(this.DataType.Unknown); + } }; org.OpenGeoPortal.Solr.prototype.addDataType = function addDataType(dataType) @@ -798,8 +801,17 @@ org.OpenGeoPortal.Solr.prototype.layerMatchesArea = function layerMatchesArea(ma var mapDeltaX = Math.abs(mapMaxX - mapMinX); var mapDeltaY = Math.abs(mapMaxY - mapMinY); var mapArea = (mapDeltaX * mapDeltaY); - var layerMatchesArea = "product(" + this.LayerMatchesScaleBoost + var layerMatchesArea; + /*if (mapArea > 59000) + {// here if we are dealing with a global search + // all layers with global or nearly global coverage should get the same score + layerMatchesArea = "product(100"// + this.LayerMatchesScaleBoost + + ",recip(map(abs(sub(Area," + mapArea + ")),0,8000,.01,sum(abs(sub(Area," + mapArea + ")),.01)),1,1000,1000))"; + //"sum(abs(sub(Area," + mapArea + ")),.01),1,1000,1000)))"; + }else{*/ + layerMatchesArea= "product(" + this.LayerMatchesScaleBoost + ",recip(sum(abs(sub(Area," + mapArea + ")),.01),1,1000,1000))"; + //} //var layerMatchesArea = "_val_:\"" + layerMatchesArea + "\""; return layerMatchesArea; @@ -1172,7 +1184,7 @@ org.OpenGeoPortal.Solr.prototype.getSearchQuery = function getSearchQuery() sortClause, keywordFilter, dateFilter, dataTypeFilter, institutionFilter, accessFilter, publisher, originator, restrictedFilter, topicFilter]); - var query = "q=" + queryClause + "&debugQuery=false&" + extras; //spatialFilter + "&" + returnType + "&" + returnedColumns; + var query = "q=" + queryClause + "&debugQuery=true&" + extras; //spatialFilter + "&" + returnType + "&" + returnedColumns; foo = query; return query; }; diff --git a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js index f8e32e5..79ca073 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js +++ b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js @@ -1203,6 +1203,13 @@ org.OpenGeoPortal.UserInterface.prototype.downloadContinue = function(){ arrBbox = [-180,-90,180,90]; layerObj = this.getLayerList("download"); } + for (var layer in layerObj){ + if (layerObj[layer].directDownload){ + console.log(layerObj); + jQuery("body").append(''); + delete layerObj[layer]; + } + } var layerIds = []; var needEmailInput = 0; var layerNumber = 0; @@ -1217,6 +1224,10 @@ org.OpenGeoPortal.UserInterface.prototype.downloadContinue = function(){ layerIds.push(layer + "=" + rasterFormat); } } + if (layerNumber == 0){ + jQuery("#downloadDialog").dialog('close'); + return; + } var requestObj = {}; if (arrBbox.length > 0){ requestObj.bbox = arrBbox.join(); @@ -1255,6 +1266,10 @@ org.OpenGeoPortal.UserInterface.prototype.downloadContinue = function(){ buttons: { Download: function() { requestObj.layerNumber = layerNumber; + if (layerNumber == 0){ + jQuery(this).dialog('close'); + return; + } var emailAddress = ""; if (needEmailInput > 0){ emailAddress = jQuery("#emailAddress").val(); @@ -1414,8 +1429,8 @@ org.OpenGeoPortal.UserInterface.prototype.requestDownload = function(requestObj) layer_idx = that.resultsTableObject.tableHeadingsObj.getColumnIndex("LayerId"); analytics.track("Layer Downloaded", data[inst_idx], data[layer_idx]); }); - delete requestObj.layerNumber; + var params = { url: "requestDownload", data: requestObj, @@ -1652,6 +1667,16 @@ org.OpenGeoPortal.UserInterface.prototype.getLayerList = function(downloadAction layerInfo[layerID].dataType = aData[headingsObj.getColumnIndex('DataType')]; layerInfo[layerID].access = aData[headingsObj.getColumnIndex('Access')]; layerInfo[layerID].bounds = [minX, minY, maxX, maxY]; + var locationObj = jQuery.parseJSON(aData[headingsObj.getColumnIndex("Location")]); + console.log(locationObj); + var downloadLinkExists = false; + var directDownloadUrl = ""; + if (typeof locationObj["fileDownload"] != undefined){ + downloadLinkExists = true; + directDownloadUrl = locationObj["fileDownload"] + } + layerInfo[layerID].directDownload = downloadLinkExists; + layerInfo[layerID].directDownloadUrl = directDownloadUrl; } else { that.cartTableObject.downloadActionSelectRow(aPos, false); } @@ -2270,7 +2295,8 @@ org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ var that = this; var layerStateObject = this.layerStateObject; jQuery('.olMap').css('cursor', "-moz-grab"); - jQuery(document).on('click', 'div.olControlZoomBoxItemInactive', function(){ + jQuery(document).bind('zoomBoxActivated', function(){ + //jQuery(document).on('click', 'div.olControlZoomBoxItemInactive', function(){ jQuery('.olMap').css('cursor', "-moz-zoom-in"); var mapLayers = that.mapObject.layers; for (var i in mapLayers){ @@ -2278,6 +2304,7 @@ org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ if (layerStateObject.layerStateDefined(currentLayer.name)){ if (layerStateObject.getState(currentLayer.name, "getFeature")){ that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); + layerStateObject.setState(currentLayer.name, {"getFeature": false}); } } else { continue; @@ -2286,7 +2313,8 @@ org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ layerStateObject.resetState('getFeature'); jQuery('.attributeInfoControl').attr('src', that.utility.getImage('preview.gif')); }); - jQuery(document).on('click', '.olControlNavigationItemActive', function(){ + jQuery(document).bind('panActivated', function(){ +// jQuery(document).on('click', '.olControlNavigationItemActive', function(){ jQuery('.olMap').css('cursor', "-moz-grab"); //var mapLayers = org.OpenGeoPortal.map.layers; var mapLayers = that.mapObject.layers; @@ -2295,6 +2323,7 @@ org.OpenGeoPortal.UserInterface.prototype.mouseCursor = function(){ if (layerStateObject.layerStateDefined(currentLayer.name)){ if (layerStateObject.getState(currentLayer.name, "getFeature")){ that.mapObject.events.unregister("click", currentLayer, that.mapObject.wmsGetFeature); + layerStateObject.setState(currentLayer.name, {"getFeature": false}); } } else { continue; diff --git a/geoportal_1/src/main/webapp/resources/ogpConfig.json b/geoportal_1/src/main/webapp/resources/ogpConfig.json index 8d764a5..32ffac9 100644 --- a/geoportal_1/src/main/webapp/resources/ogpConfig.json +++ b/geoportal_1/src/main/webapp/resources/ogpConfig.json @@ -11,6 +11,7 @@ "Berkeley":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_berkeley.png", "altDisplay": "Berkeley", "tooltipText": "UC Berkeley"}}}, "MIT":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_mit.png", "altDisplay": "MIT", "tooltipText": "Massachusetts Institute of Technology"}}}, "Maryland":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_maryland.png", "altDisplay": "University of Maryland", "tooltipText": "University of Maryland"}}}, + "UN":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "altDisplay": "United Nations", "tooltipText": "United Nations"}}}, "UNWFP":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "altDisplay": "UN World Food Program", "tooltipText": "UN World Food Program"}}}, "MassGIS":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_massgis.png", "altDisplay": "MassGIS", "tooltipText": "MassGIS"}}} }}} diff --git a/geoportal_1/target/maven-archiver/pom.properties b/geoportal_1/target/maven-archiver/pom.properties index 1873d3b..06fe797 100644 --- a/geoportal_1/target/maven-archiver/pom.properties +++ b/geoportal_1/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Wed Feb 06 22:39:02 EST 2013 +#Mon Feb 25 18:15:20 EET 2013 version=1.2.RC1 groupId=org.OpenGeoPortal artifactId=geoportal From ad014985783a3830144fcb76147e73d29363a283 Mon Sep 17 00:00:00 2001 From: chrissbarnett Date: Mon, 4 Mar 2013 22:17:20 -0500 Subject: [PATCH 02/51] Lots of interface changes towards 2.0 --- geoportal_1/pom.xml | 2 +- .../src/main/webapp/jspf/basicSearch.jspf | 13 - geoportal_1/src/main/webapp/jspf/footer.jspf | 2 +- geoportal_1/src/main/webapp/jspf/header.jspf | 25 +- .../src/main/webapp/jspf/leftPanel.jspf | 34 +- geoportal_1/src/main/webapp/jspf/map.jspf | 17 +- geoportal_1/src/main/webapp/jspf/results.jspf | 30 ++ geoportal_1/src/main/webapp/jspf/search.jspf | 20 ++ .../src/main/webapp/jspf/searchForm.jspf | 50 --- .../src/main/webapp/openGeoPortalHome.jsp | 15 +- .../main/webapp/resources/css/dataTable.css | 33 +- .../webapp/resources/css/jquery-ui.custom.css | 10 +- .../src/main/webapp/resources/css/mapDiv.css | 114 ++----- .../main/webapp/resources/css/structure.css | 304 +++++++++++++----- .../webapp/resources/javascript/layerTable.js | 34 +- .../webapp/resources/javascript/mapDiv.js | 4 +- .../OpenLayers-2.11/theme/default/style.css | 4 +- .../resources/javascript/userInterface.js | 8 +- .../webapp/resources/media/top_menu_bg.png | Bin 705 -> 1890 bytes .../src/main/webapp/resources/ogpConfig.json | 2 +- .../target/maven-archiver/pom.properties | 4 +- 21 files changed, 427 insertions(+), 298 deletions(-) delete mode 100644 geoportal_1/src/main/webapp/jspf/basicSearch.jspf create mode 100644 geoportal_1/src/main/webapp/jspf/results.jspf create mode 100644 geoportal_1/src/main/webapp/jspf/search.jspf delete mode 100644 geoportal_1/src/main/webapp/jspf/searchForm.jspf diff --git a/geoportal_1/pom.xml b/geoportal_1/pom.xml index bc11a7a..5b2146a 100644 --- a/geoportal_1/pom.xml +++ b/geoportal_1/pom.xml @@ -4,7 +4,7 @@ org.OpenGeoPortal geoportal war - 1.2.RC1 + 2.0.ALPHA opengeoportal webapp http://opengeoportal.org +
-
- <%@include file="gettingStartedTab.jspf"%> -
+
- <%@include file="searchForm.jspf"%> + <%@include file="results.jspf"%>
<%@include file="savedLayersTab.jspf"%> diff --git a/geoportal_1/src/main/webapp/jspf/map.jspf b/geoportal_1/src/main/webapp/jspf/map.jspf index e01d554..bc11359 100644 --- a/geoportal_1/src/main/webapp/jspf/map.jspf +++ b/geoportal_1/src/main/webapp/jspf/map.jspf @@ -1,12 +1,17 @@ -
+
-
+
+
+ Save Image + Print +
+ +
+
+
+
-
- -
go
-
\ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/results.jspf b/geoportal_1/src/main/webapp/jspf/results.jspf new file mode 100644 index 0000000..37c5a39 --- /dev/null +++ b/geoportal_1/src/main/webapp/jspf/results.jspf @@ -0,0 +1,30 @@ +
+
+ + + + +
+ Sort Results +
+
+ Columns +
+ +
+ Clear Views +
+
+
+
+
+ +
+ + diff --git a/geoportal_1/src/main/webapp/jspf/search.jspf b/geoportal_1/src/main/webapp/jspf/search.jspf new file mode 100644 index 0000000..b1713f6 --- /dev/null +++ b/geoportal_1/src/main/webapp/jspf/search.jspf @@ -0,0 +1,20 @@ + diff --git a/geoportal_1/src/main/webapp/jspf/searchForm.jspf b/geoportal_1/src/main/webapp/jspf/searchForm.jspf deleted file mode 100644 index 2cf7a99..0000000 --- a/geoportal_1/src/main/webapp/jspf/searchForm.jspf +++ /dev/null @@ -1,50 +0,0 @@ -
-
- - SEARCH - - -
- collapse - collapse left - expand right -
-
- - - -
- - - 0 - - - RESULTS - - - - by -
-
- -
- columns -
- -
- <%@include file="welcomeText.jspf"%> -
-
-
- -
- - diff --git a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp index 91ad40e..299f6b3 100644 --- a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp +++ b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp @@ -8,19 +8,8 @@
<%@include file="jspf/header.jspf"%> - -
-
+
+
<%@include file="jspf/leftPanel.jspf"%>
diff --git a/geoportal_1/src/main/webapp/resources/css/dataTable.css b/geoportal_1/src/main/webapp/resources/css/dataTable.css index 74fbf74..d115222 100644 --- a/geoportal_1/src/main/webapp/resources/css/dataTable.css +++ b/geoportal_1/src/main/webapp/resources/css/dataTable.css @@ -285,7 +285,7 @@ table.display tr td { } table.display tr.row_selected td { - background-color:#EDF4FA; + background-color:#ebf6ff; } table.display tr.downloadSelection td { @@ -360,8 +360,8 @@ div.box { } .colorPalette { - width:15px; - height:15px; + width:12px; + height:12px; border:1px solid #666666; display: inline-block; -moz-border-radius: 1px; @@ -378,6 +378,7 @@ td.colTitle { .tableCheckBox { /*margin-bottom: 0px;*/ + display: none; max-height: 13px; } @@ -405,10 +406,32 @@ td.colTitle { .zoomToLayerControlCell { left: 290px; + background: url("../media/geodata-sprite.png") no-repeat scroll -9px -110px transparent; + height: 17px; + width: 17px; } .attributeInfoControlCell { left: 312px; + background: url("../media/geodata-sprite.png") no-repeat scroll -36px -110px transparent; + height: 17px; + width: 17px; +} + +.cartIconTable { + background: url("../media/geodata-sprite.png") no-repeat scroll -102px -82px transparent; + height: 17px; + width: 17px; +} + +.repositoryIcon { + height: 17px; + width: 17px; +} + +.typeIcon { + height: 17px; + width: 17px; } .typeIcon { @@ -433,7 +456,7 @@ table.display > tbody > tr > td > div { } table.display tr.previewedLayer td { - background-color:#DDDDDD; + background-color:#f8f8e4; } .previewLock { @@ -448,7 +471,7 @@ tr.previewedLayer .previewLock { } .previewSeparator { - border-bottom: 1px solid #666666; + border-bottom: 1px solid #7E7E7E; } \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css b/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css index c722787..da5fa85 100755 --- a/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css +++ b/geoportal_1/src/main/webapp/resources/css/jquery-ui.custom.css @@ -57,11 +57,11 @@ /* Interaction states ----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #999999; background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #999999; background: #eeeeee /*url(../media/tab_bg.gif) 50% 50% repeat-x*/; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(../media/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } /*.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }*/ -.ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #999999; background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #999999; background: #eeeeee /*url(../media/tab_bg.gif) 50% 50% repeat-x*/; font-weight: normal; color: #212121; } /*.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }*/ .ui-widget :active { outline: none; } @@ -441,14 +441,14 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad ----------modified: Chris Barnett------------------------*/ .ui-tabs { color: #333333; position: relative; padding: 0; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: 0; } -.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; margin: 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; margin: 0 3px 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; z-index: 99;} .ui-tabs .ui-tabs-nav li a { float: left; padding: 0 1em; padding-top: .25em; text-decoration: none; } -.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; padding-bottom: 1px;} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; padding-bottom: 3px;} li.ui-tabs a {color: #300f00;} li.ui-tabs-active a {color: #417dc1;} .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: default; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ -.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 0; background: none; width: 100%; position: relative; height: 100%;} +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 0; background: none; width: 100%; position: absolute; height: 100%;margin-top: -1px;} .ui-accordion-content { border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC; padding: 5px;} .ui-accordion-header { height: 26.2px; padding: 0; position: relative; border: 1px solid #CCCCCC !important; border-radius:0 0 0 0;} diff --git a/geoportal_1/src/main/webapp/resources/css/mapDiv.css b/geoportal_1/src/main/webapp/resources/css/mapDiv.css index 6f2f4ab..ae3471c 100644 --- a/geoportal_1/src/main/webapp/resources/css/mapDiv.css +++ b/geoportal_1/src/main/webapp/resources/css/mapDiv.css @@ -17,57 +17,8 @@ #map_tabs { float:right; - height: 25px; - margin-right:5px; -} - -#geosearchDiv { - position: absolute; - top: 5px; - right: 4px; - width: 253px; - z-index: 1001; -} - -#geosearchDiv > input { - background: none repeat scroll 0 0 transparent; - border: 1px solid #AAAAAA; - color: #FFFFFF; - height: 17px; - width: 220px; - opacity: .7; - filter:Alpha(Opacity=70); - padding-left: 3px; - padding-right: 3px; -} - -#geosearchDiv > span { - color: white; - font-size: 10px; - visibility: hidden; -} - -#goButton { - float: right; - height: 19px; - width: 19px; - background: #cccccc url(../media/bg_grayfade.png) repeat-x; - color: #666666; - border:1px solid #AEAEAE; - font-family:tahoma; - font-size:12px; - /*margin-top:4px; - padding:0 4px;*/ - -moz-border-radius: 0px 4px 4px 0px; - border-radius: 0px 4px 4px 0px; - position: absolute; - right: 0px; - top: 0px; - box-shadow: -1px -1px 2px -1px #AEAEAE inset; -} - -div#goButton:hover { - color:#417dc1; + margin-right:20px; + margin-top: 5px; } .mapClearButtonItemInactive { @@ -119,7 +70,7 @@ div.olControlMousePosition { } .olControlPanel { - left: 5px; + left: 50px; top: 5px; } @@ -135,9 +86,9 @@ div.olControlMousePosition { height: 31px; width: 100%; position: absolute; - background-color: #000000; + /*background-color: #000000; opacity: .35; - filter:Alpha(Opacity=35); + filter:Alpha(Opacity=35);*/ z-index: 1000; } @@ -198,79 +149,80 @@ div.olControlMousePosition { .olControlNavigationHistory { background-image: none; background-repeat:no-repeat; - height:24px; - width:24px; + height:31px; + width:30px; cursor: pointer; } + .olControlNavigationHistoryPreviousItemActive { - background: url("../media/arrow_back.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -31px -161px transparent; } .olControlNavigationHistoryPreviousItemActive:hover { - background: url("../media/arrow_back_blue.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -31px -161px transparent; } .olControlNavigationHistoryPreviousItemInactive { - background: url("../media/arrow_back_disable.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -31px -161px transparent; } .olControlNavigationHistoryNextItemActive { - background: url("../media/arrow_forward.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -31px -161px transparent; } .olControlNavigationHistoryNextItemActive:hover { - background: url("../media/arrow_forward_blue.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -61px -161px transparent; } .olControlNavigationHistoryNextItemInactive { - background: url("../media/arrow_forward_disable.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll -61px -161px transparent; } .olControlPanel .olControlNavigationItemActive { - background: url("../media/pan_on.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; + background: url("../media/geodata-sprite.png") no-repeat scroll -122px -161px transparent; + width: 33px; + height: 31px; cursor: pointer; } .olControlPanel .olControlNavigationItemInactive { - background: url("../media/pan_off.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; + background: url("../media/geodata-sprite.png") no-repeat scroll -122px -161px transparent; + width: 33px; + height: 31px; cursor: pointer; } .olControlPanel .olControlZoomBoxItemActive { - background: url("../media/zoom_on.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; + background: url("../media/geodata-sprite.png") no-repeat scroll -91px -161px transparent; + width: 31px; + height: 31px; cursor: pointer; } .olControlPanel .olControlZoomBoxItemInactive { - background: url("../media/zoom_off.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; + background: url("../media/geodata-sprite.png") no-repeat scroll -91px -161px transparent; + width: 31px; + height: 31px; cursor: pointer; } div.olControlZoomBoxItemInactive:hover { - background-image: url("../media/zoom_off.png"); + background-image: url("../media/geodata-sprite.png"); } .olControlPanel .olControlZoomToMaxExtentItemInactive { - background: url("../media/full_extent.png") no-repeat scroll 0 0 transparent; - width: 24px; - height: 24px; + background: url("../media/geodata-sprite.png") no-repeat scroll 0 -161px transparent; + width: 31px; + height: 31px; cursor: pointer; } div.olControlZoomToMaxExtentItemInactive:hover { - background-image: url("../media/full_extent_hover.png") !important; + background-image: url("../media/geodata-sprite.png") !important; } .olControlZoomToMaxExtentItemInactiveHover { - background-image: url("../media/full_extent_hover.png") !important; + background-image: url("../media/geodata-sprite.png") !important; cursor: pointer; } .olControlPanel .olControlZoomToMaxExtentItemActive { - background: url("../media/full_extent_hover.png") no-repeat scroll 0 0 transparent; + background: url("../media/geodata-sprite.png") no-repeat scroll 0 0 transparent; width: 24px; height: 24px; } diff --git a/geoportal_1/src/main/webapp/resources/css/structure.css b/geoportal_1/src/main/webapp/resources/css/structure.css index f0af97b..7793d0f 100644 --- a/geoportal_1/src/main/webapp/resources/css/structure.css +++ b/geoportal_1/src/main/webapp/resources/css/structure.css @@ -13,7 +13,7 @@ body { text-align: center; margin: 0; padding: 0; - background: #cccccc url(../media/bg_tile.gif) repeat; + background: #cccccc;/* url(../media/bg_tile.gif) repeat;*/ font-family: arial, sans-serif; font-size: 12px; color: black; @@ -62,12 +62,35 @@ h3 { display: inline-block; } + +.mapStyledButton { + -moz-border-radius: 2px 2px 2px 2px; + border-radius: 2px 2px 2px 2px; + background: #EEEEEE; + border: 1px solid #AEAEAE; + color: #000; + cursor: pointer; + font-family: arial; + font-size: 12px; + margin: 0.5em 0.4em 0.5em 0; + padding: 3px 11px; + /* min-width: 88px;*/ + text-align: center; + display: inline-block; +} + .raised { -webkit-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5), 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1); } +.shadowDown { + -moz-box-shadow: 0px 3px 4px 0px #888888 inset; + -webkit-box-shadow: 0px 3px 4px 0px #888888 inset; + box-shadow: 0px 3px 4px 0px #888888 inset; +} + .styledButton:hover { color: #417DC1; } @@ -75,22 +98,32 @@ h3 { .styledButtonSmall { -moz-border-radius: 4px 4px 4px 4px; border-radius: 4px 4px 4px 4px; - background: url("../media/tab_bg.gif") repeat-x scroll 50% 50% #FFFFFF; - border: 1px solid #AEAEAE; - color: #333333; + border: 1px solid #999999; + background: #EEE; + color: #000; cursor: pointer; - font-family: tahoma; + font-family: arial; /* margin: 0.5em 0.4em 0.5em 0;*/ min-width: 66px; + height: 20px; text-align: center; display: inline-block; - font-size: 10px; - line-height: 16px; + font-size: 11px; font-weight: normal; } +.searchButton { + background: #307DB9; + color: #FFF; + border: 0; + /* margin: 0.5em 0.4em 0.5em 0;*/ + min-width: 66px; + height: 22px; + font-size: 12px; +} + .styledButtonSmall:hover { - color: #417DC1; + /*color: #417DC1;*/ } .owsServicesButton { @@ -130,46 +163,53 @@ h3 { /* Header */ #header { - height: 92px; - background-color: #edf4fa; + height: 120px; + /*background-color: #edf4fa;*/ + background-color: #ffffff; border-right: #333 solid 1px; border-left: #333 solid 1px; border-bottom: #999999 solid 1px; } #logo { - float:left; - margin-left: 40px; - background: no-repeat transparent; - height: 75px; cursor: pointer; + color: #492318; + font-size: 35px; + padding-left: 49px; + padding-top: 25px; + display: inline-block; } - + +.offsetColor { + color: #307DB9; +} + #top_menu { float:right; - height: 26px; - width: 252px; - background: url(../media/top_menu_bg.png) no-repeat transparent; - padding-top: 5px; - padding-left: 20px; + margin-top: 18px; + margin-right: 17px; } +.separator { + padding: 0 5px; +} + #top_menu a { - color:#FFFFFF; + color:#000; text-decoration: none; } #top_menu a:hover { - color:#FFFF66; + color:#0755AC; } span.infoLinks { cursor: pointer; - color:#FFFFFF; + color:#000; } span.infoLinks:hover { - color:#FFFF66; + color:#0755AC; } #welcome { @@ -197,11 +237,10 @@ span.infoLinks:hover { .styledSelect { line-height: 10px; - -moz-border-radius: 4px; - border-radius: 4px; - background-color: #ffffff; - font-family: tahoma; - color: #222222 !important; + -moz-border-radius: 3px; + border-radius: 3px; + font-family: Arial; + color: #000000 !important; z-index: 999; padding-left: 11px; text-align: left; @@ -209,8 +248,8 @@ span.infoLinks:hover { } .styledSelect:hover{ - color:#417DC1 !important; - background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x; + /*color:#417DC1 !important; + background: #ffffff url(../media/tab_bg.gif) 50% 50% repeat-x;*/ } .styledSelect > span { @@ -284,12 +323,13 @@ span.infoLinks:hover { } #basemapSelect { - height: 24px; + /*height: 24px; -moz-border-radius: 4px 4px 0px 0px; border-radius: 4px 4px 0px 0px; background-color: #ffffff; z-index: 2500; - border-bottom: none; + border-bottom: none;*/ + line-height: 10px; } #basemapSelect:hover{ @@ -304,11 +344,9 @@ span.infoLinks:hover { #basemapMenu { display: none; position: absolute; - background-color: #ffffff; + background-color: #eeeeee; border: #999999 solid 1px; z-index: 2499; - right: 0px; - margin-right: 1px; top: 29px; width: 100px; } @@ -321,7 +359,7 @@ span.infoLinks:hover { border-radius: 0px; margin: 0px; padding: 2px 5px; - background-color: #ffffff; + background-color: #eeeeee; } #basemapMenu label.ui-state-active { @@ -339,6 +377,7 @@ span.infoLinks:hover { #sortDropdown { display: inline-block; + margin-left: 10px; } #sortDropdownMenu { @@ -348,15 +387,13 @@ span.infoLinks:hover { } .subHeaderDropdownSelect { - font-size: 11px; - height: 18px; - line-height: 9px; + font-size: 12px; margin: 0; top: 0px; } #columnDropdown { - float: right; + /*float: right;*/ margin-top: 1px; padding-right: 5px; } @@ -408,12 +445,13 @@ span.infoLinks:hover { background: none !important; background-color: transparent !important; height: 100%; + margin-top: 7px; } #tabs > ul { - padding-left: 10px; - position: absolute; - top: -20px; + padding-left: 15px; + /*position: absolute;*/ + /*top: -20px;*/ } #tabs > ul > li > a { @@ -421,9 +459,9 @@ span.infoLinks:hover { } .sub_header { - height: 25px; - line-height: 25px; - background: #cccccc url(../media/bg_grayfade.png) repeat-x; + height: 32px; + line-height: 32px; + background: #eeeeee; border-top:1px solid #CCC; font-size: 12px; clear: both; @@ -434,11 +472,37 @@ span.infoLinks:hover { max-width: 88px; } -.sub_header .arrow_buttons { - display: inline; - position: absolute; - right: 5px; - margin-top: 4px; +.arrow_buttons { + float: right; + margin-top: 3px; + } + + .shoppingCartIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -127px -81px transparent; + width: 31px; + height: 22px; + display: inline-block; + float: left; + } + + .arrow_left { + background: url("../media/geodata-sprite.png") no-repeat scroll 0 -77px transparent; + width: 30px; + height: 26px; + display: inline-block; + } + + .arrow_separator { + background: url("../media/geodata-sprite.png") no-repeat scroll -29px -77px transparent; + width: 10px; + height: 26px; + display: inline-block; + } + .arrow_right { + background: url("../media/geodata-sprite.png") no-repeat scroll -39px -77px transparent; + width: 27px; + height: 26px; + display: inline-block; } .tabImage { @@ -447,13 +511,23 @@ span.infoLinks:hover { } .tabText { - font-size: 12px; - line-height: 12px; - font-family: tahoma, sans-serif; - height: 15px; + font-size: 14px; + font-family: Arial, sans-serif; + font-weight: bold; width: 86px; display: block; text-align:center; + color: #404143; + height: 20px; + line-height: 20px; +} + +#searchTabText { + width: 119px; +} + +#cartTabText { + width: 107px; } .tabText > img { @@ -507,13 +581,15 @@ span.infoLinks:hover { /* search area */ -form input[type=text] { +/*form input[type=text] { border: 1px solid #CCCCCC; + height: 15px; + padding: 2px; } form input[type=text]:focus { border: 1px solid #417DC1; -} +}*/ form input[type=password] { border: 1px solid #CCCCCC; @@ -532,31 +608,91 @@ textarea:focus { } .searchBox { - padding-top: 20px; - padding-bottom: 20px; - padding-left: 35px; + padding-top: 2px; + padding-left: 50px; font-family: arial,sans-serif; - font-size: 12px; - width: 345px; + font-size: 14px; + /*width: 345px;*/ } +.basicSearch { + display: inline-block; + line-height: 22px; + padding-right: 6px; +} + +.labelText { + padding-right: 5px; +} + +.basicSearch input[type="text"] { + width: 218px; +} + +#geosearchDiv { + /*position: absolute; + top: 5px; + right: 4px; + width: 253px; + z-index: 1001;*/ +} + +#geosearchDiv > input { + /*background: none repeat scroll 0 0 transparent; + border: 1px solid #AAAAAA; + color: #FFFFFF; + height: 17px; + width: 220px; + opacity: .7; + filter:Alpha(Opacity=70); + padding-left: 3px; + padding-right: 3px;*/ +} + +/*#geosearchDiv > span { + color: white; + font-size: 10px; + visibility: hidden; +} + +#goButton { + float: right; + height: 19px; + width: 19px; + background: #cccccc url(../media/bg_grayfade.png) repeat-x; + color: #666666; + border:1px solid #AEAEAE; + font-family:tahoma; + font-size:12px; + /*margin-top:4px; + padding:0 4px;*/ +/* -moz-border-radius: 0px 4px 4px 0px; + border-radius: 0px 4px 4px 0px; + position: absolute; + right: 0px; + top: 0px; + box-shadow: -1px -1px 2px -1px #AEAEAE inset; +} + +div#goButton:hover { + color:#417dc1; +}*/ + #basicSearchBox { display: block; } #basicSearchTextField { - height: 15px; - padding: 2px; - width: 264px; + /* width: 264px;*/ } #basicSearchSubmit { - float: right; - font-size: 11px; - line-height: 19px; + /*font-size: 11px; + line-height: 19px;*/ } #basicSearchMapFilterContainer { + display: none; margin-top: 5px; display: inline-block; visibility: hidden; @@ -596,9 +732,9 @@ textarea:focus { } #moreSearchOptions { - margin-top: 5px; + /*margin-top: 5px;*/ /*margin-left: 55px;*/ - float: right; + /*float: right;*/ } #lessSearchOptions { @@ -607,9 +743,10 @@ textarea:focus { } .searchToggle { - color: blue; text-decoration: underline; white-space: nowrap; + font-size: 11px; + display: inline-block; } .searchToggle span:hover { @@ -617,10 +754,9 @@ textarea:focus { } .searchFormLabel { + color: #0755AC; display: inline-block; - margin-right: 15px; - text-align: right; - width: 95px; + font-weight: bold; } .formCheckbox { @@ -708,7 +844,7 @@ textarea:focus { /*text-align: center; vertical-align:middle;*/ height: 30px; - background: #003366; + background: #FFF; border-right: #333 solid 1px; border-left: #333 solid 1px; border-bottom: #333 solid 1px; @@ -813,6 +949,22 @@ div.colorCell:hover { /*word-wrap: break-word;*/ } +.metadataButton { + background: url("../media/geodata-sprite.png") no-repeat scroll -131px -55px transparent; + height: 17px; + width: 17px; +} + +.saveControl { + background: url("../media/geodata-sprite.png") no-repeat scroll -102px -33px transparent; + height: 17px; + width: 17px; +} + +.saveControlChecked { + background: url("../media/geodata-sprite.png") no-repeat scroll -125px -33px transparent; +} + .dialog { text-align: left; cursor: default; diff --git a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js index 5eaf2b0..987710c 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js +++ b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js @@ -367,9 +367,9 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ //sOut += '" onclick="org.OpenGeoPortal.ui.toggleOutline(this, \'' + layerID + '\', \'' + dataType + '\')"/>'; sOut += '
'; sOut += '
'; - sOut += '
Zoom to geographic extent of layer
'; - sOut += '
'; - sOut += 'Show Attributes
'; + sOut += '
'; + sOut += '
'; + sOut += '
'; } sOut += '
'; @@ -1119,7 +1119,8 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ return '?'; } else { var iconInfo = typeIcon[dataType]; - var typeHtml = '' + iconInfo.displayName + ''; + //var typeHtml = '' + iconInfo.displayName + ''; + var typeHtml = '
'; return typeHtml; } }; @@ -1150,9 +1151,13 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ } var rowNum = rowObj.iDataRow; if (stateVal == true){ - return ''; + var value = ''; + value += '
'; + return value; } else { - return ''; + var value = ''; + value += '
'; + return value; } }; @@ -1287,18 +1292,19 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ return '?'; } else { var iconInfo = institutionInfo[institution].graphics.sourceIcon; - return '' + iconInfo.altDisplay + ''; + return '
'; + /*return '' + iconInfo.altDisplay + '';*/ } }; this.getMetadataIcon = function(rowObj){ var context = this.getContextAsString(); var dataType = rowObj.aData[that.tableHeadingsObj.getColumnIndex("DataType")]; - var metadataIcon = this.getImage("icon_meta.png"); + //var metadataIcon = this.getImage("icon_meta.png"); if (dataType.toLowerCase() == "libraryrecord"){ - return ''; + return '
'; } else { - return ''; + return '
'; } }; @@ -1858,7 +1864,7 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ }; this.setResultNumber = function(numFound){ - jQuery('#' + this.getTableDiv()).parents('.ui-tabs-panel').last().find('.resultsNumber') + jQuery('.resultsNumber') .text(numFound); if (parseInt(numFound) == 0){ //set some html below the search results table @@ -2311,7 +2317,7 @@ org.OpenGeoPortal.LayerTable.TableHeadings = function(thisObj){ {"sName": "expandControls", "sTitle": "", "bVisible": true, "aTargets": [ 2 ], "sClass": "colExpand", "sWidth": "8px", "bSortable": false, "fnRender": function(oObj){return thisObj.getExpandIcon(oObj);}}}, "Save": {"ajax": false, "resizable": false, "organize": false, "columnConfig": - {"sName": "Save", "sTitle": "\"Add", "bVisible": true, "aTargets": [ 3 ], "sClass": "colSave", "sWidth": "19px", "bSortable": false, + {"sName": "Save", "sTitle": "
", "bVisible": true, "aTargets": [ 3 ], "sClass": "colSave", "sWidth": "19px", "bSortable": false, "fnRender": function(oObj){return thisObj.getSaveControl(oObj);}}}, "score": {"ajax": true, "resizable": true, "minWidth": 27, "currentWidth": 27, "organize": true, "displayName": "Relevancy", "columnConfig": {"sName": "score", "sTitle": "Relevancy", "bVisible": false, "aTargets": [ 4 ], "sClass": "colScore", "sWidth": "27px", "bSortable": false }}, @@ -2333,12 +2339,12 @@ org.OpenGeoPortal.LayerTable.TableHeadings = function(thisObj){ {"sName": "Institution", "sTitle": "Rep", "bVisible": true, "aTargets": [ 11 ], "sClass": "colSource", "sWidth": "19px", "bSortable": false, "bUseRendered": false, "fnRender": function(oObj){return thisObj.getSourceIcon(oObj);}}}, "Metadata": {"ajax": false, "resizable": false, "organize": false, "columnConfig": - {"sName": "Metadata", "sTitle": "\"Metadata\"", "bVisible": true, "aTargets": [ 12 ], "sClass": "colMetadata", "sWidth": "17px", "bSortable": false, "bUseRendered": false, + {"sName": "Metadata", "sTitle": "Meta", "bVisible": true, "aTargets": [ 12 ], "sClass": "colMetadata", "sWidth": "17px", "bSortable": false, "bUseRendered": false, "fnRender": function(oObj){return thisObj.getMetadataIcon(oObj);}}}, "Access": {"ajax": true, "resizable": false, "organize": "alpha", "displayName": "Access", "columnConfig": {"sName": "Access", "sTitle": "Access", "bVisible": false, "aTargets": [ 13 ], "sClass": "colAccess", "sWidth": "53px", "bSortable": false}}, "View": {"ajax": false, "resizable": false, "organize": false, "columnConfig": - {"sName": "View", "sTitle": "Preview", "bVisible": true, "aTargets": [ 14 ], "sClass": "colPreview", "sWidth": "39px", "bSortable": false, + {"sName": "View", "sTitle": "View", "bVisible": true, "aTargets": [ 14 ], "sClass": "colPreview", "sWidth": "39px", "bSortable": false, "fnRender": function(oObj){return thisObj.getPreviewControl(oObj);}}}, "Location": {"ajax": true, "resizable": false, "organize": false, "columnConfig": {"sName": "Location", "sTitle": "WmsURL", "bVisible": false, "aTargets": [ 15 ], "bSortable": false}}, diff --git a/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js b/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js index 7cefb43..081e838 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js +++ b/geoportal_1/src/main/webapp/resources/javascript/mapDiv.js @@ -59,8 +59,8 @@ org.OpenGeoPortal.MapController = function(userDiv, userOptions) { nav.previous, nav.next, zoomBox, - panHand, - clearMap + panHand + //clearMap ]); //display mouse coords in lon-lat var displayCoords = new OpenLayers.Control.MousePosition({displayProjection: new OpenLayers.Projection("EPSG:4326")}); diff --git a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css index fa79d29..310878e 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css +++ b/geoportal_1/src/main/webapp/resources/javascript/openlayers/OpenLayers-2.11/theme/default/style.css @@ -141,12 +141,12 @@ div.olControlMousePosition { position: relative; } -.olControlNavigationHistory { +/*.olControlNavigationHistory { background-repeat: no-repeat; width: 24px; height: 24px; -} +}*/ .olControlNavToolbar .olControlNavigationItemActive { background-repeat: no-repeat; diff --git a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js index 79ca073..9708e22 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js +++ b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js @@ -44,14 +44,14 @@ org.OpenGeoPortal.UserInterface = function(){ */ this.init = function(){ jQuery("#tabs").tabs({ - active: 1, + active: 0, activate: function( event, ui ) { that.utility.CurrentTab = jQuery(this).tabs("option", "active"); var label, idx = ui.index; - label = (idx == 2) && "Cart Tab" || - (idx == 1) && "Search Tab" || + label = (idx == 1) && "Cart Tab" || + (idx == 0) && "Search Tab" || "Getting Started Tab"; analytics.track("Interface", "Change Tab", label); var tabObj = that.utility.whichTab(); @@ -675,7 +675,7 @@ org.OpenGeoPortal.UserInterface.prototype.createColumnsMenu = function() { * function that removes the welcome message from the search tab and shows the search results table */ org.OpenGeoPortal.UserInterface.prototype.showSearchResults = function(){ - jQuery("div#welcomeTextSearchTab").remove(); + //jQuery("div#welcomeTextSearchTab").remove(); jQuery("#resultsSubHeader > span").css("display", "inline"); jQuery("#resultsSubHeader > div").css("display", "inline-block"); diff --git a/geoportal_1/src/main/webapp/resources/media/top_menu_bg.png b/geoportal_1/src/main/webapp/resources/media/top_menu_bg.png index 6ac7bf0a1db902d8184a326299808a6caab05e7a..bfd876d5a483a2223e8edbcfd2f26959983124b4 100644 GIT binary patch delta 1876 zcmV-a2dntO1>z2nBYy-WX+uL$Nkc;*P;zf(X>4Tx05}naRo`#hR1`jmZ&IWdKOk5~ zhl<6oRa0BJ8yc;~21%2p?MfD<>DVeH9(p*dx19w`~g7O0}n_%Aq@s% zd)fBDv`JHkDym6Hd+5XuAtvnwRpGmKVkc9?T=n|PIo~$m6N9yl%7qB(zDb{1JtYOPA!qk%@Qub75C2T;T?(y%k7cw{!aEIzj}+@(TO5Y zz-|>CeHr)+QOwk9wo4Sh2mAPGw+7tv9PraN1Olr9mwlWPc+tlvJx(D%369Vz>lLjC zyaqhH*k&)cVSir(7|4_1Rc;%)B4&}Zt&(AK&*3kRaknx54=$T^^z2=OSo@r%xnsBw ziQX&rRKAHn*R}K<@Jp~?uenKKe+BrD`qF#?cpp*psgiwk-seYOU#%402HpjG(Qu~= zP5WwfF?$>svC;J<>zK$RIM;P&60@WifbUlLwAf?lk$1u(mFRYq89Q?S8HyrsX^MVnpsf`{W6(5UXREr zZM&7ilpo6ux^|%%%N9z;(dj0Ct!8>>5!%=VyPg-?ke}Vs>~sbgdDuU^Ixpr19NS&g zQew8Fz<)>RL_{M_7A<1csY*MfP@XcB#Jxr~JS8&7goVS)VKE|4(h_Xlc{z{c$ApZs z7riZ_QKdV_uW-M~u~8PF3UX~a6)MwxDE0Ha zPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiSBY#iOF*IB46Cei@XmvNzKBsGIKkN=X z$_Bgm&h5TyYjpf^^Nrn$ZO1mSZpOC4_}H(pE&Od#0y|)Oik6|u@OHupcq1J>TmjQ1 z4eM{2+Oeah>iL1tBPPK=$Ue-{x#7^N{-XY=Zm3_V7u4T7YJ?d(rX+nTeJlMa zeSar?Fa1o4bXmG0{UlwLzL72kIlJ$@pC#CPuU}yk-HKgk)oY(MCsR(!d*m18l>EH> zvOF8G6uDm>lc(gp@azfp%?$k=y%=-~vuaJXdoA$<7&H$h2Au}i##F_Gt8^Aw+nR z00009a7bBm000XU000XU0RWnu7ytkQIs(#!hSbM;IluoS`*_x|(%lRpK{`;JAb@~hz*~WsVSnX{H_66f z?tJWCPZbH$gTW~R2n-0cw=jAcQYo#zPuSJmS@Nz|LUasBaftu|K7q~(#Fnk?RI@5v zS4W4EULhgk^I`x21bPI#9*DX2`XHs%58pG778~*DZXd)9f&c;t3<&fENTW6Kaojo; z(rpMwj`o+bjp_H`3IPN}rw3vz+TRB$ygEqCFP~Yr;6VTZ1cnOqtw2m4M1QS)H|^Ax zPh&S}o(`pB5&;DI0>tBR?5zn|-E=J%9Rv_SV5mUf7RFSzU+3n(e198#FxL>{LvLmh z0R*Bg;9r4g4=Kf7%Bjy?$=(2=iyG~Z3Qv!KU%(e2rVp}SE^cMiajq(6{C6;d00Id7 z74QX!8NX_Z-Av*{zoM~)D=e@OKmdV20bdWqRGB_VrJR5FRn0G5h^g+4>|(kWoFRaK z2wZ`fZA@h?|8`Q;mVYkXN&Xdv4+;VZ1PTNOh*#;xwx(kB(xJLdfCSPphyVhCTNuM) zwlN#!!q3mGg{-Z@a|S{L5Qwh8&}7gpkDUowU#Yp%(G}v!5kMeRAT&U{K1jLvDJ{=e zj+G7&8mOU&Odt?dfzSXkAZ}B<&L-+F57exFog0g)5zmbP0!<+Tp*;{&-+rB2*f>#{ zXZ!YyxO65${tUwiAP_}?e+EdQAmmv5`4h{E=X9Vvj3N@xi~s_`0)GIoVcX`WSjYMR O0000HqJ@rv;2`bP&B5Vlig75NbkwZ` zp@l1sj@qRVsaOI^73^S#x+p@VP%AWT8n0=Z49IXN zsQ@r-AnNErYyB*8u;rBFXGjHr;Q-M}++Ez%dUNq*q*ide*Z`>jFx0Dmyw!lcvbUDtJAN2m=BPLGc(e4-G$Ej®l zNjd<`w=ffrKWb6V<>G#EtZ4O-4gm8867YRL+hrBzq<=b3IspFHK>i*elarGhjcv^P zsPu*^p*RTvXxBiR{y?`9m!+Y7D@H;9%p1tfN9$VqE7_#pb+%ML2>~!4AOX+wa>=AE zg!Y9J7AXNR-@;5!Pgh*meHGK*NJ%6}2|%j`a(sY{&#g6HzFq1Tdm}~FMM?l#3=plF zE=Vb}J%8c72cPt5QUYM!Kmw`TN4J!1+q&LY(>6%~I6gqMZha4GV{N%RR2u)PdPoX@ zc>@{EtTq#!xAZ;3m@B2^t?Y+zgeM(3^=K}ag_`=m&Ef+I)M!g%? zuO)iI2baq#A}Wes`~m#YK-!&w1RTeinw_0pyCW3+=2(_>g~$N>@?C%d0KR7t(JN|q QRsaA107*qoM6N<$g0PxDYXATM diff --git a/geoportal_1/src/main/webapp/resources/ogpConfig.json b/geoportal_1/src/main/webapp/resources/ogpConfig.json index 32ffac9..2513a7e 100644 --- a/geoportal_1/src/main/webapp/resources/ogpConfig.json +++ b/geoportal_1/src/main/webapp/resources/ogpConfig.json @@ -1,4 +1,4 @@ -{"config":{"homeInstitution": "Tufts", "institutionSpecificCss": "resources/css/institutionTufts.css", +{"config":{"homeInstitution": "Tufts", "institutionSpecificCss": "", "institutionSpecificJavaScript": "", "googleAnalyticsId": "UA-19787732-1", "googleAPIKey": "AIzaSyCuK9otEY-rbMNJEpDO_NzD1jA-OyqubDY", diff --git a/geoportal_1/target/maven-archiver/pom.properties b/geoportal_1/target/maven-archiver/pom.properties index 06fe797..dfefe57 100644 --- a/geoportal_1/target/maven-archiver/pom.properties +++ b/geoportal_1/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Mon Feb 25 18:15:20 EET 2013 -version=1.2.RC1 +#Mon Mar 04 22:06:58 EST 2013 +version=2.0.ALPHA groupId=org.OpenGeoPortal artifactId=geoportal From a0d0ed1bf631c472380cd8d358307e3a7c480059 Mon Sep 17 00:00:00 2001 From: chrissbarnett Date: Tue, 5 Mar 2013 16:59:09 -0500 Subject: [PATCH 03/51] integrated most new graphics from geodata-sprite.png. modified panZoom.js to use div's with background images, rather than img's. --- .../src/main/webapp/openGeoPortalHome.jsp | 2 +- .../src/main/webapp/resources/css/mapDiv.css | 18 +++ .../main/webapp/resources/css/structure.css | 93 +++++++++++++- .../resources/javascript/institution.js | 10 +- .../webapp/resources/javascript/layerTable.js | 63 +++++---- .../webapp/resources/javascript/panZoom.js | 121 +++++++++++++----- .../resources/javascript/userInterface.js | 96 +++++++++++--- .../webapp/resources/media/geodata-sprite.png | Bin 0 -> 18961 bytes .../src/main/webapp/resources/ogpConfig.json | 18 +-- 9 files changed, 328 insertions(+), 93 deletions(-) create mode 100644 geoportal_1/src/main/webapp/resources/media/geodata-sprite.png diff --git a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp index 299f6b3..1a1219c 100644 --- a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp +++ b/geoportal_1/src/main/webapp/openGeoPortalHome.jsp @@ -9,7 +9,7 @@
<%@include file="jspf/header.jspf"%>
-
+
<%@include file="jspf/leftPanel.jspf"%>
diff --git a/geoportal_1/src/main/webapp/resources/css/mapDiv.css b/geoportal_1/src/main/webapp/resources/css/mapDiv.css index ae3471c..cd706d3 100644 --- a/geoportal_1/src/main/webapp/resources/css/mapDiv.css +++ b/geoportal_1/src/main/webapp/resources/css/mapDiv.css @@ -227,6 +227,24 @@ div.olControlZoomToMaxExtentItemInactive:hover { height: 24px; } +.zoomPlus { + background: url("../media/geodata-sprite.png") no-repeat scroll -11px -207px transparent; +} + +.zoomMinus { + background: url("../media/geodata-sprite.png") no-repeat scroll -11px -432px transparent; +} + +.zoomSlideBar { + background: url("../media/geodata-sprite.png") no-repeat scroll -16px -229px transparent; +} + +.zoomSlider { + background-color: #ffffff; + border: 1px solid #555555; + z-index: 9; +} + .olHandlerBoxZoomBox { border: 2px solid red; position: absolute; diff --git a/geoportal_1/src/main/webapp/resources/css/structure.css b/geoportal_1/src/main/webapp/resources/css/structure.css index 7793d0f..5813acb 100644 --- a/geoportal_1/src/main/webapp/resources/css/structure.css +++ b/geoportal_1/src/main/webapp/resources/css/structure.css @@ -475,6 +475,8 @@ span.infoLinks:hover { .arrow_buttons { float: right; margin-top: 3px; + position: relative; + z-index: 9; } .shoppingCartIcon { @@ -543,7 +545,7 @@ span.infoLinks:hover { #roll_right { float:left; min-height:680px; - width:17px; + width:21px; border-right: 1px solid #999999; background: #cccccc url(../media/bg_grayfade_vert.png) repeat-y; display: none; @@ -1194,3 +1196,92 @@ iframe.download { #geoCommonsExportForm > fieldset .linkButton { float: right; } +/******** +Preview controls +*********/ +.previewOff { + background: url("../media/geodata-sprite.png") no-repeat scroll -61px -109px transparent; + width: 25px; + height: 17px; +} + +.previewOn { + background: url("../media/geodata-sprite.png") no-repeat scroll -84px -109px transparent; + width: 25px; + height: 17px; +} + +.loginButton { + background: url("../media/geodata-sprite.png") no-repeat scroll -67px -32px transparent; + width: 25px; + height: 17px; +} + +/******* +DataTypes +********/ + +.polygonIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -101px -56px transparent; + width: 17px; + height: 17px; +} + +.pointIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -80px -56px transparent; + width: 17px; + height: 17px; +} + +.lineIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -10px -56px transparent; + width: 17px; + height: 17px; +} + +.rasterIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -35px -56px transparent; + width: 17px; + height: 17px; +} + +.mapIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -58px -56px transparent; + width: 17px; + height: 17px; +} + +/************* +Repositories +*************/ +.tuftsIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -33px -10px transparent; +} + +.mitIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -129px -10px transparent; +} + +.harvardIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -79px -10px transparent; +} + +.berkeleyIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -35px -35px transparent; +} + +.marylandIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -12px -35px transparent; +} + +.unIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -10px -10px transparent; +} + +.massgisIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -102px -10px transparent; +} + +.princetonIcon { + background: url("../media/geodata-sprite.png") no-repeat scroll -56px -10px transparent; +} \ No newline at end of file diff --git a/geoportal_1/src/main/webapp/resources/javascript/institution.js b/geoportal_1/src/main/webapp/resources/javascript/institution.js index 58c688a..6a8a1e3 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/institution.js +++ b/geoportal_1/src/main/webapp/resources/javascript/institution.js @@ -135,11 +135,11 @@ org.OpenGeoPortal.InstitutionInfo.imagePath = org.OpenGeoPortal.Utility.ImageLoc org.OpenGeoPortal.InstitutionInfo.icons = { "dataTypes": { - "Point": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_dot.png", "displayName":"point"}, - "Line": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_arc.png", "displayName":"line"}, - "Polygon": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_polygon.png", "displayName":"polygon"}, - "Raster": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_raster.png", "displayName":"raster"}, - "PaperMap": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_map.png", "displayName":"scanned map"}/*, + "Point": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_dot.png", "uiClass": "pointIcon", "displayName":"point"}, + "Line": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_arc.png", "uiClass": "lineIcon", "displayName":"line"}, + "Polygon": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_polygon.png", "uiClass": "polygonIcon", "displayName":"polygon"}, + "Raster": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_raster.png", "uiClass": "rasterIcon", "displayName":"raster"}, + "PaperMap": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_map.png", "uiClass": "mapIcon", "displayName":"scanned map"}/*, "LibraryRecord": {"source": org.OpenGeoPortal.InstitutionInfo.imagePath + "type_library.png", "displayName":"library record"}*/ } }; diff --git a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js index 987710c..121d96a 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/layerTable.js +++ b/geoportal_1/src/main/webapp/resources/javascript/layerTable.js @@ -333,7 +333,7 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ sOut += '
'; sOut += '
'; sOut += '
'; - sOut += '
Zoom to geographic extent of layer
'; + sOut += this.getZoomToLayerControl(extent); sOut += '
'; sOut += '
'; } else { @@ -363,13 +363,10 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ sOut += '
'; sOut += '
'; sOut += '
'; - //sOut += ''; - sOut += '
'; - sOut += '
'; - sOut += '
'; - sOut += '
'; sOut += '
'; + sOut += this.getColorControl(tableID, layerID, dataType); + sOut += this.getZoomToLayerControl(extent); + sOut += this.getAttributeInfoControl(tableID, layerID, displayName); } sOut += '
'; @@ -377,6 +374,21 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ return sOut; }; + this.getColorControl = function(tableID, layerID, dataType){ + var colorControl = '
'; + return colorControl; + }; + + this.getZoomToLayerControl = function(extent){ + var zoomToLayerControl = '
'; + return zoomToLayerControl; + }; + + this.getAttributeInfoControl = function(tableID, layerID, displayName) { + var attrInfoControl = '
'; + return attrInfoControl; + } + this.selectPreviewedRow = function(){ var tableName = this.getTableID(); jQuery(document).on("click", '#' + tableName + ' td.colPreview > div > input:checkbox', function(event) { @@ -1116,11 +1128,12 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ dataType = "PaperMap"; } if (typeof typeIcon[dataType] == 'undefined'){ - return '?'; + return '
?
'; + } else { var iconInfo = typeIcon[dataType]; //var typeHtml = '' + iconInfo.displayName + ''; - var typeHtml = '
'; + var typeHtml = '
'; return typeHtml; } }; @@ -1239,12 +1252,12 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ }; this.getLoginPreviewControl = function(rowObj){ - var imgSource = this.getImage("view_login.png"); + //var imgSource = this.getImage("view_login.png"); //var homeInstitution = org.OpenGeoPortal.InstitutionInfo.getHomeInstitution(); var layerSource = rowObj.aData[this.tableHeadingsObj.getColumnIndex("Institution")]; - var imgText = "Login to " + layerSource + " to access this layer"; + var tooltipText = "Login to " + layerSource + " to access this layer"; //var previewControl = ''; - var previewControl = ''; + var previewControl = ''; return previewControl; }; @@ -1258,22 +1271,22 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ var layerID = this.getLayerIdFromRow(rowObj); var context = this.getContextAsString(); var stateVal = org.OpenGeoPortal.layerState.getState(layerID, "preview"); - var previewControl = ""; - + var controlText = ""; + var previewClass = ""; switch (stateVal){ case "off": - var controlText = "Preview layer on the map"; - previewControl = ''; + controlText = "Preview layer on the map"; + previewClass = "previewOff"; break; case "on": - var controlText = "Turn off layer preview on the map"; - previewControl = ''; + controlText = "Turn off layer preview on the map"; + previewClass = "previewOn"; break; default: break; } + var previewControl = '
'; + return previewControl; }; @@ -1284,16 +1297,16 @@ org.OpenGeoPortal.LayerTable = function(userDiv, tableName){ if (institution.length == 0){ return; } + var unknownSource = '
?
'; if (typeof institutionInfo[institution] == 'undefined'){ - return '?'; + return unknownSource; } else if (typeof institutionInfo[institution].graphics == 'undefined'){ - return '?'; + return unknownSource; } else if (typeof institutionInfo[institution].graphics.sourceIcon == 'undefined'){ - return '?'; + return unknownSource; } else { var iconInfo = institutionInfo[institution].graphics.sourceIcon; - return '
'; - /*return '' + iconInfo.altDisplay + '';*/ + return '
'; } }; diff --git a/geoportal_1/src/main/webapp/resources/javascript/panZoom.js b/geoportal_1/src/main/webapp/resources/javascript/panZoom.js index 392a3aa..8541c89 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/panZoom.js +++ b/geoportal_1/src/main/webapp/resources/javascript/panZoom.js @@ -1,15 +1,53 @@ -OpenLayers.Layer.WMS.prototype.getFullRequestString = function(newParams,altUrl) -{ - try{ - var projectionCode=typeof this.options.projection == 'undefined' ? this.map.getProjection() : this.options.projection; - }catch(err){ - var projectionCode=this.map.getProjection(); - } - this.params.SRS = projectionCode=="none" ? null : projectionCode; - - return OpenLayers.Layer.Grid.prototype.getFullRequestString.apply(this,arguments); -}; + /** + * Function: createBackgroundImage + * Creates an img element with specific attribute values. + * + * Parameters: + * id - {String} The id field for the img. If none assigned one will be + * automatically generated. + * px - {} The left and top positions. + * sz - {} The style.width and style.height values. + * uiClass - {String} The css class that describes the div background + * position - {String} The style.position value. + * border - {String} The border to place around the image. + * opacity - {Float} Fractional value (0.0 - 1.0) + * delayDisplay - {Boolean} If true waits until the image has been + * loaded. + * + * Returns: + * {DOMElement} A DOM Image created with the specified attributes. + */ + OpenLayers.Util.createBackgroundImage = function(id, px, sz, uiClass, position, border, + opacity, delayDisplay) { + var bgimage = document.createElement("div"); + jQuery(bgimage).addClass(uiClass); + + //set generic properties + if (!id) { + id = OpenLayers.Util.createUniqueID("OpenLayersDiv"); + } + if (!position) { + position = "relative"; + } + OpenLayers.Util.modifyDOMElement(bgimage, id, px, sz, position, + border, null, opacity); + + if(delayDisplay) { + bgimage.style.display = "none"; + OpenLayers.Event.observe(bgimage, "load", + OpenLayers.Function.bind(OpenLayers.Util.onImageLoad, bgimage)); + OpenLayers.Event.observe(bgimage, "error", + OpenLayers.Function.bind(OpenLayers.Util.onImageLoadError, bgimage)); + + } + + //set special properties + bgimage.style.alt = id; + bgimage.galleryImg = "no"; + + return bgimage; + }; /** * Function: onImageLoadError */ @@ -165,11 +203,11 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, this.draw(); }, /** - * Method: _addButton + * Method: _addButtonDiv * * Parameters: * id - {String} - * img - {String} + * uiClass - {String} * xy - {} * sz - {} * @@ -177,20 +215,39 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, * {DOMElement} A Div (an alphaImageDiv, to be precise) that contains the * image of the button, and has all the proper event handlers set. */ - _addButton:function(id, img, xy, sz) { - var btn = OpenLayers.Util.createAlphaImageDiv( - this.id + "_" + id, - xy, sz, this.imgLocation + img, "absolute"); + _addButtonDiv:function(id, uiClass, xy, sz) { + // this._addButtonDiv("zoomin", "zoomPlus", centered2.add(3, sz2.h*3), sz2); + var btn = OpenLayers.Util.createDiv(); + var bgimage = OpenLayers.Util.createBackgroundImage(this.id + "_" + id, + xy, sz, uiClass, "absolute"); + btn.appendChild(bgimage); + + + OpenLayers.Util.modifyDOMElement(btn, id, xy, sz, "static", + null, null, 1); + + var innerDiv = btn.childNodes[0]; + OpenLayers.Util.modifyDOMElement(innerDiv, btn.id + "_innerImage", null, sz, + "absolute", null); + btn.style.cursor = "pointer"; //we want to add the outer div this.div.appendChild(btn); btn.action = id; btn.className = "olButton"; - + OpenLayers.Event.observe(btn, "mousedown", + OpenLayers.Function.bindAsEventListener(this.buttonDown, btn)); + OpenLayers.Event.observe(btn, "dblclick", + OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); + OpenLayers.Event.observe(btn, "click", + OpenLayers.Function.bindAsEventListener(this.doubleClick, btn)); + btn.action = id; + btn.map = this.map; //we want to remember/reference the outer div this.buttons.push(btn); return btn; }, + /** * Method: draw * @@ -208,7 +265,7 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var sz = new OpenLayers.Size(9,13); var szNS = new OpenLayers.Size(13,9); - var sz2 = new OpenLayers.Size(18,20); + var sz2 = new OpenLayers.Size(24,20); var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y); var centered2 = new OpenLayers.Pixel(px.x+sz2.w/2, px.y); @@ -228,9 +285,10 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, } this._addButton("panright", "east-mini.png", px.add(28, 15)); this._addButton("pandown", "south-mini.png", px.add(15, 28));*/ - this._addButton("zoomin", "zoom-plus-mini.png", centered2.add(3, sz2.h*3), sz2); + this._addButtonDiv("zoomin", "zoomPlus", centered2.add(3, sz2.h*3), sz2); centered2 = this._addZoomBar(centered2.add(3, sz2.h*4)); - this._addButton("zoomout", "zoom-minus-mini.png", centered2, sz2); + this._addButtonDiv("zoomout", "zoomMinus", centered2, new OpenLayers.Size(24,25)); + return this.div; }, @@ -245,11 +303,12 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var id = this.id + "_" + this.map.id; var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom(); - var slider = OpenLayers.Util.createAlphaImageDiv(id, - centered.add(2, zoomsToEnd * this.zoomStopHeight +4), - new OpenLayers.Size(14,7), - this.imgLocation+"slider.png", + var slider = OpenLayers.Util.createBackgroundImage(id, + centered.add(2, zoomsToEnd * this.zoomStopHeight + 6), + new OpenLayers.Size(12,10), + "zoomSlider", "absolute"); + this.slider = slider; this.sliderEvents = new OpenLayers.Events(this, slider, null, true, @@ -264,24 +323,24 @@ OpenLayers.Control.ModPanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, var sz = new OpenLayers.Size(); sz.h = this.zoomStopHeight * this.map.getNumZoomLevels(); - sz.w = 7;//this.zoomStopWidth; + sz.w = 13;//this.zoomStopWidth; var div = null; - if (OpenLayers.Util.alphaHack()) { + // if (OpenLayers.Util.alphaHack()) { var id = this.id + "_" + this.map.id; - div = OpenLayers.Util.createAlphaImageDiv(id, centered, + div = OpenLayers.Util.createBackgroundImage(id, centered.add(5,0), new OpenLayers.Size(sz.w, this.zoomStopHeight), - this.imgLocation + "slider_bar.png", + "zoomSlideBar", "absolute", null, "crop"); div.style.height = sz.h + "px"; - } else { + /*} else { div = OpenLayers.Util.createDiv( 'OpenLayers_Control_PanZoomBar_Zoombar' + this.map.id, centered.add(6,0), sz, this.imgLocation+"slider_bar.png"); - } + }*/ this.zoombarDiv = div; diff --git a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js index 9708e22..d52a052 100644 --- a/geoportal_1/src/main/webapp/resources/javascript/userInterface.js +++ b/geoportal_1/src/main/webapp/resources/javascript/userInterface.js @@ -843,28 +843,83 @@ org.OpenGeoPortal.UserInterface.prototype.setSearchPanelWidth = function(newValu this.searchPanelWidth = newValue; }; +org.OpenGeoPortal.UserInterface.prototype.rollRightHandler = function(){ + var that = this; + jQuery('.arrow_right').click( function () { + analytics.track("Interface", "Expand/Collapse Buttons", "Expand Right"); + + var panelSelector = jQuery("#left_col"); + var mapSelector = jQuery("#map"); + if (panelSelector.css("display") == "none"){ + //map is full width; go back to combo display + jQuery("#roll_right").css('display', 'none'); + jQuery(".ui-resizable-handle").css("display", "block"); + panelSelector.width(that.getSearchPanelWidth()); + mapSelector.width(jQuery('#container').width() - panelSelector.width() - 1); + panelSelector.css('display', 'block'); + that.filterResults(); + } else if (mapSelector.css("display") == "none"){ + //don't do anything; search panel is already full width + } else { + //go to full width search panel + mapSelector.add("#menu").css("display", "none"); + panelSelector.width(jQuery('#container').width() - 1); + that.resultsTableObject.showCol('ContentDate'); + } + }); +}; -org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ +org.OpenGeoPortal.UserInterface.prototype.rollLeftHandler = function(){ var that = this; - jQuery('.arrow_buttons > img').click( function () { - var rollUp = that.getImage("button_arrow_up.png"); - var rollDown = that.getImage("button_arrow_down.png"); - var rollLeft = that.getImage("button_arrow_left.png"); - var rollRight = that.getImage("button_arrow_right.png"); + jQuery('.arrow_left').click( function () { + analytics.track("Interface", "Expand/Collapse Buttons", "Collapse Left"); + //logic to expand map to full size + var panelSelector = jQuery("#left_col"); + var mapSelector = jQuery("#map"); + if (panelSelector.css("display") == "none"){ + //don't do anything; map is already full width + } else if (mapSelector.css("display") == "none"){ + //go back to previous left column width; search panels are full width + panelSelector.width(that.getSearchPanelWidth()); + panelSelector.css("display", "block"); + that.resultsTableObject.hideCol('ContentDate'); + mapSelector.width(jQuery('#container').outerWidth() - panelSelector.outerWidth()); + mapSelector.add("#menu").css("display", "inline-block"); + } else { + //display full width map + panelSelector.css("display", "none"); + jQuery("#roll_right").css("display", "block"); + jQuery(".ui-resizable-handle").css("display", "none"); + mapSelector.width(jQuery('#container').outerWidth() - jQuery("#roll_right").outerWidth()); + } + }); +}; + + +org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ + this.rollRightHandler(); + this.rollLeftHandler(); +}; + /*var that = this; + jQuery('.arrow_buttons > div').click( function () { + //var rollUp = that.getImage("button_arrow_up.png"); + //var rollDown = that.getImage("button_arrow_down.png"); + var rollLeft = jQuery(this).hasClass("arrow_left"); + var rollRight = jQuery(this).hasClass("arrow_right"); var tabDiv = jQuery(this).parents('.ui-tabs-panel').last(); var userDiv = tabDiv.find('.searchBox')[0]; - var button, - src = jQuery(this).attr("src"); + var button; + // src = jQuery(this).attr("src"); - button = (src == rollUp) && "Collapse Up" || - (src == rollDown) && "Expand Down" || - (src == rollLeft) && "Collapse Left" || - (src == rollRight) && "Expand Right"; + /*button = (src == rollUp) && "Collapse Up" || + (src == rollDown) && "Expand Down" ||*/ + /*button = rollLeft && "Collapse Left" || + rollRight && "Expand Right"; - analytics.track("Interface", "Expand/Collapse Buttons", button); + analytics.track("Interface", "Expand/Collapse Buttons", button);*/ - switch (jQuery(this).attr('src')){ + /* switch (jQuery(this).attr('src')){ case rollUp: jQuery(userDiv).toggle("blind",{},250, function(){that.resultsTableObject.setTableLength();}); jQuery(this).attr('src', rollDown); @@ -876,8 +931,8 @@ org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ that.resultsTableObject.adjustTableLength(adjRows); jQuery(userDiv).toggle("blind",{},250, function(){that.resultsTableObject.setTableLength();}); jQuery(this).attr('src', rollUp); - break; - case rollLeft: + break; */ + /*if (rollLeft) { //logic to expand map to full size var panelSelector = jQuery("#left_col"); var mapSelector = jQuery("#map"); @@ -901,8 +956,8 @@ org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ //org.OpenGeoPortal.map.updateSize(); //that.mapObject.updateSize(); } - break; - case rollRight: + //break; + } else if (rollRight){ var panelSelector = jQuery("#left_col"); var mapSelector = jQuery("#map"); if (panelSelector.css("display") == "none"){ @@ -923,13 +978,12 @@ org.OpenGeoPortal.UserInterface.prototype.togglePanels = function(){ panelSelector.width(jQuery('#container').width() - 1); that.resultsTableObject.showCol('ContentDate'); } - break; - default: + } else { alert('searchBoxResize fall-through.'); } }); }; - +*/ org.OpenGeoPortal.UserInterface.prototype.mapFilterStatus = function(eventObj){ if (jQuery(eventObj).is(":checked")){ jQuery(".mapFilterFlag").attr("checked", "checked"); diff --git a/geoportal_1/src/main/webapp/resources/media/geodata-sprite.png b/geoportal_1/src/main/webapp/resources/media/geodata-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..e48258c4145f9e3e2258f4a962ad91830de519b3 GIT binary patch literal 18961 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

l8q29!!r+E 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 sM#k@5o>-OgJwE=;;Ytpu64f=;WHk~JRUW+RQR literal 0 HcmV?d00001 diff --git a/geoportal_1/src/main/webapp/resources/ogpConfig.json b/geoportal_1/src/main/webapp/resources/ogpConfig.json index 2513a7e..8a5721b 100644 --- a/geoportal_1/src/main/webapp/resources/ogpConfig.json +++ b/geoportal_1/src/main/webapp/resources/ogpConfig.json @@ -2,16 +2,16 @@ "institutionSpecificJavaScript": "", "googleAnalyticsId": "UA-19787732-1", "googleAPIKey": "AIzaSyCuK9otEY-rbMNJEpDO_NzD1jA-OyqubDY", - "search":{"serviceType": "solr", "serviceAddress": "http://localhost:8080/solr/select"}, + "search":{"serviceType": "solr", "serviceAddress": "http://geoportal-demo.atech.tufts.edu/solr/select"}, "institutions": {"Tufts": {"login": {"loginType": "form", "authenticationPage": "login"}, "proxy": {"id": "proxy.Restricted.Tufts", "accessLevel": ["restricted"], "wms": "restricted/wms", "wfs": "restricted/wfs"}, - "graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_tufts.png", "altDisplay": "Tufts", "tooltipText": "Tufts University"}}}, - "Harvard":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_harvard.png", + "graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_tufts.png", "uiClass": "tuftsIcon", "altDisplay": "Tufts", "tooltipText": "Tufts University"}}}, + "Harvard":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_harvard.png", "uiClass": "harvardIcon", "altDisplay": "HGL", "tooltipText": "Harvard Geospatial Library"}}}, - "Berkeley":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_berkeley.png", "altDisplay": "Berkeley", "tooltipText": "UC Berkeley"}}}, - "MIT":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_mit.png", "altDisplay": "MIT", "tooltipText": "Massachusetts Institute of Technology"}}}, - "Maryland":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_maryland.png", "altDisplay": "University of Maryland", "tooltipText": "University of Maryland"}}}, - "UN":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "altDisplay": "United Nations", "tooltipText": "United Nations"}}}, - "UNWFP":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "altDisplay": "UN World Food Program", "tooltipText": "UN World Food Program"}}}, - "MassGIS":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_massgis.png", "altDisplay": "MassGIS", "tooltipText": "MassGIS"}}} + "Berkeley":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_berkeley.png", "uiClass": "berkeleyIcon", "altDisplay": "Berkeley", "tooltipText": "UC Berkeley"}}}, + "MIT":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_mit.png", "uiClass": "mitIcon", "altDisplay": "MIT", "tooltipText": "Massachusetts Institute of Technology"}}}, + "Maryland":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_maryland.png", "uiClass": "marylandIcon", "altDisplay": "University of Maryland", "tooltipText": "University of Maryland"}}}, + "UN":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "uiClass": "unIcon", "altDisplay": "United Nations", "tooltipText": "United Nations"}}}, + "UNWFP":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_un.png", "uiClass": "unIcon", "altDisplay": "UN World Food Program", "tooltipText": "UN World Food Program"}}}, + "MassGIS":{"graphics":{"sourceIcon":{"resourceLocation": "resources/media/src_massgis.png", "uiClass": "massgisIcon", "altDisplay": "MassGIS", "tooltipText": "MassGIS"}}} }}} From b39398fb2fa17ceef31fb69d5fe258672583205a Mon Sep 17 00:00:00 2001 From: chrissbarnett Date: Wed, 27 Mar 2013 17:24:03 -0400 Subject: [PATCH 04/51] many, many changes towards 2.0. Especially clean up of javascript files, removal of cross dependencies in javascript objects, working toward data driven, event based architecture. javascript is generally removed from "on" attributes of html nodes. Much work towards infinitely scrollable results table. --- geoportal_1/pom.xml | 9 +- .../DownloadRequestController.java | 11 +- .../Download/DownloadHandlerImpl.java | 27 + .../Security/CustomAuthenticationFilter.java | 47 + .../Security/FormLoginService.java | 14 +- .../Security/LoginController.java | 6 +- geoportal_1/src/main/webapp/WEB-INF/web.xml | 24 +- .../{openGeoPortalHome.jsp => index.jsp} | 2 +- geoportal_1/src/main/webapp/jspf/cart.jspf | 29 + geoportal_1/src/main/webapp/jspf/footer.jspf | 17 +- .../src/main/webapp/jspf/includes.jspf | 2 + .../src/main/webapp/jspf/leftPanel.jspf | 15 +- geoportal_1/src/main/webapp/jspf/map.jspf | 9 +- geoportal_1/src/main/webapp/jspf/results.jspf | 25 +- .../src/main/webapp/jspf/savedLayersTab.jspf | 38 - geoportal_1/src/main/webapp/jspf/search.jspf | 82 +- .../src/main/webapp/jspf/welcomeText.jspf | 14 +- .../main/webapp/resources/css/dataTable.css | 33 +- .../src/main/webapp/resources/css/mapDiv.css | 23 +- .../main/webapp/resources/css/structure.css | 384 +- .../webapp/resources/javascript/analytics.js | 21 +- .../resources/javascript/appSettings.js | 61 + .../javascript/dataTables.scroller.min.js | 34 + .../webapp/resources/javascript/download.js | 24 +- .../resources/javascript/errorObject.js | 19 +- .../webapp/resources/javascript/extras.js | 28 + .../resources/javascript/geoCommonsExport.js | 27 +- .../resources/javascript/institution.js | 119 +- .../resources/javascript/layerSettings.js | 80 +- .../webapp/resources/javascript/layerTable.js | 4508 +++++++++-------- .../main/webapp/resources/javascript/login.js | 73 +- .../main/webapp/resources/javascript/main.js | 89 +- .../webapp/resources/javascript/mapDiv.js | 2010 ++++---- .../main/webapp/resources/javascript/model.js | 775 +++ .../webapp/resources/javascript/preview.js | 133 + .../main/webapp/resources/javascript/solr.js | 315 +- .../webapp/resources/javascript/template.js | 81 + .../resources/javascript/userInterface.js | 3936 +++++++------- .../webapp/resources/javascript/utility.js | 75 +- geoportal_1/src/main/webapp/test.jsp | 149 + .../target/maven-archiver/pom.properties | 2 +- 41 files changed, 7754 insertions(+), 5616 deletions(-) create mode 100644 geoportal_1/src/main/java/org/OpenGeoPortal/Security/CustomAuthenticationFilter.java rename geoportal_1/src/main/webapp/{openGeoPortalHome.jsp => index.jsp} (84%) create mode 100644 geoportal_1/src/main/webapp/jspf/cart.jspf delete mode 100644 geoportal_1/src/main/webapp/jspf/savedLayersTab.jspf create mode 100644 geoportal_1/src/main/webapp/resources/javascript/appSettings.js create mode 100644 geoportal_1/src/main/webapp/resources/javascript/dataTables.scroller.min.js create mode 100644 geoportal_1/src/main/webapp/resources/javascript/model.js create mode 100644 geoportal_1/src/main/webapp/resources/javascript/preview.js create mode 100644 geoportal_1/src/main/webapp/resources/javascript/template.js create mode 100644 geoportal_1/src/main/webapp/test.jsp diff --git a/geoportal_1/pom.xml b/geoportal_1/pom.xml index 5b2146a..35ce9d6 100644 --- a/geoportal_1/pom.xml +++ b/geoportal_1/pom.xml @@ -237,6 +237,11 @@ 3.1-b02 provided + + com.thetransactioncompany + cors-filter + 1.3.2 + opengeoportal @@ -246,8 +251,8 @@ maven-compiler-plugin 3.0 - 1.5 - 1.5 + 1.6 + 1.6 diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java index e9f4b3c..ea7856e 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java +++ b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/Controllers/DownloadRequestController.java @@ -5,6 +5,7 @@ import java.util.UUID; import org.OpenGeoPortal.Download.DownloadHandler; +import org.OpenGeoPortal.Security.OgpUserContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +22,9 @@ public class DownloadRequestController { final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private DownloadHandler downloadHandler; - + @Autowired + private OgpUserContext ogpUserContext; + @RequestMapping(method=RequestMethod.POST, produces="application/json") public @ResponseBody Map processDownload(@RequestParam("layers[]") String[] layers, @RequestParam("email") String email, @RequestParam("bbox") String bbox) throws Exception { @@ -43,8 +46,12 @@ public class DownloadRequestController { String[] layerInfo = layers[i].split("="); layerMap.put(layerInfo[0], layerInfo[1]); } + Boolean authenticated = false; + if (ogpUserContext.isAuthenticatedLocally()){ + authenticated = true; + } String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); - UUID requestId = downloadHandler.requestLayers(sessionId, layerMap, arrBbox, email, true); + UUID requestId = downloadHandler.requestLayers(sessionId, layerMap, arrBbox, email, authenticated); Map map = new HashMap(); map.put("requestId", requestId.toString()); return map; diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java index e07a501..618d1c9 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java +++ b/geoportal_1/src/main/java/org/OpenGeoPortal/Download/DownloadHandlerImpl.java @@ -101,6 +101,28 @@ public UUID requestLayers(String sessionId, Map layerMap, String[ return requestId; } + private Boolean isAuthorizedToDownload(SolrRecord solrRecord){ + if (solrRecord.getAccess().equalsIgnoreCase("public")){ + return true; + } else { + try { + if (solrRecord.getInstitution().equalsIgnoreCase(searchConfigRetriever.getHome())){ + //check if the user is locally authenticated + if (this.getLocallyAuthenticated()){ + return true; + } else { + return false; + } + } else { + return false; + } + } catch (Exception e) { + logger.error(e.getMessage()); + return false; + } + } + } + private Map > createDownloadRequestMap (Map layerMap, String[] bounds) throws Exception { this.layerInfo = this.layerInfoRetriever.fetchAllLayerInfo(layerMap.keySet()); Map > downloadMap = new HashMap>(); @@ -108,6 +130,11 @@ private Map > createDownloadRequestMap (Map authorities = new ArrayList(); + return new LoginStatus(false, null, authorities); + + } + try{ SecurityContextHolder.getContext().setAuthentication(auth); Collection authorities = null; if (auth.getAuthorities().isEmpty()){ @@ -47,9 +55,11 @@ public LoginStatus login(String username, String password) { authorities = auth.getAuthorities(); } return new LoginStatus(auth.isAuthenticated(), auth.getName(), authorities); - } catch (BadCredentialsException e) { + } catch (Exception e) { + logger.error(e.getMessage()); Collection authorities = new ArrayList(); return new LoginStatus(false, null, authorities); + } } diff --git a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java b/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java index b6b68cd..3c0b23e 100644 --- a/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java +++ b/geoportal_1/src/main/java/org/OpenGeoPortal/Security/LoginController.java @@ -22,9 +22,9 @@ public class LoginController { return loginService.getStatus(); } - @RequestMapping(value="login", method=RequestMethod.GET, produces="application/json") - @ResponseBody public LoginStatus login(@RequestParam("j_username") String username, - @RequestParam("j_password") String password) { + @RequestMapping(value="login", method=RequestMethod.POST, produces="application/json") + @ResponseBody public LoginStatus login(@RequestParam("username") String username, + @RequestParam("password") String password) { return loginService.login(username, password); } diff --git a/geoportal_1/src/main/webapp/WEB-INF/web.xml b/geoportal_1/src/main/webapp/WEB-INF/web.xml index fa7e1b5..aa054a5 100644 --- a/geoportal_1/src/main/webapp/WEB-INF/web.xml +++ b/geoportal_1/src/main/webapp/WEB-INF/web.xml @@ -2,12 +2,12 @@ OpenGeoPortal - openGeoPortalHome.jsp + index.jsp contextConfigLocation - /WEB-INF/applicationContext.xml /WEB-INF/security-app-context.xml + /WEB-INF/applicationContext.xml /WEB-INF/tufts-security-app-context.xml jsonpCallbackFilter @@ -58,4 +58,24 @@ appServlet / + +CORS +com.thetransactioncompany.cors.CORSFilter + + + cors.supportedMethods + GET, HEAD, POST, PUT, DELETE, OPTIONS + + + + cors.supportedHeaders + Content-Type, X-Requested-With, Origin, Accept + + + + + +CORS +/* + diff --git a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp b/geoportal_1/src/main/webapp/index.jsp similarity index 84% rename from geoportal_1/src/main/webapp/openGeoPortalHome.jsp rename to geoportal_1/src/main/webapp/index.jsp index 1a1219c..f14b63d 100644 --- a/geoportal_1/src/main/webapp/openGeoPortalHome.jsp +++ b/geoportal_1/src/main/webapp/index.jsp @@ -9,7 +9,7 @@

<%@include file="jspf/header.jspf"%>
-
+
<%@include file="jspf/leftPanel.jspf"%>
diff --git a/geoportal_1/src/main/webapp/jspf/cart.jspf b/geoportal_1/src/main/webapp/jspf/cart.jspf new file mode 100644 index 0000000..bb2d39e --- /dev/null +++ b/geoportal_1/src/main/webapp/jspf/cart.jspf @@ -0,0 +1,29 @@ +
+
+ + OPTIONS + +
+
+ Download + Web Service + Share + Map It +
+
+ +
+
+ + LAYERS + + + + + + Remove + + +
+
+
\ No newline at end of file diff --git a/geoportal_1/src/main/webapp/jspf/footer.jspf b/geoportal_1/src/main/webapp/jspf/footer.jspf index 80a8b2c..78cefa2 100644 --- a/geoportal_1/src/main/webapp/jspf/footer.jspf +++ b/geoportal_1/src/main/webapp/jspf/footer.jspf @@ -1,17 +1,18 @@