Mercurial > hg > LGServices
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"/> <% } %>