You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by rj...@apache.org on 2014/11/14 12:06:31 UTC

svn commit: r1639602 [13/14] - in /bloodhound/vendor/trac/current: ./ contrib/workflow/ doc/dev/ sample-plugins/ sample-plugins/permissions/ sample-plugins/workflow/ trac/ trac/admin/ trac/admin/templates/ trac/admin/tests/ trac/db/ trac/db/tests/ trac...

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSearch
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSearch?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSearch (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSearch Fri Nov 14 11:06:23 2014
@@ -16,7 +16,8 @@ For example:
  * ![42] -- Opens change set 42
  * !#42 -- Opens ticket number 42
  * !{1} -- Opens report 1
- * /trunk -- Opens the browser for the `trunk` directory
+ * /trunk -- Opens the browser for the `trunk` directory in the default repository
+ * /repos1/trunk -- Opens the browser for the `trunk` directory in the `repos1` repository
 
 == Advanced ==
 

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracStandalone
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracStandalone?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracStandalone (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracStandalone Fri Nov 14 11:06:23 2014
@@ -13,7 +13,7 @@ It can be used in a variety of situation
 
  * Fewer features: Tracd implements a very simple web-server and is not as configurable or as scalable as Apache httpd.
  * No native HTTPS support: [http://www.rickk.com/sslwrap/ sslwrap] can be used instead,
-   or [http://trac.edgewall.org/wiki/STunnelTracd stunnel -- a tutorial on how to use stunnel with tracd] or Apache with mod_proxy.
+   or [trac:wiki:STunnelTracd stunnel -- a tutorial on how to use stunnel with tracd] or Apache with mod_proxy.
 
 == Usage examples ==
 
@@ -21,7 +21,7 @@ A single project on port 8080. (http://l
 {{{
  $ tracd -p 8080 /path/to/project
 }}}
-Stricly speaking this will make your Trac accessible to everybody from your network rather than ''localhost only''. To truly limit it use ''--hostname'' option.
+Strictly speaking this will make your Trac accessible to everybody from your network rather than ''localhost only''. To truly limit it use ''--hostname'' option.
 {{{
  $ tracd --hostname=localhost -p 8080 /path/to/project
 }}}
@@ -95,6 +95,8 @@ $ net start tracd
 
 Tracd allows you to run Trac without the need for Apache, but you can take advantage of Apache's password tools (htpasswd and htdigest) to easily create a password file in the proper format for tracd to use in authentication. (It is also possible to create the password file without htpasswd or htdigest; see below for alternatives)
 
+Make sure you place the generated password files on a filesystem which supports sub-second timestamps, as Trac will monitor their modified time and changes happening on a filesystem with too coarse-grained timestamp resolution (like `ext2` or `ext3` on Linux) may go undetected.
+
 Tracd provides support for both Basic and Digest authentication. Digest is considered more secure. The examples below use Digest; to use Basic authentication, replace `--auth` with `--basic-auth` in the command line.
 
 The general format for using authentication is:

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSyntaxColoring
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSyntaxColoring?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSyntaxColoring (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracSyntaxColoring Fri Nov 14 11:06:23 2014
@@ -6,8 +6,8 @@ To do this, Trac uses external libraries
 Currently Trac supports syntax coloring using one or more of the following packages:
 
  * [http://pygments.pocoo.org/ Pygments], by far the preferred system, as it covers a wide range of programming languages and other structured texts and is actively supported
- * [http://www.codento.com/people/mtr/genscript/ GNU Enscript], commonly available on Unix but somewhat unsupported on Windows
- * [http://silvercity.sourceforge.net/ SilverCity], legacy system, some versions can be [http://trac.edgewall.org/wiki/TracFaq#why-is-my-css-code-not-being-highlighted-even-though-i-have-silvercity-installed problematic]
+ * [http://www.codento.com/people/mtr/genscript/ GNU Enscript], commonly available on Unix but somewhat unsupported on Windows //(use is deprecated)//
+ * [http://silvercity.sourceforge.net/ SilverCity], legacy system, some versions can be problematic //(use is deprecated)//
 
 
 To activate syntax coloring, simply install either one (or more) of these packages (see [#ExtraSoftware] section below).
@@ -16,7 +16,7 @@ If none of these packages is available, 
 
 === About Pygments ===
 
-Starting with trac 0.11 [http://pygments.org/ pygments] will be the new default highlighter. It's a highlighting library implemented in pure python, very fast, easy to extend and [http://pygments.org/docs/ well documented].
+Since Trac 0.11 [http://pygments.org/ pygments] is the new default highlighter. It's a highlighting library implemented in pure python, very fast, easy to extend and [http://pygments.org/docs/ well documented].
 
 The Pygments default style can specified in the [TracIni#mimeviewer-section mime-viewer] section of trac.ini. The default style can be overridden by setting a Style preference on the [/prefs/pygments preferences page]. 
 
@@ -35,7 +35,7 @@ In a similar way, a document with the mi
 
 HTML documents are directly rendered only if the `render_unsafe_html` settings are enabled in the TracIni (those settings are present in multiple sections, as there are different security concerns depending where the document comes from). If you want to ensure that an HTML document gets syntax highlighted and not rendered, use the `text/xml` mimetype.
 
-If mimetype such as 'svn:mime-type' is set to 'text/plain', there is no coloring even if file is known type like 'java'.
+If a mimetype property such as 'svn:mime-type' is set to 'text/plain', there is no coloring even if file is known type like 'java'.
 
 === List of Languages Supported, by Highlighter #language-supported
 

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTickets
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTickets?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTickets (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTickets Fri Nov 14 11:06:23 2014
@@ -27,7 +27,7 @@ A  ticket contains the following informa
  * '''Assigned to/Owner''' — Principal person responsible for handling the issue.
  * '''Cc''' — A comma-separated list of other users or E-Mail addresses to notify. ''Note that this does not imply responsiblity or any other policy.''
  * '''Resolution''' — Reason for why a ticket was closed. One of {{{fixed}}}, {{{invalid}}}, {{{wontfix}}}, {{{duplicate}}}, {{{worksforme}}}.
- * '''Status''' — What is the current status? One of {{{new}}}, {{{assigned}}}, {{{closed}}}, {{{reopened}}}.
+ * '''Status''' — What is the current status? One of {{{new}}}, {{{assigned}}}, {{{accepted}}}, {{{closed}}}, {{{reopened}}}.
  * '''Summary''' — A brief description summarizing the problem or issue. Simple text without WikiFormatting.
  * '''Description''' — The body of the ticket. A good description should be specific, descriptive and to the point. Accepts WikiFormatting.
 

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTicketsCustomFields
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTicketsCustomFields?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTicketsCustomFields (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracTicketsCustomFields Fri Nov 14 11:06:23 2014
@@ -39,11 +39,13 @@ The example below should help to explain
  * '''textarea''': Multi-line text area.
    * label: Descriptive label.
    * value: Default text.
-   * cols: Width in columns.
+   * cols: Width in columns
    * rows: Height in lines.
    * order: Sort order placement.
    * format: Either `plain` for plain text or `wiki` to interpret the content as WikiFormatting. (''since 0.11.3'')
 
+Macros will be expanded when rendering `textarea` fields with format `wiki`, but not when rendering `text` fields with format `wiki`.
+
 === Sample Config ===
 {{{
 [ticket-custom]
@@ -113,6 +115,14 @@ SELECT p.value AS __color__,
 
 Note in particular the `LEFT OUTER JOIN` statement here.
 
+Note that if your config file uses an uppercase name, e.g.,
+{{{
+[ticket-custom]
+
+Progress_Type = text
+}}}
+you would use lowercase in the SQL:  `AND c.name = 'progress_type'`
+
 === Updating the database ===
 
 As noted above, any tickets created before a custom field has been defined will not have a value for that field. Here's a bit of SQL (tested with SQLite) that you can run directly on the Trac database to set an initial value for custom ticket fields. Inserts the default value of 'None' into a custom field called 'request_source' for all tickets that have no existing value:

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracUpgrade
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracUpgrade?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracUpgrade (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracUpgrade Fri Nov 14 11:06:23 2014
@@ -14,10 +14,10 @@ It is not a good idea to update a runnin
 
 Get the new version as described in TracInstall, or your operating system specific procedure.
 
-If you already have a 0.11 version of Trac installed via `easy_install`, it might be easiest to also use `easy_install` to upgrade your Trac installation:
+If you already have a 0.12 version of Trac installed via `easy_install`, it might be easiest to also use `easy_install` to upgrade your Trac installation:
 
 {{{
-# easy_install --upgrade Trac==0.12
+# easy_install --upgrade Trac==1.0
 }}}
 
 If you do a manual (not operating system-specific) upgrade, you should also stop any running Trac servers before the installation. Doing "hot" upgrades is not advised, especially on Windows ([trac:#7265]).
@@ -73,8 +73,13 @@ Remove above note once #9936 is fixed.
 }}}
 
 === 6. Steps specific to a given Trac version  ===
+
 ==== Upgrading from Trac 0.12 to Trac 1.0 ==== #to1.0
 
+===== Python 2.4 no longer supported =====
+The minimum supported version of python is now 2.5
+
+===== Subversion components not enabled by default for new installations
 The Trac components for Subversion support are no longer enabled by default. To enable the svn support, you need to make sure the `tracopt.versioncontrol.svn` components are enabled, for example by setting the following in the TracIni:
 {{{
 [components]
@@ -82,8 +87,13 @@ tracopt.versioncontrol.svn.* = enabled
 }}}
 The upgrade procedure should take care of this and change the TracIni appropriately, unless you already had the svn components explicitly disabled.
 
+
+===== Attachments migrated to new location
 Another step in the automatic upgrade will change the way the attachments are stored. If you're a bit paranoid, you might want to take a backup of the `attachments` directory before upgrading (but if you are, you already did a full copy of the environment, no?). In case the `attachments` directory contains some files which are //not// attachments, the last step of the migration to the new layout will fail: the deletion of the now unused `attachments` directory can't be done if there are still files and folders in it. You may ignore this error, but better go have a look to these files, move them elsewhere and remove the `attachments` directory manually to cleanup the environment. The attachments themselves are now all located in your environment below the `files/attachments` directory.
 
+===== Behavior of `[ticket] default_owner` changed
+Prior to 1.0, the owner field of new tickets always defaulted to `[ticket] default_owner` when the value was not empty. If the value was empty, the owner field defaulted to to the Component's owner. In 1.0 and later, the `default_owner` must be set to `< default >` to make new tickets default to the Component's owner. This change allows the `default_owner` to be set to an empty value if no default owner is desired.
+
 
 ==== Upgrading from Trac 0.11 to Trac 0.12 ====
 
@@ -103,7 +113,7 @@ This may be of interest to users with on
 
 ===== Resynchronize the Trac Environment Against the Source Code Repository =====
 
-Each [TracEnvironment Trac environment] must be resynchronized against the source code repository in order to avoid errors such as "[http://trac.edgewall.org/ticket/6120 No changeset ??? in the repository]" while browsing the source through the Trac interface:
+Each [TracEnvironment Trac environment] must be resynchronized against the source code repository in order to avoid errors such as "[trac:#6120 No changeset ??? in the repository]" while browsing the source through the Trac interface:
 
 {{{
 trac-admin /path/to/projenv repository resync '*'
@@ -182,9 +192,8 @@ Upgrading Python to a newer version will
 If you've been using !CollabNet's Subversion package, you may need to uninstall that in favor of [http://alagazam.net/ Alagazam], which has the Python bindings readily available (see TracSubversion).  The good news is, that works with no tweaking.
 
 === Changing Database Backend ===
-==== SQLite to PostgreSQL ====
 
-The [http://trac-hacks.org/wiki/SqliteToPgScript sqlite2pg] script on [http://trac-hacks.org trac-hacks.org] has been written to assist in migrating a SQLite database to a PostgreSQL database
+The [http://trac-hacks.org/wiki/TracMigratePlugin TracMigratePlugin] on [http://trac-hacks.org trac-hacks.org] has been written to assist in migrating between SQLite, MySQL and PostgreSQL databases.
 
 === Upgrading from older versions of Trac === #OlderVersions
 

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWiki
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWiki?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWiki (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWiki Fri Nov 14 11:06:23 2014
@@ -14,7 +14,7 @@ As contributing to a wiki is essentially
 general advice regarding HTML authoring apply here as well.
 For example, the ''[http://www.w3.org/Provider/Style Style Guide for online hypertext]'' explains how to think about the
 [http://www.w3.org/Provider/Style/Structure.html overall structure of a work] 
-and how to organize information [http://www.w3.org/Provider/Style/WithinDocument.html within each document]. One of the most important tip is “make your HTML page such that you can read it even if you don't follow any links.”
+and how to organize information [http://www.w3.org/Provider/Style/WithinDocument.html within each document]. One of the most important tips is “make your HTML page such that you can read it even if you don't follow any links.”
 
 Learn more about:
  * WikiFormatting rules, including advanced topics like WikiMacros and WikiProcessors

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWorkflow
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWorkflow?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWorkflow (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/TracWorkflow Fri Nov 14 11:06:23 2014
@@ -1,7 +1,7 @@
 = The Trac Ticket Workflow System =
 [[TracGuideToc]]
 
-The Trac issue database provides a configurable workflow.
+The Trac ticket system provides a configurable workflow.
 
 == The Default Ticket Workflow ==
 === Environments upgraded from 0.10 ===
@@ -58,7 +58,7 @@ reopen.operations = del_resolution
 
 There are several example workflows provided in the Trac source tree; look in [trac:source:trunk/contrib/workflow contrib/workflow] for `.ini` config sections.  One of those may be a good match for what you want. They can be pasted into the `[ticket-workflow]` section of your `trac.ini` file. However if you have existing tickets then there may be issues if those tickets have states that are not in the new workflow. 
 
-Here are some [http://trac.edgewall.org/wiki/WorkFlow/Examples diagrams] of the above examples.
+Here are some [trac:WorkFlow/Examples diagrams] of the above examples.
 
 == Basic Ticket Workflow Customization ==
 
@@ -67,7 +67,7 @@ Note: Ticket "statuses" or "states" are 
 Create a `[ticket-workflow]` section in `trac.ini`.
 Within this section, each entry is an action that may be taken on a ticket. 
 For example, consider the `accept` action from `simple-workflow.ini`:
-{{{
+{{{#!ini
 accept = new,accepted -> accepted
 accept.permissions = TICKET_MODIFY
 accept.operations = set_owner_to_self
@@ -77,34 +77,34 @@ The `accept.permissions` line specifies 
 The `accept.operations` line specifies changes that will be made to the ticket in addition to the status change when this action is taken.  In this case, when a user clicks on `accept`, the ticket owner field is updated to the logged in user.  Multiple operations may be specified in a comma separated list.
 
 The available operations are:
- - del_owner -- Clear the owner field.
- - set_owner -- Sets the owner to the selected or entered owner.
-   - ''actionname''`.set_owner` may optionally be set to a comma delimited list or a single value.
- - set_owner_to_self -- Sets the owner to the logged in user.
- - del_resolution -- Clears the resolution field
- - set_resolution -- Sets the resolution to the selected value.
-   - ''actionname''`.set_resolution` may optionally be set to a comma delimited list or a single value. Example:
-     {{{
+- **del_owner** -- Clear the owner field.
+- **set_owner** -- Sets the owner to the selected or entered owner. Defaults to the current user. When `[ticket] restrict_owner = true`, the select will be populated with users that have `TICKET_MODIFY` permission and an authenticated session.
+ - ''actionname''`.set_owner` may optionally be set to a comma delimited list of users that will be used to populate the select, or a single user.
+- **set_owner_to_self** -- Sets the owner to the logged in user.
+- **del_resolution** -- Clears the resolution field
+- **set_resolution** -- Sets the resolution to the selected value.
+ - ''actionname''`.set_resolution` may optionally be set to a comma delimited list or a single value. Example:
+ {{{#!ini
 resolve_new = new -> closed
 resolve_new.name = resolve
 resolve_new.operations = set_resolution
 resolve_new.permissions = TICKET_MODIFY
 resolve_new.set_resolution = invalid,wontfix
-     }}}
- - leave_status -- Displays "leave as <current status>" and makes no change to the ticket.
+}}}
+- **leave_status** -- Displays "leave as <current status>" and makes no change to the ticket.
 '''Note:''' Specifying conflicting operations (such as `set_owner` and `del_owner`) has unspecified results.
 
-{{{
+In this example, we see the `.name` attribute used.  The action here is `resolve_accepted`, but it will be presented to the user as `resolve`.
+
+{{{#!ini
 resolve_accepted = accepted -> closed
 resolve_accepted.name = resolve
 resolve_accepted.permissions = TICKET_MODIFY
 resolve_accepted.operations = set_resolution
 }}}
 
-In this example, we see the `.name` attribute used.  The action here is `resolve_accepted`, but it will be presented to the user as `resolve`.
-
 For actions that should be available in all states, `*` may be used in place of the state.  The obvious example is the `leave` action:
-{{{
+{{{#!ini
 leave = * -> *
 leave.operations = leave_status
 leave.default = 1
@@ -114,24 +114,22 @@ If not specified for an action, `.defaul
 
 There are a couple of hard-coded constraints to the workflow.  In particular, tickets are created with status `new`, and tickets are expected to have a `closed` state.  Further, the default reports/queries treat any state other than `closed` as an open state.
 
-While creating or modifying a ticket workflow, `contrib/workflow/workflow_parser.py` may be useful.  It can create `.dot` files that [http://www.graphviz.org GraphViz] understands to provide a visual description of the workflow.
+Workflows can be visualized by rendering them on the wiki using the [WikiMacros#Workflow-macro Workflow macro].
 
-This can be done as follows (your install path may be different).
-{{{
+Workflows can also be visualized using the `contrib/workflow/workflow_parser.py` script.  The script outputs `.dot` files that [http://www.graphviz.org GraphViz] understands. The script can be used as follows (your install path may be different):
+{{{#!sh
 cd /var/local/trac_devel/contrib/workflow/
 sudo ./showworkflow /srv/trac/PlannerSuite/conf/trac.ini
 }}}
 And then open up the resulting `trac.pdf` file created by the script (it will be in the same directory as the `trac.ini` file).
 
-An online copy of the workflow parser is available at http://foss.wush.net/cgi-bin/visual-workflow.pl
-
 After you have changed a workflow, you need to restart apache for the changes to take effect. This is important, because the changes will still show up when you run your script, but all the old workflow steps will still be there until the server is restarted.
 
 == Example: Adding optional Testing with Workflow ==
 
 By adding the following to your [ticket-workflow] section of trac.ini you get optional testing.  When the ticket is in new, accepted or needs_work status you can choose to submit it for testing.  When it's in the testing status the user gets the option to reject it and send it back to needs_work, or pass the testing and send it along to closed.  If they accept it then it gets automatically marked as closed and the resolution is set to fixed.  Since all the old work flow remains, a ticket can skip this entire section.
 
-{{{
+{{{#!ini
 testing = new,accepted,needs_work,assigned,reopened -> testing
 testing.name = Submit to reporter for testing
 testing.permissions = TICKET_MODIFY
@@ -161,7 +159,7 @@ Sometimes Trac is used in situations whe
 
 The new `reviewing` state along with its associated `review` action looks like this:
 
-{{{
+{{{#!ini
 review = new,assigned,reopened -> reviewing
 review.operations = set_owner
 review.permissions = TICKET_MODIFY
@@ -169,7 +167,7 @@ review.permissions = TICKET_MODIFY
 
 Then, to integrate this with the default Trac 0.11 workflow, you also need to add the `reviewing` state to the `accept` and `resolve` actions, like so:
 
-{{{
+{{{#!ini
 accept = new,reviewing -> assigned
 […]
 resolve = new,assigned,reopened,reviewing -> closed
@@ -177,7 +175,7 @@ resolve = new,assigned,reopened,reviewin
 
 Optionally, you can also add a new action that allows you to change the ticket's owner without moving the ticket out of the `reviewing` state. This enables you to reassign review work without pushing the ticket back to the `new` status.
 
-{{{
+{{{#!ini
 reassign_reviewing = reviewing -> *
 reassign_reviewing.name = reassign review
 reassign_reviewing.operations = set_owner
@@ -186,7 +184,7 @@ reassign_reviewing.permissions = TICKET_
 
 The full `[ticket-workflow]` configuration will thus look like this:
 
-{{{
+{{{#!ini
 [ticket-workflow]
 accept = new,reviewing -> assigned
 accept.operations = set_owner_to_self
@@ -214,9 +212,9 @@ reassign_reviewing.permissions = TICKET_
 
 == Example: Limit the resolution options for a new ticket ==
 
-The above resolve_new operation allows you to set the possible resolutions for a new ticket.  By modifying the existing resolve action and removing the new status from before the `->` we then get two resolve actions.  One with limited resolutions for new tickets, and then the regular one once a ticket is accepted.
+The above `resolve_new` operation allows you to set the possible resolutions for a new ticket.  By modifying the existing resolve action and removing the new status from before the `->` we then get two resolve actions.  One with limited resolutions for new tickets, and then the regular one once a ticket is accepted.
 
-{{{
+{{{#!ini
 resolve_new = new -> closed
 resolve_new.name = resolve
 resolve_new.operations = set_resolution
@@ -238,32 +236,6 @@ But if even that is not enough, you can 
 
 If you add additional states to your workflow, you may want to customize your milestone progress bars as well.  See [TracIni#milestone-groups-section TracIni].
 
-== some ideas for next steps ==
-
-New enhancement ideas for the workflow system should be filed as enhancement tickets against the `ticket system` component.  If desired, add a single-line link to that ticket here.  Also look at the [http://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin AdvancedTicketWorkflowPlugin] as it provides experimental operations.
-
-If you have a response to the comments below, create an enhancement ticket, and replace the description below with a link to the ticket.
-
- * the "operation" could be on the nodes, possible operations are:
-   * '''preops''': automatic, before entering the state/activity
-   * '''postops''': automatic, when leaving the state/activity
-   * '''actions''': can be chosen by the owner in the list at the bottom, and/or drop-down/pop-up together with the default actions of leaving the node on one of the arrows.
-''This appears to add complexity without adding functionality; please provide a detailed example where these additions allow something currently impossible to implement.''
-
- * operations could be anything: sum up the time used for the activity, or just write some statistical fields like 
-''A workflow plugin can add an arbitrary workflow operation, so this is already possible.''
-
- * set_actor should be an operation allowing to set the owner, e.g. as a "preop":
-   * either to a role, a person
-   * entered fix at define time, or at run time, e.g. out of a field, or select.
-''This is either duplicating the existing `set_owner` operation, or needs to be clarified.''
-
- * Actions should be selectable based on the ticket type (different Workflows for different tickets)
-''Look into the [http://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin AdvancedTicketWorkflowPlugin]'s `triage` operation.''
-
- * I'd wish to have an option to perform automatic status changes. In my case, I do not want to start with "new", but with "assigned". So tickets in state "new" should automatically go into state "assigned". Or is there already a way to do this and I just missed it?
-''Have a look at [http://trac-hacks.org/wiki/TicketCreationStatusPlugin TicketCreationStatusPlugin] and [http://trac-hacks.org/wiki/TicketConditionalCreationStatusPlugin TicketConditionalCreationStatusPlugin]''
-
- * I added a 'testing' state. A tester can close the ticket or reject it. I'd like the transition from testing to rejected to set the owner to the person that put the ticket in 'testing'. The [http://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin AdvancedTicketWorkflowPlugin] is close with set_owner_to_field, but we need something like set_field_to_owner.
+== Ideas for next steps ==
 
- * I'd like to track the time a ticket is in each state, adding up 'disjoints' intervals in the same state.
+New enhancement ideas for the workflow system should be filed as enhancement tickets against the `ticket system` component.  You can also document ideas on the [trac:TracIdeas/TracWorkflow TracIdeas/TracWorkflow] page.  Also look at the [http://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin AdvancedTicketWorkflowPlugin] as it provides experimental operations.

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiFormatting
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiFormatting?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiFormatting (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiFormatting Fri Nov 14 11:06:23 2014
@@ -263,6 +263,7 @@ The Trac wiki supports the following fon
    * ,,subscript,,
    * **also bold**, //italic as well//, 
      and **'' bold italic **'' //(since 0.12)//
+   * [[span(style=color: #FF0000, a red text )]]
   }}}
 }}}
 {{{#!td
@@ -280,6 +281,7 @@ The Trac wiki supports the following fon
  * ,,subscript,,
  * **also bold**, //italic as well//, 
    and **'' bold italic **'' //(since 0.12)//
+ * [[span(style=color: #FF0000, a red text )]]
 }}}
 
 Notes:
@@ -736,9 +738,9 @@ You may avoid making hyperlinks out of T
   }}}
   {{{
 Various forms of escaping for list markup:
- `-` escaped minus sign \\
- ``1. escaped number  \\
- {{{*}}} escaped asterisk sign
+ ^^- escaped minus sign \\
+ ^^1. escaped number  \\
+ ^^* escaped asterisk sign
   }}}
 }}}
 {{{#!td
@@ -746,9 +748,9 @@ Various forms of escaping for list marku
  !#42 is not a link
 
 Various forms of escaping for list markup:
- `-` escaped minus sign \\
- ``1. escaped number  \\
- {{{*}}} escaped asterisk sign
+ ^^- escaped minus sign \\
+ ^^1. escaped number  \\
+ ^^* escaped asterisk sign
 }}}
 
 == Images ==
@@ -1004,4 +1006,3 @@ See?
 {{{#!td
 !WikiCreole style \\ line\\break
 }}}
-

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiMacros
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiMacros?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiMacros (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiMacros Fri Nov 14 11:06:23 2014
@@ -101,7 +101,7 @@ class TimeStampMacro(WikiMacroBase):
 
     def expand_macro(self, formatter, name, text):
         t = datetime.now(utc)
-        return tag.b(format_datetime(t, '%c'))
+        return tag.strong(format_datetime(t, '%c'))
 }}}
 
 === Macro with arguments ===

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiNewPage
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiNewPage?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiNewPage (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiNewPage Fri Nov 14 11:06:23 2014
@@ -3,14 +3,14 @@
 
 Note: make sure you actually have the rights to edit wiki pages. If you don't see the **Edit this page** button, read the information relative to the editing policy for your Trac installation (usually on the front page WikiStart), or contact your local Trac administrator.
 
+You can create a new wiki page by typing the CamelCase name of the page in the quick-search field at the top of the page, or by trying to view a wiki page of that name (That is by visiting http://trac.edgewall.org/wiki/MyNewWikiPage for example). But note that the page will effectively be "orphaned" unless you link to it from somewhere else. Alternatively:
+
  1. Choose a name for your new page. See WikiPageNames for naming conventions.
  2. Edit an existing page (or any other resources that support WikiFormatting and add a [TracLinks link] to your new page. Save your changes.
  3. Follow the link you created to take you to the new page. Trac will display a "describe !PageName here" message.
  4. Click the "Edit this page" button to edit and add content to your new page. Save your changes.
  5. All done. Your new page is published.
 
-You can skip the second step by entering the CamelCase name of the page in the quick-search field at the top of the page. But note that the page will effectively be "orphaned" unless you link to it from somewhere else.
-
 == Rename a page #renaming
 
 While picking up good WikiPageNames is important, you can always change your mind

Modified: bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiProcessors
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiProcessors?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiProcessors (original)
+++ bloodhound/vendor/trac/current/trac/wiki/default-pages/WikiProcessors Fri Nov 14 11:06:23 2014
@@ -155,8 +155,9 @@ The following processors are included in
 
 || '''`#!default`''' || Present the text verbatim in a preformatted text block. This is the same as specifying ''no'' processor name (and no `#!`) ||
 || '''`#!comment`''' || Do not process the text in this section (i.e. contents exist only in the plain text - not in the rendered page). ||
+|| '''`#!rtl`''' || Introduce a Right-To-Left block with appropriate CSS direction and styling ''(since 0.12.2)'' ||
 |||| ||
-||||= '''HTML related''' =||
+||||= '''[=#HTMLrelated HTML related]''' =||
 || '''`#!html`''' || Insert custom HTML in a wiki page. ||
 || '''`#!htmlcomment`''' || Insert an HTML comment in a wiki page (''since 0.12''). ||
 || || Note that `#!html` blocks have to be ''self-contained'', i.e. you can't start an HTML element in one block and close it later in a second block. Use the following processors for achieving a similar effect.  ||
@@ -164,14 +165,15 @@ The following processors are included in
 || '''`#!span`''' || Wrap an arbitrary Wiki content inside a <span> element (''since 0.11''). ||
 || '''`#!td`''' || Wrap an arbitrary Wiki content inside a <td> element (''since 0.12'') ||
 || '''`#!th`''' || Wrap an arbitrary Wiki content inside a <th> element (''since 0.12'') ||
-|| '''`#!tr`''' || Can optionally be used for wrapping `#!td` and `#!th` blocks, either for specifying row attributes of better visual grouping (''since 0.12'') ||
+|| '''`#!tr`''' || Can optionally be used for wrapping `#!td` and `#!th` blocks, either for specifying row attributes or better visual grouping (''since 0.12'') ||
+|| '''`#!table`''' || Can optionally be used for wrapping `#!tr`, `#!td` and `#!th` blocks, for specifying table attributes. One current limitation however is that tables cannot be nested. (''since 0.12'') || 
 || || See WikiHtml for example usage and more details about these processors. ||
 |||| ||
 ||||= '''Other Markups''' =||
 || '''`#!rst`''' || Trac support for Restructured Text. See WikiRestructuredText. ||
 || '''`#!textile`''' || Supported if [http://cheeseshop.python.org/pypi/textile Textile] is installed. See [http://www.textism.com/tools/textile/ a Textile reference]. ||
 |||| ||
-||||= '''Code Highlighting Support''' =||
+||||= '''[=#CodeHighlightingSupport Code Highlighting Support]''' =||
 || '''`#!c`''' [[BR]] '''`#!cpp`''' (C++) [[BR]] '''`#!python`''' [[BR]] '''`#!perl`''' [[BR]] '''`#!ruby`''' [[BR]] '''`#!php`''' [[BR]] '''`#!asp`''' [[BR]] '''`#!java`''' [[BR]] '''`#!js`''' (Javascript) [[BR]] '''`#!sql`''' [[BR]] '''`#!xml`''' (XML or HTML) [[BR]] '''`#!sh`''' (!Bourne/Bash shell) [[BR]] '''etc.''' [[BR]] || Trac includes processors to provide inline syntax highlighting for source code in various languages. [[BR]] [[BR]] Trac relies on external software packages for syntax coloring, like [http://pygments.org Pygments]. [[BR]] [[BR]] See TracSyntaxColoring for information about which languages are supported and how to enable support for more languages. ||
 |||| ||
 

Modified: bloodhound/vendor/trac/current/trac/wiki/formatter.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/formatter.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/formatter.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/formatter.py Fri Nov 14 11:06:23 2014
@@ -35,7 +35,7 @@ from trac.util import arity
 from trac.util.text import exception_to_unicode, shorten_line, to_unicode, \
                            unicode_quote, unicode_quote_plus, unquote_label
 from trac.util.html import TracHTMLSanitizer
-from trac.util.translation import _
+from trac.util.translation import _, tag_
 from trac.wiki.api import WikiSystem, parse_args
 from trac.wiki.parser import WikiParser, parse_processor_args
 
@@ -186,7 +186,8 @@ class WikiProcessor(object):
                     self.processor = self._mimeview_processor
         if not self.processor:
             self.processor = self._default_processor
-            self.error = "No macro or processor named '%s' found" % name
+            self.error = _("No macro or processor named '%(name)s' found",
+                           name=name)
 
     # inline checks
 
@@ -350,8 +351,8 @@ class WikiProcessor(object):
 
     def process(self, text, in_paragraph=False):
         if self.error:
-            text = system_message(tag('Error: Failed to load processor ',
-                                      tag.code(self.name)),
+            text = system_message(tag_("Error: Failed to load processor "
+                                       "%(name)s", name=tag.code(self.name)),
                                   self.error)
         else:
             text = self.processor(text)
@@ -492,21 +493,42 @@ class Formatter(object):
 
     def _indirect_tag_handler(self, match, tag):
         """Handle binary inline style tags (indirect way, 0.12)"""
+        if self._list_stack and not self.in_list_item:
+            self.close_list()
+
         if self.tag_open_p(tag):
             return self.close_tag(tag)
         else:
             return self.open_tag(tag)
 
     def _bolditalic_formatter(self, match, fullmatch):
+        if self._list_stack and not self.in_list_item:
+            self.close_list()
+
+        bold_open = self.tag_open_p('MM_BOLD')
         italic_open = self.tag_open_p('MM_ITALIC')
-        tmp = ''
-        if italic_open:
-            tmp += self._get_close_tag('MM_ITALIC')
-            self.close_tag('MM_ITALIC')
-        tmp += self._bold_formatter(match, fullmatch)
-        if not italic_open:
-            tmp += self.open_tag('MM_ITALIC')
-        return tmp
+        if bold_open and italic_open:
+            bold_idx = self._open_tags.index('MM_BOLD')
+            italic_idx = self._open_tags.index('MM_ITALIC')
+            if italic_idx < bold_idx:
+                close_tags = ('MM_BOLD', 'MM_ITALIC')
+            else:
+                close_tags = ('MM_ITALIC', 'MM_BOLD')
+            open_tags = ()
+        elif bold_open:
+            close_tags = ('MM_BOLD',)
+            open_tags = ('MM_ITALIC',)
+        elif italic_open:
+            close_tags = ('MM_ITALIC',)
+            open_tags = ('MM_BOLD',)
+        else:
+            close_tags = ()
+            open_tags = ('MM_BOLD', 'MM_ITALIC')
+
+        tmp = []
+        tmp.extend(self.close_tag(tag) for tag in close_tags)
+        tmp.extend(self.open_tag(tag) for tag in open_tags)
+        return ''.join(tmp)
 
     def _bold_formatter(self, match, fullmatch):
         return self._indirect_tag_handler(match, 'MM_BOLD')
@@ -767,8 +789,8 @@ class Formatter(object):
         except Exception, e:
             self.env.log.error('Macro %s(%s) failed:%s', name, args,
                                exception_to_unicode(e, traceback=True))
-            return system_message('Error: Macro %s(%s) failed' % (name, args),
-                                  to_unicode(e))
+            return system_message(_("Error: Macro %(name)s(%(args)s) failed",
+                                    name=name, args=args), to_unicode(e))
 
     # Headings
 
@@ -1132,7 +1154,8 @@ class Formatter(object):
                                          for l in self.code_buf]
                     self.code_buf.append('')
                 code_text = os.linesep.join(self.code_buf)
-                processed = self.code_processor.process(code_text)
+                processed = self._exec_processor(self.code_processor,
+                                                 code_text)
                 self.out.write(_markup_to_unicode(processed))
             else:
                 self.code_buf.append(line)
@@ -1153,6 +1176,15 @@ class Formatter(object):
         while self.in_code_block > 0:
             self.handle_code_block(WikiParser.ENDBLOCK)
 
+    def _exec_processor(self, processor, text):
+        try:
+            return processor.process(text)
+        except Exception, e:
+            self.env.log.error('Processor %s failed:%s', processor.name,
+                               exception_to_unicode(e, traceback=True))
+            return system_message(_("Error: Processor %(name)s failed",
+                                    name=processor.name), to_unicode(e))
+
     # > quotes
 
     def handle_quote_block(self, line):

Modified: bloodhound/vendor/trac/current/trac/wiki/intertrac.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/intertrac.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/intertrac.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/intertrac.py Fri Nov 14 11:06:23 2014
@@ -21,7 +21,7 @@ from genshi.builder import Element, Frag
 from trac.config import ConfigSection
 from trac.core import *
 from trac.util.html import find_element
-from trac.util.translation import _, N_
+from trac.util.translation import N_, _, tag_
 from trac.web.api import IRequestHandler
 from trac.wiki.api import IWikiMacroProvider
 from trac.wiki.formatter import extract_link
@@ -52,7 +52,7 @@ class InterTracDispatcher(Component):
            it doesn't know how to dispatch an InterTrac link, and it's up to
            the local Trac to prepare the correct link. Not all links will work
            that way, but the most common do. This is called the compatibility
-           mode, and is `true` by default.
+           mode, and is `false` by default.
          * If you know that the remote Trac knows how to dispatch InterTrac
            links, you can explicitly disable this compatibility mode and then
            ''any'' TracLinks can become InterTrac links.
@@ -123,16 +123,18 @@ class InterTracDispatcher(Component):
         def generate_prefix(prefix):
             intertrac = intertracs[prefix]
             if isinstance(intertrac, basestring):
-                yield tag.tr(tag.td(tag.b(prefix)),
-                             tag.td('Alias for ', tag.b(intertrac)))
+                yield tag.tr(tag.td(tag.strong(prefix)),
+                             tag.td(tag_("Alias for %(name)s",
+                                         name=tag.strong(intertrac))))
             else:
                 url = intertrac.get('url', '')
                 if url:
                     title = intertrac.get('title', url)
-                    yield tag.tr(tag.td(tag.a(tag.b(prefix),
+                    yield tag.tr(tag.td(tag.a(tag.strong(prefix),
                                               href=url + '/timeline')),
                                  tag.td(tag.a(title, href=url)))
 
         return tag.table(class_="wiki intertrac")(
-            tag.tr(tag.th(tag.em('Prefix')), tag.th(tag.em('Trac Site'))),
+            tag.tr(tag.th(tag.em(_("Prefix"))),
+                   tag.th(tag.em(_("Trac Site")))),
             [generate_prefix(p) for p in sorted(intertracs.keys())])

Modified: bloodhound/vendor/trac/current/trac/wiki/interwiki.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/interwiki.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/interwiki.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/interwiki.py Fri Nov 14 11:06:23 2014
@@ -172,8 +172,8 @@ class InterWikiMap(Component):
                 'rc_url': self._expand_or_append(url, ['RecentChanges']),
                 'description': url if title == prefix else title})
 
-        return tag.table(tag.tr(tag.th(tag.em("Prefix")),
-                                tag.th(tag.em("Site"))),
+        return tag.table(tag.tr(tag.th(tag.em(_("Prefix"))),
+                                tag.th(tag.em(_("Site")))),
                          [tag.tr(tag.td(tag.a(w['prefix'], href=w['rc_url'])),
                                  tag.td(tag.a(w['description'],
                                               href=w['url'])))

Modified: bloodhound/vendor/trac/current/trac/wiki/macros.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/macros.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/macros.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/macros.py Fri Nov 14 11:06:23 2014
@@ -14,6 +14,8 @@
 #
 # Author: Christopher Lenz <cm...@gmx.de>
 
+from __future__ import with_statement
+
 from fnmatch import fnmatchcase
 from itertools import groupby
 import inspect
@@ -327,8 +329,9 @@ class RecentChangesMacro(WikiMacroBase):
                         max(time) AS max_time FROM wiki"""
         args = []
         if prefix:
-            sql += " WHERE name LIKE %s"
-            args.append(prefix + '%')
+            with self.env.db_query as db:
+                sql += " WHERE name %s" % db.prefix_match()
+                args.append(db.prefix_match_value(prefix))
         sql += " GROUP BY name ORDER BY max_time DESC"
         if limit:
             sql += " LIMIT %s"
@@ -355,8 +358,9 @@ class RecentChangesMacro(WikiMacroBase):
 
         items_per_date = (
             (date, (tag.li(tag.a(page, href=formatter.href.wiki(name)),
-                           tag.small(' (', tag.a('diff', href=diff_href), ')')
-                           if diff_href else None, '\n')
+                           tag.small(' (', tag.a(_("diff"), href=diff_href),
+                                     ')') if diff_href else None,
+                           '\n')
                     for page, name, version, diff_href in entries))
             for date, entries in entries_per_date)
 

Modified: bloodhound/vendor/trac/current/trac/wiki/model.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/model.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/model.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/model.py Fri Nov 14 11:06:23 2014
@@ -39,7 +39,7 @@ class WikiPage(object):
             name = self.resource.id
         else:
             if version:
-                version = int(version) # must be a number or None
+                version = int(version)  # must be a number or None
             self.resource = Resource('wiki', name, version)
         self.name = name
         if name:
@@ -167,7 +167,7 @@ class WikiPage(object):
     def rename(self, new_name):
         """Rename wiki page in-place, keeping the history intact.
         Renaming a page this way will eventually leave dangling references
-        to the old page - which litterally doesn't exist anymore.
+        to the old page - which literally doesn't exist anymore.
         """
         if not self.exists:
             raise TracError(_("Cannot rename non-existent page"))
@@ -192,7 +192,7 @@ class WikiPage(object):
                                     new_name)
 
         self.name = self.resource.id = new_name
-        self.env.log.info('Renamed page %s to %s', old_name, new_name)
+        self.env.log.info("Renamed page %s to %s", old_name, new_name)
 
         for listener in WikiSystem(self.env).change_listeners:
             if hasattr(listener, 'wiki_page_renamed'):

Modified: bloodhound/vendor/trac/current/trac/wiki/parser.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/parser.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/parser.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/parser.py Fri Nov 14 11:06:23 2014
@@ -23,6 +23,7 @@ import re
 from trac.core import *
 from trac.notification import EMAIL_LOOKALIKE_PATTERN
 
+
 class WikiParser(Component):
     """Wiki text parser."""
 

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_delete.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_delete.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_delete.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_delete.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2006-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_diff.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_diff.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_diff.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_diff.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2006-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2006-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -128,7 +138,7 @@
         <py:if test="not sidebyside"><xi:include href="wiki_edit_form.html" /></py:if>
         <div py:if="merge" class="system-message">
           <p>Someone else has modified that page since you started your edits.</p><br />
-          <p i18n:msg=""><b>If you save right away, you risk to revert those changes</b>
+          <p i18n:msg=""><strong>If you save right away, you risk to revert those changes</strong>
             (highlighted below as deletions).</p><br />
           <p i18n:msg="">Please review all those changes and manually merge them with your
             own changes. <br />

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit_form.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit_form.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit_form.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_edit_form.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2009-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -26,13 +36,13 @@
         </label>
         <input type="checkbox" name="sidebyside" id="sidebyside" checked="$sidebyside" />
       </div>
-      <p><textarea id="text" class="${classes('wikitext', 'trac-autofocus',
+      <p><textarea id="text" class="${classes('wikitext', 'trac-autofocus', 'trac-fullwidth',
                                               'trac-resizable' if not sidebyside else None)}"
                    name="text" cols="80" rows="$edit_rows">
 $page.text</textarea>
       </p>
       <div id="help" i18n:msg="">
-        <b>Note:</b> See <a href="${href.wiki('WikiFormatting')}">WikiFormatting</a> and
+        <strong>Note:</strong> See <a href="${href.wiki('WikiFormatting')}">WikiFormatting</a> and
         <a href="${href.wiki('TracWiki')}">TracWiki</a> for help on editing wiki content.
       </div>
     </fieldset>

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_page_path.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_page_path.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_page_path.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_page_path.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2010-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <div xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/"
      xmlns:i18n="http://genshi.edgewall.org/i18n"

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_rename.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_rename.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_rename.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_rename.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2010-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
@@ -15,22 +25,22 @@
       <h1 i18n:msg="name">Rename <a href="$current_href">$page.name</a></h1>
       <form id="rename-form" action="$current_href" method="post">
         <p>
-          <input type="hidden" name="action" value="rename"/>
-          <strong>Renaming the page will rename all existing versions of the page in place.</strong><br/>
+          <input type="hidden" name="action" value="rename" />
+          <strong>Renaming the page will rename all existing versions of the page in place.</strong><br />
           The complete history of the page will be moved to the new location.
         </p>
         <div class="field">
-          <label>New name: <input type="text" name="new_name" class="trac-autofocus" size="40" value="$new_name"/></label>
+          <label>New name: <input type="text" name="new_name" class="trac-autofocus" size="40" value="$new_name" /></label>
         </div>
         <div class="field">
           <label>
-            <input type="checkbox" id="redirect" name="redirect"/>
+            <input type="checkbox" id="redirect" name="redirect" />
             Leave a redirection page at the old location
           </label>
         </div>
         <div class="buttons">
-          <input type="submit" name="submit" class="trac-disable-on-submit" value="${_('Rename page')}"/>
-          <input type="submit" name="cancel" value="${_('Cancel')}"/>
+          <input type="submit" name="submit" class="trac-disable-on-submit" value="${_('Rename page')}" />
+          <input type="submit" name="cancel" value="${_('Cancel')}" />
         </div>
       </form>
     </div>

Modified: bloodhound/vendor/trac/current/trac/wiki/templates/wiki_view.html
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/templates/wiki_view.html?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/templates/wiki_view.html (original)
+++ bloodhound/vendor/trac/current/trac/wiki/templates/wiki_view.html Fri Nov 14 11:06:23 2014
@@ -1,3 +1,13 @@
+<!--!  Copyright (C) 2006-2014 Edgewall Software
+
+  This software is licensed as described in the file COPYING, which
+  you should have received as part of this distribution. The terms
+  are also available at http://trac.edgewall.com/license.html.
+
+  This software consists of voluntary contributions made by many
+  individuals. For the exact contribution history, see the revision
+  history and logs, available at http://trac.edgewall.org/.
+-->
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Modified: bloodhound/vendor/trac/current/trac/wiki/tests/formatter.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/tests/formatter.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/tests/formatter.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/tests/formatter.py Fri Nov 14 11:06:23 2014
@@ -147,6 +147,7 @@ class WikiTestCase(unittest.TestCase):
         self._teardown = teardown
 
         req = Mock(href=Href('/'), abs_href=Href('http://www.example.com/'),
+                   chrome={}, session={},
                    authname='anonymous', perm=MockPerm(), tz=utc, args={},
                    locale=locale_en, lc_time=locale_en)
         if context:

Modified: bloodhound/vendor/trac/current/trac/wiki/tests/functional.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/tests/functional.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/tests/functional.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/tests/functional.py Fri Nov 14 11:06:23 2014
@@ -14,7 +14,7 @@
 
 from trac.tests.functional import *
 from trac.mimeview.rst import has_docutils
-from trac.util import get_pkginfo
+from trac.util import create_file, get_pkginfo
 
 try:
     from configobj import ConfigObj
@@ -47,6 +47,51 @@ class TestWikiAddAttachment(FunctionalTw
                 'href="/zip-attachment/wiki/%s/">.zip</a>' % name)
 
 
+class TestWikiPageManipulator(FunctionalTwillTestCaseSetup):
+    def runTest(self):
+        plugin_name = self.__class__.__name__
+        env = self._testenv.get_trac_environment()
+        env.config.set('components', plugin_name + '.*', 'enabled')
+        env.config.save()
+        create_file(os.path.join(env.path, 'plugins', plugin_name + '.py'),
+"""\
+from genshi.builder import tag
+from trac.core import Component, implements
+from trac.util.translation import tag_
+from trac.wiki.api import IWikiPageManipulator
+
+
+class WikiPageManipulator(Component):
+    implements(IWikiPageManipulator)
+
+    def prepare_wiki_page(self, req, page, fields):
+        pass
+
+    def validate_wiki_page(self, req, page):
+        field = 'comment'
+        yield None, tag_("The page contains invalid markup at"
+                         " line %(number)s.", number=tag.strong('10'))
+        yield field, tag_("The field %(field)s cannot be empty.",
+                          field=tag.strong(field))
+""")
+        self._testenv.restart()
+
+        try:
+            self._tester.go_to_front()
+            tc.follow("Wiki")
+            tc.formvalue('modifypage', 'action', 'edit')
+            tc.submit()
+            tc.submit('save', 'edit')
+            tc.url(self._tester.url + '/wiki/WikiStart$')
+            tc.find("Invalid Wiki page: The page contains invalid markup at"
+                    " line <strong>10</strong>.")
+            tc.find("The Wiki page field 'comment' is invalid:"
+                    " The field <strong>comment</strong> cannot be empty.")
+        finally:
+            env.config.set('components', plugin_name + '.*', 'disabled')
+            env.config.save()
+
+
 class TestWikiHistory(FunctionalTwillTestCaseSetup):
     """Create wiki page and navigate to page history."""
     def runTest(self):
@@ -60,6 +105,14 @@ class TestWikiHistory(FunctionalTwillTes
                         % {'pagename': pagename}
         tc.find(version_link % {'version': 1})
         tc.find(version_link % {'version': 2})
+        tc.formvalue('history', 'old_version', '1')
+        tc.formvalue('history', 'version', '2')
+        tc.submit()
+        tc.url(r'%s/wiki/%s\?action=diff&version=2&old_version=1'
+               % (self._tester.url, pagename))
+        tc.find(r'<a href="/wiki/%s\?version=1">Version 1</a>' % pagename)
+        tc.find(r'<a href="/wiki/%s\?version=2">Version 2</a>' % pagename)
+        tc.find(r'<a href="/wiki/%(name)s">%(name)s</a>' % {'name': pagename})
 
 
 class TestWikiRename(FunctionalTwillTestCaseSetup):
@@ -348,12 +401,26 @@ class RegressionTestTicket11302(Function
                 r' href="/wiki/%s\?version=1#point1">@1</a>' % pagename)
 
 
+class RegressionTestTicket11518(FunctionalTwillTestCaseSetup):
+    def runTest(self):
+        """Test for regression of http://trac.edgewall.org/ticket/11518
+        ResourceNotFound should be raised when version is invalid.
+        """
+        tc.go(self._tester.url + '/wiki/WikiStart?version=1abc')
+        tc.find(r"<h1>Trac Error</h1>")
+        tc.find('No version "1abc" for Wiki page "WikiStart')
+        tc.go(self._tester.url + '/wiki/WikiStart?version=')
+        tc.find(r"<h1>Trac Error</h1>")
+        tc.find('No version "" for Wiki page "WikiStart')
+
+
 def functionalSuite(suite=None):
     if not suite:
         import trac.tests.functional
         suite = trac.tests.functional.functionalSuite()
     suite.addTest(TestWiki())
     suite.addTest(TestWikiAddAttachment())
+    suite.addTest(TestWikiPageManipulator())
     suite.addTest(TestWikiHistory())
     suite.addTest(TestWikiRename())
     suite.addTest(RegressionTestTicket4812())
@@ -361,6 +428,7 @@ def functionalSuite(suite=None):
     suite.addTest(RegressionTestTicket10850())
     suite.addTest(RegressionTestTicket10957())
     suite.addTest(RegressionTestTicket11302())
+    suite.addTest(RegressionTestTicket11518())
     if has_docutils:
         import docutils
         if get_pkginfo(docutils):

Modified: bloodhound/vendor/trac/current/trac/wiki/tests/model.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/tests/model.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/tests/model.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/tests/model.py Fri Nov 14 11:06:23 2014
@@ -19,10 +19,11 @@ from StringIO import StringIO
 import tempfile
 import unittest
 
+import trac.tests.compat
 from trac.attachment import Attachment
 from trac.core import *
+from trac.resource import Resource
 from trac.test import EnvironmentStub
-from trac.tests import compat
 from trac.util.datefmt import utc, to_utimestamp
 from trac.wiki import WikiPage, IWikiChangeListener
 
@@ -99,6 +100,11 @@ class WikiPageTestCase(unittest.TestCase
 
         page = WikiPage(self.env, 'TestPage', 1)
         self.assertEqual(1, page.resource.version)
+        self.assertEqual(1, page.version)
+
+        resource = Resource('wiki', 'TestPage')
+        page = WikiPage(self.env, resource, 1)
+        self.assertEqual(1, page.version)
 
     def test_create_page(self):
         page = WikiPage(self.env)
@@ -276,6 +282,23 @@ class WikiPageTestCase(unittest.TestCase
             page = WikiPage(self.env, 'TestPage')
             self.assertRaises(TracError, page.rename, name)
 
+    def test_invalid_version(self):
+        data = (1, 42, 'joe', '::1', 'Bla bla', 'Testing', 0)
+        self.env.db_transaction(
+            "INSERT INTO wiki VALUES(%s,%s,%s,%s,%s,%s,%s,%s)",
+            ('TestPage',) + data)
+
+        self.assertRaises(ValueError, WikiPage, self.env,
+                          'TestPage', '1abc')
+
+        resource = Resource('wiki', 'TestPage')
+        self.assertRaises(ValueError, WikiPage, self.env,
+                          resource, '1abc')
+
+        resource = Resource('wiki', 'TestPage', '1abc')
+        page = WikiPage(self.env, resource)
+        self.assertEqual(1, page.version)
+
 
 def suite():
     return unittest.makeSuite(WikiPageTestCase)

Modified: bloodhound/vendor/trac/current/trac/wiki/tests/wiki-tests.txt
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/tests/wiki-tests.txt?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/tests/wiki-tests.txt (original)
+++ bloodhound/vendor/trac/current/trac/wiki/tests/wiki-tests.txt Fri Nov 14 11:06:23 2014
@@ -1183,16 +1183,24 @@ Inline  comment
 </p>
 ------------------------------
 ============================== Exception with utf-8 bytes
+{{{#!ValueErrorWithUtf8
+Érrör
+}}}
 [[ValueErrorWithUtf8(érrör)]]
 ------------------------------
-<p>
+<div class="system-message"><strong>Error: Processor ValueErrorWithUtf8 failed</strong><pre>Érrör
+</pre></div><p>
 <div class="system-message"><strong>Error: Macro ValueErrorWithUtf8(érrör) failed</strong><pre>érrör</pre></div>
 </p>
 ------------------------------
 ============================== TracError with unicode
+{{{#!TracErrorWithUnicode
+Érrör
+}}}
 [[TracErrorWithUnicode(érrör)]]
 ------------------------------
-<p>
+<div class="system-message"><strong>Error: Processor TracErrorWithUnicode failed</strong><pre>Érrör
+</pre></div><p>
 <div class="system-message"><strong>Error: Macro TracErrorWithUnicode(érrör) failed</strong><pre>érrör</pre></div>
 </p>
 ------------------------------
@@ -2592,3 +2600,96 @@ c
 ------------------------------
  […]
 &gt; c
+============================== List immediately followed by binary inline markup, #11009
+***
+* list
+***
+------------------------------
+<p>
+<strong>*
+</strong></p>
+<ul><li>list
+</li></ul><p>
+<strong>*
+</strong></p>
+------------------------------
+============================== List immediately followed by binary inline markup 1, #11373
+ 1. normal in list
+''italic
+in paragraph
+
+ 1. normal in list
+//italic
+in paragraph
+------------------------------
+<ol><li>normal in list
+</li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+<ol><li>normal in list
+</li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+------------------------------
+============================== List immediately followed by binary inline markup 2, #11373
+ 1. //italic in list
+''italic
+in paragraph
+
+ 1. ''italic in list
+//italic
+in paragraph
+
+1. ''italic in list
+''italic
+in paragraph
+
+1. //italic in list
+//italic
+in paragraph
+------------------------------
+<ol><li><em>italic in list
+</em></li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+<ol><li><em>italic in list
+</em></li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+<ol><li><em>italic in list
+</em></li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+<ol><li><em>italic in list
+</em></li></ol><p>
+<em>italic
+in paragraph
+</em></p>
+------------------------------
+============================== List immediately followed by binary inline markup 3, #11373
+ 1. ''italic in list
+'''''bolditalic
+in paragraph'''''
+------------------------------
+<ol><li><em>italic in list
+</em></li></ol><p>
+<strong><em>bolditalic
+in paragraph</em></strong>
+</p>
+------------------------------
+============================== List immediately followed by binary inline markup 4, #11373
+ 1. '''bold in list
+'''''bolditalic
+in paragraph'''''
+------------------------------
+<ol><li><strong>bold in list
+</strong></li></ol><p>
+<strong><em>bolditalic
+in paragraph</em></strong>
+</p>
+------------------------------

Modified: bloodhound/vendor/trac/current/trac/wiki/tests/wikisyntax.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/tests/wikisyntax.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/tests/wikisyntax.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/tests/wikisyntax.py Fri Nov 14 11:06:23 2014
@@ -18,6 +18,7 @@ from trac.util.datefmt import utc
 from trac.wiki.model import WikiPage
 from trac.wiki.tests import formatter
 
+
 TEST_CASES = u"""
 ============================== wiki: link resolver
 wiki:TestPage

Modified: bloodhound/vendor/trac/current/trac/wiki/web_ui.py
URL: http://svn.apache.org/viewvc/bloodhound/vendor/trac/current/trac/wiki/web_ui.py?rev=1639602&r1=1639601&r2=1639602&view=diff
==============================================================================
--- bloodhound/vendor/trac/current/trac/wiki/web_ui.py (original)
+++ bloodhound/vendor/trac/current/trac/wiki/web_ui.py Fri Nov 14 11:06:23 2014
@@ -37,10 +37,10 @@ from trac.util.text import shorten_line
 from trac.util.translation import _, tag_
 from trac.versioncontrol.diff import get_diff_options, diff_blocks
 from trac.web.api import IRequestHandler
-from trac.web.chrome import (Chrome, INavigationContributor, ITemplateProvider,
-                             add_ctxtnav, add_link, add_notice, add_script,
-                             add_stylesheet, add_warning, prevnext_nav,
-                             web_context)
+from trac.web.chrome import (Chrome, INavigationContributor,
+                             ITemplateProvider, add_ctxtnav, add_link,
+                             add_notice, add_script, add_stylesheet,
+                             add_warning, prevnext_nav, web_context)
 from trac.wiki.api import IWikiPageManipulator, WikiSystem, validate_page_name
 from trac.wiki.formatter import format_to, OneLinerFormatter
 from trac.wiki.model import WikiPage
@@ -55,9 +55,9 @@ class InvalidWikiPage(TracError):
 
 class WikiModule(Component):
 
-    implements(IContentConverter, INavigationContributor, IPermissionRequestor,
-               IRequestHandler, ITimelineEventProvider, ISearchSource,
-               ITemplateProvider)
+    implements(IContentConverter, INavigationContributor,
+               IPermissionRequestor, IRequestHandler, ITimelineEventProvider,
+               ISearchSource, ITemplateProvider)
 
     page_manipulators = ExtensionPoint(IWikiPageManipulator)
 
@@ -70,8 +70,8 @@ class WikiModule(Component):
     # IContentConverter methods
 
     def get_supported_conversions(self):
-        yield ('txt', _('Plain Text'), 'txt', 'text/x-trac-wiki', 'text/plain',
-               9)
+        yield ('txt', _("Plain Text"), 'txt', 'text/x-trac-wiki',
+               'text/plain', 9)
 
     def convert_content(self, req, mimetype, content, key):
         return content, 'text/plain;charset=utf-8'
@@ -120,6 +120,14 @@ class WikiModule(Component):
             raise TracError(_("Invalid Wiki page name '%(name)s'",
                               name=pagename))
 
+        if version is not None:
+            try:
+                version = int(version)
+            except (ValueError, TypeError):
+                raise ResourceNotFound(
+                    _('No version "%(num)s" for Wiki page "%(name)s"',
+                      num=version, name=pagename))
+
         page = WikiPage(self.env, pagename)
         versioned_page = WikiPage(self.env, pagename, version=version)
 
@@ -147,7 +155,8 @@ class WikiModule(Component):
                 if action == 'edit' and not has_collision and valid:
                     return self._do_save(req, versioned_page)
                 else:
-                    return self._render_editor(req, page, action, has_collision)
+                    return self._render_editor(req, page, action,
+                                               has_collision)
             elif action == 'delete':
                 self._do_delete(req, versioned_page)
             elif action == 'rename':
@@ -192,8 +201,8 @@ class WikiModule(Component):
 
         # Validate page size
         if len(req.args.get('text', '')) > self.max_size:
-            add_warning(req, _('The wiki page is too long (must be less '
-                               'than %(num)s characters)',
+            add_warning(req, _("The wiki page is too long (must be less "
+                               "than %(num)s characters)",
                                num=self.max_size))
             valid = False
 
@@ -202,12 +211,12 @@ class WikiModule(Component):
             for field, message in manipulator.validate_wiki_page(req, page):
                 valid = False
                 if field:
-                    add_warning(req, _("The Wiki page field '%(field)s' is "
-                                       "invalid: %(message)s",
-                                       field=field, message=message))
+                    add_warning(req, tag_("The Wiki page field '%(field)s'"
+                                          " is invalid: %(message)s",
+                                          field=field, message=message))
                 else:
-                    add_warning(req, _("Invalid Wiki page: %(message)s",
-                                       message=message))
+                    add_warning(req, tag_("Invalid Wiki page: %(message)s",
+                                          message=message))
         return valid
 
     def _page_data(self, req, page, action=''):
@@ -233,9 +242,10 @@ class WikiModule(Component):
         def version_info(v, last=0):
             return {'path': get_resource_name(self.env, page.resource),
                     # TRANSLATOR: wiki page
-                    'rev': v or _('currently edited'),
+                    'rev': v or _("currently edited"),
                     'shortrev': v or last + 1,
-                    'href': req.href.wiki(page.name, version=v) if v else None}
+                    'href': req.href.wiki(page.name, version=v)
+                            if v else None}
         changes = [{'diffs': diffs, 'props': [],
                     'new': version_info(new_version, old_version),
                     'old': version_info(old_version)}]
@@ -271,12 +281,12 @@ class WikiModule(Component):
             req.redirect(req.href.wiki())
         else:
             if version and old_version and version > old_version + 1:
-                add_notice(req, _('The versions %(from_)d to %(to)d of the '
-                                  'page %(name)s have been deleted.',
+                add_notice(req, _("The versions %(from_)d to %(to)d of the "
+                                  "page %(name)s have been deleted.",
                            from_=old_version + 1, to=version, name=page.name))
             else:
-                add_notice(req, _('The version %(version)d of the page '
-                                  '%(name)s has been deleted.',
+                add_notice(req, _("The version %(version)d of the page "
+                                  "%(name)s has been deleted.",
                                   version=version, name=page.name))
             req.redirect(req.href.wiki(page.name))
 
@@ -402,8 +412,8 @@ class WikiModule(Component):
 
     def _render_diff(self, req, page):
         if not page.exists:
-            raise TracError(_('Version %(num)s of page "%(name)s" does not '
-                              'exist',
+            raise TracError(_("Version %(num)s of page \"%(name)s\" does not "
+                              "exist",
                               num=req.args.get('version'), name=page.name))
 
         old_version = req.args.get('old_version')
@@ -454,13 +464,13 @@ class WikiModule(Component):
         if prev_version:
             add_link(req, 'prev', req.href.wiki(page.name, action='diff',
                                                 version=prev_version),
-                     _('Version %(num)s', num=prev_version))
+                     _("Version %(num)s", num=prev_version))
         add_link(req, 'up', req.href.wiki(page.name, action='history'),
                  _('Page history'))
         if next_version:
             add_link(req, 'next', req.href.wiki(page.name, action='diff',
                                                 version=next_version),
-                     _('Version %(num)s', num=next_version))
+                     _("Version %(num)s", num=next_version))
 
         data = self._page_data(req, page, 'diff')
         data.update({
@@ -473,8 +483,8 @@ class WikiModule(Component):
             'changes': changes,
             'diff': diff_data,
         })
-        prevnext_nav(req, _('Previous Change'), _('Next Change'),
-                     _('Wiki History'))
+        prevnext_nav(req, _("Previous Change"), _("Next Change"),
+                     _("Wiki History"))
         return 'wiki_diff.html', data, None
 
     def _render_editor(self, req, page, action='edit', has_collision=False):
@@ -541,7 +551,8 @@ class WikiModule(Component):
             'context': context,
             'author': author,
             'comment': comment,
-            'edit_rows': editrows, 'sidebyside': sidebyside,
+            'edit_rows': editrows,
+            'sidebyside': sidebyside,
             'scroll_bar_pos': req.args.get('scroll_bar_pos', ''),
             'diff': None,
             'attachments': AttachmentModule(self.env).attachment_data(context),
@@ -593,14 +604,10 @@ class WikiModule(Component):
 
         # Add registered converters
         if page.exists:
-            for conversion in Mimeview(self.env).get_supported_conversions(
-                                                 'text/x-trac-wiki'):
+            for conversion in Mimeview(self.env) \
+                              .get_supported_conversions('text/x-trac-wiki'):
                 conversion_href = req.href.wiki(page.name, version=version,
                                                 format=conversion[0])
-                # or...
-                conversion_href = get_resource_url(self.env, page.resource,
-                                                   req.href,
-                                                   format=conversion[0])
                 add_link(req, 'alternate', conversion_href, conversion[1],
                          conversion[3])
 
@@ -613,7 +620,7 @@ class WikiModule(Component):
         higher, related = [], []
         if not page.exists:
             if 'WIKI_CREATE' not in req.perm(page.resource):
-                raise ResourceNotFound(_('Page %(name)s not found',
+                raise ResourceNotFound(_("Page %(name)s not found",
                                          name=page.name))
             formatter = OneLinerFormatter(self.env, context)
             if '/' in page.name:
@@ -622,7 +629,7 @@ class WikiModule(Component):
                     name = '/'.join(parts[:i] + [parts[-1]])
                     if not ws.has_page(name):
                         higher.append(ws._format_link(formatter, 'wiki',
-                                                    '/' + name, name, False))
+                                                      '/' + name, name, False))
             else:
                 name = page.name
             name = name.lower()
@@ -661,12 +668,12 @@ class WikiModule(Component):
         if prev_version:
             add_link(req, 'prev',
                      req.href.wiki(page.name, version=prev_version),
-                     _('Version %(num)s', num=prev_version))
+                     _("Version %(num)s", num=prev_version))
 
         parent = None
         if version:
             add_link(req, 'up', req.href.wiki(page.name, version=None),
-                     _('View latest version'))
+                     _("View latest version"))
         elif '/' in page.name:
             parent = page.name[:page.name.rindex('/')]
             add_link(req, 'up', req.href.wiki(parent, version=None),
@@ -679,8 +686,8 @@ class WikiModule(Component):
 
         # Add ctxtnav entries
         if version:
-            prevnext_nav(req, _('Previous Version'), _('Next Version'),
-                         _('View Latest Version'))
+            prevnext_nav(req, _("Previous Version"), _("Next Version"),
+                         _("View Latest Version"))
         else:
             if parent:
                 add_ctxtnav(req, _('Up'), req.href.wiki(parent))
@@ -708,10 +715,10 @@ class WikiModule(Component):
 
     def _wiki_ctxtnav(self, req, page):
         """Add the normal wiki ctxtnav entries."""
-        add_ctxtnav(req, _('Start Page'), req.href.wiki('WikiStart'))
-        add_ctxtnav(req, _('Index'), req.href.wiki('TitleIndex'))
+        add_ctxtnav(req, _("Start Page"), req.href.wiki('WikiStart'))
+        add_ctxtnav(req, _("Index"), req.href.wiki('TitleIndex'))
         if page.exists:
-            add_ctxtnav(req, _('History'), req.href.wiki(page.name,
+            add_ctxtnav(req, _("History"), req.href.wiki(page.name,
                                                          action='history'))
 
     # ITimelineEventProvider methods
@@ -745,9 +752,9 @@ class WikiModule(Component):
         elif field == 'title':
             name = tag.em(get_resource_name(self.env, wiki_page))
             if wiki_page.version > 1:
-                return tag_('%(page)s edited', page=name)
+                return tag_("%(page)s edited", page=name)
             else:
-                return tag_('%(page)s created', page=name)
+                return tag_("%(page)s created", page=name)
         elif field == 'description':
             markup = format_to(self.env, None,
                                context.child(resource=wiki_page), comment)
@@ -755,7 +762,7 @@ class WikiModule(Component):
                 diff_href = context.href.wiki(
                     wiki_page.id, version=wiki_page.version, action='diff')
                 markup = tag(markup,
-                             ' (', tag.a(_('diff'), href=diff_href), ')')
+                             " (", tag.a(_("diff"), href=diff_href), ")")
             return markup
 
     # ISearchSource methods