bloodhound-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r1456928 - in /incubator/bloodhound/branches/bep_0003_multiproduct: ./ bloodhound_search/bhsearch/ bloodhound_search/bhsearch/default-pages/ bloodhound_search/bhsearch/tests/ bloodhound_theme/bhtheme/ bloodhound_theme/bhtheme/htdocs/ bloodh...
Date Fri, 15 Mar 2013 12:23:53 GMT
Author: jure
Date: Fri Mar 15 12:23:52 2013
New Revision: 1456928

URL: http://svn.apache.org/r1456928
Log:
Sync merge from trunk


Added:
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_account.html
      - copied unchanged from r1456923, incubator/bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_prefs_account.html
Removed:
    incubator/bloodhound/branches/bep_0003_multiproduct/trac/contrib/
    incubator/bloodhound/branches/bep_0003_multiproduct/trac/doc/
    incubator/bloodhound/branches/bep_0003_multiproduct/trac/sample-plugins/
Modified:
    incubator/bloodhound/branches/bep_0003_multiproduct/   (props changed)
    incubator/bloodhound/branches/bep_0003_multiproduct/RELEASE_NOTES
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/api.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/default-pages/BloodhoundSearch
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/query_parser.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/query_parser.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/whoosh_backend.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/whoosh_backend.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/htdocs/bloodhound.css
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_language.html
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_userinterface.html
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_timeline.html
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/theme.py
    incubator/bloodhound/branches/bep_0003_multiproduct/installer/bloodhound_setup.py
    incubator/bloodhound/branches/bep_0003_multiproduct/trac/   (props changed)

Propchange: incubator/bloodhound/branches/bep_0003_multiproduct/
------------------------------------------------------------------------------
  Merged /incubator/bloodhound/trunk:r1456016-1456923

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/RELEASE_NOTES
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/RELEASE_NOTES?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/RELEASE_NOTES (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/RELEASE_NOTES Fri Mar 15 12:23:52 2013
@@ -1,14 +1,34 @@
+0.5.2
+
+ * Updated this file with 0.5.1 changes.
+
+ * Not fixed for this release:
+   * No major outstanding issues
+
+
+0.5.1
+
+ * Removed "contrib", "doc" and "sample-plugins" directories from the trac directory since they lack the appropriate license headers.
+ * Various improvements to the ticket page and a fix for ticket submits failing due to the attachment form being nested within the ticket properties form.
+ * Various bug fixes and enhancements.
+ 
+ * Not fixed for this release:
+   * No major outstanding issues
+
+
 0.5
 
+ * Added beta version of bhsearch plugin. Find more information on https://issues.apache.org/bloodhound/wiki/BloodhoundSearch
  * Implemented Bootstrap templates for the repository browser, log viewer and attachment pages.
+ * Added responsive layout support for better experience on tablets and phones
  * Upgraded Bootstrap to version 2.3.1.
  * Upgraded Trac to version 1.0.1.
- * Added beta version of bhsearch plugin. Find more information on https://issues.apache.org/bloodhound/wiki/BloodhoundSearch
  * Various bug fixes and enhancements.
 
  * Not fixed for this release:
    * No major outstanding issues
 
+
 0.4
 
  * Replaces ticket edit form with a new 'in-place' edit and workflow control

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/api.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/api.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/api.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/api.py Fri Mar 15 12:23:52 2013
@@ -369,7 +369,9 @@ class BloodhoundSearchApi(Component):
         self.upgrade_environment(self.env.db_transaction)
 
     def environment_needs_upgrade(self, db):
+        # pylint: disable=unused-argument
         return self.backend.is_index_outdated()
 
     def upgrade_environment(self, db):
+        # pylint: disable=unused-argument
         self.rebuild_index()

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/default-pages/BloodhoundSearch
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/default-pages/BloodhoundSearch?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/default-pages/BloodhoundSearch (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/default-pages/BloodhoundSearch Fri Mar 15 12:23:52 2013
@@ -1,71 +1,83 @@
 = Bloodhound Search =
 
-Current version is prototype phase 1. Read more about proposed functionality on [wiki:Proposals/BEP-0004 BEP-0004]
+Bloodhound Search is currently in prototype phase. Read more about proposed functionality on [wiki:Proposals/BEP-0004 BEP-0004]
 
 == How to enable Bloodhound Search==
- * Currently, Bloodhound Search is available only for dev configuration. Make sure that Bloodhound was installed using requirements-dev.txt:
+Currently, Bloodhound Search is available only for dev configuration. Make sure that Bloodhound was installed using requirements-dev.txt:
 {{{
 pip install -r requirements-dev.txt
 }}}
- * enable bhsearch.* components in trac.ini file
+
+Enable bhsearch.* components in trac.ini file and set Bloodhound Search as default search component
 {{{
 [components]
 ...
 bhsearch.* = enabled
+
+[bhsearch]
+is_default = true
 }}}
- * run initial index rebuild using trac-admin command line tool. TODO: web interface should be supported later
+
+Run initial index rebuild using trac-admin command line tool. TODO: reindexing using admin web interface should be supported later
 {{{
 trac-admin <path_to_trac_environment> bhsearch rebuild
 }}}
- * Bloodhound Search page will be available in Apps menu | Bloodhound Search
-
-== Search == #search
-Query syntax is described on wiki:Proposals/BEP-0004/ResourceQuery. Currently supported search queries are: 
-* List of all items: "*"
-* Free text search through indexed fields e.g. "some text"
+ 
+== How to search == #search
+Click Apps menu and select Bloodhound Search item. You can search use free text search or combine search with query syntax. Please consider below a few search samples: 
+* Free text search through multiple fields e.g. "some text"
 * Combination of free text and field specific query e.g. "test status:new keyword:starter" (default operator is AND)
 * Field specific query e.g. "status:new keyword:starter" (default operator is AND)
 * Boolean queries e.g. "test OR (status:new and keyword:starter)"
+* Use meta-keywords e.g. "some text $resolved". Read more in [#meta-keywords Meta-keywords] chapter
+For more information on query syntax see wiki:Proposals/BEP-0004/ResourceQuery. 
 
-Currently, only tickets and wiki pages with the following fields are indexed. Later more resources and fields will be added.
+Currently, you can search in tickets, wiki pages and milestones (later more resources will be added). Use All | Ticket | Wiki | Milestone tabs to search entries of specific type.
 
-Common fields for all resources:
- * id - resource id. For ticket it is ticket id, for wiki it will wiki page name.
- * type - resource type e.g. ticket, wiki etc.
- * product - product name
+Bloodhound Search provides basic faceting functionality. Facets are specific for each resource type. More complex faceting can be introduced later, for example: date rages, pivot faces etc.
+
+== Supported fields #fields
+=== Common fields for all resources
+ * id - resource id. For ticket it is ticket id, for wiki it is wiki page name.
+ * type - resource type e.g. ticket, wiki, milestone etc.
  * time - resource change time
  * author - resource author. For ticket it is ticket reporter.
  * content - ticket description, wiki page content
- * changes - currently, only ticket comments are indexed
 
-Ticket specific fields:
+=== Ticket specific fields
  * component
  * status 
  * resolution
  * keywords
  * milestone
  * summary
+ * changes - ticket comments
 
-Default sort order is by boost score ASC and time DESC
-
-Default query boosting is: id = 6, type = 2, summary = 5, author = 3, milestone = 2, keywords = 2, component = 2, status = 2, content = 1, changes = 1, 
+=== Milestone specific fields
+ * status - possible values are "completed" or "open"
+ * due - milestone due value in date-time format
+ 
+== Meta-keywords #meta-keywords
+Consider Bloodhound Search meta-keywords as shortcuts for commonly used query expressions. Meta-keyword starts with "$" character. Bloodhound Search supports the following meta-keywords:
+ * $resolved - resolved to {{{status:(resolved OR closed)}}} query
+ * $unresolved - resolved to {{{NOT $resolved}}} query
+ * $ticket, $milestone, $wiki - resolved to {{{type:ticket|milestone|wiki}}} query
+ * $me - resolved to currently logged in user name
+ * $my - resolved to {{{owner:$me}}}
+{{{
+#!comment
+Add wiki macro in order to automatically generate list of supported meta-keywords and help description
+}}}
 
-== Prototype phase 2 limitations == #limitations
- * Only tickets and wiki pages are indexed.
- * UI does not support faceting
- * Search  does not support meta keywords 
- * Quick jump by ticket id and wiki name is not supported
- * Possible bugs and inconveniences expected for prototype 
-
-== To be done ==
-Please consider below not complete list of TODOs.
- * UI design for search results including facets and resource specific presentation. Initial proposal can be found on [wiki:Proposals/BEP-0004#resultview BEP-0004]
- * Add facet support for search UI
- * Improve index quality e.d. add more resources in index (milestones etc.), index more fields for ticket. Support pluggable schema generation.
- * Improve search quality
- * Improve index consistency. [=#consistency]  
-   * Current implementation uses ITicketChangeListener interface that triggers after DB committed. There is some chances to get inconsistency between DB and index. In this case reindex is required. One of the possible solution is contact Trac community to introduce a new within transaction  I<Resource>ChangingListener interface, save changes into additional table and index changes in separate thread.
-   * Some ticket changes are not reflected in event interfaces e.g. Version and Component renaming. One of the possible solution is to contact Trac community to introduce new interfaces.
-   * Alternative solution is triggering events from SQL proxy developed on multi-product branch
-   * Usage of DB triggers is another alternative
- * A lot more things to do :)
\ No newline at end of file
+== URL query parameters #parameters
+Bloodhound Search supports the following URL query parameters:
+ * '''q''' - query string, for example: .../bhsearch?q=test
+ * '''type''' - type of resource to search in. Currently, supported types are ticket, wiki and milestone, for example: .../bhsearch?type=ticke
+ * '''fq''' - filter query. Filter queries are not boosted and used to additionally filter search output. Bloodhound Search joins multiple filter queries using AND operator, for example: .../bhsearch?fq=status:"new"&fq=component:"c1" results to filter query: status:"new" AND component:"c1"
+ * '''pagelen''' - number of rows that should be returned in a single page, for example .../bhsearch?pagelen=20. Default pagelen value is 10
+ * '''page''' - number of page in the current result set that should be returned
+ * '''view''' - the parameter specify hor search results should presented. Currently supported value is {{{grid}}}. If parameter is missing, free text presentation will be used. Usage sample: {{{view=grid}}}
+ * '''sort''' - specifies search results sorting. By default, results are sorted by relevance score and resource time ({{{sort=score, time desc}}}). 
+  * A sort parameter must include a field name (or the pseudo-field {{{score}}}), optionally followed by whitespace (escaped as + or %20 in URL strings) and followed by a sort direction ({{{asc}}} or {{{desc}}}). If if direction is missing, {{{asc}}} is used by default.
+  * Multiple sort orderings can be separated by a comma, ie: {{{sort=<field name>+<direction>[,<field name>+<direction>]...}}} For example: {{{sort=component, milestone desc}}}
+   
\ No newline at end of file

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/query_parser.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/query_parser.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/query_parser.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/query_parser.py Fri Mar 15 12:23:52 2013
@@ -131,6 +131,7 @@ class DocTypeMetaKeywordParser(Component
     search_participants = ExtensionPoint(ISearchParticipant)
 
     def match(self, text, context):
+        # pylint: disable=unused-argument
         documents = [p.get_participant_type()
                      for p in self.search_participants]
         if text in documents:
@@ -141,6 +142,7 @@ class ResolvedMetaKeywordParser(Componen
     implements(IMetaKeywordParser)
 
     def match(self, text, context):
+        # pylint: disable=unused-argument
         if text == u'resolved':
             return u'status:(resolved OR closed)'
 
@@ -149,6 +151,7 @@ class UnResolvedMetaKeywordParser(Compon
     implements(IMetaKeywordParser)
 
     def match(self, text, context):
+        # pylint: disable=unused-argument
         if text == u'unresolved':
             return u'NOT $resolved'
 
@@ -166,5 +169,6 @@ class MyMetaKeywordParser(Component):
     implements(IMetaKeywordParser)
 
     def match(self, text, context):
+        # pylint: disable=unused-argument
         if text == u'my':
             return u'owner:$me'

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/query_parser.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/query_parser.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/query_parser.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/query_parser.py Fri Mar 15 12:23:52 2013
@@ -21,6 +21,7 @@
 import unittest
 from bhsearch.tests.base import BaseBloodhoundSearchTest
 from bhsearch.query_parser import DefaultQueryParser
+from trac.test import Mock
 from whoosh.query import terms, nary, wrappers
 
 
@@ -84,9 +85,11 @@ class MetaKeywordsParsingTestCase(BaseBl
         self.assertEqual(parsed_query, terms.Term('owner', 'username'))
 
     def _mock_context_with_username(self, username):
-        class context:
-            class req:
-                authname = username
+        context = Mock(
+            req=Mock(
+                authname=username
+            )
+        )
         return context
 
 

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/whoosh_backend.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/whoosh_backend.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/whoosh_backend.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/tests/whoosh_backend.py Fri Mar 15 12:23:52 2013
@@ -588,20 +588,20 @@ class WhooshFunctionalityTestCase(unitte
             w.add_document(content=u"A nice sentence with stop words.")
 
         with ix.searcher() as s:
-            query = u"with stop"
+            query_text = u"with stop"
 
             # field_names both ignore stop words
             q = MultifieldParser(['content', 'summary'],
-                                 WhooshBackend.SCHEMA).parse(query)
-            self.assertEqual(q.simplify(s).__unicode__(),
+                                 WhooshBackend.SCHEMA).parse(query_text)
+            self.assertEqual(unicode(q.simplify(s)),
                              u'((content:with OR summary:with) AND '
                              u'(content:stop OR summary:stop))')
             self.assertEqual(len(s.search(q)), 1)
 
             # 'content' and 'id' ignores stop words
             q = MultifieldParser(['content', 'id'],
-                                 WhooshBackend.SCHEMA).parse(query)
-            self.assertEqual(q.simplify(s).__unicode__(),
+                                 WhooshBackend.SCHEMA).parse(query_text)
+            self.assertEqual(unicode(q.simplify(s)),
                              u'((content:with OR id:with) AND '
                              u'(content:stop OR id:stop))')
             self.assertEqual(len(s.search(q)), 1)

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/whoosh_backend.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/whoosh_backend.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/whoosh_backend.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_search/bhsearch/whoosh_backend.py Fri Mar 15 12:23:52 2013
@@ -227,7 +227,8 @@ class WhooshBackend(Component):
                                             highlight_fields,
                                             query_parameters)
             try:
-                results.debug['actual_query'] = unicode(query.simplify(searcher))
+                actual_query = unicode(query.simplify(searcher))
+                results.debug['actual_query'] = actual_query
             except TypeError:
                 # Simplify has a bug that causes it to fail sometimes.
                 pass

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/htdocs/bloodhound.css
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/htdocs/bloodhound.css?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/htdocs/bloodhound.css (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/htdocs/bloodhound.css Fri Mar 15 12:23:52 2013
@@ -18,57 +18,58 @@
 */
 
 body {
-  background-color: rgb(92%, 91%, 88%);
+ background-color: rgb(92%, 91%, 88%);
 }
 
 .container:first-child {
-  background-color: rgb(100%, 100%, 100%);
-  padding: 5px 20px;
-  border-left: 1px solid rgb(70%, 70%, 70%);
-  border-right: 1px solid rgb(70%, 70%, 70%);
-  border-bottom: 1px solid rgb(70%, 70%, 70%);
-  box-shadow: 0px 0px 10px 2px rgba(50%, 50%, 50%, 0.4);
-  border-bottom-left-radius: 7px;
-  border-bottom-right-radius: 7px;
+ background-color: rgb(100%, 100%, 100%);
+ padding: 5px 20px;
+ border-left: 1px solid rgb(70%, 70%, 70%);
+ border-right: 1px solid rgb(70%, 70%, 70%);
+ border-bottom: 1px solid rgb(70%, 70%, 70%);
+ box-shadow: 0px 0px 10px 2px rgba(50%, 50%, 50%, 0.4);
+ border-bottom-left-radius: 7px;
+ border-bottom-right-radius: 7px;
 }
 
 #searchbox {
-  margin-top: 0;
-  margin-bottom: 0;
+ margin-top: 0;
+ margin-bottom: 0;
 }
 
 #mainsearch {
-  margin-bottom: 0;
-  display: inline-block;
+ margin-bottom: 0;
+ display: inline-block;
 }
 
 #mainnav {
-  margin-bottom: 0px;
-  border-bottom: 0px solid #333;
+ margin-bottom: 0px;
+ border-bottom: 0px solid #333;
 }
 
 /* @group Section folding */
 
 .foldable :link,
 .foldable :visited {
-  background: url(../common/expanded.png) 0 50% no-repeat;
-  border: none;
-  padding-left: 16px;
+ background: url(../common/expanded.png) 0 50% no-repeat;
+ border: none;
+ padding-left: 16px;
 }
 
 .collapsed > .foldable :link,
 .collapsed > .foldable :visited {
-  background-image: url("../common/collapsed.png");
+ background-image: url("../common/collapsed.png");
 }
+
 .collapsed > div,
 .collapsed > table,
 .collapsed > ul,
 .collapsed > dl {
-  display: none
+ display: none
 }
 
 .nav-header-selected {
-  color: #b94a48;
+ color: #b94a48;
 }
 
 /* @end */
@@ -76,33 +77,34 @@ body {
 /* @group Heading anchors */
 
 .anchor:link, .anchor:visited {
-  border: none;
-  color: #d7d7d7;
-  font-size: .8em;
-  vertical-align: text-top;
+ border: none;
+ color: #d7d7d7;
+ font-size: .8em;
+ vertical-align: text-top;
 }
+
 * > .anchor:link, * > .anchor:visited {
-  visibility: hidden;
+ visibility: hidden;
 }
 
 h1:hover .anchor, h2:hover .anchor, h3:hover .anchor,
 h4:hover .anchor, h5:hover .anchor, h6:hover .anchor,
 span:hover .anchor {
-  visibility: visible;
-  text-decoration: none;
+ visibility: visible;
+ text-decoration: none;
 }
 
 h1 .anchor:hover, h2 .anchor:hover, h3 .anchor:hover,
 h4 .anchor:hover, h5 .anchor:hover, h6 .anchor:hover,
 span:hover .anchor {
-  background-color: #f1f1f1;
+ background-color: #f1f1f1;
 }
 
 /* @end */
 
 h1:target, h2:target, h3:target, h4:target, h5:target, h6:target,
 span:target {
-  background: #ffb;
+ background: #ffb;
 }
 
 /* @group Ensuring buttons align horizontally */
@@ -120,11 +122,11 @@ label > input,
 div.inlinebuttons,
 div.reports h2,
 div.reports form {
-	display: inline;
+ display: inline;
 }
 
 .filters label {
-	margin-right: 10px;
+ margin-right: 10px;
 }
 
 /* @end */
@@ -132,12 +134,12 @@ div.reports form {
 /* @group Metanav */
 
 .metanav {
-	margin-top: 10px;
-	margin-right: 20px;
+ margin-top: 10px;
+ margin-right: 20px;
 }
 
 .metanav span {
-	margin-left: 10px;
+ margin-left: 10px;
 }
 
 /* @end */
@@ -145,95 +147,94 @@ div.reports form {
 /* @group Footer */
 
 .footer {
-	margin-top: 20px;
-	color: grey;
+ margin-top: 20px;
+ color: grey;
 }
 
 .footer a {
-	color: #565656;
+ color: #565656;
 }
 
 .footer .pull-right {
-	text-align:right;
+ text-align: right;
 }
 
 /* @end */
 
 #ticket .properties table td,
 #ticket .properties table th {
-  border: none;
+ border: none;
 }
 
 #ticket footer {
-  text-align: right;
+ text-align: right;
 }
 
 #trac-ticket-title {
-  margin-bottom: 5px;
+ margin-bottom: 5px;
 }
 
 #trac-ticket-title span.ticket-info {
-  font-weight: normal;
+ font-weight: normal;
 }
 
 .activityfeed img {
-  display: none;
+ display: none;
 }
 
 .activityfeed dt {
-  font-weight: normal;
+ font-weight: normal;
 }
 
 .activityfeed dd {
-  color: grey;
+ color: grey;
 }
 
 .activityfeed * tt {
-  word-wrap: break-word;
-  word-break: break-all;
+ word-wrap: break-word;
+ word-break: break-all;
 }
 
 #mobile-activity {
-  margin-top: 50px;
+ margin-top: 50px;
 }
 
-
 div.reports form,
 div.reports .inlinebutton {
-  float: right;
-  margin-bottom: 0px;
+ float: right;
+ margin-bottom: 0px;
 }
 
 div.reports .inlinebutton {
-  margin-left: 10px;
+ margin-left: 10px;
 }
 
 div.reports h2 {
-  font-size: 20px;
+ font-size: 20px;
 }
 
 /* @group Wiki */
 
 .wiki-toc {
-  float: right;
-  margin-left: 25px;
-  padding: 10px;
-  border: 1px solid #999;
-  border-radius: 10px;
+ float: right;
+ margin-left: 25px;
+ padding: 10px;
+ border: 1px solid #999;
+ border-radius: 10px;
 }
 
 pre {
-  overflow: auto;
-  white-space: pre;
-  word-wrap: normal;
+ overflow: auto;
+ white-space: pre;
+ word-wrap: normal;
 }
 
 .trac-modifiedby {
-  float: right;
+ float: right;
 }
 
 .trac-modifiedby .trac-print {
-  display: none;
+ display: none;
 }
 
 /* @end */
@@ -241,144 +242,152 @@ pre {
 /* @group Ticket page modifications */
 
 .bh-ticket-buttons {
-  padding-left: 5px;
+ padding-left: 5px;
 }
 
 .clearboth {
-  clear: both;
+ clear: both;
 }
 
 .ticket .keywords {
-  margin: 20px 0;
+ margin: 20px 0;
 }
 
 .ticket .properties h5 {
-  margin-top: 0;
-  margin-bottom: 0;
+ margin-top: 0;
+ margin-bottom: 0;
 }
 
 .ticket-box-field, .ticket-box-info {
-  margin-top: 0;
-  margin-bottom: 0;
+ margin-top: 0;
+ margin-bottom: 0;
 }
 
 .ticket-box-info dt {
-  text-align: left;
+ text-align: left;
 }
 
 #modifyproperties th, #modifyproperties td {
-  vertical-align: baseline;
-  border: none;
+ vertical-align: baseline;
+ border: none;
 }
 
 .ticket-summary #field-summary {
-  margin-bottom: 0;
+ margin-bottom: 0;
 }
 
 .ticket .properties .enum h5 {
-  margin-top: 0px;
+ margin-top: 0px;
 }
 
 .trac-loading {
-  background: url(../common/loading.gif) 0 50% no-repeat;
-  margin: 0 1em;
-  padding-left: 16px;
-  display: none;
+ background: url(../common/loading.gif) 0 50% no-repeat;
+ margin: 0 1em;
+ padding-left: 16px;
+ display: none;
 }
 
-#trac-comment-editor textarea { width: 100%; }
+#trac-comment-editor textarea {
+ width: 100%;
+}
 
 /* @end */
 
 /* @group Quick Ticket fieldset */
 
 #qct-fieldset {
-  position: relative;
+ position: relative;
 }
 
 #qct-fieldset .form-horizontal {
-  position: relative;
-  left: -65px;
+ position: relative;
+ left: -65px;
 }
 
 #qct-fieldset .controls {
-  margin-bottom: 5px;
+ margin-bottom: 5px;
 }
 
 #qct-fieldset #field-summary {
-  width: 260px;
+ width: 100%;
 }
 
 #qct-fieldset #field-description {
-  width: auto;
+ width: 100%;
 }
 
 #qct-box #qct-cancel {
-  display: inline;
-  color: #08C;
-  margin-top: 5px;
-  padding: 5px 15px;
+ display: inline;
+ color: #08C;
+ margin-top: 5px;
+ padding: 5px 15px;
 }
 
 #qct-create {
-  margin-left: 100px;
+ margin-left: 100px;
 }
 
 #qct-cancel {
-  position: relative;
-  top: 5px;
+ position: relative;
+ top: 5px;
 }
 
 #qct-box p {
-  white-space: normal;
+ white-space: normal;
 }
 
 /* @group Generic rules */
 
 .full-x {
-  width: 100%;
+ width: 100%;
 }
 
 h1, h2, h3, h4 {
-  font-weight: bold;
-  page-break-after: avoid;
+ font-weight: bold;
+ page-break-after: avoid;
 }
 
 .clip, .affix .clip-affix {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
 }
 
 .clip.edit-active, .affix .clip-affix.edit-active {
-  overflow: visible;
+ overflow: visible;
 }
 
-.table tbody tr:hover td { background: #eed !important }
+.table tbody tr:hover td {
+ background: #eed !important
+}
+
+#content img {
+ margin: 0.5em;
+}
 
 /* copied from bootstrap for appropriate focus/unfocused state for contenteditable*/
 span[contenteditable="true"] {
-  border-radius: 4px 4px 4px 4px;
-  background-color: #ffffff;
-  border: 1px solid #cccccc;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
-          transition: border linear 0.2s, box-shadow linear 0.2s;
+ border-radius: 4px 4px 4px 4px;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+    -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+         box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+    -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+      -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+         transition: border linear 0.2s, box-shadow linear 0.2s;
 }
 
 span[contenteditable="true"]:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ border-color: rgba(82, 168, 236, 0.8);
+ outline: 0;
+ outline: thin dotted  \9;
+ /* IE6-9 */
+
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+    -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+         box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
 }
 
 /* @end */
@@ -386,40 +395,40 @@ span[contenteditable="true"]:focus {
 /* @group Alternate download links */
 
 #altlinks {
-  clear: both;
-  text-align: center;
+ clear: both;
+ text-align: center;
 }
 
 #altlinks h3 {
-  font-size: 12px;
-  letter-spacing: normal;
-  margin: 0;
+ font-size: 12px;
+ letter-spacing: normal;
+ margin: 0;
 }
 
 #altlinks ul {
-  list-style: none outside none;
-  margin: 0;
-  padding: 0 0 1em;
+ list-style: none outside none;
+ margin: 0;
+ padding: 0 0 1em;
 }
 
 #altlinks li.last {
-  border-right: medium none;
+ border-right: medium none;
 }
 
 #altlinks li {
-  border-right: 1px solid #D7D7D7;
-  display: inline;
-  font-size: 11px;
-  line-height: 1.5;
-  padding: 0 1em;
-  white-space: nowrap;
+ border-right: 1px solid #D7D7D7;
+ display: inline;
+ font-size: 11px;
+ line-height: 1.5;
+ padding: 0 1em;
+ white-space: nowrap;
 }
 
 #altlinks li *:link, #altlinks li *:visited {
-  background-repeat: no-repeat;
-  border: medium none;
-  color: #666666;
-  padding: 0 0 2px;
+ background-repeat: no-repeat;
+ border: medium none;
+ color: #666666;
+ padding: 0 0 2px;
  text-decoration: none;
 }
 
@@ -444,7 +453,7 @@ span[contenteditable="true"]:focus {
 
 #results .author,
 #results .date {
-  color: #090;
+ color: #090;
 }
 
 /* @end */
@@ -452,18 +461,17 @@ span[contenteditable="true"]:focus {
 /* @group Search */
 
 .comment blockquote p {
-  font-size: 13px;
+ font-size: 13px;
 }
 
 .search_results dt {
-    font-weight: inherit;
-    text-decoration: underline;
+ font-weight: inherit;
+ text-decoration: underline;
 }
 
-
 .searchable em {
-    font-style: inherit;
-    font-weight: bold;
+ font-style: inherit;
+ font-weight: bold;
 }
 
 /* @end */
@@ -471,7 +479,7 @@ span[contenteditable="true"]:focus {
 /* @group Admin */
 
 .table .default {
-  text-align: center
+ text-align: center
 }
 
 /* @end */
@@ -479,17 +487,17 @@ span[contenteditable="true"]:focus {
 /* @group Reports */
 
 .report span.foldable {
-  display: none;
+ display: none;
 }
 
 .report input#title {
-  max-width: 500px;
-  width: 100%;
+ max-width: 500px;
+ width: 100%;
 }
 
 .report textarea.trac-resizable {
-  max-width: 500px;
-  width: 100%;
+ max-width: 500px;
+ width: 100%;
 }
 
 table.listing th.sel, table.listing td.sel {
@@ -500,37 +508,37 @@ table.listing th.sel, table.listing td.s
 /* @end */
 
 #filters td .trac-clause-lsep {
-  float: left;
-  line-height: 50%;
-  width: 47%;
+ float: left;
+ line-height: 50%;
+ width: 47%;
 }
 
 #filters td .trac-clause-msep {
-  float: left;
-  text-align: center;
-  width: 5%;
+ float: left;
+ text-align: center;
+ width: 5%;
 }
 
 #filters td .trac-clause-rsep {
-  float: right;
-  line-height: 50%;
-  width: 47%;
+ float: right;
+ line-height: 50%;
+ width: 47%;
 }
 
 #filters td .trac-clause-lsep hr, #filters td .trac-clause-rsep hr {
-  margin: 0px;
+ margin: 0px;
 }
 
 .and label, .or label {
-  display: inline;
+ display: inline;
 }
 
 .and select, .or select {
-  width: 150px;
+ width: 150px;
 }
 
 .or {
-  text-align: right;
+ text-align: right;
 }
 
 /* @end */
@@ -538,64 +546,64 @@ table.listing th.sel, table.listing td.s
 /* @group Bootstrap extensions */
 
 .form-search label, .form-inline label {
-  margin-left: 2em;
+ margin-left: 2em;
 }
 
 .btn-micro {
-  padding: 0px 6px !important;
-  font-size: 10px !important;
-  line-height: 13px !important;
+ padding: 0px 6px !important;
+ font-size: 10px !important;
+ line-height: 13px !important;
 }
 
 button.btn.btn-micro,
 input[type="submit"].btn.btn-micro {
-  *padding-top: 1px !important;
-  *padding-bottom: 1px !important;
+ *padding-top: 1px !important;
+ *padding-bottom: 1px !important;
 }
 
 .btn-group > .btn-micro.dropdown-toggle {
-  padding-right: 5px !important;
-  padding-left: 5px !important;
+ padding-right: 5px !important;
+ padding-left: 5px !important;
 }
 
 .btn-micro .caret {
-  margin-top: 2px !important;
+ margin-top: 2px !important;
 }
 
 .visible-affix {
-  display: none !important;
+ display: none !important;
 }
 
 .affix .visible-affix {
-  display: inherit !important;
+ display: inherit !important;
 }
 
 .hidden-affix {
-  display: inherit !important;
+ display: inherit !important;
 }
 
 .affix .hidden-affix {
-  display: none !important;
+ display: none !important;
 }
 
 .hidden-desktop {
-  display: none !important;
+ display: none !important;
 }
 
 .visible-desktop-hover:hover .hidden-desktop {
-  display: inherit !important;
+ display: inherit !important;
 }
 
 .breadcrumb {
-  background-color: #FBFBFB;
-  background-image: -moz-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-repeat: repeat-x;
-  border: 1px solid #DDDDDD;
-  border-radius: 3px 3px 3px 3px;
-  box-shadow: 0 1px 0 #FFFFFF inset;
-  list-style: none outside none;
-  margin: 0 0 18px;
-  padding: 7px 14px;
+ background-color: #FBFBFB;
+ background-image: -moz-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-repeat: repeat-x;
+ border: 1px solid #DDDDDD;
+ border-radius: 3px 3px 3px 3px;
+ box-shadow: 0 1px 0 #FFFFFF inset;
+ list-style: none outside none;
+ margin: 0 0 18px;
+ padding: 7px 14px;
 }
 
 #breadcrumbbar .btn-group a:hover {
@@ -603,130 +611,130 @@ input[type="submit"].btn.btn-micro {
 }
 
 @media (max-width: 979px) {
-  .hidden-desktop {
-    display: inherit !important;
-  }
+ .hidden-desktop {
+  display: inherit !important;
+ }
 }
 
 @media (min-width: 1200px) {
-  .facets {
-      width: 220px;
-  }
+ .facets {
+  width: 220px;
+ }
 }
 
 @media (min-width: 1200px) {
-  .search_results {
-      width: 920px;
-  }
+ .search_results {
+  width: 920px;
+ }
 }
 
 @media (min-width: 979px) and (max-width: 1199px) {
-  .main-nav ul {
-    background-color: red;
-  }
+ .main-nav ul {
+  background-color: red;
+ }
 }
 
 @media (max-width: 767px) {
-  body {
-    padding-left: 8px;
-    padding-right: 8px;
-  }
-
-  #logo, #usermenu, #stickyStatus{
-    float: left;
-  }
-
-  #searchbox {
-    float: left;
-    margin-right: 10px;
-  }
-
-  #mainnav {
-    margin-top: 7px;
-  }
-
-  .comment-meta {
-    margin-bottom: 5px;
-  }
-
-  .comment-meta .id,
-  .comment-meta .date {
-    text-align: right;
-  }
-
-  .sticky {
-    width: 100%;
-    position: relative;
-    left: 0px;
-    padding-left: 29px; 
-  }
-
-  #belowStatus {
-    margin-top: 5px;
-  }
-
-  #changelog .change .span2 {
-    float: left;
-  }
-
-  .compact-left {
-    float: left;
-    margin-left: 10px;
-  }
+ body {
+  padding-left: 8px;
+  padding-right: 8px;
+ }
+
+ #logo, #usermenu, #stickyStatus {
+  float: left;
+ }
+
+ #searchbox {
+  float: left;
+  margin-right: 10px;
+ }
+
+ #mainnav {
+  margin-top: 7px;
+ }
+
+ .comment-meta {
+  margin-bottom: 5px;
+ }
+
+ .comment-meta .id,
+ .comment-meta .date {
+  text-align: right;
+ }
+
+ .sticky {
+  width: 100%;
+  position: relative;
+  left: 0px;
+  padding-left: 29px;
+ }
+
+ #belowStatus {
+  margin-top: 5px;
+ }
+
+ #changelog .change .span2 {
+  float: left;
+ }
+
+ .compact-left {
+  float: left;
+  margin-left: 10px;
+ }
 }
 
 @media (max-width: 480px) {
-  body {
-    padding-left: 0px;
-    padding-right: 0px;
-  }
-
-  h1 {
-    font-size: 30px;
-    margin-bottom: 0px;
-    line-height: 1;
-  }
-
-  .container:first-child {
-    border-left: 0px solid white;
-    border-right: 0px solid white;
-    padding: 0px 4px;
-  }
-
-  header, #belowStatus, #mobile-activity,
-  #stickyStatus, #footer-container {
-    padding-left: 7px;
-    padding-right: 7px;
-  }
-
-  .ownership {
-    padding-left: 15px;
-  }
+ body {
+  padding-left: 0px;
+  padding-right: 0px;
+ }
+
+ h1 {
+  font-size: 30px;
+  margin-bottom: 0px;
+  line-height: 1;
+ }
+
+ .container:first-child {
+  border-left: 0px solid white;
+  border-right: 0px solid white;
+  padding: 0px 4px;
+ }
+
+ header, #belowStatus, #mobile-activity,
+ #stickyStatus, #footer-container {
+  padding-left: 7px;
+  padding-right: 7px;
+ }
+
+ .ownership {
+  padding-left: 15px;
+ }
 }
 
 .breadcrumb .dropdown-menu li {
-  display: block;
+ display: block;
 }
 
 /* Revert some changes introduced in 2.1.0 */
 h6 {
-  color: #A4A4A4;
-  margin: 0px 0.5em;
-  text-transform: uppercase;
+ color: #A4A4A4;
+ margin: 0px 0.5em;
+ text-transform: uppercase;
 }
 
 /* Style tt elements like code elements (#420/t:#11094). */
 tt {
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-  color: #d14;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  font-size: 12px;
-  padding: 2px 4px;
-  white-space: nowrap;
-  -webkit-border-radius: 3px;
-     -moz-border-radius: 3px;
-          border-radius: 3px;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+ color: #d14;
+ font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+ font-size: 12px;
+ padding: 2px 4px;
+ white-space: nowrap;
+ -webkit-border-radius: 3px;
+    -moz-border-radius: 3px;
+         border-radius: 3px;
 }
 
 /* @end */
@@ -734,166 +742,165 @@ tt {
 /* @group Bootstrap extensions */
 
 #alert-log {
-  left: 500px;
-  position: fixed;
-  top: 50px;
-  width: 250px;
+ left: 500px;
+ position: fixed;
+ top: 50px;
+ width: 250px;
 }
 
 /* @end */
 
 /* @group jQuery UI extensions (fix for Bootstrap) */
 .ui-datepicker {
-  background-color: #FBFBFB;
-  background-image: -webkit-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -moz-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -o-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -ms-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-repeat: repeat-x;
-  border: 1px solid #DDDDDD;
-  border-radius: 3px 3px 3px 3px;
-  box-shadow: 0 1px 0 #FFFFFF inset;
-  list-style: none outside none;
-  margin: 0 0 18px;
-  padding: 7px 14px;
+ background-color: #FBFBFB;
+ background-image: -webkit-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:    -moz-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:      -o-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:     -ms-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:         linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-repeat: repeat-x;
+ border: 1px solid #DDDDDD;
+ border-radius: 3px 3px 3px 3px;
+ box-shadow: 0 1px 0 #FFFFFF inset;
+ list-style: none outside none;
+ margin: 0 0 18px;
+ padding: 7px 14px;
 }
 
 .ui-datepicker a.ui-datepicker-prev,
 .ui-datepicker a.ui-datepicker-next {
-  background-color: #FBFBFB;
-  background-image: -webkit-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -moz-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -o-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -ms-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-repeat: repeat-x;
-  border: 1px solid #DDDDDD;
-  border-radius: 3px 3px 3px 3px;
-  box-shadow: 0 1px 0 #FFFFFF inset;
-  padding: 2px 10px;
-  margin: 2px 0 10px 0;
-  cursor: pointer;
-  text-decoration: none;
+ background-color: #FBFBFB;
+ background-image: -webkit-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:    -moz-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:      -o-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:     -ms-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:         linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-repeat: repeat-x;
+ border: 1px solid #DDDDDD;
+ border-radius: 3px 3px 3px 3px;
+ box-shadow: 0 1px 0 #FFFFFF inset;
+ padding: 2px 10px;
+ margin: 2px 0 10px 0;
+ cursor: pointer;
+ text-decoration: none;
 }
 
 .ui-datepicker a.ui-datepicker-prev:before {
-  content: "\ab\a0";
+ content: "\ab\a0";
 }
 
 .ui-datepicker a.ui-datepicker-next:after {
-  content: "\a0\bb";
+ content: "\a0\bb";
 }
 
 .ui-datepicker a.ui-datepicker-prev {
-  float: left;
+ float: left;
 }
 
 .ui-datepicker a.ui-datepicker-next {
-  float: right;
+ float: right;
 }
 
 .ui-datepicker-title {
-  clear: both;
+ clear: both;
 }
 
 .ui-datepicker-calendar td {
-  background-color: #FBFBFB;
-  background-image: -webkit-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -moz-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -o-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: -ms-linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-image: linear-gradient(center top , #FFFFFF, #F5F5F5);
-  background-repeat: repeat-x;
-  border: 1px solid #DDDDDD;
-  border-radius: 3px 3px 3px 3px;
-  box-shadow: 0 1px 0 #FFFFFF inset;
-  text-align: center;
+ background-color: #FBFBFB;
+ background-image: -webkit-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:    -moz-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:      -o-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:     -ms-linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-image:         linear-gradient(center top, #FFFFFF, #F5F5F5);
+ background-repeat: repeat-x;
+ border: 1px solid #DDDDDD;
+ border-radius: 3px 3px 3px 3px;
+ box-shadow: 0 1px 0 #FFFFFF inset;
+ text-align: center;
 }
 
 .ui-datepicker-calendar td a {
-  display: block;
-  padding: 2px 4px;
-  text-decoration: none;
+ display: block;
+ padding: 2px 4px;
+ text-decoration: none;
 }
 
 .ui-datepicker-calendar td a.ui-state-hover,
 .ui-datepicker-calendar td a.ui-state-active {
-  color: #FBFBFB;
-  background-color: #08c;
+ color: #FBFBFB;
+ background-color: #08c;
 }
 
 /* stuff below was copied from bootstrap's default button rules */
 .ui-datepicker button {
-  display: inline-block;
-  *display: inline;
-  padding: 4px 12px;
-  margin-bottom: 0;
-  *margin-left: .3em;
-  font-size: 14px;
-  line-height: 20px;
-  *line-height: 20px;
-  color: #333333;
-  text-align: center;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  vertical-align: middle;
-  cursor: pointer;
-  background-color: #f5f5f5;
-  *background-color: #e6e6e6;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%,
-from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
-  background-repeat: repeat-x;
-  border: 1px solid #bbbbbb;
-  *border: 0;
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  border-bottom-color: #a2a2a2;
-  -webkit-border-radius: 4px;
-     -moz-border-radius: 4px;
-          border-radius: 4px;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',
-endColorstr='#ffe6e6e6', GradientType=0);
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-  *zoom: 1;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
+ display: inline-block;
+ *display: inline;
+ padding: 4px 12px;
+ margin-bottom: 0;
+ *margin-left: .3em;
+ font-size: 14px;
+ line-height: 20px;
+ *line-height: 20px;
+ color: #333333;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ vertical-align: middle;
+ cursor: pointer;
+ background-color: #f5f5f5;
+ *background-color: #e6e6e6;
+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+ background-repeat: repeat-x;
+ border: 1px solid #bbbbbb;
+ *border: 0;
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ border-bottom-color: #a2a2a2;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',
+ endColorstr='#ffe6e6e6', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ *zoom: 1;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
 2px rgba(0, 0, 0, 0.05);
-     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
+    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
 2px rgba(0, 0, 0, 0.05);
-          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
+         box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px
 2px rgba(0, 0, 0, 0.05);
-  border-color: #c5c5c5;
-  border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
+ border-color: #c5c5c5;
+ border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
 
-  margin-right: .3em;
+ margin-right: .3em;
 }
 
 .ui-datepicker button:hover,
 .ui-datepicker button:active {
-  color: #333333;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
+ color: #333333;
+ background-color: #e6e6e6;
+ *background-color: #d9d9d9;
 }
 
 .ui-datepicker button:active {
-  background-color: #cccccc;
+ background-color: #cccccc;
 }
 
 .ui-datepicker button:hover {
-  color: #333333;
-  text-decoration: none;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-  /* Buttons in IE7 don't get borders, so darken on hover */
-
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-     -moz-transition: background-position 0.1s linear;
-       -o-transition: background-position 0.1s linear;
-          transition: background-position 0.1s linear;
+ color: #333333;
+ text-decoration: none;
+ background-color: #e6e6e6;
+ *background-color: #d9d9d9;
+ /* Buttons in IE7 don't get borders, so darken on hover */
+
+ background-position: 0 -15px;
+ -webkit-transition: background-position 0.1s linear;
+    -moz-transition: background-position 0.1s linear;
+      -o-transition: background-position 0.1s linear;
+         transition: background-position 0.1s linear;
 }
 
 /* @end */
@@ -901,97 +908,97 @@ endColorstr='#ffe6e6e6', GradientType=0)
 /* @group Sticky Status */
 
 #stickyStatus {
-  position: relative;
-  background-color: white;
-  z-index: 20;
+ position: relative;
+ background-color: white;
+ z-index: 20;
 }
 
 /*  The box-shadow overhanging to the left and right are hacks only.
     We should look for a better solution for production code. */
 #stickyStatus.sticky {
-  position: fixed !important;
-  top: 0px;
-  opacity: 1;
-  background-color: rgb(93%, 93%, 93%);
-
-  padding-bottom: 10px;
-
-  border-bottom: 1px solid rgba(75%, 75%, 75%, 0.5);
-
-  -webkit-box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
-                     -20px 0px 0px rgb(93%, 93%, 93%),
-                      20px 0px 0px rgb(93%, 93%, 93%);
-     -moz-box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
-                     -20px 0px 0px rgb(93%, 93%, 93%),
-                      20px 0px 0px rgb(93%, 93%, 93%);
-          box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
-                     -20px 0px 0px rgb(93%, 93%, 93%),
-                      20px 0px 0px rgb(93%, 93%, 93%);
-
-  -webkit-transition: all 0.3s ease-out;
-     -moz-transition: all 0.3s ease-out;
-       -o-transition: all 0.3s ease-out;
-      -ms-transition: all 0.3s ease-out;
-          transition: all 0.3s ease-out;
+ position: fixed !important;
+ top: 0px;
+ opacity: 1;
+ background-color: rgb(93%, 93%, 93%);
+
+ padding-bottom: 10px;
+
+ border-bottom: 1px solid rgba(75%, 75%, 75%, 0.5);
+
+ -webkit-box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
+                    -20px 0px 0px rgb(93%, 93%, 93%),
+                     20px 0px 0px rgb(93%, 93%, 93%);
+    -moz-box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
+                    -20px 0px 0px rgb(93%, 93%, 93%),
+                     20px 0px 0px rgb(93%, 93%, 93%);
+         box-shadow:  0px 6px 5px -4px rgba(50%, 50%, 50%, 0.5),
+                    -20px 0px 0px rgb(93%, 93%, 93%),
+                     20px 0px 0px rgb(93%, 93%, 93%);
+
+ -webkit-transition: all 0.3s ease-out;
+    -moz-transition: all 0.3s ease-out;
+      -o-transition: all 0.3s ease-out;
+     -ms-transition: all 0.3s ease-out;
+         transition: all 0.3s ease-out;
 }
 
 #belowStatus {
-  position: relative;
-  margin-top: 20px;
+ position: relative;
+ margin-top: 20px;
 }
 
 .offsetSticky {
-  height: 130px;
+ height: 130px;
 }
 
 #stickyStatus h2,
 #stickyStatus ul {
-	margin-bottom: 3px;
+ margin-bottom: 3px;
 }
 
 #stickyStatus h2 {
-	line-height: 30px;
+ line-height: 30px;
 }
 
 .local-nav {
-	display: inline-block;
-	margin-left: 0;
+ display: inline-block;
+ margin-left: 0;
 }
 
 .ownership {
-	padding-left: 25px;
+ padding-left: 25px;
 }
 
 #description {
-	margin-top: 10px;
+ margin-top: 10px;
 }
 
 .comment {
-	border-top: 1px solid rgb(80%, 80%, 80%);
-	margin-bottom: 10px;
-	padding-top: 5px;
+ border-top: 1px solid rgb(80%, 80%, 80%);
+ margin-bottom: 10px;
+ padding-top: 5px;
 }
 
 .comment-meta {
-		overflow: hidden;
+ overflow: hidden;
 }
 
 .comment-meta .id,
 .comment-meta .date {
-	float: right;
-	color: #888;
-	font-size: 90%;
+ float: right;
+ color: #888;
+ font-size: 90%;
 }
 
 .comment-meta span:first-child {
-	font-weight: 700;
+ font-weight: 700;
 }
 
 .add-comment textarea {
-	height: 100px;
-	border: 1px solid #eee;
-	color: lightgray;
-	display: block;
+ height: 100px;
+ border: 1px solid #eee;
+ color: lightgray;
+ display: block;
 }
 
 /* @end */
@@ -999,24 +1006,24 @@ endColorstr='#ffe6e6e6', GradientType=0)
 /* @group Wiki Tables */
 
 table.wiki {
-  border: 1px solid #CCCCCC;
-  border-collapse: collapse;
-  border-spacing: 0;
+ border: 1px solid #CCCCCC;
+ border-collapse: collapse;
+ border-spacing: 0;
 }
 
 table.wiki td {
-  border: 1px solid #CCCCCC;
-  padding: 0.1em 0.25em;
+ border: 1px solid #CCCCCC;
+ padding: 0.1em 0.25em;
 }
 
 table.wiki th {
-  border: 1px solid #BBBBBB;
-  padding: 0.1em 0.25em;
-  background-color: #F7F7F7;
+ border: 1px solid #BBBBBB;
+ padding: 0.1em 0.25em;
+ background-color: #F7F7F7;
 }
 
 .more:before {
-  content: "... "
+ content: "... "
 }
 
 /* @end */
@@ -1024,44 +1031,72 @@ table.wiki th {
 /* @group Wiki Toolbar */
 
 .wikitoolbar {
-  margin-top: 0.3em;
-  margin-left: 2px;
-  border: solid #d7d7d7;
-  border-width: 1px 1px 1px 0;
-  height: 18px;
-  width: 234px;
+ margin-top: 0.3em;
+ margin-left: 2px;
+ border: solid #d7d7d7;
+ border-width: 1px 1px 1px 0;
+ height: 18px;
+ width: 234px;
 }
+
 .wikitoolbar :link, .wikitoolbar :visited {
-  background: transparent url(../common/edit_toolbar.png) no-repeat;
-  border: 1px solid #fff;
-  border-left-color: #d7d7d7;
-  cursor: default;
-  display: block;
-  float: left;
-  width: 24px;
-  height: 16px;
+ background: transparent url(../common/edit_toolbar.png) no-repeat;
+ border: 1px solid #fff;
+ border-left-color: #d7d7d7;
+ cursor: default;
+ display: block;
+ float: left;
+ width: 24px;
+ height: 16px;
 }
+
 .wikitoolbar :link:hover, .wikitoolbar :visited:hover {
-  background-color: transparent;
-  border: 1px solid #fb2;
+ background-color: transparent;
+ border: 1px solid #fb2;
+}
+
+.wikitoolbar a#em {
+ background-position: 0 0
+}
+
+.wikitoolbar a#strong {
+ background-position: 0 -16px
+}
+
+.wikitoolbar a#heading {
+ background-position: 0 -32px
+}
+
+.wikitoolbar a#link {
+ background-position: 0 -48px
+}
+
+.wikitoolbar a#code {
+ background-position: 0 -64px
+}
+
+.wikitoolbar a#hr {
+ background-position: 0 -80px
+}
+
+.wikitoolbar a#np {
+ background-position: 0 -96px
+}
+
+.wikitoolbar a#br {
+ background-position: 0 -112px
+}
+
+.wikitoolbar a#img {
+ background-position: 0 -128px
 }
-.wikitoolbar a#em { background-position: 0 0 }
-.wikitoolbar a#strong { background-position: 0 -16px }
-.wikitoolbar a#heading { background-position: 0 -32px }
-.wikitoolbar a#link { background-position: 0 -48px }
-.wikitoolbar a#code { background-position: 0 -64px }
-.wikitoolbar a#hr { background-position: 0 -80px }
-.wikitoolbar a#np { background-position: 0 -96px }
-.wikitoolbar a#br { background-position: 0 -112px }
-.wikitoolbar a#img { background-position: 0 -128px }
 
 /* @end */
 
 /* @group Version control */
 
 .log .age {
-  white-space: nowrap;
+ white-space: nowrap;
 }
 
 /* @end */
-

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_language.html
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_language.html?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_language.html (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_language.html Fri Mar 15 12:23:52 2013
@@ -1,3 +1,22 @@
+<!--!
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_userinterface.html
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_userinterface.html?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_userinterface.html (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_prefs_userinterface.html Fri Mar 15 12:23:52 2013
@@ -1,3 +1,22 @@
+<!--!
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_timeline.html
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_timeline.html?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_timeline.html (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/templates/bh_timeline.html Fri Mar 15 12:23:52 2013
@@ -1,3 +1,22 @@
+<!--!
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/theme.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/theme.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/theme.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_theme/bhtheme/theme.py Fri Mar 15 12:23:52 2013
@@ -139,6 +139,7 @@ class BloodhoundTheme(ThemeBase):
 
         # Account manager plugin
         'login.html' : ('bh_login.html', None),
+        'prefs_account.html' : ('bh_prefs_account.html', None),
     }
     BOOTSTRAP_CSS_DEFAULTS = (
         # ('XPath expression', ['default', 'bootstrap', 'css', 'classes'])
@@ -147,16 +148,21 @@ class BloodhoundTheme(ThemeBase):
     )
     
     labels_application_short = Option('labels', 'application_short', 
-        'Bloodhound')
+        'Bloodhound', """A short version of application name most commonly 
+        displayed in text, titles and labels""")
 
     labels_application_full = Option('labels', 'application_full', 
-        'Apache Bloodhound')
+        'Apache Bloodhound', """This is full name with trade mark and 
+        everything, it is currently used in footers and about page only""")
     
-    labels_footer_left_prefix = Option('labels', 'footer_left_prefix', '')
+    labels_footer_left_prefix = Option('labels', 'footer_left_prefix', '', 
+        """Text to display before full application name in footers""")
 
-    labels_footer_left_postfix = Option('labels', 'footer_left_postfix', '')
+    labels_footer_left_postfix = Option('labels', 'footer_left_postfix', '', 
+        """Text to display after full application name in footers""")
     
-    labels_footer_right = Option('labels', 'footer_right', '')
+    labels_footer_right = Option('labels', 'footer_right', '',
+        """Text to use as the right aligned footer""")
 
     is_bhsearch_default = BoolOption('bhsearch', 'is_default', False)
 

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/installer/bloodhound_setup.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/installer/bloodhound_setup.py?rev=1456928&r1=1456927&r2=1456928&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/installer/bloodhound_setup.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/installer/bloodhound_setup.py Fri Mar 15 12:23:52 2013
@@ -243,9 +243,12 @@ class BloodhoundSetup(object):
         # final upgrade
         print "Running upgrades"
         bloodhound.onecmd('upgrade')
-        pages =  pkg_resources.resource_filename('bhdashboard',
-                                                 'default-pages')
-        bloodhound.onecmd('wiki load %s' % pages)
+        pages = []
+        pages.append(pkg_resources.resource_filename('bhdashboard',
+                                                 'default-pages'))
+        pages.append(pkg_resources.resource_filename('bhsearch',
+                                                 'default-pages'))
+        bloodhound.onecmd('wiki load %s' % " ".join(pages))
 
         print "Running wiki upgrades"
         bloodhound.onecmd('wiki upgrade')

Propchange: incubator/bloodhound/branches/bep_0003_multiproduct/trac/
------------------------------------------------------------------------------
  Merged /incubator/bloodhound/trunk/trac:r1456016-1456923



Mime
View raw message