view src/main/webapp/pages/fullTextSearch.jsp @ 52:fc4ee9cc587b

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 Mon, 01 Feb 2016 15:40:41 +0100
parents cf747a960516
children a00efd5d9e77
line wrap: on
line source

<%@page import="org.apache.commons.lang.StringUtils"%>
<%@page import="de.mpiwg.gazetteer.db.DBContents"%>
<%@page import="de.mpiwg.gazetteer.bo.LGFullTextSearchFile"%>


<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<jsp:useBean id="sessionBean" class="de.mpiwg.web.jsp.SessionBean" scope="session" />
	

<html>

<head>

	<jsp:include page="../componentes/headContent.jsp"/>	

	<script>	
	
		
		$(function() {
		    $( "#dialogMoreInfo" ).dialog({
		        autoOpen: false,
		        modal: true,
		        position: { my: "center", at: "top", of: window },
		        
		      });
		    
		    var dialogSave = $("#dialogSave").dialog(
				{
					autoOpen: false,
					position: { my: "left+100px", at: "top", of: $("#saveResult") },
				}
		  	);	   
			$("#saveResult").button().on( "click", function() {
				// append searchTerm into the form 		
				$('<input>').attr({
				    type: 'hidden',
				    name: 'searchTerm',
				    value: $("#searchTerm").val()
				}).appendTo('form[name="saveTableForm"]');
				
				
				dialogSave.dialog( "open" );
			});
			
			var dialogViewSavedResult = $("#dialogViewSavedResult").dialog(
				{
					autoOpen: false,
					position: { my: "left+100px", at: "top", of: $("#viewSavedResult") },
				}
		  	);
			$("#viewSavedResult").button().on( "click", function() {
				dialogViewSavedResult.dialog( "open" );
			});
			
			
		});
		
		// enter pressed event, we don't want to always go to "search".
		$(document).keypress(
			function(event){
				if (event.which == '13') {	// enter pressed
					// if any of the filter fields is filled in, filter first; otherwize, go to search
					$(".filterInput" ).each(function( i ) {
						//console.log( this.value );
						if (this.value != "") {
							//console.log('filtering' + i);
							setAction('filter', 'fullTextSearchForm');
							$("#fullTextSearchForm").submit();
							return false;		
						}
						
					});
			    }
		});
		
		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');
			$('html,body').scrollTop($("#content_"+id).offset().top - y + offsetInElement); 
			
		}
		
		function highlightKeywords()	// highlight keywords in content column, with class="content"
		{	
			if ($("#searchTerm")[0] == undefined ){
				return;
			}
			var keywords = $("#searchTerm")[0].value;
			var keywordsArray = keywords.split(", ");
			//console.log("keywordsArray: "+keywordsArray);
			
			var content = $(".content");
			for (var i = 0; i < content.length; i++) {
				// find keywords in content[i]
				var text = content[i].innerHTML;
				for (var j = 0; j < keywordsArray.length; j++) {
					var index = text.indexOf(keywordsArray[j]);
					if (index >= 0) {
						text = text.substring(0,index) + "<span class='highlight'>" + text.substring(index, index+keywordsArray[j].length) + "</span>" + text.substring(index+keywordsArray[j].length);
						content[i].innerHTML = text;
					}		
				};

			};
		}
		
	</script>
</head>

<body>

	<jsp:include page="../componentes/template.jsp"/>

	<div id="dialogMoreInfo" title="Full Text Search Details"> </div>
	
	<div id="page">
	
		<% if(sessionBean.getUser() == null) { %>
			<label class="subTitel">You must login!</label>
		<% } else { 
			
			if (sessionBean.getFullTextSearchPage().getFileList() == null){ 
				sessionBean.getFullTextSearchPage().loadParameters(request, response);
				sessionBean.getFullTextSearchPage().forceLoadFileList();
			}
			
			%>
			
			<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>
								<input id="fileName" name="fileName" type="text" placeholder="table name"/>
							</td>
							<td>
								<button onclick="setAction('save', 'saveTableForm'); document.getElementById('saveTableForm').submit();">Save</button> 
								
							</td>
						</tr>						
					</table>	
				</form>
			 	
			</div>	
			
			<div id="dialogViewSavedResult" title="Saved Table List:">
		
				<table class="pageTable">
					<tr>
						<td class="tableTitle">Table name</td>
						<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() ){%>
					<tr>
						<td><%= aFile.getFileName() %></td>
						<!-- getFullTextSearchFileText?fileId= &userId= -->
						<td>
							<!-- click searching result to open it in the same table of full-text-search result -->
							<a href="<%=sessionBean.getApplicationBean().getRootServer() %>/rest/text/getFullTextSearchHtmlFile?fileId=<%= aFile.getId() %>"
										target="_blank">
								<img alt="Show text in html" src="<%=sessionBean.getApplicationBean().getShowImage()%>"/>	
							</a>
						</td>
						<td>
							<button type="button" class="lgButton" onclick="setAction0('loadFile', 'fullTextSearchForm', 'fileId', <%=aFile.getId() %>); document.getElementById('fullTextSearchForm').submit();">load</button>	
						</td>
						<td>
							<!-- view on LGMap -->
							<a href="<%=sessionBean.getApplicationBean().getLGMapUrl() %>&file=<%=aFile.getUserId().toString()%>_<%=aFile.getFileName()%>.csv&name=<%=aFile.getSearchTerms() %>"
										target="_blank">
								<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>
					<% } %>
					
				</table>
				
		
			</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>
						<input
							id="searchTerm"
							name="searchTerm"
							type="text"
							class="searchInput"
							value="<%=sessionBean.getFullTextSearchPage().getSearchTerm()%>" />				
					</td>
					<td>
						<input id="search"
							type="image" 
							onclick="setAction('search', 'fullTextSearchForm');"
							src="<%=sessionBean.getApplicationBean().getSearchImage()%>"/>
					</td>
	
		
				</tr>
				
				<!-- TODO batching querying -->
				<!-- for batching, query keyword sets separated by ";" and within each keyword set, keywords separated by "," -->
				<% if (StringUtils.equals(sessionBean.getUserName(), "zhong") || StringUtils.equals(sessionBean.getUserName(), "silk")) { %>
				<tr>
					<td>
						<input
							id="batchSearchTerm"
							name="batchSearchTerm"
							type="text"
							class="searchInput"
							value="<%=sessionBean.getFullTextSearchPage().getBatchSearchTerm() %>" />				
					</td>
					<td>
						<input id="search"
							type="image" 
							onclick="setAction('searchBatch', 'fullTextSearchForm');"
							src="<%=sessionBean.getApplicationBean().getSearchImage()%>"/>
					</td>
	
		
				</tr>
				<% } %>
				
				<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>
				</td></tr>
					
				
				</table>
		
		
	
			<%
				if (sessionBean.getFullTextSearchPage().getCompleteList() != null) {
			%>
	
			
			<jsp:include page="../componentes/paginator.jsp">
				<jsp:param name="formName" value="fullTextSearchForm"/>
			</jsp:include> 
		
			
			<div class="tableDiv double-scroll">
				<table class="pageTable">
					<tbody>
						<tr>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">#</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image" 
														onclick="setAction('sortByInxUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByInxDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
								</table>
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Book Id</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image" 
														onclick="setAction('sortByBookIdUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByBookIdDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="bookIdFilter" id="bookIdFilter" value="<%= sessionBean.getFullTextSearchPage().getBookIdFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
								</table>
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Book Name</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByBookNameUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByBookNameDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																	
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="bookNameFilter" id="bookNameFilter" value="<%= sessionBean.getFullTextSearchPage().getBookNameFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
								</table>					
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Level 1</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByLevel1Up', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByLevel1Down', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="level1Filter" id="level1Filter" value="<%= sessionBean.getFullTextSearchPage().getLevel1Filter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>								
								</table>	
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Level 2</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByLevel2Up', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByLevel2Down', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="level2Filter" id="level2Filter" value="<%= sessionBean.getFullTextSearchPage().getLevel2Filter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>								
								</table>
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Dynasty</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByDynastyUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByDynastyDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="dynastyFilter" id="dynastyFilter" value="<%= sessionBean.getFullTextSearchPage().getDynastyFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
								</table>					
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Period</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByPeriodUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByPeriodDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="periodFilter" id="periodFilter" value="<%= sessionBean.getFullTextSearchPage().getPeriodFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
								</table>						
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Admin Type</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByAdminTypeUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByAdminTypeDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="adminTypeFilter" id="adminTypeFilter" value="<%= sessionBean.getFullTextSearchPage().getAdminTypeFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>								
								</table>	
							</th>
							
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Section Name</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortBySectionNameUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortBySectionNameDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="sectionNameFilter" id="sectionNameFilter" value="<%= sessionBean.getFullTextSearchPage().getSectionNameFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
								</table>	
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Section Pages</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortBySectionNameUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortBySectionNameDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
								</table>	
							</th>
							<th>
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Page</label></td>
										<td>
											<table>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByStartPageUp', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getUpImage()%>"/>										
												</td></tr>
												<tr><td>
													<input type="image"
														onclick="setAction('sortByStartPageDown', 'fullTextSearchForm');"
														src="<%=sessionBean.getApplicationBean().getDownImage()%>"/>																				
												</td></tr>
											</table>
										</td>
									</tr>
								</table>							
							
							</th>
							<th style="min-width:300px">
								
								<table class="sortTable">
									<tr>
										<td><label class="tableTitle">Content</label></td>
										<td></td>
									</tr>
									<tr>
										<td>
											<input type="text" class="filterInput" name="contentFilter" id="contentFilter" value="<%= sessionBean.getFullTextSearchPage().getContentFilter()%>" size="8"/>
										</td>									
										<td>
											<input type="image"
												onclick="setAction('filter', 'fullTextSearchForm');"
												src="<%=sessionBean.getApplicationBean().getFilterImage()%>"/>
										</td>							
									</tr>
									
								</table>	
								
							</th>
							<th><label class="tableTitle">Select rows</th>
						</tr>
					
		
						<%
						for (DBContents content : sessionBean.getFullTextSearchPage().getDisplayList() ) {
						%>
						
						<% if ( content.isRemoved() ) { %>
						<tr class="removedContent">	
						<% } else { %>
						<tr>	
						<% } %>
									
							<td><%=content.getInx() %></td>
							<td><%=content.getBookId() %></td>
							<td><%=content.getSection().getBook().getName()%></td>
							<td><%=content.getSection().getBook().getLevel1()%></td>
							<td><%=content.getSection().getBook().getLevel2()%></td>
							<td><%=content.getSection().getBook().getDynasty()%></td>
							<td><%=content.getSection().getBook().getPeriod()%></td>
							<td><%=content.getSection().getBook().getAdmin_type() %></td>
							<td><%=content.getSection().getName() %></td>
							<td><%=content.getSection().getPages()%></td>
							<td><%=content.getPage() %></td>
							<td class="content"><%=content.getContent()%></td>
							<td id="content_<%=content.getId() %>">
								<% if ( content.isRemoved() ) { %>
	
									<input type="image"	onclick="setMousePos(); setAction0('recoverFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
										src="<%=sessionBean.getApplicationBean().getCheckboxUncheckedImage()%>" width="20" height="20"/>
										
								<% } else { %>
							
									<input type="image" onclick="setMousePos(); setAction0('removeFocusedContent', 'fullTextSearchForm', 'focusedContentId', '<%=content.getId() %>');"	
										src="<%=sessionBean.getApplicationBean().getCheckboxCheckedImage()%>" width="20" height="20"/>
								
								<% } %>
							
									
								
							</td>
							
						</tr>
						<%
							}
						%>
						
					</tbody>
				</table>
		
				
			<%
				}
			%>
			
			</div>
			
			<jsp:include page="../componentes/paginator.jsp">
				<jsp:param name="formName" value="fullTextSearchForm"/>
			</jsp:include> 
			 
			 
		</form>
	
		<% } %>
		
	</div>

</body>
</html>