Changeset 2124
- Timestamp:
- Nov 8, 2013, 8:15:38 AM (10 years ago)
- Location:
- extensions/net.sf.basedb.reggie/branches/ticket-489
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/net.sf.basedb.reggie/branches/ticket-489/resources/sampleproc/histology_score.jsp
r2123 r2124 7 7 import="net.sf.basedb.core.Application" 8 8 import="net.sf.basedb.clients.web.Base" 9 import="net.sf.basedb.clients.web.util.HTML" 9 10 import="net.sf.basedb.clients.web.extensions.ExtensionsControl" 10 11 import="java.text.SimpleDateFormat" … … 26 27 final User user = User.getById(dc, sc.getLoggedInUserId()); 27 28 final String today = new SimpleDateFormat("yyyyMMdd").format(new Date()); 29 final String name = request.getParameter("name"); 28 30 %> 29 31 <base:page type="default" > … … 41 43 { 42 44 var frm = document.forms['reggie']; 43 heGlass = getHeGlassForScoring(); 45 46 var glassName = '<%=HTML.javaScriptEncode(name)%>' 47 heGlass = getHeGlassForScoring(glassName); 44 48 45 49 if (heGlass != null && heGlass.length > 0) … … 98 102 else 99 103 { 100 var msg = 'No HE glass available for scoring.'; 101 msg += ' Specify HE glass name above to re-score.'; 104 var msg; 105 if (glassName) 106 { 107 msg = 'Could not find HE glass with name: ' + Main.encodeTags(glassName); 108 } 109 else 110 { 111 msg = 'No HE glass available for scoring.'; 112 msg += ' Specify HE glass name above to re-score.'; 113 } 102 114 setInnerHTML('he-glass-container', '<div class="messagecontainer note">'+msg+'</div>'); 103 115 Main.show('he-glass-container'); 104 116 } 105 } 106 107 function getHeGlassForScoring() 117 118 // Wait a second until loading uncompleted HE glass 119 setTimeout(loadUncompletedHeGlass, 1000); 120 } 121 122 function findHeGlass(glassName) 123 { 124 var frm = document.forms['reggie']; 125 if (!glassName) 126 { 127 glassName = frm.findGlassName.value; 128 if (glassName.match(/^\d+$/)) 129 { 130 while (glassName.length < 5) 131 { 132 glassName = '0'+glassName; 133 } 134 glassName = 'HE'+glassName; 135 } 136 } 137 location.href = '<%=home%>/sampleproc/histology_score.jsp?ID=<%=ID%>&name='+encodeURIComponent(glassName); 138 } 139 140 function selectHeGlass() 141 { 142 var url = getRoot() + 'biomaterials/bioplates/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone'; 143 url += '&resetTemporary=1'; 144 url += '&tmpfilter:STRING:name='+encodeURIComponent('HE%'); 145 url += '&callback=setSelectedHeGlass' 146 Main.openPopup(url, 'SelectHeGlass', 1050, 700); 147 } 148 149 function setSelectedHeGlass(id, name) 150 { 151 findHeGlass(name); 152 } 153 154 function getHeGlassForScoring(glassName) 108 155 { 109 156 var frm = document.forms['reggie']; 110 111 157 var request = Ajax.getXmlHttpRequest(); 112 158 try 113 159 { 114 showLoadingAnimation('Loading next HE glass for scoring...'); 115 var url = '../Histology.servlet?ID=<%=ID%>&cmd=GetHeGlassToScore'; 160 var msg = glassName ? 'Finding HE glass: '+Main.encodeTags(glassName) : 'Loading next HE glass for scoring...'; 161 showLoadingAnimation(msg); 162 var url = '../Histology.servlet?ID=<%=ID%>&cmd=GetHeGlassToScore'; 163 if (glassName) 164 { 165 url += '&name='+encodeURIComponent(glassName); 166 } 116 167 request.open("GET", url, false); 117 168 request.send(null); … … 131 182 return response.heGlasses; 132 183 } 184 133 185 134 186 function createHeGlassSection(glass) … … 360 412 } 361 413 362 function selectHeGlass() 363 { 364 var url = getRoot() + 'biomaterials/bioplates/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone'; 365 url += '&resetTemporary=1'; 366 url += '&filter:STRING:name=HE%'; 367 Main.openPopup(url, 'SelectHeGlass', 1050, 700); 414 function loadUncompletedHeGlass() 415 { 416 var request = Ajax.getXmlHttpRequest(); 417 try 418 { 419 //showLoadingAnimation('Loading next HE glass for scoring...'); 420 var url = '../Histology.servlet?ID=<%=ID%>&cmd=GetUncompletedHeGlass'; 421 request.open("GET", url, false); 422 request.send(null); 423 } 424 finally 425 { 426 //hideLoadingAnimation(); 427 } 428 429 if (debug) Main.debug(request.responseText); 430 var response = JSON.parse(request.responseText); 431 if (response.status == 'ok') 432 { 433 var uncompleted = response.heGlasses; 434 435 if (uncompleted.length > 0) 436 { 437 // Populate menu item 438 setInnerHTML('uncompletedHeGlass.text', uncompleted.length + ' uncompleted'); 439 var html = ''; 440 for (var glassNo = 0; glassNo < uncompleted.length; glassNo++) 441 { 442 var glass = uncompleted[glassNo]; 443 444 html += '<div class="menuitem enabled" id="glass-'+glass.id+'">'; 445 html += Main.encodeTags(glass.name)+'</div>'; 446 } 447 setInnerHTML('select-uncompleted-heglass-menu', html); 448 Main.show('uncompletedHeGlass'); 449 } 450 else 451 { 452 Main.hide('uncompletedHeGlass'); 453 } 454 } 455 } 456 457 function showUncompletedHeGlassMenu(event) 458 { 459 var menu = document.getElementById('select-uncompleted-heglass'); 460 menu.style.display = 'block'; 461 462 var pos = Main.getElementPosition(document.getElementById('uncompletedHeGlass')); 463 var x = pos.left; 464 var y = pos.top+pos.height; 465 466 menu.style.left = (x)+'px'; 467 menu.style.top = (y)+'px'; 468 event.stopPropagation(); 469 } 470 471 function uncompletedGlassSelected(event) 472 { 473 findHeGlass(event.target.innerHTML); 368 474 } 369 475 </script> … … 541 647 } 542 648 649 #select-uncompleted-heglass-menu 650 { 651 max-height: 20em; 652 overflow: auto; 653 } 654 655 #select-uncompleted-heglass .menuitem 656 { 657 padding-left: 16px; 658 } 659 660 #select-uncompleted-heglass .menuitem:hover 661 { 662 padding-left: 14px; 663 background-position: 0px 50%; 664 } 543 665 </style> 544 666 … … 551 673 /></p:path> 552 674 553 <div class="content" >675 <div class="content" onclick="Main.hide('select-uncompleted-heglass')"> 554 676 <% 555 677 if (sc.getActiveProjectId() == 0) … … 563 685 } 564 686 %> 687 688 <div id="select-uncompleted-heglass" class="menu vertical" style="width: 150px; display: none;" 689 onclick="uncompletedGlassSelected(event)"> 690 <div id="select-uncompleted-heglass-menu"></div> 691 </div> 692 565 693 <form name="reggie" onsubmit="return false;"> 566 694 … … 574 702 <tbl:toolbar subclass="bottomborder"> 575 703 <tbl:label> 576 <input type="text" style="width: 12em;" placeholder="Find HE glass" tooltip="Enter a HE glass name"> 577 <img src="../images/gonext.png"> 704 <input type="text" style="width: 12em;" name="findGlassName" 705 placeholder="Find HE glass" title="Enter a full HE glass name or the last digits in the it's number before the dot" 706 onkeypress="if (event.keyCode==13 && this.value) findHeGlass()" 707 > 708 <base:icon image="<%=home+"/images/gonext.png"%>" onclick="findHeGlass()"></base:icon> 578 709 </tbl:label> 579 710 580 <tbl:button581 id="uncompletedHeGlass"582 title="4 uncompleted HE glass"583 image="mini_scroll_down.png"584 />585 711 586 712 <tbl:button … … 590 716 tooltip="Manually select a different HE glass" 591 717 /> 718 719 <tbl:button 720 id="uncompletedHeGlass" 721 title="Loading..." 722 image="mini_scroll_down.png" 723 onclick="showUncompletedHeGlassMenu(event)" 724 tooltip="This list contain HE glass with partial scores" 725 /> 726 592 727 </tbl:toolbar> 593 728 … … 719 854 <table style="margin-left: 20px; margin-top: 10px;" class="navigation" id="navigation"> 720 855 <tr> 721 <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" /></td>856 <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;" /></td> 722 857 <td><base:button id="gonext" title="Next" image="<%=home+"/images/gonext.png"%>" onclick="goNext(true)" style="display: none;" /></td> 723 858 <td><base:button id="gocreate" title="Save" image="<%=home+"/images/gonext.png"%>" onclick="goCreate()" style="display: none;" /></td> -
extensions/net.sf.basedb.reggie/branches/ticket-489/src/net/sf/basedb/reggie/servlet/HistologyServlet.java
r2117 r2124 392 392 { 393 393 // Now, find all HE glass that are related to the original 394 String prefix = name.substring(0, name.indexOf('.')); 394 int dotIndex = name.indexOf('.'); 395 String prefix = dotIndex > 0 ? name.substring(0, dotIndex) : name; 395 396 ItemQuery<BioPlate> query = BioPlate.getQuery(); 396 397 query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); … … 411 412 json.put("heGlasses", jsonHeGlasses); 412 413 } 414 else if ("GetUncompletedHeGlass".equals(cmd)) 415 { 416 dc = sc.newDbControl(); 417 JSONArray jsonHeGlasses = new JSONArray(); 418 419 ItemQuery<BioPlate> query = BioPlate.getQuery(); 420 query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT); 421 BioplateType.HE_GLASS.addFilter(dc, query, false); 422 query.join(Annotations.leftJoin(null, Annotationtype.SCORE_COMPLETE.load(dc), "sc")); 423 query.restrict(Restrictions.eq(Hql.alias("sc"), Expressions.bool(false))); 424 query.order(Orders.asc(Hql.property("name"))); 425 426 List<HeGlass> plates = HeGlass.toList(query.list(dc)); 427 for (HeGlass heGlass : plates) 428 { 429 jsonHeGlasses.add(heGlass.asJSONObject()); 430 } 431 432 json.put("heGlasses", jsonHeGlasses); 433 } 434 413 435 } 414 436 catch (Throwable t)
Note: See TracChangeset
for help on using the changeset viewer.