Modified: trunk/opsview-core/share/stylesheets/opsview2.css
===================================================================
--- trunk/opsview-core/share/stylesheets/opsview2.css 2010-11-03 16:53:33 UTC (rev 5301)
+++ trunk/opsview-core/share/stylesheets/opsview2.css 2010-11-03 23:21:51 UTC (rev 5302)
@@ -124,11 +124,13 @@
padding-right: 15px;
}
-#refresh_counter {
- display: block;
- clear: left;
+#refresh_status {
+ cursor: pointer;
+ color: #999999;
+ font-size: 7pt;
+ text-align: right;
+ padding-right: 4px;
}
-
#refresh_status .error { color: red; }
#refresh_status .onhover { display: none; }
#refresh_status .nohover { display: block; }
@@ -1132,6 +1134,22 @@
padding: 10px 0px 0px 100px;
}
+#page_bar {
+ height 34px;
+ padding-right: 40px;
+ }
+#page_header {
+ color: #490a73;
+ font-size: 12pt;
+}
+#toolbar_container {
+}
+#toolbar_container div {
+ float: right;
+ }
+#psearch_form {
+ display: inline;
+}
#wrapper_page_nav {
width: 100%;
background: url("../images/subpage_bg.gif") repeat scroll 0 -34px transparent;
@@ -1140,32 +1158,15 @@
top: 67px;
z-index: 100;
min-width:876px;
+ overflow: hidden;
+ padding-top: 2px;
+ padding-left: 30px;
}
-
-#wrapper_page_nav_container {
- margin: 0 10px 0 10px;
-}
-#wrapper_page_nav_right {
- float: right;
-}
-#wrapper_page_nav_info {
- text-align: right;
- color: #999999;
- height: 30px;
- font-size: 10px;
- right: 10px;
- float: right;
- padding-top: 0px;
- padding-right: 5px;
- top: 0;
-width: 200px;
-overflow: hidden;
-}
#wrapper_page_nav_content {
color: #490a73;
+ font-size: 12pt;
height:20px;
overflow: hidden;
- font-size: 12pt;
padding-top: 2px;
margin-left: 20px;
}
@@ -1243,7 +1244,7 @@
margin: 0px;
}
-input.hsearch, input.psearch {
+input.hsearch, input.psearch1 {
color: #888888;
background: #ffffff;
font-size: 11px;
@@ -1253,11 +1254,11 @@
vertical-align: middle;
margin-right: 5px;
}
-input.psearch {
+input.psearch1k {
border: 1px solid #c0c0c0;
}
-form.psearch {
+form.psearch1 {
margin: 2px 0 0 0;
display: block;
}
Added: trunk/opsview-web/root/toolbar_container
===================================================================
--- trunk/opsview-web/root/toolbar_container (rev 0)
+++ trunk/opsview-web/root/toolbar_container 2010-11-03 23:21:51 UTC (rev 5302)
@@ -0,0 +1,20 @@
+<div id="toolbar_container">
+[%
+IF refresh_rate;
+ INCLUDE "toolbar_items/refresh";
+END;
+
+IF page_view_include;
+ INCLUDE "toolbar_items/actions";
+END;
+
+IF page_search_box;
+ INCLUDE "toolbar_items/search";
+END;
+
+IF refresh_rate;
+ INCLUDE "toolbar_items/refresh_info";
+END;
+
+%]
+</div>
Added: trunk/opsview-web/root/toolbar_items/actions
===================================================================
--- trunk/opsview-web/root/toolbar_items/actions (rev 0)
+++ trunk/opsview-web/root/toolbar_items/actions 2010-11-03 23:21:51 UTC (rev 5302)
@@ -0,0 +1,38 @@
+[%
+IF page_view_include == "view_options_links";
+ button_name = c.loc("ui.nav.button.label.actions");
+ELSE;
+ button_name = c.loc("ui.nav.button.label.options");
+END;
+%]
+<div>
+<span id='view_options_button' class="buttonwrapper"><span class="button_scale" $('view_options').visible() ) { new Effect2.BlindUp('view_options'); } else { new Effect2.BlindDown('view_options') }; return false;"><span>
+[%- button_name | upper | html -%]
+</span></span></span>
+<div id="view_options" style="display:none">
+[% INCLUDE $page_view_include %]
+</div>
+</div>
+<script type="text/_javascript_">
+// Position view options under view options button
+Event.observe(window, 'load', function() {
+ if (document.loaded) {
+ var el = $('view_options'), btn = $('view_options_button').parentNode;
+ if (el && btn) {
+ var pos = Element.viewportOffset(btn); /* IE7 bug - cannot use btn.viewportOffset(); */
+ if (pos && pos.length >= 2) {
+ // put at bottom of page so always on top
+ el.parentNode.removeChild(el);
+ document.body.appendChild(el);
+
+ // position it
+ el.style.position = "fixed";
+ var w = btn.offsetWidth ? btn.offsetWidth : 100;
+ el.style.right = (document.viewport.getWidth() - pos[0] - w + 2) + "px";
+ var h = btn.offsetHeight ? btn.offsetHeight : 25;
+ el.style.top = (pos[1] + h - 4) + "px";
+ }
+ }
+ }
+});
+</script>
Added: trunk/opsview-web/root/toolbar_items/refresh
===================================================================
--- trunk/opsview-web/root/toolbar_items/refresh (rev 0)
+++ trunk/opsview-web/root/toolbar_items/refresh 2010-11-03 23:21:51 UTC (rev 5302)
@@ -0,0 +1,187 @@
+<div>
+<img return false;" src="" c.uri_for("/images/refresh.gif") | html %]" width="38" height="26"
+ alt="[% c.loc("ui.nav.button.label.refresh") | html %]"
+ title="[% c.loc("ui.nav.button.label.refresh") | html %]"
+ border="0" class="middle clickable" />
+
+<div class="error_dialog" id="refresh_error_dialog" style="display: none;">
+<img src="" c.uri_for("/images/error-32x32.png") | html %]" alt="[% c.loc("messages.generic.error") | html %]" />
+<span id="refresh_error_dialog_message">[% c.loc("ui.error.update") %]</span>
+</div>
+</div>
+<script type="text/_javascript_">
+var refreshTimer = function() {
+
+ var x;
+ var countdown_timer;
+ var error_count=0;
+ var useAjaxUpdater = true;
+ var refreshListeners = [];
+
+ function countdown(r) {
+ if (r) { x = r + 1; if (countdown_timer) {clearTimeout(countdown_timer)} }
+ x = x - 1;
+ if (x == 0) {
+ refresh_content();
+ } else {
+ $('refresh_timer').innerHTML=x;
+ countdown_timer = setTimeout(function () { countdown(); }, 1000);
+ }
+ };
+
+ function refresh_content() {
+ Element.hide('refresh_line');
+ Element.show('refresh_loading');
+ clearTimeout(countdown_timer);
+
+ // foreach refreshListener
+ for (var i=0,l=refreshListeners.length;i<l;i++) {
+ refreshListeners[i](refresh_finish);
+ }
+
+ // Make AJAX call. Set to only show output if the call was successful but this doesn't appear to work in Prototype 1.6.0.1
+ if (useAjaxUpdater) {
+ new Ajax.Updater({
+ success: 'main_content',
+ failure: 'ignored' },
+ '[% refresh_link | replace("'", "\\'") %]',
+ {
+ asynchronous:true,
+ evalScripts:true,
+ method:'[% refresh_method || "get" %]',
+ [% IF (refresh_method == "post"); "postBody:'"; post_body; "', "; END; %]
+ onSuccess: refresh_finish,
+ onFailure: function(t) { refresh_finish(t, t.status + ": " + t.statusText); }
+ });
+ }
+ };
+
+ function refresh_finish(t, errorMsg) {
+ // Need to cater for expired sessions
+ // Originally used a status code trick, but this didn't work on Safari
+ if (typeof t == 'object') {
+ if (t.responseText == "Timeout" || t.status == 401) {
+ window.location.replace(window.location.href); /* Need to do this to remove POSTs */
+ window.location.reload;
+ }
+ }
+
+ // format date YYYY-MM-DD hh:mm:ss
+ function dateToStr(now) {
+ function pad(s,n) { s=""+s; while(s.length<n) { s="0"+s; } return s; }
+ var yr = now.getYear();
+ if (yr < 1000) yr += 1900;
+ return yr + "-" + pad(now.getMonth()+1,2) + "-" + pad(now.getDate(),2) + " " +
+ pad(now.getHours(),2) + ":" + pad(now.getMinutes(),2) + ":" + pad(now.getSeconds(),2);
+ }
+
+ // On error
+ if (typeof t == 'object' && t.status == 0) errorMsg = "[% c.loc("messages.generic.error") | escape_js_string %]";
+ if (typeof errorMsg != 'undefined' && Object.isString(errorMsg)) {
+ // update status
+ $('refresh_status_nohover').update(
+ "<span class='error'>[% c.loc("ui.nav.help.errorUpdating") | escape_js_string %]: " + dateToStr(new Date()) + "</span>"
+ );
+ $('refresh_status_hover').update(
+ "<span class='error'>(" + errorMsg + ")</span>"
+ );
+ /* Only show on 2nd error, as sometimes is triggered when a refresh happens as a link is pressed */
+ if (error_count >= 1) {
+ $('refresh_error_dialog').show();
+ }
+ /* Change main_content if there was a problem with loading new status */
+ // var e = $('main_content');
+ // if (e) e.update("[% c.loc("ui.error.update") %]");
+ error_count++;
+ }
+ // On success
+ else {
+ // update status
+ $('refresh_status_nohover').update(
+ "[% c.loc("ui.nav.status.lastUpdate") | escape_js_string %]: " + dateToStr(new Date()) + ""
+ );
+ if (typeof t == 'object') {
+ var hdr = t.getHeader("X-Opsview-Server-Status");
+ var str = "";
+ if (typeof hdr == "string") str = hdr;
+ $('refresh_status_hover').update(
+ "[% c.loc("ui.nav.status.serverUpdated") | escape_js_string %]: " + str + ""
+ );
+ }
+ $('refresh_error_dialog').hide();
+ error_count=0;
+ }
+
+ Element.hide('refresh_loading');
+ Element.show('refresh_line');
+ countdown([%refresh_rate%]);
+ };
+
+ // start timer
+ function start() {
+ countdown([%refresh_rate%]);
+ var e=$('refresh_stop'); if (e) e.show();
+ e=$('refresh_start'); if (e) e.hide();
+ };
+
+ // stop timer
+ function stop() {
+ clearTimeout(countdown_timer);
+ var e=$('refresh_stop'); if (e) e.hide();
+ e=$('refresh_start'); if (e) e.show();
+ };
+
+ // enable or disable auto refresh
+ function setEnabled(enabled) {
+ if (enabled) { $('refresh_counter').show(); start(); }
+ else { $('refresh_counter').hide(); stop(); }
+ };
+
+ // put up custom error
+ function setErrorMessage(msg) {
+ var e = $('refresh_status_error');
+ e.update(msg);
+ e.show();
+ };
+
+ // clear error
+ function clearErrorMessage() {
+ var e = $('refresh_status_error');
+ e.update();
+ e.hide();
+ };
+
+ // add refresh listener
+ function addListener(f) {
+ refreshListeners.push(f);
+ };
+
+ // remove listener
+ function removeListener(f) {
+ for (var i=0,l=refreshListeners.length;i<l;i++) {
+ if (refreshListeners[i] == f) { refreshListeners.splice(i,1); break; }
+ }
+ };
+
+ // start
+ Event.observe(window, 'load', function() { start() } );
+
+ return {
+ refresh: refresh_content,
+ refresh_finish: refresh_finish,
+ start: start,
+ stop: stop,
+ setEnabled: setEnabled,
+ setErrorMessage: setErrorMessage,
+ clearErrorMessage: clearErrorMessage,
+ addListener: addListener,
+ removeListener: removeListener,
+ setUseAjaxUpdater: function(v) { useAjaxUpdater = v; },
+ getUseAjaxUpdater: function() { return useAjaxUpdater; }
+ };
+
+}();
+
+// backwards compatability
+function refresh_content() { return refreshTimer.refresh(); }
+</script>
Added: trunk/opsview-web/root/toolbar_items/refresh_info
===================================================================
--- trunk/opsview-web/root/toolbar_items/refresh_info (rev 0)
+++ trunk/opsview-web/root/toolbar_items/refresh_info 2010-11-03 23:21:51 UTC (rev 5302)
@@ -0,0 +1,15 @@
+<div id="refresh_status">
+<span class="error" id="refresh_status_error" style="display:none"></span>
+<span class="onhover" id="refresh_status_hover"></span>
+<span class="nohover" id="refresh_status_nohover"></span>
+<span id="refresh_counter">
+ <span id="refresh_line">
+ [% IF debug %]
+ <span id="refresh_stop" class="clickable">[% c.loc("ui.footer.message.stop") | html %]</span>
+ <span id="refresh_start" class="clickable">[% c.loc("ui.footer.message.start") | html %]</span>
+ [% END %]
+ [% c.loc("ui.footer.message.refresh") | html %] <span id="refresh_timer" class="secs">[% refresh_rate %]</span>
+ </span>
+</span>
+<span id="refresh_loading" style="display:none">[% c.loc("ui.footer.message.loading") | html %]</span>
+</div>
Added: trunk/opsview-web/root/toolbar_items/search
===================================================================
--- trunk/opsview-web/root/toolbar_items/search (rev 0)
+++ trunk/opsview-web/root/toolbar_items/search 2010-11-03 23:21:51 UTC (rev 5302)
@@ -0,0 +1,11 @@
+[%# Have two divs, 1 for input box and 1 for search button -%]
+<div>
+<span class="buttonwrapper" if(f) f.submit()"><span class="button_scale"><span>
+[%- c.loc("ui.nav.button.label.search") | upper | html -%]
+</span></span></span>
+</div>
+<div>
+<form id="psearch_form" method="get" name="search_list" action="" c.uri_for("/" _ list_page).path | html %]">
+<input type="text" size="15" maxlength="128" name="q" value="[% c.req.param("q") | html %]" />
+</form>
+</div>
Modified: trunk/opsview-web/root/wrapper_page_nav
===================================================================
--- trunk/opsview-web/root/wrapper_page_nav 2010-11-03 16:53:33 UTC (rev 5301)
+++ trunk/opsview-web/root/wrapper_page_nav 2010-11-03 23:21:51 UTC (rev 5302)
@@ -1,19 +1,13 @@
-<div id="wrapper_page_nav_container">
-<div id="wrapper_page_nav_right">
-[% INCLUDE "wrapper_page_nav_right" %]
-<div id="wrapper_page_nav_info">
-[% INCLUDE "wrapper_page_nav_info" %]
-</div>
-</div>
+<div id="page_bar">
+[% INCLUDE "toolbar_container" %]
-<div id="wrapper_page_nav_content">
+<div id="page_header">
[% INCLUDE "wrapper_page_nav_content" %]
</div>
[%
message = c.flash.message;
-
IF message;
%]
<div id="message_box" class="info_box">
Deleted: trunk/opsview-web/root/wrapper_page_nav_info
===================================================================
--- trunk/opsview-web/root/wrapper_page_nav_info 2010-11-03 16:53:33 UTC (rev 5301)
+++ trunk/opsview-web/root/wrapper_page_nav_info 2010-11-03 23:21:51 UTC (rev 5302)
@@ -1,24 +0,0 @@
-[% IF refresh_rate %]
-<div class="hoverable" id="refresh_status">
-<div class="error" id="refresh_status_error" style="display: none;"></div>
-<div class="onhover" id="refresh_status_hover"></div>
-<div class="nohover" id="refresh_status_nohover"></div>
-</div>
-<div id="refresh_counter">
-<div id="refresh_line">
-[% IF debug; %]
-<span id="refresh_stop" class="clickable"
- style="margin-right: 5px;">[% c.loc("ui.footer.message.stop") | html %]</span>
-<span id="refresh_start" class="clickable"
- style="margin-right: 5px;">[% c.loc("ui.footer.message.start") | html %]</span>
-[% END %]
-[% c.loc("ui.footer.message.refresh") | html %] <span id="refresh_timer" class="secs">[% refresh_rate %]</span>
-</div>
-<div id="refresh_loading" style="display:none">[% c.loc("ui.footer.message.loading") | html %]</div>
-</div>
-
-<div class="error_dialog" id="refresh_error_dialog" style="display: none;">
-<img src="" c.uri_for("/images/error-32x32.png") | html %]" alt="[% c.loc("messages.generic.error") | html %]" />
-<span id="refresh_error_dialog_message">[% c.loc("ui.error.update") %]</span>
-</div>
-[% END %]
Deleted: trunk/opsview-web/root/wrapper_page_nav_right
===================================================================
--- trunk/opsview-web/root/wrapper_page_nav_right 2010-11-03 16:53:33 UTC (rev 5301)
+++ trunk/opsview-web/root/wrapper_page_nav_right 2010-11-03 23:21:51 UTC (rev 5302)
@@ -1,244 +0,0 @@
-[% IF refresh_rate %]
-<div class="right">
-<img return false;" src="" c.uri_for("/images/refresh.gif") | html %]" width="38" height="26"
- alt="[% c.loc("ui.nav.button.label.refresh") | html %]"
- title="[% c.loc("ui.nav.button.label.refresh") | html %]"
- border="0" class="middle clickable" />
-</div>
-<script type="text/_javascript_">
-var refreshTimer = function() {
-
- var x;
- var countdown_timer;
- var error_count=0;
- var useAjaxUpdater = true;
- var refreshListeners = [];
-
- function countdown(r) {
- if (r) { x = r + 1; if (countdown_timer) {clearTimeout(countdown_timer)} }
- x = x - 1;
- if (x == 0) {
- refresh_content();
- } else {
- $('refresh_timer').innerHTML=x;
- countdown_timer = setTimeout(function () { countdown(); }, 1000);
- }
- };
-
- function refresh_content() {
- Element.hide('refresh_line');
- Element.show('refresh_loading');
- clearTimeout(countdown_timer);
-
- // foreach refreshListener
- for (var i=0,l=refreshListeners.length;i<l;i++) {
- refreshListeners[i](refresh_finish);
- }
-
- // Make AJAX call. Set to only show output if the call was successful but this doesn't appear to work in Prototype 1.6.0.1
- if (useAjaxUpdater) {
- new Ajax.Updater({
- success: 'main_content',
- failure: 'ignored' },
- '[% refresh_link | replace("'", "\\'") %]',
- {
- asynchronous:true,
- evalScripts:true,
- method:'[% refresh_method || "get" %]',
- [% IF (refresh_method == "post"); "postBody:'"; post_body; "', "; END; %]
- onSuccess: refresh_finish,
- onFailure: function(t) { refresh_finish(t, t.status + ": " + t.statusText); }
- });
- }
- };
-
- function refresh_finish(t, errorMsg) {
- // Need to cater for expired sessions
- // Originally used a status code trick, but this didn't work on Safari
- if (typeof t == 'object') {
- if (t.responseText == "Timeout" || t.status == 401) {
- window.location.replace(window.location.href); /* Need to do this to remove POSTs */
- window.location.reload;
- }
- }
-
- // format date YYYY-MM-DD hh:mm:ss
- function dateToStr(now) {
- function pad(s,n) { s=""+s; while(s.length<n) { s="0"+s; } return s; }
- var yr = now.getYear();
- if (yr < 1000) yr += 1900;
- return yr + "-" + pad(now.getMonth()+1,2) + "-" + pad(now.getDate(),2) + " " +
- pad(now.getHours(),2) + ":" + pad(now.getMinutes(),2) + ":" + pad(now.getSeconds(),2);
- }
-
- // On error
- if (typeof t == 'object' && t.status == 0) errorMsg = "[% c.loc("messages.generic.error") | escape_js_string %]";
- if (typeof errorMsg != 'undefined' && Object.isString(errorMsg)) {
- // update status
- $('refresh_status_nohover').update(
- "<span class='error'>[% c.loc("ui.nav.help.errorUpdating") | escape_js_string %]: " + dateToStr(new Date()) + "</span>"
- );
- $('refresh_status_hover').update(
- "<span class='error'>(" + errorMsg + ")</span>"
- );
- /* Only show on 2nd error, as sometimes is triggered when a refresh happens as a link is pressed */
- if (error_count >= 1) {
- $('refresh_error_dialog').show();
- }
- /* Change main_content if there was a problem with loading new status */
- // var e = $('main_content');
- // if (e) e.update("[% c.loc("ui.error.update") %]");
- error_count++;
- }
- // On success
- else {
- // update status
- $('refresh_status_nohover').update(
- "[% c.loc("ui.nav.status.lastUpdate") | escape_js_string %]: " + dateToStr(new Date()) + ""
- );
- if (typeof t == 'object') {
- var hdr = t.getHeader("X-Opsview-Server-Status");
- var str = "";
- if (typeof hdr == "string") str = hdr;
- $('refresh_status_hover').update(
- "[% c.loc("ui.nav.status.serverUpdated") | escape_js_string %]: " + str + ""
- );
- }
- $('refresh_error_dialog').hide();
- error_count=0;
- }
-
- Element.hide('refresh_loading');
- Element.show('refresh_line');
- countdown([%refresh_rate%]);
- };
-
- // start timer
- function start() {
- countdown([%refresh_rate%]);
- var e=$('refresh_stop'); if (e) e.show();
- e=$('refresh_start'); if (e) e.hide();
- };
-
- // stop timer
- function stop() {
- clearTimeout(countdown_timer);
- var e=$('refresh_stop'); if (e) e.hide();
- e=$('refresh_start'); if (e) e.show();
- };
-
- // enable or disable auto refresh
- function setEnabled(enabled) {
- if (enabled) { $('refresh_counter').show(); start(); }
- else { $('refresh_counter').hide(); stop(); }
- };
-
- // put up custom error
- function setErrorMessage(msg) {
- var e = $('refresh_status_error');
- e.update(msg);
- e.show();
- };
-
- // clear error
- function clearErrorMessage() {
- var e = $('refresh_status_error');
- e.update();
- e.hide();
- };
-
- // add refresh listener
- function addListener(f) {
- refreshListeners.push(f);
- };
-
- // remove listener
- function removeListener(f) {
- for (var i=0,l=refreshListeners.length;i<l;i++) {
- if (refreshListeners[i] == f) { refreshListeners.splice(i,1); break; }
- }
- };
-
- // start
- Event.observe(window, 'load', function() { start() } );
-
- return {
- refresh: refresh_content,
- refresh_finish: refresh_finish,
- start: start,
- stop: stop,
- setEnabled: setEnabled,
- setErrorMessage: setErrorMessage,
- clearErrorMessage: clearErrorMessage,
- addListener: addListener,
- removeListener: removeListener,
- setUseAjaxUpdater: function(v) { useAjaxUpdater = v; },
- getUseAjaxUpdater: function() { return useAjaxUpdater; }
- };
-
-}();
-
-// backwards compatability
-function refresh_content() { return refreshTimer.refresh(); }
-</script>
-[% END %]
-
-[%
-IF page_view_include;
- IF page_view_include == "view_options_links";
- button_name = c.loc("ui.nav.button.label.actions");
- ELSE;
- button_name = c.loc("ui.nav.button.label.options");
- END;
-%]
-<div class="right" id="view_options_button">
-<span class="buttonwrapper"><span class="button_scale" $('view_options').visible() ) { new Effect2.BlindUp('view_options'); } else { new Effect2.BlindDown('view_options') }; return false;"><span>
-[%- button_name | upper | html -%]
-</span></span></span>
-</div>
-<div id="view_options" style="display:none">
-[% INCLUDE $page_view_include %]
-</div>
-<script type="text/_javascript_">
-// Position view options under view options button
-Event.observe(window, 'load', function() {
- if (document.loaded) {
- var el = $('view_options'), btn = $('view_options_button');
- if (el && btn) {
- var pos = btn.viewportOffset();
- if (pos && pos.length >= 2) {
- // put at bottom of page so always on top
- el.parentNode.removeChild(el);
- document.body.appendChild(el);
-
- // position it
- el.style.position = "fixed";
- var w = btn.offsetWidth ? btn.offsetWidth : 100;
- el.style.right = (document.viewport.getWidth() - pos[0] - w) + "px";
- var h = btn.offsetHeight ? btn.offsetHeight : 25;
- el.style.top = (pos[1] + h) + "px";
- }
- }
- }
-});
-</script>
-[% END %]
-
-[% IF page_search_box; #text-align right required for IE7 %]
-<div class="right" style="text-align: right">
-<div class="right">
-<span class="buttonwrapper" if(f) f.submit()"><span class="button_scale"><span>
-[%- c.loc("ui.nav.button.label.search") | upper | html -%]
-</span></span></span>
-</div>
-[%
-IF page_search_box_override;
- INCLUDE $page_search_box_override;
-ELSE; %]
-<form id="psearch_form" class="psearch right" method="get" name="search_list" action="" c.uri_for("/" _ list_page).path | html %]">
-<input type="text" size="15" class="psearch" maxlength="128" name="q" value="[% c.req.param("q") | html %]" />
-</form>
-[% END %]
-</div>
-[% END %]
-