changeset 51:cf747a960516

new: auto scroll to the last position when de/selecting rows, and add number of selected rows info, in full text search page
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Fri, 29 Jan 2016 11:54:32 +0100
parents 8f6c47775fe8
children fc4ee9cc587b
files src/main/java/de/mpiwg/gazetteer/utils/FileManager.java src/main/java/de/mpiwg/web/jsp/FullTextSearchPage.java src/main/java/de/mpiwg/web/jsp/JSPProxy.java src/main/webapp/pages/fullTextSearch.jsp
diffstat 4 files changed, 180 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/gazetteer/utils/FileManager.java	Tue Jan 26 13:41:47 2016 +0100
+++ b/src/main/java/de/mpiwg/gazetteer/utils/FileManager.java	Fri Jan 29 11:54:32 2016 +0100
@@ -135,7 +135,7 @@
 		text += header;
 		text += "<body>"
 				+ "<div class='subTitel'>Table name: " + file.getFileName() + "<div>"
-				+ "<div class='label'>" + list.size() + " result(s) in the table.</dvi>"
+				+ "<div class='label'>" + list.size() + " row(s) in the table.</dvi>"
 				+ "<div class='label'>searching by keywords: " + '"' + "<span id='searchTerm'>" + file.getSearchTerms() + "</span>" + '"' + "</div>"
 				+ "<div class='label'><a href='" + getLGMapUrl(file) + "' target='_blank'>view on LGMap</a><div>"
 				+ "<br>"
--- a/src/main/java/de/mpiwg/web/jsp/FullTextSearchPage.java	Tue Jan 26 13:41:47 2016 +0100
+++ b/src/main/java/de/mpiwg/web/jsp/FullTextSearchPage.java	Fri Jan 29 11:54:32 2016 +0100
@@ -55,6 +55,7 @@
 	private DataPaginator paginator = new DataPaginator();
 	private String searchMessage;
 	private String filteringMessage;
+	private String selectedContentMessage;
 
 	private String bookIdFilter = new String();
 	private String bookNameFilter = new String();
@@ -67,10 +68,16 @@
 	private String fileName = new String();
 	
 	private String focusedContentId = new String();
+	private Integer selectedNumOfContent = 0;
+	
+	private String mouseX;
+	private String mouseY;
+	
 	
 	@Override
 	public void init(){
 		super.init();
+		
 	}
 	
 	public void loadParameters(HttpServletRequest request, HttpServletResponse response){
@@ -96,8 +103,11 @@
 		this.fileName = getParameter("fileName");
 		
 		this.focusedContentId = getParameter("focusedContentId");
+		this.mouseX = getParameter("mouseX");
+		this.mouseY = getParameter("mouseY");
 		
 		
+		this.paginator.setItemsPerPage(20);
 	}
 
 	
@@ -134,6 +144,7 @@
 						// save none zero result
 						Collections.sort(this.completeList);
 						this.filter();
+						this.calSelectedContentInCompleteList();
 						
 						this.setFileName(this.getSearchTerm());
 						this.save();
@@ -169,6 +180,9 @@
 				if (this.completeList != null ){
 					Collections.sort(this.completeList);
 					filter();
+				
+					this.calSelectedContentInCompleteList();
+				
 				}
 						
 			} catch (Exception e) {
@@ -178,6 +192,17 @@
 	}
 	
 	
+	private void calSelectedContentInCompleteList() {
+		// calculate selectedContent
+		this.selectedNumOfContent = 0;
+		for (DBContents content: this.completeList) {
+			if (!content.isRemoved()) {
+				this.selectedNumOfContent += 1;
+			}
+		}
+		this.setSelectedContentMessage(this.selectedNumOfContent.toString() + " section(s) selected");
+	}
+
 	public void forceLoadFileList(){
 		logger.debug("forceLoadFileList");
 		logger.debug(this.getSearchTerm());
@@ -192,14 +217,22 @@
 
 	}
 	
+	public void deleteFile() {
+		// TODO delete the files from file system (html in ftsearch-data/... and csv in LGMap/datasets/) and the record in database table FullTextSearchFile
+		Long fileId = getLongParameter("fileId");
+		logger.debug("loading fileId=" + fileId);
+		
+		if(fileId != null){
+		
+		}
+	}
 	
 	public void loadFile() {
 		Long fileId = getLongParameter("fileId");
 		logger.debug("loading fileId=" + fileId);
 		
 		if(fileId != null){
-			// TODO load from html? or csv? file into searching result table
-			
+			// load from html file into searching result table
 			LGFullTextSearchFile file = DataProvider.getInstance().getFullTextSearchFile(fileId);
 			if(file != null){
 				String html;
@@ -269,6 +302,9 @@
 					if (this.completeList != null ){
 						Collections.sort(this.completeList);
 						filter();
+						// TODO 
+						this.calSelectedContentInCompleteList();
+						
 					}
 						
 				} catch (Exception e) {
@@ -353,8 +389,7 @@
 						(StringUtils.isEmpty(bookNameFilter) || StringUtils.startsWith(content.getSection().getBook().getName(), bookNameFilter)) &&
 						(StringUtils.isEmpty(sectionNameFilter) || StringUtils.startsWith(content.getSection().getName(), sectionNameFilter))  &&
 						(StringUtils.isEmpty(contentFilter) || StringUtils.contains(content.getContent(), contentFilter)) 
-						
-						
+				
 						){
 					this.filteredList.add(content);
 				}	
@@ -404,6 +439,47 @@
 	}
 	
 	
+
+	public void removeFocusedContent(boolean status) {
+
+		// set isRemove for the content with id=this.focusedContentId
+		// status is true: remove; 
+		// status is false: recover (unremove)
+		
+		for (DBContents content: this.completeList) {
+			if (StringUtils.equals(content.getId().toString(), this.focusedContentId)) {
+				content.setRemoved(status);
+				logger.debug("set remove content id=" + content.getId().toString());
+				break;
+			}
+		}
+
+		int currentPage = this.getPaginator().getCurrentPage();
+		
+		Collections.sort(this.completeList);
+		filter();
+		
+		// update the selectedNumOfContent to selectedMessage
+		if (status) {
+			this.selectedNumOfContent -= 1;
+		} else {
+			this.selectedNumOfContent += 1;
+		}
+		
+		selectedContentMessage = this.selectedNumOfContent.toString() + " section(s) selected";
+		this.setSelectedContentMessage(selectedContentMessage);
+		
+		this.getPaginator().setCurrentPage(currentPage);
+		this.updateCurrentSections();
+		
+	
+		
+	}
+
+	
+
+	
+	
 	private List<String> splitBatchSearchTerm() {
 		List<String> rs = new ArrayList<String>();
 
@@ -586,6 +662,15 @@
 		this.filteringMessage = filteringMessage;
 	}	
 	
+	
+	public String getSelectedContentMessage() {
+		return selectedContentMessage;
+	}
+
+	public void setSelectedContentMessage(String selectedContentMessage) {
+		this.selectedContentMessage = selectedContentMessage;
+	}
+
 	public String getFileName() {
 		return fileName;
 	}
@@ -673,6 +758,32 @@
 		this.sectionNameFilter = sectionNameFilter;
 	}
 
+
+
+	public String getMouseX() {
+		return mouseX;
+	}
+
+	public void setMouseX(String mouseX) {
+		this.mouseX = mouseX;
+	}
+
+	public String getMouseY() {
+		return mouseY;
+	}
+
+	public void setMouseY(String mouseY) {
+		this.mouseY = mouseY;
+	}
+
+	public Integer getSelectedNumOfContent() {
+		return selectedNumOfContent;
+	}
+
+	public void setSelectedNumOfContent(Integer selectedNumOfContent) {
+		this.selectedNumOfContent = selectedNumOfContent;
+	}
+
 	
 	
 	/////// Sorting
@@ -803,31 +914,6 @@
 	
 	
 
-	public void removeFocusedContent(boolean status) {
-
-		// set isRemove for the content with id=this.focusedContentId
-		// status is true: remove; 
-		// status is false: recover (unremove)
-		
-		for (DBContents content: this.completeList) {
-			if (StringUtils.equals(content.getId().toString(), this.focusedContentId)) {
-				content.setRemoved(status);
-				logger.debug("set remove content id=" + content.getId().toString());
-				break;
-			}
-		}
-
-		int currentPage = this.getPaginator().getCurrentPage();
-		
-		Collections.sort(this.completeList);
-		filter();
-		
-		this.getPaginator().setCurrentPage(currentPage);
-		this.updateCurrentSections();
-	}
-
-	
-
 	
 
 
--- a/src/main/java/de/mpiwg/web/jsp/JSPProxy.java	Tue Jan 26 13:41:47 2016 +0100
+++ b/src/main/java/de/mpiwg/web/jsp/JSPProxy.java	Fri Jan 29 11:54:32 2016 +0100
@@ -245,6 +245,10 @@
 				} else if(StringUtils.equals(action, "loadFile")) {
 					getSessionBean().getFullTextSearchPage().loadFile();
 					
+				// delete existing searching result
+				} else if(StringUtils.equals(action, "deleteFile")) {
+					getSessionBean().getFullTextSearchPage().deleteFile();
+					
 				//PAGINATOR
 				} else if(StringUtils.equals(action, "firstPage")){
 					getSessionBean().getFullTextSearchPage().firstPage();
--- a/src/main/webapp/pages/fullTextSearch.jsp	Tue Jan 26 13:41:47 2016 +0100
+++ b/src/main/webapp/pages/fullTextSearch.jsp	Fri Jan 29 11:54:32 2016 +0100
@@ -15,6 +15,8 @@
 	<jsp:include page="../componentes/headContent.jsp"/>	
 
 	<script>	
+	
+		
 		$(function() {
 		    $( "#dialogMoreInfo" ).dialog({
 		        autoOpen: false,
@@ -24,7 +26,10 @@
 		      });
 		    
 		    var dialogSave = $("#dialogSave").dialog(
-					{autoOpen: false}
+				{
+					autoOpen: false,
+					position: { my: "left+100px", at: "top", of: $("#saveResult") },
+				}
 		  	);	   
 			$("#saveResult").button().on( "click", function() {
 				// append searchTerm into the form 		
@@ -39,8 +44,11 @@
 			});
 			
 			var dialogViewSavedResult = $("#dialogViewSavedResult").dialog(
-					{autoOpen: false}
-		  	);	  
+				{
+					autoOpen: false,
+					position: { my: "left+100px", at: "top", of: $("#viewSavedResult") },
+				}
+		  	);
 			$("#viewSavedResult").button().on( "click", function() {
 				dialogViewSavedResult.dialog( "open" );
 			});
@@ -66,10 +74,34 @@
 			    }
 		});
 		
+		function setMousePos(){
+			var x = event.clientX;
+			var y = event.clientY;
+			$("#mouseX").val(x);
+			$("#mouseY").val(y);
+		}
+		
 		$(document).ready(function(){
 			highlightKeywords();
+			scrollPage();
 		})
 
+		function scrollPage() {
+			var id = $("#focusedId").val();		
+			if (id == undefined || $("#content_"+id).offset() == undefined) return;
+			
+			//$('html,body').animate({scrollTop: $("#content_"+id).offset().top}, 'fast');
+
+			var x = $("#mouseX").val();
+			var y = $("#mouseY").val();
+			var offsetInElement = $("#content_"+id).height() / 2;
+
+			//console.log("y: " + y + ", top: " + $("#content_"+id).offset().top + ", offsetInElement: " + offsetInElement);	
+			if (y == undefined) return;
+			
+			$('html,body').animate({scrollTop: $("#content_"+id).offset().top - y + offsetInElement}, 'fast');
+		}
+		
 		function highlightKeywords()	// highlight keywords in content column, with class="content"
 		{	
 			if ($("#searchTerm")[0] == undefined ){
@@ -117,13 +149,14 @@
 			%>
 			
 			<div id="dialogSave" title="Save Table:">
+				
 				<form name="saveTableForm" id="saveTableForm"
 						action="<%= sessionBean.getApplicationBean().getRootServer()%>/proxy.jsp"
 						method="post">
 						<input name="bean" type="hidden" value="fullTextSearchBean" /> 
 					<table>
 						<tr>
-							<td>
+							<td>Save the selected <%=sessionBean.getFullTextSearchPage().getSelectedNumOfContent() %> section(s) to table:
 								<input id="fileName" name="fileName" type="text" placeholder="table name"/>
 							</td>
 							<td>
@@ -144,6 +177,9 @@
 						<td class="tableTitle">View html</td>
 						<td class="tableTitle"></td>
 						<td class="tableTitle">View on LGMap</td>
+						<!-- 
+						<td class="tableTitle">Delete(TODO?)</td>
+						-->
 					</tr>
 					
 					<% for (LGFullTextSearchFile aFile : sessionBean.getFullTextSearchPage().getFileList() ){%>
@@ -167,6 +203,14 @@
 								<img alt="View on LGMap" src="<%=sessionBean.getApplicationBean().getShowImage()%>"/>	
 							</a>
 						</td>
+						<!-- 
+						<td>
+							<input type="image" 
+								onclick="<%=sessionBean.getApplicationBean().getJSConfirmationDelete() %> setAction0('deleteFile', 'fullTextSearchForm', 'fileId','<%=aFile.getId() %>'); document.getElementById('fullTextSearchForm').submit();" 
+								src="<%=sessionBean.getApplicationBean().getDeleteImage()%>"/>
+									
+						</td>
+						 -->
 					</tr>
 					<% } %>
 					
@@ -176,12 +220,18 @@
 			</div>	
 		<label class="subTitel">Full Text Search</label> 
 
+			
 			<form name="fullTextSearchForm" id="fullTextSearchForm"
 				action="<%=sessionBean.getApplicationBean().getRootServer()%>/proxy.jsp"
 				method="post"
 				class="contentForm">
 				<input name="bean" type="hidden" value="fullTextSearchBean" /> 
-	
+				<input id="focusedId" type="hidden" value="<%=sessionBean.getFullTextSearchPage().getFocusedContentId() %>"/>
+				
+				<input id="mouseX" name="mouseX" type="hidden" value="<%=sessionBean.getFullTextSearchPage().getMouseX() %>"/>
+				<input id="mouseY" name="mouseY" type="hidden" value="<%=sessionBean.getFullTextSearchPage().getMouseY() %>"/>
+				
+				
 				<table style="width: 300px; margin-left: auto;margin-right: auto;">
 				<tr>
 					<td>
@@ -227,6 +277,8 @@
 				
 				<tr><td><label class="label"><%= (StringUtils.isNotEmpty(sessionBean.getFullTextSearchPage().getSearchMessage())) ? sessionBean.getFullTextSearchPage().getSearchMessage() : ""%></label></td></tr>
 				<tr><td><label class="label"><%= (StringUtils.isNotEmpty(sessionBean.getFullTextSearchPage().getFilteringMessage())) ? sessionBean.getFullTextSearchPage().getFilteringMessage() : ""%></label></td></tr>
+				<tr><td><label class="label"><%= (StringUtils.isNotEmpty(sessionBean.getFullTextSearchPage().getSelectedContentMessage())) ? sessionBean.getFullTextSearchPage().getSelectedContentMessage() : ""%></label></td></tr>
+				
 				<tr><td>
 					<button id="saveResult" type="button" class="lgButton">Save Table</button>								
 					<button id="viewSavedResult" type="button" class="lgButton">View/Load Saved Table(s)</button>
@@ -611,15 +663,15 @@
 							<td><%=content.getSection().getPages()%></td>
 							<td><%=content.getPage() %></td>
 							<td class="content"><%=content.getContent()%></td>
-							<td>
+							<td id="content_<%=content.getId() %>">
 								<% if ( content.isRemoved() ) { %>
 	
-									<input type="image"	onclick="setAction0('recoverFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
+									<input type="image"	onclick="setMousePos(); setAction0('recoverFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
 										src="<%=sessionBean.getApplicationBean().getCheckboxUncheckedImage()%>" width="20" height="20"/>
 										
 								<% } else { %>
 							
-									<input type="image" onclick="setAction0('removeFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
+									<input type="image" onclick="setMousePos(); setAction0('removeFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
 										src="<%=sessionBean.getApplicationBean().getCheckboxCheckedImage()%>" width="20" height="20"/>
 								
 								<% } %>