Commits

Anonymous committed 9d021b9

No more ugly tabs.

  • Participants
  • Parent commits 6497576
  • Branches trunk

Comments (0)

Files changed (17)

-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                            Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+                    GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-			    NO WARRANTY
+                            NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+                     END OF TERMS AND CONDITIONS
 
-	    How to Apply These Terms to Your New Programs
+            How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it
 recursive-include htdocs *
 recursive-include doc *
 recursive-include wiki-default *
-recursive-include templates *.cs README
+recursive-include templates *.cs README RELEASE
 prune doc/trac-guide
 prune .svn 
 prune */.svn

File doc/trac-guide/trac-guide.xml

   <bookinfo>
     <edition>Draft</edition>
     <authorgroup>
-
+      
       <author>
-	<firstname>Daniel</firstname>
-	<surname>Lundin</surname>
-	<email>daniel@edgewall.com</email>
+        <firstname>Daniel</firstname>
+        <surname>Lundin</surname>
+        <email>daniel@edgewall.com</email>
       </author>
 
       <author>
-	<firstname>Jonas</firstname>
-	<surname>Borgstr�m</surname>
-	<email>jonas@edgewall.com</email>
+        <firstname>Jonas</firstname>
+        <surname>Borgstr�m</surname>
+        <email>jonas@edgewall.com</email>
       </author>
 
     </authorgroup>

File doc/trac-guide/trac-manual.xml

     <authorgroup>
 
       <author>
-	<firstname>Daniel</firstname>
-	<surname>Lundin</surname>
-	<email>daniel@edgewall.com</email>
+        <firstname>Daniel</firstname>
+        <surname>Lundin</surname>
+        <email>daniel@edgewall.com</email>
       </author>
 
       <author>
-	<firstname>Jonas</firstname>
-	<surname>Borgstr�m</surname>
-	<email>jonas@edgewall.com</email>
+        <firstname>Jonas</firstname>
+        <surname>Borgstr�m</surname>
+        <email>jonas@edgewall.com</email>
       </author>
 
     </authorgroup>

File htdocs/trac.js

 function view_history() {
-	var history = document.getElementById("wiki-history");
+        var history = document.getElementById("wiki-history");
         if (history) {
-		if (history.style.visibility != "visible") {
-			history.style.visibility = "visible";
-		}
-		else {
-			history.style.visibility = "hidden";
-		}
+                if (history.style.visibility != "visible") {
+                        history.style.visibility = "visible";
+                }
+                else {
+                        history.style.visibility = "hidden";
+                }
         }
 }

File scripts/trac-admin

     """Python2.1 doesn't have sum()"""
     tot = 0
     for item in list:
-	tot += item
+        tot += item
     return tot
 
 
 
     db_schema = """
 CREATE TABLE revision (
-	rev 		integer PRIMARY KEY,
-	time		integer,
-	author		text,
-	message		text
+        rev             integer PRIMARY KEY,
+        time            integer,
+        author          text,
+        message         text
 );
 CREATE TABLE node_change (
-	rev 		integer,
-	name		text,
-	change		char(1),
-	UNIQUE(rev, name, change)
+        rev             integer,
+        name            text,
+        change          char(1),
+        UNIQUE(rev, name, change)
 );
 CREATE TABLE auth_cookie (
-	cookie		text,
-	name		text,
-	ipnr		text,
-	time		integer,
-	UNIQUE(cookie, name, ipnr)
+        cookie          text,
+        name            text,
+        ipnr            text,
+        time            integer,
+        UNIQUE(cookie, name, ipnr)
 );
 CREATE TABLE enum (
-	type		text,
-	name		text,
-	value		text,
-	UNIQUE(name,type)
+        type            text,
+        name            text,
+        value           text,
+        UNIQUE(name,type)
 );
 CREATE TABLE config (
-	section		text,
-	name		text,
-	value		text,
-	UNIQUE(section, name)
+        section         text,
+        name            text,
+        value           text,
+        UNIQUE(section, name)
 );
 CREATE TABLE ticket (
-	id		integer PRIMARY KEY,
-	time		integer,	-- the time it was created
-	changetime	integer,
-	component	text,
-	severity	text,
-	priority	text,
-	owner		text,		-- who is this ticket assigned to
-	reporter	text,
-	cc		text,		-- email addresses to notify
-	url		text,		-- url related to this ticket
-	version		text,		-- 
-	milestone	text,		-- 
-	status		text,
-	resolution	text,
-	summary		text,		-- one-line summary
-	description	text		-- problem description (long)
+        id              integer PRIMARY KEY,
+        time            integer,        -- the time it was created
+        changetime      integer,
+        component       text,
+        severity        text,
+        priority        text,
+        owner           text,           -- who is this ticket assigned to
+        reporter        text,
+        cc              text,           -- email addresses to notify
+        url             text,           -- url related to this ticket
+        version         text,           -- 
+        milestone       text,           -- 
+        status          text,
+        resolution      text,
+        summary         text,           -- one-line summary
+        description     text            -- problem description (long)
 );
 CREATE TABLE ticket_change (
-	ticket		integer,
-	time		integer,
-	author		text,
-	field		text,
-	oldvalue	text,
-	newvalue	text
+        ticket          integer,
+        time            integer,
+        author          text,
+        field           text,
+        oldvalue        text,
+        newvalue        text
 );
 CREATE TABLE report (
-	id		integer PRIMARY KEY,
-	author		text,
-	title		text,
-	sql		text
+        id              integer PRIMARY KEY,
+        author          text,
+        title           text,
+        sql             text
 );
 CREATE TABLE permission (
-	user		text,		-- 
-	action		text		-- allowable activity
+        user            text,           -- 
+        action          text            -- allowable activity
 );
 CREATE TABLE component (
-	 name		 text PRIMARY KEY,
-	 owner		 text
+         name            text PRIMARY KEY,
+         owner           text
 );
 CREATE TABLE milestone (
-	 name		 text PRIMARY KEY,
-	 time		 integer
+         name            text PRIMARY KEY,
+         time            integer
 );
 CREATE TABLE version (
-	 name		 text PRIMARY KEY,
-	 time		 integer
+         name            text PRIMARY KEY,
+         time            integer
 );
 CREATE TABLE wiki (
-	 name		 text,
-	 version		 integer,
-	 time		 integer,
-	 author		 text,
-	 ipnr		 text,
-	 locked		 integer,
-	 text		 text,
-	 UNIQUE(name,version)
+         name            text,
+         version                 integer,
+         time            integer,
+         author          text,
+         ipnr            text,
+         locked          integer,
+         text            text,
+         UNIQUE(name,version)
 );
 CREATE INDEX node_change_idx ON node_change(rev);
-CREATE INDEX ticket_change_idx	ON ticket_change(ticket, time);
-CREATE INDEX wiki_idx		ON wiki(name,version);
+CREATE INDEX ticket_change_idx  ON ticket_change(ticket, time);
+CREATE INDEX wiki_idx           ON wiki(name,version);
 """
 
     # Default data for database
 
     def run(self):
         self.interactive = 1
-        print 'Welcome to trac-admin %(ver)s\n' 			\
-              'Interactive Trac adminstration console.\n' 		\
-              '%(copy)s\n\n' 					\
-              "Type:  '?' or 'help' for help on commands.\n" % 	\
+        print 'Welcome to trac-admin %(ver)s\n'                         \
+              'Interactive Trac adminstration console.\n'               \
+              '%(copy)s\n\n'                                    \
+              "Type:  '?' or 'help' for help on commands.\n" %  \
               {'ver':__version__,'copy':__copyright__}
         while 1:
             try:
         if hasattr(shlex, 'split'):
             toks = shlex.split(argstr)
         else:
-	    def my_strip(s, c):
-		"""string::strip in python2.1 doesn't support arguments"""
-		i = j = 0
-		for i in range(len(s)):
-		    if not s[i] in c:
-			break
-		for j in range(len(s), 0, -1):
-		    if not s[j-1] in c:
-			break
-		return s[i:j]
-	
-	    lexer = shlex.shlex(StringIO.StringIO(argstr))
+            def my_strip(s, c):
+                """string::strip in python2.1 doesn't support arguments"""
+                i = j = 0
+                for i in range(len(s)):
+                    if not s[i] in c:
+                        break
+                for j in range(len(s), 0, -1):
+                    if not s[j-1] in c:
+                        break
+                return s[i:j]
+        
+            lexer = shlex.shlex(StringIO.StringIO(argstr))
             lexer.wordchars = lexer.wordchars + ".,_/"
             toks = []
             while 1:

File templates/browser.cs

              <?cs var:item.created_rev ?>
            <?cs else ?>
              <a class="block-link" href="<?cs var:item.rev_href ?>">
-	       <?cs var:item.created_rev ?>
-	     </a>
+               <?cs var:item.created_rev ?>
+             </a>
            <?cs /if ?>
          </td>
          <td class="br-date-col">

File templates/changeset.cs

       <?cs each:item = changeset.changes ?>
         <li>
           <?cs if item.change == "A" ?>
-	    <span  class="chg-file-add"> </span>
+            <span  class="chg-file-add"> </span>
             <a href="<?cs var:item.log_href?>"><?cs var:item.name ?></a>
             <span class="chg-file-comment">(added)</span>
           <?cs elif item.change == "M" ?>
-	    <span  class="chg-file-mod"> </span>
+            <span  class="chg-file-mod"> </span>
             <a href="<?cs var:item.log_href?>"><?cs var:item.name ?></a>
             <span class="chg-file-comment">(modified)</span>
           <?cs elif item.change == "D" ?>
-	    <span  class="chg-file-rem"> </span>
+            <span  class="chg-file-rem"> </span>
             <?cs var:item.name ?>
-  	  <span class="chg-file-comment">(deleted)</span>
+          <span class="chg-file-comment">(deleted)</span>
           <?cs /if ?>
         </li>
       <?cs /each ?>

File templates/css.cs

 body {
-	background: #fff;
-	margin: 10px;
-	padding: 0;
-	color: #000;
-	font: normal 12px 'Bitstream Vera Sans', Verdana, Helvetica, Arial, sans-serif;
+        background: #fff;
+        margin: 10px;
+        padding: 0;
+        color: #000;
+        font: normal 12px 'Bitstream Vera Sans', Verdana, Helvetica, Arial, sans-serif;
 }
 .hide { display: none; }
 hr { 
   border-top: 1px solid #ccc;
 }
 a:link, a:visited, a.noline,b.tl-item-link {
-	text-decoration: none;
-	color: #b00;
-	border-bottom: 1px dotted #bbb;
+        text-decoration: none;
+        color: #b00;
+        border-bottom: 1px dotted #bbb;
 }
 a:hover {
-	color: #b00;
-	background: #f7f7f7;
+        color: #b00;
+        background: #f7f7f7;
 }
 a.noline { border-bottom: none; }
 address { font-style: normal; }
 img { border: none; }
 span.underline { text-decoration: underline; }
 #browser-rev, #log-hdr,#log-hdr,#timeline-hdr,#chg-hdr,#report-hdr,#tkt-hdr {
-	font-size: 110%;
-	margin-right: 1em;
+        font-size: 110%;
+        margin-right: 1em;
         margin-top: .5em;
 }
 
 /* Forms */
 
 input, textarea, select {
-	border: 1px solid #ccc;
-	background: #fff;
+        border: 1px solid #ccc;
+        background: #fff;
 }
 input[type="submit"], input[type="reset"] { background: #eee; }
 input[type="submit"]:hover, input[type="reset"]:hover { background: #ccb; }
 
 #header { }
 #hdrlogo,#hdrlogo img,#hdrlogo:hover {
-	background: transparent;
-	margin-bottom: -1.25em;
-	border: none;
+        background: transparent;
+        margin-bottom: -1.25em;
+        border: none;
 }
 #header-links, #subheader-links, #navbar {
-	font: normal 11px Verdana, 'Bitstream Vera Sans', Helvetica, Arial, sans-serif;
-	color: #000;
+        font: normal 11px Verdana, 'Bitstream Vera Sans', Helvetica, Arial, sans-serif;
+        color: #000;
 }
 #header-links, #subheader-links {
-	padding: 2px 0em;
-	text-align: right;
+        padding: 2px 0em;
+        text-align: right;
 }
 #subheader-links a,#header-links a { padding: 0 .5em; }
 .subheader-sublinks { 
 /* Footer */
 
 #footer {
-	font-size: 75%;
-	color: #bbb;
-	border-top: 1px solid;
-	padding: .5em 0;
+        font-size: 75%;
+        color: #bbb;
+        border-top: 1px solid;
+        padding: .5em 0;
 }
 #footer a { color: #bbb; }
 #footer-left {
-	float: left;
-	padding: 0 1em;
-	border-left: 1px dashed;
-	border-right: 1px dashed;
+        float: left;
+        padding: 0 1em;
+        border-left: 1px dashed;
+        border-right: 1px dashed;
 }
 #footer-right { text-align: right; }
 #footer-logo {
-	float: left;
-	margin-right: 1em;
-	margin-top: .3em;
+        float: left;
+        margin-right: 1em;
+        margin-top: .3em;
 }
 
 /* Navbar  */
 
 #navbar {
-	clear: both;
-	border: 1px solid #999;
-	background: #eee;
-	background: url("/gfx/topbar_gradient.png") top left #999; 
-	margin: .15em 0;
-	min-width: 500px;          
+        clear: both;
+        border: 1px solid #999;
+        background: #eee;
+        background: url("/gfx/topbar_gradient.png") top left #999; 
+        margin: .15em 0;
+        min-width: 500px;          
         height: 16px;
 }
 #navbar-links { float: right; }
 a.navbar-link, a.navbar-link-active,a.navbar-link-active:hover {
-	display: block;
-	float: left;
-	border-left: 1px solid #999;
-	border-right: 1px solid #fff;
-	border-bottom: none;
-	margin: 0;
+        display: block;
+        float: left;
+        border-left: 1px solid #999;
+        border-right: 1px solid #fff;
+        border-bottom: none;
+        margin: 0;
         height: 14px;
-	padding: .1em 1.5em;
-	color: #000;
-	background: url(<?cs var:$htdocs_location ?>dots.gif) top left no-repeat;
+        padding: .1em 1.5em;
+        color: #000;
+        background: url(<?cs var:$htdocs_location ?>dots.gif) top left no-repeat;
 }
 a.navbar-link-active { 
-	font-weight: bold;
-	background: #ddd;
-	border-right: 1px solid #ddd;
+        font-weight: bold;
+        background: #ddd;
+        border-right: 1px solid #ddd;
 }
 a.navbar-link:hover { 
-	background-color: #ddc; 
-	border-right: 1px solid #ddd;
+        background-color: #ddc; 
+        border-right: 1px solid #ddd;
 }
 #page-content { clear: none; }
 
 /* Wiki */
 
 #wiki-history {
-	visibility: hidden;
-	background: #f7f7f0;
-	border: 1px solid #999;
-	font-size: 75%;
-	position: absolute;
-	display: inline;
-	margin: 10px;
-	right:10px;
-	border-collapse: separate;
-	border-spacing: 0;
-	padding: .5em;
+        visibility: hidden;
+        background: #f7f7f0;
+        border: 1px solid #999;
+        font-size: 75%;
+        position: absolute;
+        display: inline;
+        margin: 10px;
+        right:10px;
+        border-collapse: separate;
+        border-spacing: 0;
+        padding: .5em;
 }
 a.wiki-history-link {
-	display: block;
-	border: none;
+        display: block;
+        border: none;
 }
 a.wiki-history-link:hover,tr.wiki-history-row:hover {
-	background: #ccb;
-	color: #b00;
+        background: #ccb;
+        color: #b00;
 }
 a.wiki-missing-page:link
 {
-	color: #998;
-	background: #fafaf0;
+        color: #998;
+        background: #fafaf0;
 }
 a.wiki-missing-page:hover { color: #000; }
 #wiki-body {
-	line-height: 140%;
-	margin: 1em;
+        line-height: 140%;
+        margin: 1em;
 }
 
 #wiki-formatting-help {
-	font: normal 11px Verdana, 'Bitstream Vera Sans', Helvetica, Arial, sans-serif;
-	float: right;
+        font: normal 11px Verdana, 'Bitstream Vera Sans', Helvetica, Arial, sans-serif;
+        float: right;
 }
 
 #browser-list,#common-list {
-	margin: .5em 0 2em 0;
-	border-bottom: 1px solid #eee;
-	border-collapse: collapse;
-	line-height: 130%;
+        margin: .5em 0 2em 0;
+        border-bottom: 1px solid #eee;
+        border-collapse: collapse;
+        line-height: 130%;
 }
 #browser-list td { 
 padding: 0 .25em; 
-	border: 1px dotted #ddd;
+        border: 1px dotted #ddd;
 
 }
 
 <?cs if:trac.active_module == 'browser' ?>
 /* Browser */
 #browser-chgrev {
-	display: inline;
-	margin: 0;
-	float: right;
-	font-size: 9px;
-	width: 15em;
-	text-align: right;
+        display: inline;
+        margin: 0;
+        float: right;
+        font-size: 9px;
+        width: 15em;
+        text-align: right;
 }
 #browser-chgrev input { text-align: center; }
 #browser-pathlinks {
-	padding-bottom: .5em;
-	border-bottom: 1px solid #ccc;
+        padding-bottom: .5em;
+        border-bottom: 1px solid #ccc;
 }
 tr.browser-listhdr { border-bottom: 1px solid #eee; }
 tr.browser-listhdr th {
-	text-align: left;
-	padding: 0 1em 0 0;
-	font-size: 13px;
+        text-align: left;
+        padding: 0 1em 0 0;
+        font-size: 13px;
 }
 #browser-list a.block-link { 
-	display: block;
-	border-bottom: none;
-	background: transparent;
+        display: block;
+        border-bottom: none;
+        background: transparent;
 }
 #browser-list td { padding: 0 .5em; }
 th { text-align: left; }
 td.br-rev-col a { font-weight: bold; }
 td.br-name-col { width: 100%; }
 td.br-size-col, td.br-rev-col, td.br-date-col {
-	color: #888;
-	white-space: nowrap;
+        color: #888;
+        white-space: nowrap;
 }
 td.br-icon-col, td.br-report-col, td.br-ticket-col { width: 1em; }
 <?cs /if ?>
 <?cs if:trac.active_module == 'timeline' ?>
 /* Timeline */
 #timeline-prefs {
-	background: #f7f7f0;
-	border: 1px solid #d7d7d7;
-	float: right;
-	font-size: 9px;
-	padding: .5em;
-	margin-left: 1em;
-	margin-bottom: 1em;
+        background: #f7f7f0;
+        border: 1px solid #d7d7d7;
+        float: right;
+        font-size: 9px;
+        padding: .5em;
+        margin-left: 1em;
+        margin-bottom: 1em;
 }
 #timeline-prefs-checks { }
 #timeline-prefs-btns {
-	text-align: right;
-	margin-top: 1em;
+        text-align: right;
+        margin-top: 1em;
 }
 .timeline-daysep {
-	font-size: 105%;
-	border-bottom: 1px solid #d7d7d7;
+        font-size: 105%;
+        border-bottom: 1px solid #d7d7d7;
 }
 .tl-day { 
-	line-height: 130%; 
-	margin-left: 1em;
+        line-height: 130%; 
+        margin-left: 1em;
 }
 a.tl-item { 
-	display: block;
-	color: #000;
-	padding: 1px 0;
-	margin: 1px; 
-	border: none; 
+        display: block;
+        color: #000;
+        padding: 1px 0;
+        margin: 1px; 
+        border: none; 
 }
 a.tl-item:hover {
-	background-color: #eed;
-	color: #000;
+        background-color: #eed;
+        color: #000;
 }
 .tl-item-time { color: #777; }
 .tl-item-link { font-weight: normal; }
 .tl-item-msg { }
 .tl-item-descr {
-	display: block;
-	margin-left: 6.5em;
-	font-size: 80%;
+        display: block;
+        margin-left: 6.5em;
+        font-size: 80%;
 }
 .tl-item-icon { 
-	vertical-align: text-top; 
-	margin: 0;
+        vertical-align: text-top; 
+        margin: 0;
 }
 <?cs /if ?>
 
 <?cs if:trac.active_module == 'changeset' ?>
 /* Changeset */
 .chg-name {
-	display: block;
-	float: left;
-	width: 8em;
-	text-align: right;
-	margin-right: .5em;
+        display: block;
+        float: left;
+        width: 8em;
+        text-align: right;
+        margin-right: .5em;
 }
 .chg-val { }
 ul.chg-list {
-	padding: .5em;
-	margin-left: 8em;
-	list-style: none;
+        padding: .5em;
+        margin-left: 8em;
+        list-style: none;
 }
 .chg-file-comment {
-	display: none;
-	color: #bbb;
-	margin-left: .5em;
-	font-size: 75%;
+        display: none;
+        color: #bbb;
+        margin-left: .5em;
+        font-size: 75%;
 }
 .chg-file-add,.chg-file-mod,.chg-file-rem,.diff-legend-unmod,.diff-legend-mod,.diff-legend-add,.diff-legend-rem {
-	display: block;
-	float: left;
-	width: 1em;
-	height: 1em;
-	margin-right: .5em;
-	border: 1px solid #999;
+        display: block;
+        float: left;
+        width: 1em;
+        height: 1em;
+        margin-right: .5em;
+        border: 1px solid #999;
 }
 #chg-diff { 
-	border-top: 1px solid #d7d7d7;
-	margin-bottom: 3em;
+        border-top: 1px solid #d7d7d7;
+        margin-bottom: 3em;
 }
 #chg-legend { }
 table.diff-table { 
-	border: 1px solid #d7d7d7; 
-	border-left: 1px solid #999; 
-	border-right: 1px solid #fff; 
-	border-bottom: 1px solid #fff; 
-	width: 100%;
-	font-size: 12px;
-	border-collapse: collapse;
-	margin-left: 1px;
+        border: 1px solid #d7d7d7; 
+        border-left: 1px solid #999; 
+        border-right: 1px solid #fff; 
+        border-bottom: 1px solid #fff; 
+        width: 100%;
+        font-size: 12px;
+        border-collapse: collapse;
+        margin-left: 1px;
 }
 .chg-diff-file { 
-	background: #eee;
-	padding: 5px;
-	padding-top: 0;
-	margin-top: 2em;
-	border: 1px solid #d7d7d7; 
+        background: #eee;
+        padding: 5px;
+        padding-top: 0;
+        margin-top: 2em;
+        border: 1px solid #d7d7d7; 
 }
 .chg-diff-hdr { 
-	font-size: 11px;
-	color: #666; 
-	padding: 2px .25em;
-	border-bottom: 1px solid #999; 
-	margin: 0;
-	margin-bottom: 1px;
+        font-size: 11px;
+        color: #666; 
+        padding: 2px .25em;
+        border-bottom: 1px solid #999; 
+        margin: 0;
+        margin-bottom: 1px;
 }
 table.diff-table td { 
-	border-left: dashed 1px #d7d7d7;
-	padding: 0 .5em;
-	font-family: monospace;
-	vertical-align: top;
-	margin-top: 1em;
+        border-left: dashed 1px #d7d7d7;
+        padding: 0 .5em;
+        font-family: monospace;
+        vertical-align: top;
+        margin-top: 1em;
 }
 td.diff-line { 
-	background: #eed;
-	border: 1px solid #d7d7d7;
-	border-top: 1px solid #fff;
-	border-bottom: 1px solid #998;
-	font-weight: bold;
-	font-size: 11px;
+        background: #eed;
+        border: 1px solid #d7d7d7;
+        border-top: 1px solid #fff;
+        border-bottom: 1px solid #998;
+        font-weight: bold;
+        font-size: 11px;
 }
 .diff-modified,.chg-file-mod,.diff-legend-mod { background-color: #fd8; }
 .diff-unmodified, .diff-legend-unmod { background-color: #fff }
 /* Ticket */
 
 #tkt-ticket,#tkt-changes { 
-	background: #ffd;
-	border: 1px solid #dd9;
-	border-width: 1px 3px 3px 1px;
-	padding: .5em;
-	max-width: 700px;
+        background: #ffd;
+        border: 1px solid #dd9;
+        border-width: 1px 3px 3px 1px;
+        padding: .5em;
+        max-width: 700px;
 }
 #tkt-left { 
-	width: 50%;
-	float: left;
-	border-right: 1px solid #dd9;
-	padding: .5em;
+        width: 50%;
+        float: left;
+        border-right: 1px solid #dd9;
+        padding: .5em;
 }
 #tkt-right { 
-	padding: .5em;
+        padding: .5em;
 }
 #tkt-date { 
-	float: right;
-	font-size: 75%;
-	color: #996; 
+        float: right;
+        font-size: 75%;
+        color: #996; 
 }
 .tkt-prop { 
-	border-bottom: 1px dotted #eed;
+        border-bottom: 1px dotted #eed;
 }
 .tkt-label { 
-	color: #996; 
-	font-weight: normal;
-	padding: 0 .5em;
-	float: left;
-	width: 8em;
+        color: #996; 
+        font-weight: normal;
+        padding: 0 .5em;
+        float: left;
+        width: 8em;
 }
 .tkt-val { }
 #tkt-summary { 
-	margin: 0;
-	font-size: 100%;
-	border-bottom: 1px solid #dd9;
-	padding-bottom: .25em;
+        margin: 0;
+        font-size: 100%;
+        border-bottom: 1px solid #dd9;
+        padding-bottom: .25em;
 }
 #tkt-descr { 
-	border-top: 1px solid #dd9;
-	padding-top: .5em;
+        border-top: 1px solid #dd9;
+        padding-top: .5em;
 }
 #tkt-left,#tkt-right { 
-	font-size: 80%;
+        font-size: 80%;
 }
 #tkt-changes-hdr { 
-	font-size: 110%;
-	margin-bottom: .5em;
-	margin-top: 1em;
+        font-size: 110%;
+        margin-bottom: .5em;
+        margin-top: 1em;
 }
 #tkt-changes { 
-	border-color: #d7d7d7;
-	background: #fff;
-	font-size: 80%;
-	padding: 0 .5em;
-	padding-left: 1.5em;
+        border-color: #d7d7d7;
+        background: #fff;
+        font-size: 80%;
+        padding: 0 .5em;
+        padding-left: 1.5em;
 }
 .tkt-chg-mod { 
-	color: #999;
-	border-bottom: 1px solid;
-	margin-top: .5em;
-	margin-left: -1em;
-	font-size: 100%;
-	font-weight: normal;
-	padding: 0 .5em;
+        color: #999;
+        border-bottom: 1px solid;
+        margin-top: .5em;
+        margin-left: -1em;
+        font-size: 100%;
+        font-weight: normal;
+        padding: 0 .5em;
 }
 ul.tkt-chg-list { 
-	padding: 0 1em;
-	list-style: square;
+        padding: 0 1em;
+        list-style: square;
 }
 li.tkt-chg-change { margin: 0 }
 .tkt-chg-comment-hdr { 
-	margin: 0;
-	font-size: 100%;
+        margin: 0;
+        font-size: 100%;
 }
 .tkt-chg-comment p { margin: .25em }
 .tkt-chg-comment { 
-	margin: 0;
-	margin-left: 1em;
+        margin: 0;
+        margin-left: 1em;
 }
 <?cs /if ?>
 

File templates/search.cs

       <?cs /if ?>
       <?cs if item.type == 1 ?>
       <td>
-	Changeset [<a href="<?cs var:item.changeset_href ?>"><?cs var:item.data ?></a>] by <?cs var:item.author ?>: <?cs var:item.message ?>
+        Changeset [<a href="<?cs var:item.changeset_href ?>"><?cs var:item.data ?></a>] by <?cs var:item.author ?>: <?cs var:item.message ?>
       </td>
       <?cs elif item.type == 2 ?>
       <td>
-	Ticket <a href="<?cs var:item.ticket_href ?>">#<?cs var:item.data ?></a> by <?cs var:item.author ?>: <?cs var:item.message ?>
+        Ticket <a href="<?cs var:item.ticket_href ?>">#<?cs var:item.data ?></a> by <?cs var:item.author ?>: <?cs var:item.message ?>
       </td>
       <?cs elif item.type == 3 ?>
       <td>
-	Wiki page <a href="<?cs var:item.wiki_href ?>"><?cs var:item.data ?></a> by <?cs var:item.author ?>
+        Wiki page <a href="<?cs var:item.wiki_href ?>"><?cs var:item.data ?></a> by <?cs var:item.author ?>
       </td>
       <?cs /if ?>
     </tr>

File templates/wiki.cs

             <li><a href="<?cs var:item.href?>"><?cs var:item.title ?></a></li>
           <?cs /each ?>
         <?cs else ?>
-	  <?cs if wiki.action == "edit" || wiki.action == "preview" ?>
+          <?cs if wiki.action == "edit" || wiki.action == "preview" ?>
             <h3>Edit "<?cs var:wiki.page_name ?>"</h3>
             <form action="<?cs var:wiki.current_href ?>" method="post">
               <p>
-	        <textarea name="text" rows="20" cols="80" style="width:100%"><?cs var:wiki.page_source ?></textarea>
-	      </p>
-	      <div id="wiki-formatting-help">
-	      Read <a href="<?cs var:$trac.href.wiki ?>WikiFormatting">WikiFormatting</a> for more information about available commands.
-	      </div>
-	      <p>
-	        <input type="submit" name="save" value="save changes" />&nbsp;
-	        <input type="submit" name="preview" value="preview" />&nbsp;
-	        <input type="submit" name="view" value="cancel" />
-	      </p>
-	    </form>
-	  <?cs /if ?>
-	  <?cs if wiki.action == "view" || wiki.action == "preview" ?>
-	    <div class="wikipage">
-	        <?cs var:wiki.page_html ?>
-	    </div>
-	    <?cs if wiki.action == "view" && trac.acl.WIKI_MODIFY ?>
-	      <p>
-	      <a href="<?cs var:wiki_current_href?>?edit=yes">Edit this page.</a>
-	      </p>
-	    <?cs /if ?>
-	  <?cs /if ?>
+                <textarea name="text" rows="20" cols="80" style="width:100%"><?cs var:wiki.page_source ?></textarea>
+              </p>
+              <div id="wiki-formatting-help">
+              Read <a href="<?cs var:$trac.href.wiki ?>WikiFormatting">WikiFormatting</a> for more information about available commands.
+              </div>
+              <p>
+                <input type="submit" name="save" value="save changes" />&nbsp;
+                <input type="submit" name="preview" value="preview" />&nbsp;
+                <input type="submit" name="view" value="cancel" />
+              </p>
+            </form>
+          <?cs /if ?>
+          <?cs if wiki.action == "view" || wiki.action == "preview" ?>
+            <div class="wikipage">
+                <?cs var:wiki.page_html ?>
+            </div>
+            <?cs if wiki.action == "view" && trac.acl.WIKI_MODIFY ?>
+              <p>
+              <a href="<?cs var:wiki_current_href?>?edit=yes">Edit this page.</a>
+              </p>
+            <?cs /if ?>
+          <?cs /if ?>
         <?cs /if ?>
       </div>
     </div>

File trac/Report.py

 
         # Convert the header info to HDF-format
         idx = 0
-	for x in cols:
+        for x in cols:
             self.cgi.hdf.setValue('report.headers.%d.title' % idx, x[0])
             idx = idx + 1
 

File trac/Ticket.py

         curr_date   = 0
         comment = None
         idx = 0
-	while 1:
-	    row = cursor.fetchone()
-	    if row == None:
-		break
+        while 1:
+            row = cursor.fetchone()
+            if row == None:
+                break
 
             date   = int(row[0])
             author = row[1] or ''

File trac/Wiki.py

     _compiled_rules = re.compile('(?:' + string.join(_rules, '|') + ')')
 
     def format(self, text, out):
-	if not text:
-	    return ''
+        if not text:
+            return ''
         self.out = out
         self._open_tags = []
         
             # Handle Horizontal ruler
             elif line[0:4] == '----':
                 self.close_paragraph()
-		self.close_indentation()
-		self.close_list()
+                self.close_indentation()
+                self.close_list()
                 self.out.write('<hr />\n')
                 continue
             # Handle new paragraph
             elif line == '':
                 self.close_paragraph()
-		self.close_indentation()
-		self.close_list()
+                self.close_indentation()
+                self.close_list()
                 continue
 
             self.in_list_item = 0
         
         cursor.execute ('SELECT DISTINCT name FROM wiki ORDER BY name')
         i = 0
-	while 1:
-	    row = cursor.fetchone()
-	    if row == None:
-		break
+        while 1:
+            row = cursor.fetchone()
+            if row == None:
+                break
             self.cgi.hdf.setValue('wiki.title_index.%d.title' % i, row[0])
             self.cgi.hdf.setValue('wiki.title_index.%d.href' % i,
                                   href.wiki(row[0]))
         cursor.execute ('SELECT version, time, author, ipnr FROM wiki '
                         'WHERE name=%s ORDER BY version DESC', pagename)
         i = 0
-	while 1:
-	    row = cursor.fetchone()
-	    if not row:
-		break
-		   #        for row in cursor:
+        while 1:
+            row = cursor.fetchone()
+            if not row:
+                break
+                   #        for row in cursor:
             elif i==0:
                 self.cgi.hdf.setValue('wiki.history', '1')
 

File trac/perm.py

     for row in rs.row_list:
         action = row[0]
         if meta_permission.has_key(action):
-	    for perm in meta_permission[action]:
-		perm_cache[perm] = 1
+            for perm in meta_permission[action]:
+                perm_cache[perm] = 1
 #            map (lambda action: perm_cache.__setitem__(action, 1),
 #                 meta_permission[action])
         perm_cache[action] = 1

File trac/util.py

     if default_empty:
         out.write ('<option></option>')
     while 1:
-	row = cursor.fetchone()
+        row = cursor.fetchone()
         if not row:
             break
         if selected == row[0]:
 def escape(text, param={'"':'&#34;'}):
     """Escapes &, <, > and \""""
     if not text:
-	return ''
+        return ''
     elif type(text) is StringType:
-	return saxutils.escape(text, param)
+        return saxutils.escape(text, param)
     else:
-	return text
+        return text
 
 def get_first_line(text, maxlen):
     """
 #    cursor.execute ('SELECT type, name, value FROM enum ORDER BY type,value,name')
     idx = 0
     while 1:
-	row = cursor.fetchone()
+        row = cursor.fetchone()
         if not row:
             break
         hdf.setValue('%s.%d.name' % (prefix, idx), row[0])

File wiki-default/TracInstall

-= Trac Installation Guide =
-
-The Trac web-based project management tool is implemented as a server
-side cgi-program. Trac is written in the Python programming language
-and store it's data in a sqlite database.
-
-== Dependencies ==
-
-The following dependencies have to be installed:
-
- * [http://www.python.org/ Python], version >= 2.1.
- * [http://subversion.tigris.org/ subversion], version >= 0.37.
- * [http://pysqlite.sf.net/ pysqlite], version >= 0.4.3
- * [http://clearsilver.net/ ClearSilver], version >= 0.9.3
- * A CGI-capable web server (only tested with Apache)
-
-== Installing Trac ==
-{{{
-	$ python ./setup.py install
-}}}
-
-This will byte-compile the python source code and install it in the {{{site-packages}}} directory
-of your python installation. The directories {{{templates}}}, {{{htdocs}}} and {{{wiki-default}}}
-will be copied into $prefix/share/trac/ . 
-
-== Initializing the database ==
-
-Trac stores wiki pages, tickets and other information in a sqlite database. 
-Sqlite databases are just ordinary files on the hard drive, no database server
-is required.
-
-A new trac database can be created like this:
-
-{{{
-	$ trac-admin /path/to/mydatabase.db initdb
-}}}
-
-NOTE: The database file have to be located in a directory where the web server
-user has write permission to both the file and the directory.
-
-{{{[wiki:TracAdmin trac-admin]}}} will ask you where your subversion repository is located and
-where it can find the trac templates directory (the default value should be fine).
-
-== Configuring Apache ==
-
-copy (or symlink) "{{{trac/cgi-bin/trac.cgi}}}" to 
-you web servers {{{/cgi-bin/}}} directory. Of course you can configure apache
-to use the "{{{trac/cgi-bin/}}}" directory directly if you like.
-
-Finally adjust the filenames and add this config snippet to your web server:
- 
-{{{
-Alias /trac/ "/where/you/put/trac/htdocs/"
-# Trac need to know where the database is located
-<Location "/cgi-bin/trac.cgi">
-	SetEnv TRAC_DB "/somewhere/myproject.db"
-</Location>
-
-# You need this to allow users to authenticate
-<Location "/cgi-bin/trac.cgi/login">
-	AuthType Basic
-	AuthName "trac"
-	AuthUserFile /somewhere/trac.htpasswd
-	Require valid-user
-</location>
-}}}
-
-== What next? ==
-
-You should now have a working Trac installation at:
-
-http://<yourhostname>/cgi-bin/trac.cgi
-
-There you should be able to browse your subversion repository, create tickets,
-view the timeline etc. Keep in mind that anonymous users (before logging in)
-are only able to see/use a subset of all the features provided by Trac. 
-Please read TracPermissions on how to grant additional privileges to authenticated users.
-
-Enjoy!
-
-
+= Trac Installation Guide =
 
+The Trac web-based project management tool is implemented as a server
+side cgi-program. Trac is written in the Python programming language
+and store it's data in a sqlite database.
+
+== Dependencies ==
+
+The following dependencies have to be installed:
+
+ * [http://www.python.org/ Python], version >= 2.1.
+ * [http://subversion.tigris.org/ subversion], version >= 0.37.
+ * [http://pysqlite.sf.net/ pysqlite], version >= 0.4.3
+ * [http://clearsilver.net/ ClearSilver], version >= 0.9.3
+ * A CGI-capable web server (only tested with Apache)
+
+== Installing Trac ==
+{{{
+        $ python ./setup.py install
+}}}
+
+This will byte-compile the python source code and install it in the {{{site-packages}}} directory
+of your python installation. The directories {{{templates}}}, {{{htdocs}}} and {{{wiki-default}}}
+will be copied into $prefix/share/trac/ . 
+
+== Initializing the database ==
+
+Trac stores wiki pages, tickets and other information in a sqlite database. 
+Sqlite databases are just ordinary files on the hard drive, no database server
+is required.
+
+A new trac database can be created like this:
+
+{{{
+        $ trac-admin /path/to/mydatabase.db initdb
+}}}
+
+NOTE: The database file have to be located in a directory where the web server
+user has write permission to both the file and the directory.
+
+{{{[wiki:TracAdmin trac-admin]}}} will ask you where your subversion repository is located and
+where it can find the trac templates directory (the default value should be fine).
+
+== Configuring Apache ==
+
+copy (or symlink) "{{{trac/cgi-bin/trac.cgi}}}" to 
+you web servers {{{/cgi-bin/}}} directory. Of course you can configure apache
+to use the "{{{trac/cgi-bin/}}}" directory directly if you like.
+
+Finally adjust the filenames and add this config snippet to your web server:
+ 
+{{{
+Alias /trac/ "/where/you/put/trac/htdocs/"
+# Trac need to know where the database is located
+<Location "/cgi-bin/trac.cgi">
+        SetEnv TRAC_DB "/somewhere/myproject.db"
+</Location>
+
+# You need this to allow users to authenticate
+<Location "/cgi-bin/trac.cgi/login">
+        AuthType Basic
+        AuthName "trac"
+        AuthUserFile /somewhere/trac.htpasswd
+        Require valid-user
+</location>
+}}}
+
+== What next? ==
+
+You should now have a working Trac installation at:
+
+http://<yourhostname>/cgi-bin/trac.cgi
+
+There you should be able to browse your subversion repository, create tickets,
+view the timeline etc. Keep in mind that anonymous users (before logging in)
+are only able to see/use a subset of all the features provided by Trac. 
+Please read TracPermissions on how to grant additional privileges to authenticated users.
+
+Enjoy!
+