source: trunk/grails-app/views/advancedQuery/index.gsp @ 1908

Last change on this file since 1908 was 1908, checked in by robert@…, 9 years ago

Improvements in querying in order to be able to refine searches in a module.

  • Property svn:keywords set to Rev Author Date
File size: 5.9 KB
Line 
1<%@ page import="dbnp.query.Operator" %>
2<html>
3<head>
4        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
5        <meta name="layout" content="main"/>
6        <title>Query database</title>
7        <g:if env="development">
8        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.css" />" type="text/css"/>
9        <link rel="stylesheet" href="<g:resource dir="css" file="buttons.css" />" type="text/css"/>
10        <g:javascript src="advancedQuery.js" />
11        </g:if><g:else>
12        <link rel="stylesheet" href="<g:resource dir="css" file="advancedQuery.min.css" />" type="text/css"/>
13        <link rel="stylesheet" href="<g:resource dir="css" file="buttons.min.css" />" type="text/css"/>
14        <g:javascript src="advancedQuery.min.js" />
15        </g:else>
16        <script type="text/javascript">
17                // Make a list of fields to search in
18                var queryableFields = [
19                        <g:set var="j" value="${0}" />
20                        <g:each in="${searchableFields}" var="entity">
21                                <g:each in="${entity.value}" var="field">
22                                        <g:if test="${j > 0}">,</g:if>
23                                        {
24                                                label: "${(
25                                                        entity.key.toString() + '.' + field.toString() + ' ' +
26                                                        entity.key.toString() + ' ' + field.toString() + ' ' +
27                                                        (field == '*' ? 'any field' : '') + ' ' +
28                                                        (field == '*' && entity.key == '*' ? 'any field in any object' : '')
29                                                        ).encodeAsJavaScript()}",
30                                                show: "${
31                                                        (field == '*' ?
32                                                                ( entity.key == '*' ? '[Any field in any object]' : '[Any field in ' + entity.key.toString() + ']' ) :
33                                                                (field?.size() > 1 ?
34                                                                        field[0].toUpperCase() + field[1..-1] :
35                                                                        field)
36                                                        ).encodeAsJavaScript()}",
37                                                value: "${entity.key.toString().encodeAsJavaScript()}.${field.toString().encodeAsJavaScript()}",
38                                                entity: "${entity.key.toString().encodeAsJavaScript()}"
39                                        }
40                                        <g:set var="j" value="1" />
41                                </g:each>
42                        </g:each>
43                ];
44       
45                <g:if test="${criteria && criteria.size() > 0}">
46                        // Show given criteria
47                        $(function() {
48                                <g:each in="${criteria}" var="criterion">
49                                        <g:if test="${criterion.operator == Operator.insearch}">
50                                                        /* ${previousSearches?.getAt( criterion.value )?.url} */
51                                                        showCriterium(
52                                                                "${criterion.entityField().encodeAsJavaScript()}",
53                                                                {
54                                                                        'id': ${criterion.value},
55                                                                        'description': "<g:if test="${previousSearches?.getAt( criterion.value )}">${previousSearches[ criterion.value ].toString().encodeAsJavaScript()}</g:if><g:else>Search ${criterion.value}</g:else>",
56                                                                        'url': "<g:if test="${previousSearches?.getAt( criterion.value )?.url}">${previousSearches[ criterion.value ].url.encodeAsJavaScript()}</g:if><g:else><g:createLink controller='advancedQuery' action='show' id="${criterion.value}" /></g:else>"
57                                                                },
58                                                                "${criterion.operator.toString().encodeAsJavaScript()}"
59                                                        );
60                                        </g:if>
61                                        <g:else>
62                                                showCriterium("${criterion.entityField().encodeAsJavaScript()}", "${criterion.value.toString().encodeAsJavaScript()}", "${criterion.operator.toString().encodeAsJavaScript()}");
63                                        </g:else>
64                                </g:each>
65                                                       
66                                // Show or hide the 'search mode' box (AND or OR)
67                                toggleSearchMode()
68
69                                // Enable or disable the search button
70                                toggleSearchButton()
71                        });
72                </g:if>
73        </script>
74</head>
75<body>
76
77<h1>Search database</h1>
78
79<g:if test="${flash.error}">
80        <div class="errormessage">
81                ${flash.error.toString().encodeAsHTML()}
82        </div>
83</g:if>
84<g:if test="${flash.message}">
85        <div class="message">
86                ${flash.message.toString().encodeAsHTML()}
87        </div>
88</g:if>
89
90<div id="searchForm">
91        <g:form action="search" method="get">
92
93                <h3><span class="nummer">1</span>Select criteria</h3>
94                <p class="explanation">
95                        N.B. Comparing numerical values is done without taking into
96                        account the units. E.g. a weight of 1 kg equals 1 grams.
97                </p>
98                <ul id="criteria">
99                        <li class="titlerow">
100                                <span class="entityfield">
101                                        Field
102                                </span>
103                                <span class="operator">
104                                        Operator
105                                </span>
106                                <span class="value">
107                                        Value
108                                </span>
109                        </li>
110                        <li class="newCriterion">
111                                <span class="entityfield">
112                                        <select name="criteria.0.entityfield" id="queryFieldSelect">
113                                                <option value=""></option>
114                                                <g:each in="${searchableFields}" var="entity">
115                                                        <optgroup label="${entity.key}">
116                                                                <g:each in="${entity.value}" var="field">
117                                                                        <option value="${entity.key}.${field}">
118                                                                                <g:if test="${field?.size() > 1}">
119                                                                                        ${field[0].toUpperCase() + field[1..-1]}
120                                                                                </g:if>
121                                                                                <g:else>
122                                                                                        ${field}
123                                                                                </g:else>
124                                                                        </option>
125                                                                </g:each>
126                                                        </optgroup>
127                                                </g:each>
128                                        </select>
129                                </span>
130                                <span class="operator">
131                                        <select id="operator" name="criteria.0.operator">
132                                                <option value="equals">Equals</option>
133                                                <option value="contains">Contains</option>
134                                                <option value="&gt;=">&gt;=</option>
135                                                <option value="&gt;">&gt;</option>
136                                                <option value="&lt;">&lt;</option>
137                                                <option value="&lt;=">&lt;=</option>
138                                        </select>
139                                </span>
140                                <span class="value">
141                                        <input class='text' type="text" id="value" name="criteria.0.value" />
142                                </span>
143                                <span class="addButton">
144                                        <a class="disabled" href="#" onClick="addCriterion(); return false;">
145                                                <img src="${fam.icon( name: 'add' )}" border="0">
146                                        </a>
147                                </span>
148                        </li>
149                </ul>
150               
151                <div id="searchMode">
152                        <h3><span class="nummer">1b</span>Search mode</h3>
153                        <p>
154                                Choose how to combine the given criteria:<br />
155                                <g:select from="${searchModes}" name="operator" />
156                        </p>
157                </div>
158               
159                <h3><span class="nummer">2</span>Output type</h3>
160                <p>
161                        Choose the type of output:<br />
162                        <g:select from="${entitiesToSearchFor}" optionKey="key" optionValue="value" name="entity" />
163                </p>
164
165                <h3><span class="nummer">3</span>Run query</h3>
166                <p>
167                        <input type="submit" disabled="disabled" value="Search" class="submitcriteria" />
168                </p>
169        </g:form>
170       
171        <br clear="all" />
172</div>
173<g:if test="${session.queries?.size()}">
174<p class="options">
175        <g:link class="listPrevious" action="list">Previous searches</g:link>
176</p>
177</g:if>
178<br  clear="all" />
179</body>
180</html>
Note: See TracBrowser for help on using the repository browser.