ktec-subtrac 0.1.27 → 0.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 27
4
+ :patch: 28
@@ -1,15 +1,15 @@
1
- <location /<%= client_name %>>
1
+ <location /<%= client_path %>>
2
2
  SetHandler mod_python
3
3
  PythonInterpreter main_interpreter
4
4
  PythonHandler trac.web.modpython_frontend
5
- PythonOption TracEnvParentDir <%= trac_dir %>/<%= client_name %>
6
- PythonOption TracUriRoot /<%= client_name %>
7
- PythonOption TracEnvIndexTemplate <%= trac_dir %>/<%= client_name %>/.theme/index/index.html
5
+ PythonOption TracEnvParentDir <%= trac_dir %>/<%= client_path %>
6
+ PythonOption TracUriRoot /<%= client_path %>
7
+ PythonOption TracEnvIndexTemplate <%= trac_dir %>/<%= client_path %>/.theme/index/index.html
8
8
  PythonOption PYTHON_EGG_CACHE <%= temp_dir %>
9
9
  </location>
10
- <location <%= @APP_CONFIG[:urls][:svn] %>/<%= client_name %>>
10
+ <location <%= @APP_CONFIG[:urls][:svn] %>/<%= client_path %>>
11
11
  DAV svn
12
- SVNParentPath <%= svn_dir %>/<%= client_name %>
12
+ SVNParentPath <%= svn_dir %>/<%= client_path %>
13
13
  SVNListParentPath On
14
14
  SVNAutoversioning On
15
15
  SVNReposName "<%= server_name %> for <%= client_name %>"
@@ -1,19 +1,19 @@
1
1
  [[PageOutline]]
2
2
  = Welcome to the <%= server_name %> for <%= project_name %> =
3
3
 
4
- This is the home of development for <%= client %>. This page is editable by design. That means YOU. If something is missing, fix it. This is what you make of it so get involved.
4
+ This is the home of development for <%= client_name %>. This page is editable by design. That means YOU. If something is missing, fix it. This is what you make of it so get involved.
5
5
 
6
6
  == Starting Points ==
7
7
 
8
- * [<%= svn_url %>/<%= client_name %> Browse all <%= client_name %> SVN Repositories]
9
- * [<%= svn_url %>/<%= client_name %>/<%= project_name %> Browse the <%= project_name %> repository]
8
+ * [<%= svn_url %>/<%= client_path %> Browse all <%= client_name %> SVN Repositories]
9
+ * [<%= svn_url %>/<%= client_path %>/<%= project_path %> Browse the <%= project_name %> repository]
10
10
 
11
11
  === How to check this project out ===
12
12
 
13
13
  Make sure you have subversion client installed, then you can check the project out using:
14
14
 
15
15
  {{{
16
- svn checkout <%= svn_url %>/<%= client_name %>/<%= project_name %>/trunk <%= project_name %>
16
+ svn checkout <%= svn_url %>/<%= client_path %>/<%= project_path %>/trunk <%= project_path %>
17
17
  }}}
18
18
 
19
19
  === Using SVN ===
@@ -22,11 +22,6 @@ svn checkout <%= svn_url %>/<%= client_name %>/<%= project_name %>/trunk <%= pro
22
22
  * [http://scplugin.tigris.org/ For OS X use SCPlugin]
23
23
  * [http://theappleblog.com/2009/02/23/12-subversion-apps-for-os-x/ There's loads more if you don't like these]
24
24
 
25
- == Template Projects ==
26
-
27
- This system allows you to set up a default template for different project types. All templates are available to browse in the [<%= @APP_CONFIG[:urls][:svn] %>/templates/svn/ Browse all Templates Repositories] area.
28
-
29
-
30
25
  = About Trac =
31
26
 
32
27
  Trac is a '''minimalistic''' approach to '''web-based''' management of
@@ -1,19 +1,19 @@
1
1
  [[PageOutline]]
2
- = Welcome to the <%= server_name %> for <%= project_name %> =
2
+ = Welcome to the <%= server_name %> for <%= project_name %> =
3
3
 
4
4
  This is the home of development for <%= client %>. This page is editable by design. That means YOU. If something is missing, fix it. This is what you make of it so get involved.
5
5
 
6
6
  == Starting Points ==
7
7
 
8
- * [<%= svn_url %>/<%= client_name %> Browse all <%= client_name %> SVN Repositories]
9
- * [<%= svn_url %>/<%= client_name %>/<%= project_name %> Browse the <%= project_name %> repository]
8
+ * [<%= svn_url %>/<%= client_path %> Browse all <%= client_name %> SVN Repositories]
9
+ * [<%= svn_url %>/<%= client_path %>/<%= project_name %> Browse the <%= project_name %> repository]
10
10
 
11
11
  === How to check this project out ===
12
12
 
13
13
  Make sure you have subversion client installed, then you can check the project out using:
14
14
 
15
15
  {{{
16
- svn checkout <%= svn_url %>/<%= client_name %>/<%= project_name %>/trunk <%= project_name %>
16
+ svn checkout <%= svn_url %>/<%= client_path %>/<%= project_name %>/trunk <%= project_name %>
17
17
  }}}
18
18
 
19
19
  === Using SVN ===
@@ -5,15 +5,15 @@ This is the home of development for <%= client %>. This page is editable by desi
5
5
 
6
6
  == Starting Points ==
7
7
 
8
- * [<%= svn_url %>/<%= client_name %> Browse all <%= client_name %> SVN Repositories]
9
- * [<%= svn_url %>/<%= client_name %>/<%= project_name %> Browse the <%= project_name %> repository]
8
+ * [<%= svn_url %>/<%= client_path %> Browse all <%= client_name %> SVN Repositories]
9
+ * [<%= svn_url %>/<%= client_path %>/<%= project_path %> Browse the <%= project_name %> repository]
10
10
 
11
11
  === How to check this project out ===
12
12
 
13
13
  Make sure you have subversion client installed, then you can check the project out using:
14
14
 
15
15
  {{{
16
- svn checkout <%= svn_url %>/<%= client_name %>/<%= project_name %>/trunk <%= project_name %>
16
+ svn checkout <%= svn_url %>/<%= client_path %>/<%= project_path %>/trunk <%= project_path %>
17
17
  }}}
18
18
 
19
19
  === Using SVN ===
@@ -20,7 +20,7 @@ src =
20
20
  width = -1
21
21
 
22
22
  [trac]
23
- repository_dir = ../../../svn/<%= client_name %>/<%= project_name %>
23
+ repository_dir = ../../../svn/<%= client_path %>/<%= project_path %>
24
24
 
25
25
  [components]
26
26
  batchmod.web_ui.batchmodifymodule = enabled
data/lib/subtrac.rb CHANGED
@@ -56,7 +56,7 @@ module Subtrac
56
56
  end
57
57
 
58
58
  def server_name=(name)
59
- @APP_CONFIG[:server_name] = @@server_name = name
59
+ @APP_CONFIG[:server_name] = @server_name = name
60
60
  end
61
61
 
62
62
  def server_hostname
@@ -64,7 +64,7 @@ module Subtrac
64
64
  end
65
65
 
66
66
  def server_hostname=(name)
67
- @APP_CONFIG[:server_hostname] = @@server_hostname = name
67
+ @APP_CONFIG[:server_hostname] = @server_hostname = name
68
68
  end
69
69
 
70
70
  def default_client
@@ -72,7 +72,7 @@ module Subtrac
72
72
  end
73
73
 
74
74
  def default_client=(name)
75
- @APP_CONFIG[:default_client] = @@default_client = name
75
+ @APP_CONFIG[:default_client] = @default_client = name
76
76
  end
77
77
 
78
78
  def default_project
@@ -81,7 +81,7 @@ module Subtrac
81
81
 
82
82
  def default_project=(name)
83
83
  puts "Updating default_project to #{name}"
84
- @APP_CONFIG[:default_project] = @@default_project = name
84
+ @APP_CONFIG[:default_project] = @default_project = name
85
85
  end
86
86
 
87
87
 
@@ -117,7 +117,7 @@ module Subtrac
117
117
  end
118
118
 
119
119
  def apache_conf_dir=(name)
120
- @APP_CONFIG[:apache_conf_dir] = @@apache_conf_dir = name
120
+ @APP_CONFIG[:apache_conf_dir] = @apache_conf_dir = name
121
121
  end
122
122
 
123
123
  def docs_dir
@@ -157,7 +157,7 @@ module Subtrac
157
157
  end
158
158
 
159
159
  def enable_ldap=(value)
160
- @APP_CONFIG[:ldap][:enable] = @@enable_ldap = value
160
+ @APP_CONFIG[:ldap][:enable] = @enable_ldap = value
161
161
  end
162
162
 
163
163
  def ldap_bind_dn
@@ -165,7 +165,7 @@ module Subtrac
165
165
  end
166
166
 
167
167
  def ldap_bind_dn=(value)
168
- @APP_CONFIG[:ldap][:bind_dn] = @@ldap_bind_dn = value
168
+ @APP_CONFIG[:ldap][:bind_dn] = @ldap_bind_dn = value
169
169
  end
170
170
 
171
171
  def ldap_bind_password
@@ -173,7 +173,7 @@ module Subtrac
173
173
  end
174
174
 
175
175
  def ldap_bind_password=(value)
176
- @APP_CONFIG[:ldap][:bind_password] = @@ldap_bind_password = value
176
+ @APP_CONFIG[:ldap][:bind_password] = @ldap_bind_password = value
177
177
  end
178
178
 
179
179
  def ldap_bind_host
@@ -181,7 +181,7 @@ module Subtrac
181
181
  end
182
182
 
183
183
  def ldap_bind_host=(value)
184
- @APP_CONFIG[:ldap][:bind_host] = @@ldap_bind_password = value
184
+ @APP_CONFIG[:ldap][:bind_host] = @ldap_bind_password = value
185
185
  end
186
186
 
187
187
  end
@@ -364,36 +364,37 @@ module Subtrac
364
364
 
365
365
  def self.create_client(name)
366
366
  puts "\n==== Create a new client called #{name} ===="
367
- client_name = name.downcase
367
+ client_name = name.gsub(/^[a-z]|\s+[a-z]/) { |a| a.upcase }
368
+ client_path = name.downcase
368
369
  # create apache configuration
369
370
  puts "subtrac_path: #{subtrac_path}"
370
371
  puts "templates_location: #{@APP_CONFIG[:templates][:location]}"
371
372
  location_template = File.join(subtrac_path, @APP_CONFIG[:templates][:location])
372
373
  puts "location_template: #{location_template}"
373
- location_conf = File.join(locations_dir,"#{client_name}.conf")
374
+ location_conf = File.join(locations_dir,"#{client_path}.conf")
374
375
  puts "location_conf: #{location_conf}"
375
376
  parse_template(location_template,location_conf,binding)
376
377
  `/etc/init.d/apache2 force-reload` if SUBTRAC_ENV != 'test'
377
378
 
378
379
  # create svn+trac directory
379
- create_if_missing File.join(svn_dir,client_name)
380
- create_if_missing File.join(trac_dir,client_name)
380
+ create_if_missing File.join(svn_dir,client_path)
381
+ create_if_missing File.join(trac_dir,client_path)
381
382
 
382
383
  end
383
384
 
384
385
  def self.install_default_theme
385
386
  puts "\n==== Create a new client called #{name} ===="
386
387
  # create a project for this clients trac theme
387
- #create_project("trac_theme", client_name,@APP_CONFIG[:default_theme_template])
388
+ #create_project("trac_theme", client_path,@APP_CONFIG[:default_theme_template])
388
389
 
389
390
  # check the theme project out
390
- #client_theme_dir = File.join(trac_dir,client_name,".theme")
391
+ #client_theme_dir = File.join(trac_dir,client_path,".theme")
391
392
  #create_if_missing(client_theme_dir)
392
393
  #FileUtils.chown_R('www-data', 'www-data', client_theme_dir, :verbose => true) if SUBTRAC_ENV != 'test'
393
394
  #puts "Attempting checkout of theme project..."
394
395
 
395
396
  #`sudo svn co --username #{@APP_CONFIG[:admin_user]} --password #{@APP_CONFIG[:admin_pass]} \
396
- # file://#{svn_dir}/#{client_name}/trac_theme/trunk #{client_theme_dir}` if SUBTRAC_ENV != 'test'
397
+ # file://#{svn_dir}/#{client_path}/trac_theme/trunk #{client_theme_dir}` if SUBTRAC_ENV != 'test'
397
398
  # TODO: Need to find a way to test before trying
398
399
  template_dir = File.join(subtrac_path, "templates","trac","themes","subtractheme")
399
400
  say(`sudo easy_install #{template_dir}`)
@@ -402,14 +403,17 @@ module Subtrac
402
403
  def self.create_project(project, client, project_type=@APP_CONFIG[:default_project_template])
403
404
  puts "\n==== Create a new project called #{project} for #{client} ===="
404
405
 
405
- client_name = client.downcase
406
- project_name = project.downcase
406
+ client_name = client.gsub(/^[a-z]|\s+[a-z]/) { |a| a.upcase }
407
+ project_name = project.gsub(/^[a-z]|\s+[a-z]/) { |a| a.upcase }
408
+ # need to make sure this is a valid path - swap spaces for underscores etc
409
+ client_path = client.downcase
410
+ project_path = project.downcase
407
411
 
408
412
  # create client directory if needed
409
- create_client(client_name) if (!File.directory? File.join(svn_dir,client_name))
413
+ create_client(client_path) if (!File.directory? File.join(svn_dir,client_path))
410
414
 
411
- project_svn_dir = File.join(svn_dir,client_name,project_name)
412
- project_trac_dir = File.join(trac_dir,client_name,project_name)
415
+ project_svn_dir = File.join(svn_dir,client_path,project_path)
416
+ project_trac_dir = File.join(trac_dir,client_path,project_path)
413
417
 
414
418
  # TODO: Need to handle this exception...
415
419
  if (File.directory? project_svn_dir) then
@@ -426,7 +430,7 @@ module Subtrac
426
430
  # copy template svn project to a temp folder, then svn import it into the repo
427
431
  say("Create temporary project directory and copy template files...")
428
432
  svn_template_dir = File.join(project_template,"svn")
429
- project_temp_dir = File.join(temp_dir,project_name)
433
+ project_temp_dir = File.join(temp_dir,project_path)
430
434
  FileUtils.cp_r(svn_template_dir,project_temp_dir)
431
435
 
432
436
  # create a new subversion repository
@@ -441,7 +445,7 @@ module Subtrac
441
445
 
442
446
  # create a new trac site
443
447
  say("Creating a new trac site...")
444
- result = `trac-admin #{project_trac_dir} initenv #{project_name} sqlite:#{project_trac_dir}/db/trac.db svn #{project_svn_dir}` if SUBTRAC_ENV != 'test'
448
+ result = `trac-admin #{project_trac_dir} initenv #{project_path} sqlite:#{project_trac_dir}/db/trac.db svn #{project_svn_dir}` if SUBTRAC_ENV != 'test'
445
449
  FileUtils.chown_R('www-data', 'www-data', project_trac_dir, :verbose => false) if SUBTRAC_ENV != 'test'
446
450
  FileUtils.mkdir_p("#{project_trac_dir}/conf") if SUBTRAC_ENV == 'test' # fake the folder for tests
447
451
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ktec-subtrac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.27
4
+ version: 0.1.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Salisbury
@@ -58,11 +58,6 @@ files:
58
58
  - lib/subtrac/templates/projects/blank/trac/wiki/WikiStart
59
59
  - lib/subtrac/templates/projects/new/svn/trunk/trac/wiki/WikiStart
60
60
  - lib/subtrac/templates/projects/new/trac/wiki/WikiStart
61
- - lib/subtrac/templates/projects/trac_theme/svn/trunk/index/index.html
62
- - lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/layout.html
63
- - lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/site.html
64
- - lib/subtrac/templates/projects/trac_theme/svn/trunk/templates/theme.html
65
- - lib/subtrac/templates/projects/trac_theme/trac/wiki/WikiStart
66
61
  - lib/subtrac/templates/trac.ini.erb
67
62
  - lib/subtrac/templates/trac/themes/sainttheme/crystalxtheme/__init__.py
68
63
  - lib/subtrac/templates/trac/themes/sainttheme/crystalxtheme/htdocs/img/bg.gif
@@ -1,21 +0,0 @@
1
- <!DOCTYPE html
2
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml"
5
- xmlns:py="http://genshi.edgewall.org/"
6
- xmlns:xi="http://www.w3.org/2001/XInclude">
7
- <head>
8
- <title>Available Projects</title>
9
- </head>
10
- <body>
11
- <h1>Available Projects for Subtrac</h1>
12
- <ul>
13
- <py:for each="project in projects" py:choose="">
14
- <li py:when="project.href">
15
- <a href="$project.href"
16
- title="$project.description">$project.name</a>
17
- </li>
18
- </py:for>
19
- </ul>
20
- </body>
21
- </html>
@@ -1,56 +0,0 @@
1
- <!DOCTYPE html
2
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml"
5
- xmlns:xi="http://www.w3.org/2001/XInclude"
6
- xmlns:py="http://genshi.edgewall.org/"
7
- py:strip="">
8
-
9
- <py:match path="head" once="true"><head>
10
- <title py:with="title = list(select('title/text()'))">
11
- <py:if test="title">${title} – </py:if>${project.name or 'Trac'}
12
- </title>
13
- <py:if test="chrome.links">
14
- <py:for each="rel, links in chrome.links.items()">
15
- <link rel="${rel}" py:for="link in links" py:attrs="link" />
16
- </py:for>
17
- </py:if>
18
- <py:if test="'SEARCH_VIEW' in perm" id="search">
19
- <link type="application/opensearchdescription+xml" rel="search"
20
- href="${href.search('opensearch')}" title="Search $project.name"/>
21
- </py:if>
22
- <script py:for="script in chrome.scripts"
23
- type="${script.type}" src="${script.href}"></script>
24
- ${Markup('&lt;!--[if lt IE 7]&gt;')}
25
- <script type="text/javascript" src="${chrome.htdocs_location}js/ie_pre7_hacks.js"
26
- ></script>
27
- ${Markup('&lt;![endif]--&gt;')}
28
- ${select("*[local-name() != 'title']")}
29
- </head></py:match>
30
-
31
- <py:match path="body" once="true" buffer="false"><body>
32
- ${select('*|text()')}
33
-
34
- <script type="text/javascript" py:if="chrome.late_links">
35
- <py:for each="link in chrome.late_links.get('stylesheet')">
36
- jQuery.loadStyleSheet("${link.href}", "${link.type}");
37
- </py:for>
38
- </script>
39
- <script py:for="script in chrome.late_scripts"
40
- type="${script.type}" src="${script.href}"></script>
41
-
42
- <div id="altlinks" py:if="'alternate' in chrome.links">
43
- <h3>Download in other formats:</h3>
44
- <ul>
45
- <li py:for="idx, link in enumerate(chrome.links.alternate)"
46
- class="${first_last(idx, chrome.links.alternate)}">
47
- <a rel="nofollow" href="${link.href}" class="${link['class']}"
48
- py:content="link.title" />
49
- </li>
50
- </ul>
51
- </div>
52
- </body></py:match>
53
-
54
- <xi:include href="$chrome.theme"><xi:fallback /></xi:include>
55
- <xi:include href="site.html"><xi:fallback /></xi:include>
56
- </html>
@@ -1,27 +0,0 @@
1
- <html xmlns="http://www.w3.org/1999/xhtml"
2
- xmlns:py="http://genshi.edgewall.org/"
3
- py:strip="">
4
-
5
- <!--! Add site-specific style sheet -->
6
- <head py:match="head" py:attrs="select('@*')">
7
- ${select('*|comment()|text()')}
8
- <link rel="stylesheet" type="text/css"
9
- href="${href.chrome('site/style.css')}" />
10
- <link rel="stylesheet" type="text/css"
11
- href="/styles/trac.css"/>
12
- </head>
13
-
14
- <body py:match="body" py:attrs="select('@*')">
15
- <!--! Add site-specific header -->
16
- <div id="siteheader">
17
- <!--! Place your header content here... -->
18
- </div>
19
-
20
- ${select('*|text()')}
21
-
22
- <!--! Add site-specific footer -->
23
- <div id="sitefooter">
24
- <!--! Place your footer content here... -->
25
- </div>
26
- </body>
27
- </html>
@@ -1,86 +0,0 @@
1
- <!DOCTYPE html
2
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
- <html xmlns="http://www.w3.org/1999/xhtml"
5
- xmlns:xi="http://www.w3.org/2001/XInclude"
6
- xmlns:py="http://genshi.edgewall.org/"
7
- py:strip="">
8
-
9
- <div py:def="navigation(category)" id="${category}" class="nav">
10
- <ul py:if="chrome.nav[category]">
11
- <li py:for="idx, item in enumerate(chrome.nav[category])"
12
- class="${classes(first_last(idx, chrome.nav[category]), active=item.active)
13
- }">${item.label}</li>
14
- </ul>
15
- </div>
16
-
17
- <py:match path="body" once="true" buffer="false"><body>
18
- <div id="banner">
19
- <div id="header" py:choose="">
20
- <a py:when="chrome.logo.src" id="logo" href="${chrome.logo.link or href.wiki(
21
- 'TracIni')+'#header_logo-section'}"><img
22
- src="${chrome.logo.src}" alt="${chrome.logo.alt}"
23
- height="${chrome.logo.height or None}" width="${chrome.logo.width or None}"
24
- /></a>
25
- <h1 py:otherwise=""><a href="${chrome.logo.link}">${project.name}</a></h1>
26
- </div>
27
- <form id="search" action="${href.search()}" method="get">
28
- <div py:if="'SEARCH_VIEW' in perm">
29
- <label for="proj-search">Search:</label>
30
- <input type="text" id="proj-search" name="q" size="18" accesskey="f" value=
31
- "" />
32
- <input type="submit" value="Search" />
33
- </div>
34
- </form>
35
- ${navigation('metanav')}
36
- </div>
37
- ${navigation('mainnav')}
38
-
39
- <div id="main">
40
- <div id="ctxtnav" class="nav">
41
- <h2>Context Navigation</h2>
42
- <ul py:if="chrome.ctxtnav">
43
- <li py:for="i, elm in enumerate(chrome.ctxtnav)"
44
- class="${classes(first_last(i, chrome.ctxtnav))}">$elm</li>
45
- </ul>
46
- <hr />
47
- </div>
48
- <div id="warning" py:if="chrome.warnings" class="system-message">
49
- <py:choose test="len(chrome.warnings)">
50
- <py:when test="1">
51
- <strong>Warning:</strong> ${chrome.warnings[0]}
52
- </py:when>
53
- <py:otherwise>
54
- <strong>Warnings:</strong>
55
- <ul><li py:for="w in chrome.warnings">$w</li></ul>
56
- </py:otherwise>
57
- </py:choose>
58
- </div>
59
- <div id="notice" py:if="chrome.notices" class="system-message">
60
- <py:choose test="len(chrome.notices)">
61
- <py:when test="1">
62
- <strong>Notice:</strong> ${chrome.notices[0]}
63
- </py:when>
64
- <py:otherwise>
65
- <strong>Notices:</strong>
66
- <ul><li py:for="w in chrome.notices">$w</li></ul>
67
- </py:otherwise>
68
- </py:choose>
69
- </div>
70
-
71
- ${select('*|text()')}
72
- </div>
73
-
74
- <div id="footer" xml:lang="en"><hr/>
75
- <a id="tracpowered" href="http://trac.edgewall.org/"><img
76
- src="${chrome.htdocs_location}trac_logo_mini.png" height="30"
77
- width="107" alt="Trac Powered"/></a>
78
- <p class="left">
79
- Powered by <a href="${href.about()}"><strong>Trac ${trac.version}</strong></a
80
- ><br />
81
- By <a href="http://www.edgewall.org/">Edgewall Software</a>.
82
- </p>
83
- <p class="right">${chrome.footer}</p>
84
- </div>
85
- </body></py:match>
86
- </html>
@@ -1,4 +0,0 @@
1
- = This is the Trac Templates project =
2
-
3
- This project contains the set of files that are used for creating new Trac projects for {CLIENT_NAME}.
4
-