Ignore:
Timestamp:
Feb 7, 2011, 4:07:54 PM (10 years ago)
Author:
robert@…
Message:
  • Number of seconds for the rest controller to keep data in cache is now a configuration option
  • After searching, it is possible to choose which action to perform on the search results.
Location:
trunk/grails-app/views
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/views/advancedQuery/_criteria.gsp

    r1482 r1501  
     1<%@ page import="dbnp.query.*" %>
    12<ul id="criteria">
    2         <g:each in="${criteria}" var="criterion">
     3        <g:each in="${criteria}" var="criterion" status="j">
    34                <li>
    45                        <span class="entityfield">${criterion.entityField()}</span>
    56                        <span class="operator">${criterion.operator}</span>
    6                         <span class="value">${criterion.value}</span>
     7                        <span class="value">
     8                                <g:if test="${criterion.value != null && criterion.value instanceof Search}">
     9                                        <g:link action="show" id="${criterion.value.id}">${criterion.value}</g:link>
     10                                </g:if>
     11                                <g:else>
     12                                        ${criterion.value}
     13                                </g:else>
     14                        </span>
     15                        <g:if test="${j < criteria.size() -1}">
     16                                <g:if test="${search.searchMode == SearchMode.and}">and</g:if>
     17                                <g:if test="${search.searchMode == SearchMode.or}">or</g:if>
     18                        </g:if>
    719                </li>
    820        </g:each>
  • trunk/grails-app/views/advancedQuery/_resultbuttons.gsp

    r1482 r1501  
    1 <p>
    2         <g:link action="searchIn" id="${queryId}">Search within results</g:link><br />
    3         <g:link action="index">Search again</g:link><br />
    4         <g:link action="discard" id="${queryId}">Discard results</g:link><br />
    5         <g:link action="list">Previous searches</g:link>
     1<p class="options">
     2        <g:link class="searchIn" action="searchIn" id="${queryId}">Search within results</g:link><br />
     3        <g:link class="search" action="index">Search again</g:link><br />
     4        <g:link class="discard" action="discard" id="${queryId}">Discard results</g:link><br />
     5        <g:link class="listPrevious" action="list">Previous searches</g:link>
    66</p>
     7<p class="options">
     8        <g:each in="${actions}" var="action">
     9                <a class="performAction ${action.name}" href="${action.url}" onClick="performAction( $('form#results'), '${action.name}', '${action.module}' ); return false;">${action.description}</a><br />
     10        </g:each>
     11</p>
     12<br clear="all">
  • trunk/grails-app/views/advancedQuery/index.gsp

    r1487 r1501  
    1414                                        <g:if test="${j > 0}">,</g:if>
    1515                                        {
     16                                                label: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()} ${entity.key.toString().encodeAsJavaScript()} ${field.toString().encodeAsJavaScript()}",
     17                                                show: "${(field[0].toUpperCase() + field[1..-1]).encodeAsJavaScript()}",
    1618                                                value: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()}",
    17                                                 show: "${(field[0].toUpperCase() + field[1..-1]).encodeAsJavaScript()}",
    18                                                 label: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()}",
    1919                                                entity: "${entity.key.toString().encodeAsJavaScript()}"
    2020                                        }
     
    4949        </div>
    5050</g:if>
    51 
    52 <a href="<g:createLink action="list" />">View previous queries</a>
    5351
    5452<form id="input_criteria">
     
    9189        <g:form action="search" method="get">
    9290                <label for="entity">Search for</label><g:select from="${entitiesToSearchFor}" optionKey="key" optionValue="value" name="entity" /><br />
     91                <label for="entity">Searchtype</label><g:select from="${searchModes}" name="operator" /><br />
    9392                <label for="criteria">Criteria</label>
    9493                <ul id="criteria">
     
    9998        </g:form>
    10099</div>
    101 
     100<p class="options">
     101        <g:link class="listPrevious" action="list">Previous searches</g:link>
     102</p>
    102103<br  clear="all" />
    103104</body>
  • trunk/grails-app/views/advancedQuery/list.gsp

    r1482 r1501  
    66        <title>Previous queries</title>
    77        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
     8        <g:javascript src="advancedQueryResults.js" />
     9        <script type="text/javascript">
     10                function searchWithinResults( form ) {
     11                        submitForm( form, '/advancedQuery/searchIn' );
     12                }
     13                function discardResults( form ) {
     14                        submitForm( form, '/advancedQuery/discard' );
     15                }       
     16                function combineResults( form ) {
     17                        submitForm( form, '/advancedQuery/combine' );
     18                }                               
     19        </script>
     20       
    821</head>
    922<body>
     
    1124<h1>Previous queries</h1>
    1225
     26<g:if test="${flash.error}">
     27        <div class="errormessage">
     28                ${flash.error.toString().encodeAsHTML()}
     29        </div>
     30</g:if>
     31<g:if test="${flash.message}">
     32        <div class="message">
     33                ${flash.message.toString().encodeAsHTML()}
     34        </div>
     35</g:if>
     36
    1337<g:if test="${searches.size() > 0}">
    14         <table id="searchresults">
     38        <form id="searchform" method="post">
     39        <table id="searchresults" class="paginate">
    1540                <thead>
    1641                        <tr>
    17                                 <th></th>
     42                                <th class="nonsortable"></th>
    1843                                <th>#</th>
    1944                                <th>Type</th>
     
    2146                                <th># results</th>
    2247                                <th>time</th>
    23                                 <th></th>
    24                                 <th></th>
     48                                <th class="nonsortable"></th>
     49                                <th class="nonsortable"></th>
    2550                        </tr>
    2651                </thead>
    2752                <g:each in="${searches}" var="search">
    2853                        <tr>
    29                                 <td><g:checkBox name="queryId" value="${search.id}" checked="${false}" /></td>
     54                                <td><g:checkBox name="id" value="${search.id}" checked="${false}" /></td>
    3055                                <td>${search.id}</td>
    3156                                <td>${search.entity}</td>
     
    5277                </g:each>
    5378        </table>
     79        </form>
    5480</g:if>
    55 <p>
    56         <g:link action="index">Search again</g:link>
     81
     82<p class="options">
     83        <a href="#" class="combine" onClick="combineResults( $( '#searchform' ) ); return false;">Combine results</a><br />
     84        <a href="#" class="searchIn" onClick="searchWithinResults( $( '#searchform' ) ); return false;">Search within results</a><br />
     85        <g:link class="search" action="index">Search again</g:link><br />
     86        <a href="#" class="discard" onClick="discardResults( $( '#searchform' ) ); return false;">Discard results</a><br />
    5787</p>
     88
    5889</body>
    5990</html>
  • trunk/grails-app/views/advancedQuery/results.gsp

    r1482 r1501  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
     7        <g:javascript src="advancedQueryResults.js" />
    78</head>
    89<body>
     
    1314        Your search for:
    1415</p>
    15 <ul id="criteria">
    16         <g:each in="${search.getCriteria()}" var="criterion">
    17                 <li>
    18                         <span class="entityfield">${criterion.entityField()}</span>
    19                         <span class="operator">${criterion.operator}</span>
    20                         <span class="value">${criterion.value}</span>
    21                 </li>
    22         </g:each>
    23 </ul>
     16<g:render template="criteria" model="[criteria: search.getCriteria()]" />
    2417<p>
    2518        resulted in ${search.getNumResults()} results.
     
    3124                def extraFields = resultFields[ search.getResults()[ 0 ].id ]?.keySet();
    3225        %>
    33         <table id="searchresults">
     26        <table id="searchresults" class="paginate">
    3427                <thead>
    3528                        <tr>
     29                                <th class="nonsortable"></th>
    3630                                <th>Type</th>
    3731                                <th>Id</th>
     
    4337                <g:each in="${search.getResults()}" var="result">
    4438                        <tr>
     39                                <td width="3%">
     40                                        <% /*
     41                                                The value of this checkbox will be moved to the form (under this table) with javascript. This
     42                                                way the user can select items from multiple pages of the paginated result list correctly. See
     43                                                also http://datatables.net/examples/api/form.html and advancedQueryResults.js
     44                                        */ %>
     45                                        <g:checkBox name="id" value="${result.id}" checked="${false}" />
     46                                </td>                   
    4547                                <td>${search.entity}</td>
    4648                                <td>${result.id}</td>
     
    5052                                                        def fieldValue = resultFields[ result.id ]?.get( fieldName );
    5153                                                        if( fieldValue ) {
    52                                                                 if( fieldValue instanceof Collection )
     54                                                                if( fieldValue instanceof Collection ) {
    5355                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
    54                                                                 else
     56                                                                } else {
    5557                                                                        fieldValue = fieldValue.toString();
     58                                                                }
     59                                                        } else {
     60                                                                fieldValue = "";
    5661                                                        }
    5762                                                %>
  • trunk/grails-app/views/advancedQuery/sampleresults.gsp

    r1482 r1501  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
     7        <g:javascript src="advancedQueryResults.js" />
    78</head>
    89<body>
     
    2627                <thead>
    2728                <tr>
     29                        <th class="nonsortable"></th>                   
     30                        <th>Name</th>
    2831                        <th>Study</th>
    29                         <th>Name</th>
    3032                        <g:each in="${extraFields}" var="fieldName">
    3133                                <th>${fieldName}</th>
     
    3638                <g:each in="${search.getResults()}" var="sampleInstance" status="i">
    3739                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
     40                                <td width="3%">
     41                                        <% /*
     42                                                The value of this checkbox will be moved to the form (under this table) with javascript. This
     43                                                way the user can select items from multiple pages of the paginated result list correctly. See
     44                                                also http://datatables.net/examples/api/form.html and advancedQueryResults.js
     45                                        */ %>
     46                                        <g:checkBox name="id" value="${sampleInstance.id}" checked="${false}" />
     47                                </td>
     48                                <td>${fieldValue(bean: sampleInstance, field: "name")}</td>
    3849                                <td><g:link controller="study" action="show" id="${sampleInstance?.parent?.id}">${sampleInstance?.parent?.title}</g:link></td>
    39                                 <td>${fieldValue(bean: sampleInstance, field: "name")}</td>
    4050                                <g:each in="${extraFields}" var="fieldName">
    4151                                        <td>
     
    4353                                                        def fieldValue = resultFields[ sampleInstance.id ]?.get( fieldName );
    4454                                                        if( fieldValue ) {
    45                                                                 if( fieldValue instanceof Collection )
     55                                                                if( fieldValue instanceof Collection ) {
    4656                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
    47                                                                 else
     57                                                                } else {
    4858                                                                        fieldValue = fieldValue.toString();
     59                                                                }
     60                                                        } else {
     61                                                                fieldValue = "";
    4962                                                        }
    5063                                                %>
     
    5669                </tbody>
    5770        </table>
     71        <g:render template="resultsform" />
    5872
    5973</g:if>
  • trunk/grails-app/views/advancedQuery/studyresults.gsp

    r1482 r1501  
    55        <title>Query results</title>
    66        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
     7        <g:javascript src="advancedQueryResults.js" />
    78</head>
    89<body>
     
    2223                def extraFields = resultFields[ search.getResults()[ 0 ].id ]?.keySet();
    2324        %>
    24 
    2525        <table id="searchresults" class="paginate">
    2626                <thead>
    2727                <tr>
    28                         <th colspan="2"></th>
     28                        <th class="nonsortable"></th>
     29                        <th>Title</th>
    2930                        <th>Code</th>
    30                         <th>Title</th>
    3131                        <th>Subjects</th>
    3232                        <th>Events</th>
     
    4040                <g:each in="${search.getResults()}" var="studyInstance" status="i">
    4141                        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
    42 
    43                                 <td><g:link controller="study" action="show" id="${studyInstance?.id}"><img src='${fam.icon(name: 'application_form_magnify')}' border="0" alt="view study" /></g:link></td>
    44                                 <td><g:if test="${studyInstance.canWrite(loggedInUser)}"><g:link class="edit" controller="studyWizard" params="[jump:'edit']" id="${studyInstance?.id}"><img src='${fam.icon(name: 'application_form_edit')}' border="0" alt="edit study" /></g:link></g:if><g:else><img src='${fam.icon(name: 'lock')}' border="0" alt="you have no write access to shis study" /></g:else> </td>
     42                                <td width="3%">
     43                                        <% /*
     44                                                The value of this checkbox will be moved to the form (under this table) with javascript. This
     45                                                way the user can select items from multiple pages of the paginated result list correctly. See
     46                                                also http://datatables.net/examples/api/form.html and advancedQueryResults.js
     47                                        */ %>
     48                                        <g:checkBox name="id" value="${studyInstance.id}" checked="${false}" />
     49                                </td>
     50                                <td>
     51                                        <g:link controller="study" action="show" id="${studyInstance?.id}">${fieldValue(bean: studyInstance, field: "title")}</g:link>
     52                                       
     53                                </td>
    4554                                <td>${fieldValue(bean: studyInstance, field: "code")}</td>
    46                                 <td>
    47                                         ${fieldValue(bean: studyInstance, field: "title")}
    48                                 </td>
    4955                                <td>
    5056                                        <g:if test="${studyInstance.subjects.species.size()==0}">
     
    8288                                                        def fieldValue = resultFields[ studyInstance.id ]?.get( fieldName );
    8389                                                        if( fieldValue ) {
    84                                                                 if( fieldValue instanceof Collection )
     90                                                                if( fieldValue instanceof Collection ) {
    8591                                                                        fieldValue = fieldValue.collect { it.toString() }.findAll { it }.join( ', ' );
    86                                                                 else
     92                                                                } else {
    8793                                                                        fieldValue = fieldValue.toString();
     94                                                                }
     95                                                        } else {
     96                                                                fieldValue = "";
    8897                                                        }
    8998                                                %>
     
    95104                </tbody>
    96105        </table>
     106        <g:render template="resultsform" />
    97107
    98108</g:if>
  • trunk/grails-app/views/layouts/main.gsp

    r1434 r1501  
    2121        <script type="text/javascript" src="${resource(dir: 'js', file: 'topnav.js')}"></script>
    2222        <g:if env="development"><script type="text/javascript" src="${resource(dir: 'js', file: 'development.js')}"></script></g:if>
     23
     24        <!--  Scripts for pagination using dataTables -->
     25        <link rel="stylesheet" href="${resource(dir: 'css/datatables', file: 'demo_table_jui.css')}"/>
     26        <script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.dataTables.min.js')}"></script>
     27        <script type="text/javascript" src="${resource(dir: 'js', file: 'paginate.js')}"></script>
     28
    2329</head>
    2430<body>
Note: See TracChangeset for help on using the changeset viewer.