root/trunk/grails-app/views/home/index.gsp @ 1625

Revision 1625, 11.3 KB (checked in by work@…, 3 years ago)

- improved quicksearch

  • Property svn:keywords set to Rev Author Date
Line 
1<html>
2<head>
3        <title>Generic Study Capture Framework</title>
4        <meta property="og:title" content="Generic Study Capture Framework"/>
5        <meta property="og:description" content="A generic tool for planning scientific studies, and capturing study meta-data, integrating with analysis platform(s) / LIMS systems and searching relevant studies."/>
6        <meta name="layout" content="main"/>
7        <g:if test="${showstats}"><script type="text/javascript" src="${resource(dir: 'js', file: 'highcharts.js')}"></script></g:if>
8        <script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.ui.autocomplete.html.js', plugin: 'gdt')}"></script>
9        <script type="text/javascript">
10                $(document).ready(function() {
11<g:if test="${showstats}">
12                        Highcharts.theme = { colors: ['#4572A7'] };
13                        var highchartsOptions = Highcharts.getOptions();
14                        var studiesPieChart, dailyStatistics;
15
16                        studiesPieChart = new Highcharts.Chart({
17                                chart: {
18                                        renderTo: 'studies-pie',
19                                        plotBackgroundColor: null,
20                                        plotBorderWidth: null,
21                                        plotShadow: false
22                                },
23                                title: {
24                                        text: '${studyCount} Studies'
25                                },
26                                tooltip: {
27                                        formatter: function() {
28                                                return '<b>' + this.point.name + '</b>: ' + this.y + ' ' + ((this.y == 1) ? 'study' : 'studies');
29                                        }
30                                },
31                                plotOptions: {
32                                        pie: {
33                                                allowPointSelect: true,
34                                                cursor: 'pointer',
35                                                dataLabels: {
36                                                        enabled: true,
37                                                        color: Highcharts.theme.textColor || '#000000',
38                                                        connectorColor: Highcharts.theme.textColor || '#000000',
39                                                        formatter: function() {
40                                                                return '<b>' + this.point.name + '</b>: ' + this.y + ' ' + ((this.y == 1) ? 'study' : 'studies');
41                                                        }
42                                                }
43                                        }
44                                },
45                                series: [
46                                        {
47                                                type: 'pie',
48                                                name: 'Your statistics',<sec:ifLoggedIn>
49                                                size: '45%',
50                                                innerSize: '25%',
51                                                </sec:ifLoggedIn><sec:ifNotLoggedIn>
52                                                innerSize: '45%',
53                                                </sec:ifNotLoggedIn>
54                                                data: [
55                                                        { name: 'Public', y: ${publicStudyCount}, color: '#89A54E' },
56                                                        { name: 'Private', y: ${privateStudyCount}, color: '#AA4643' }
57                                                ],
58                                                dataLabels: {
59                                                        enabled: <sec:ifLoggedIn>false</sec:ifLoggedIn><sec:ifNotLoggedIn>true</sec:ifNotLoggedIn>,
60                                                }
61                                        },
62                                        {
63                                                type: 'pie',
64                                                name: 'Your statistics',<sec:ifLoggedIn>
65                                                size: '25%',
66                                                innerSize: '10%',
67                                                </sec:ifLoggedIn><sec:ifNotLoggedIn>
68                                                size: '45%',
69                                                </sec:ifNotLoggedIn>
70                                                data: [
71                                                        { name: 'Published public', y: ${publishedPublicStudyCount}, color: '#89A54E' },
72                                                        { name: 'Unpublished Public', y: ${unPublishedPublicStudyCount}, color: '#bbc695' },
73                                                        { name: 'Published Private', y: ${publishedPrivateStudyCount}, color: '#AA4643' },
74                                                        { name: 'Unpublished Private', y: ${unPublishedPrivateStudyCount}, color: '#ae6e6c' }
75                                                ],
76                                                dataLabels: {
77                                                        enabled: false
78                                                }
79                                        }
80                                        <sec:ifLoggedIn>
81                                        ,
82                                        {
83                                                type: 'pie',
84                                                name: 'Total statistics',
85
86                                                innerSize: '45%',
87                                                data: [
88                                                        { name: 'Read only', y: ${readOnlyStudyCount}, color: '#80699B' },
89                                                        { name: 'Readable & writable', y: ${readWriteStudyCount}, color: '#89A54E' },
90                                                        { name: 'Not accessible', y: ${noAccessStudyCount}, color: '#AA4643' }
91                                                ],
92                                                dataLabels: {
93                                                        enabled: true
94                                                }
95                                        },
96                                        </sec:ifLoggedIn>
97                                ]
98                        });
99
100                        <g:if test="${startDate && dailyStatistics?.size()}">
101                        dailyStatistics = new Highcharts.Chart({
102                                chart: {
103                                        renderTo: 'daily-statistics',
104                                        zoomType: 'x',
105                                        spacingRight: 20
106                                },
107                                title: {
108                                        text: 'Users, studies and templates'
109                                },
110                                subtitle: {
111                                        text: document.ontouchstart === undefined ?
112                                                'Click and drag in the plot area to zoom in' :
113                                                'Drag your finger over the plot to zoom in'
114                                },
115                                xAxis: {
116                                        type: 'datetime',
117                                        maxZoom: 14 * 24 * 3600000, // fourteen days
118                                        title: {
119                                                text: null
120                                        }
121                                },
122                                yAxis: {
123                                        title: {
124                                                text: 'Total'
125                                        },
126                                        min: 0,
127                                        startOnTick: false,
128                                        showFirstLabel: false
129                                },
130                                tooltip: {
131                                        shared: true
132                                },
133                                legend: {
134                                        enabled: false
135                                },
136                                plotOptions: {
137                                        area: {
138
139                                                lineWidth: 1,
140                                                marker: {
141                                                        enabled: false,
142                                                        states: {
143                                                                hover: {
144                                                                        enabled: true,
145                                                                        radius: 5
146                                                                }
147                                                        }
148                                                },
149                                                shadow: false,
150                                                states: {
151                                                        hover: {
152                                                                lineWidth: 1
153                                                        }
154                                                }
155                                        }
156                                },
157
158                                series: [
159                                        {
160                                                type: 'area',
161                                                name: 'Studies',
162                                                pointInterval: 24 * 3600 * 1000,
163                                                pointStart: Date.UTC(${startDate.year+1900}, ${startDate.month}, ${startDate.date}),
164                                                data: [
165                                                        <g:each var="day" in="${dailyStatistics}">${day.value.studyTotal},</g:each>
166                                                ]
167                                        },
168                                        {
169                                                type: 'area',
170                                                name: 'Templates',
171                                                pointInterval: 24 * 3600 * 1000,
172                                                pointStart: Date.UTC(${startDate.year+1900}, ${startDate.month}, ${startDate.date}),
173                                                data: [
174                                                        <g:each var="day" in="${dailyStatistics}">${day.value.templateTotal},</g:each>
175                                                ]
176                                        },
177                                        {
178                                                type: 'area',
179                                                name: 'Users',
180                                                pointInterval: 24 * 3600 * 1000,
181                                                pointStart: Date.UTC(${startDate.year+1900}, ${startDate.month}, ${startDate.date}),
182                                                data: [
183                                                        <g:each var="day" in="${dailyStatistics}">${day.value.userTotal},</g:each>
184                                                ]
185                                        }
186                                ]
187                        });
188                        </g:if>
189</g:if>
190                        var quickSearch = $("#search_term");
191                        quickSearch.autocomplete({
192                                minLength: 2,
193                                delay: 300,
194                                search: function(event, ui) {
195                                        quickSearch.css({ 'background': 'url(${resource(dir: 'images', file: 'spinner.gif')}) no-repeat left top' });
196                                },
197                                source: function(request, response) {
198                                        quickSearch.css({ 'background': 'none' });
199
200                                        $.ajax({
201                                                //url: "http://ws.geonames.org/searchJSON",
202                                                url: "${createLink(action:'ajaxQuickSearch')}",
203                                                dataType: "jsonp",
204                                                data: {
205                                                        featureClass: "P",
206                                                        style: "full",
207                                                        maxRows: 12,
208                                                        name_startsWith: request.term
209                                                },
210                                                success: function(data) {
211                                                        response($.map(data.data, function(item) {
212                                                                return {
213                                                                        label           : '<span class="about">'+item.category+'</div> <span class="from">'+item.name+'</span>',
214                                                                        value           : item.link
215                                                                }
216                                                        }));
217                                                }
218                                        });
219                                },
220                                minLength: 2,
221                                select: function(event, ui) {
222                                        // redirect ?
223                                        if (ui.item.value) {
224                                                // hide, so the URL does not show in the input field
225                                                quickSearch.css( { 'display': 'none' } );
226
227                                                // and redirect
228                                                window.location = ui.item.value;
229                                        }
230                                },
231                                open: function() {
232                                        $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
233                                },
234                                close: function() {
235                                        $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
236                                },
237                                html: true
238                        });
239                });
240        </script>
241        <style type="text/css">
242        #simpleQuery {
243        }
244
245        #simpleQuery .search {
246                display: block;
247                height: 30px;
248                margin-bottom: 10px;
249                zoom: 1; /* IE 6 & 7 hack */
250                *display: inline; /* IE 6 & 7 hack */
251        }
252
253        #simpleQuery .search .begin {
254                margin: 0px;
255                padding: 0px;
256                display: inline-block;
257                background-image: url(${resource(dir: 'images', file: 'simpleQuery/spotlight-begin.png')});
258                height: 30px;
259                width: 140px;
260                vertical-align: top;
261                text-align: right;
262                zoom: 1; /* IE 6 & 7 hack */
263                *display: inline; /* IE 6 & 7 hack */
264        }
265
266        #simpleQuery .search .begin .label {
267                color: #fff;
268                font-face: Arial;
269                line-height: 30px;
270                text-shadow: 0px 0px 1px #006DBA;
271                font-size: 12px;
272                margin-right: 23px;
273        }
274
275        #simpleQuery .search .middle {
276                margin: 0px 0px -20px 0px;
277                padding: 0;
278                display: inline-block;
279                background-image: url(${resource(dir: 'images', file: 'simpleQuery/spotlight-middle.png')});
280                height: 30px;
281                width: 300px;
282                vertical-align: top;
283                zoom: 1; /* IE 6 & 7 hack */
284                *display: inline; /* IE 6 & 7 hack */
285        }
286
287        #simpleQuery .search .searchfield {
288                vertical-align: middle;
289                width: 100%;
290                height: 100%;
291                color: #006DBA;
292                border-width: 0px;
293                border: none;
294                background-color: Transparent;
295                zoom: 1; /* IE 6 & 7 hack */
296                *display: inline; /* IE 6 & 7 hack */
297        }
298
299        #simpleQuery .search .end {
300                margin: 0px;
301                padding: 0px;
302                display: inline-block;
303                background-image: url(${resource(dir: 'images', file: 'simpleQuery/spotlight-end.png')});
304                height: 30px;
305                width: 28px;
306                zoom: 1; /* IE 6 & 7 hack */
307                *display: inline; /* IE 6 & 7 hack */
308        }
309
310        </style>
311</head>
312<body>
313
314<div style="clear:both;display:block;">
315        <div style="margin:2px;width:476px;display:inline-block;float:left;zoom:1;*display:inline;">
316                <h1>Introduction</h1>
317                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut tincidunt auctor suscipit. Nam ultricies condimentum pulvinar. In magna orci, eleifend sit amet tincidunt eget, ultricies a justo. Vestibulum purus lorem, laoreet sit amet rutrum et, sollicitudin eget augue. Nulla consequat, mauris eget ornare fringilla, arcu enim mattis odio, rhoncus rutrum ante turpis vitae nulla. Sed et turpis vel urna venenatis sagittis. Sed sagittis vestibulum felis, vel ultricies tellus dictum ac. Nunc non massa et ligula gravida rutrum. Fusce porttitor, eros ac dictum suscipit, risus lacus aliquam justo, ut lobortis erat nulla sit amet risus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse fermentum ultricies ipsum, at consequat elit pharetra auctor.
318        </div>
319        <div style="margin:2px;width:476px;display:inline-block;float:left;zoom:1;*display:inline;">
320                <h1>Quicksearch</h1>
321                <div id="simpleQuery" class="simplequery">
322                <g:form action="pages" name="simpleQueryForm" id="simpleQueryForm">
323                        <g:if test="${search_term}"><g:set var="preterm" value="${search_term}"/></g:if>
324                        <div class="searchContainer">
325                                <div class="search">
326                                        <div class="begin"><span class="label">Search term</span></div><div class="middle"><g:textField name="search_term" id="search_term" class="searchfield" value="${preterm}"/></div><div class="end"><a onClick="$('#search_term').val('');"><img src="${resource(dir: 'images', file: 'simpleQuery/spotlight-end.png')}" value="Reset" alt="Reset" border="0"></a></div>
327                                </div>
328                                <span style="font-style:italic;color:#aaa;font-size:10px;">more advanced searches can be performed <g:link controller="advancedQuery">here</g:link>...</span>
329                        </div>
330                        </g:form>
331                        <h1>Lorem ipsum 2</h1>
332                        Vivamus varius ullamcorper neque, sit amet mollis lacus accumsan vel. Pellentesque in augue a arcu pretium egestas vel at elit. Duis nunc odio, mollis et faucibus vel, aliquam vel quam. Sed laoreet pharetra urna, venenatis porttitor neque sagittis et. Aenean at nisl nunc, in mattis mauris. Proin iaculis nunc in erat rhoncus consectetur. Nullam sit amet risus vitae eros condimentum pellentesque.
333                </div>
334        </div>
335</div>
336
337<g:if test="${showstats}">
338<div style="clear:both;display:block;padding-top:10px;">
339        <h1>Usage Statistics</h1>
340        <div id="graphs" style="display:block;border:1px solid #6c6f70;width:100%;height:300px;">
341                <div id="studies-pie" style="margin:2px;width:476px;height:296px;display:inline-block;float:left;zoom:1;*display:inline;"></div>
342                <div id="daily-statistics" style="margin:2px;width:476px;height:296px;display:inline-block;float:left;zoom:1;*display:inline;"></div>
343        </div>
344</div>
345</g:if>
346
347</body>
348</html>
Note: See TracBrowser for help on using the browser.