search.shtml revision 758
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## -*- coding: utf-8 -*-
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## CDDL HEADER START
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## The contents of this file are subject to the terms of the
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## Common Development and Distribution License (the "License").
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## You may not use this file except in compliance with the License.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## or http://www.opensolaris.org/os/licensing.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## See the License for the specific language governing permissions
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## and limitations under the License.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## When distributing Covered Code, include this CDDL HEADER in each
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## file and include the License file at usr/src/OPENSOLARIS.LICENSE.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## If applicable, add the following below this CDDL HEADER, with the
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## fields enclosed by brackets "[]" replaced with your own identifying
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## information: Portions Copyright [yyyy] [name of copyright owner]
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## CDDL HEADER END
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## Copyright 2008 Sun Microsystems, Inc. All rights reserved.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync## Use is subject to license terms.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync##
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%!
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync import cgi
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync import urllib
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync fmri_ops = {
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync 'info': "Info",
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync 'manifest': "Manifest"
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync }
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%inherit file="layout.shtml"/>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%page args="g_vars"/>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync catalog = g_vars["catalog"]
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync request = g_vars["request"]
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%def name="page_title(g_vars)"><%
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync return "Package Search"
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%></%def>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<div id="yui-main">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% if not catalog.search_available:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <div class="yui-b">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <p>Search functionality is not available at this time.</p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </div>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% else:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync token_val = request.params.get("token", "")
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync searched = False
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync if len(token_val):
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync searched = True
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <div class="yui-b">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <form action="search.shtml">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <input id="search-field" type="text" size="30"
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync maxlength="512" name="token"
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync value="${cgi.escape(token_val, True)}"/>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <input id="submit-search" type="submit"
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync name="action" value="Search"/>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% if not searched:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <p>Search Tips:</p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <ul class="tips">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>All searches are case-insensitive.</li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>To find packages that contain a specific
695ebd3094ec0ce486a75be48274f381ff91d342vboxsyncfile, start your search criteria with a '/':<br/>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<kbd>/usr/bin/vim</kbd></li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>To find packages based on a partial match,
695ebd3094ec0ce486a75be48274f381ff91d342vboxsyncuse the wildcard characters '*' or '?':<br/>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<kbd>*.xhtm?</kbd></li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>To find packages based on specific
695ebd3094ec0ce486a75be48274f381ff91d342vboxsyncmatching characters use '[' and ']':<br/>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<kbd>/usr/bin/[ca]t</kbd></li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </ul>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endif
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </form>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </div>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <div class="yui-b results">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync rclass = None
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync results = None
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync if searched:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync results = catalog.search(token_val)
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% if searched and results:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% for index, pfmri, action, value in results:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync ## Only print row for first result. Can't do this
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync ## before now since results is a generator.
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% if rclass is None:
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync <table>
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync <tr class="first">
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <th>Index</th>
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync <th>Action</th>
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync <th>Value</th>
2f1d44e9a9a9300febc520fcf80a2e3fd9b39b73vboxsync <th>Package</th>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </tr>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endif
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync<%
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync if rclass is None or rclass == ' class="odd"':
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync rclass = ""
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync else:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync rclass = ' class="odd"'
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync phref = self.shared.rpath(g_vars, "info/0/%s" % (
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync urllib.quote(pfmri[len("pkg:/"):], "")))
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync%>\
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <tr${rclass} >
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <td>${index}</td>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <td>${action}</td>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <td>${value}</td>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <td><a href="${phref}">${pfmri}</a></td>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </tr>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endfor
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </table>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endif
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% if searched and rclass is None:
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <p>Your search - <b>${token_val}</b> - did not match any packages.</p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <p>Suggestions:</p>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <ul>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>Ensure that all words are spelled correctly.</li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>Try a different keyword.</li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync <li>Try a more general keyword.</li>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </ul>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endif
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync </div>
695ebd3094ec0ce486a75be48274f381ff91d342vboxsync% endif
641e2e067eb810f52974bc5a20171add2eae5e1cvboxsync</div>
641e2e067eb810f52974bc5a20171add2eae5e1cvboxsync