[Xfce4-commits] <moka:nick/maintainer-improvements> Port to haml and various other changes.
Nick Schermer
noreply at xfce.org
Sat May 28 20:06:01 CEST 2011
Updating branch refs/heads/nick/maintainer-improvements
to ca866704c8b17d5565bec84f407eb82795f5d323 (commit)
from 5b0da3339341f4fa5b473125b742c34904841eea (commit)
commit ca866704c8b17d5565bec84f407eb82795f5d323
Author: Nick Schermer <nick at xfce.org>
Date: Sat May 28 20:03:37 2011 +0200
Port to haml and various other changes.
TODO | 3 +
examples/one-man-one-project/config.ru | 59 +++++++++++++++++++-
.../templates/collection_feed_entry.erb | 20 +++++++
.../templates/collection_release_mail.erb | 20 +++++++
.../templates/login_password_canceled | 14 +++++
.../templates/login_password_request | 13 ++++
.../templates/project_feed_entry.erb | 25 ++++++++
.../templates/project_release_mail.erb | 24 ++++++++
lib/controllers/authentication.rb | 26 ++++++++-
lib/controllers/projects.rb | 24 ++++----
lib/controllers/request.rb | 24 --------
lib/helpers/general.rb | 31 +++++------
lib/models/project.rb | 5 ++
lib/moka.rb | 31 ++++------
lib/views/announcements.erb | 15 -----
lib/views/announcements.haml | 14 +++++
lib/views/auth_login.erb | 9 ---
lib/views/collection.erb | 23 --------
lib/views/collection.haml | 21 +++++++
lib/views/collection_delete.erb | 10 ---
lib/views/collection_delete.haml | 6 ++
lib/views/collection_new_release.erb | 47 ----------------
lib/views/collection_new_release.haml | 34 +++++++++++
lib/views/collection_release.erb | 26 ---------
lib/views/collection_release.haml | 22 +++++++
lib/views/foot.erb | 2 -
lib/views/head.erb | 29 ----------
lib/views/index.erb | 12 ----
lib/views/index.haml | 1 +
lib/views/index_login.haml | 23 ++++++++
lib/views/layout.haml | 29 ++++++++++
lib/views/login.haml | 12 ++++
lib/views/login_forgot.haml | 1 +
lib/views/login_request.haml | 39 +++++++++++++
lib/views/login_request_finished.haml | 8 +++
lib/views/login_request_sshinfo.haml | 35 ++++++++++++
lib/views/login_unauthenticated.haml | 5 ++
lib/views/maintainer.erb | 26 ---------
lib/views/maintainer.haml | 17 ++++++
lib/views/maintainer_profile.erb | 35 ------------
lib/views/maintainer_profile.haml | 32 +++++++++++
lib/views/manage_releases.erb | 26 ---------
lib/views/permission_denied.erb | 15 -----
lib/views/permission_denied.haml | 14 +++++
lib/views/project.erb | 42 --------------
lib/views/project.haml | 39 +++++++++++++
.../project_branch_new_release_announcement.erb | 24 --------
.../project_branch_new_release_announcement.haml | 24 ++++++++
lib/views/project_branch_new_release_confirm.erb | 36 ------------
lib/views/project_branch_new_release_confirm.haml | 30 ++++++++++
lib/views/project_new_release.erb | 9 ---
lib/views/project_new_release.haml | 19 ++++++
lib/views/project_new_release_tarball.erb | 16 -----
lib/views/project_new_release_tarball.haml | 14 +++++
lib/views/project_release_delete.erb | 11 ----
lib/views/project_release_delete.haml | 6 ++
lib/views/project_release_update.erb | 17 ------
lib/views/project_release_update.haml | 16 +++++
lib/views/request.erb | 35 ------------
lib/views/request_finished.erb | 9 ---
lib/views/request_sshinfo.erb | 31 ----------
61 files changed, 708 insertions(+), 577 deletions(-)
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..ccb69bd
--- /dev/null
+++ b/TODO
@@ -0,0 +1,3 @@
+Register: Almost finished...
+
+A token for changing your password has been emailed to you. Follow the instructions in that email to change your password.
diff --git a/examples/one-man-one-project/config.ru b/examples/one-man-one-project/config.ru
index f55e53c..e47cd1d 100755
--- a/examples/one-man-one-project/config.ru
+++ b/examples/one-man-one-project/config.ru
@@ -7,18 +7,75 @@ require 'digest/sha1'
require '../../lib/moka'
+# Connect to the database
directory = File.expand_path(File.dirname(__FILE__))
db = File.join(directory, 'example.db')
DataMapper::Logger.new($stdout, :debug)
DataMapper.setup(:default, 'sqlite://' + db)
+# From http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/
+def wrap_text(txt, col = 72)
+ txt.gsub(/(.{1,#{col}})( +|$)\n?|(.{#{col}})/, "\\1\\3\n")
+end
+
+# Identica configuration
use Moka::Middleware::Identica do |identica|
identica.username = 'username'
identica.password = 'password'
identica.group = 'group'
end
+# Feed configuration and template handling
+use Moka::Middleware::Feeds do |feeds|
+ feeds.base_url = 'http://archive.xfce.org/feeds/'
+
+ feeds.project_feed_url do |project|
+ URI.join(feeds.base_url, 'project/', project.name).to_s
+ end
+
+ feeds.project_feed_filename do |project|
+ "/home/nick/websites/archive.xfce.org/feeds/project/#{project.name}"
+ end
+
+ feeds.collection_feed_url do |collection|
+ URI.join(feeds.base_url, 'collection/', collection.name).to_s
+ end
+
+ feeds.collection_feed_filename do |collection|
+ "/home/nick/websites/archive.xfce.org/feeds/collection/#{collection.name}"
+ end
+
+ feeds.project_body do |release, message, sender|
+ ERB.new(File.read('templates/project_feed_entry.erb')).result(binding)
+ end
+
+ feeds.collection_body do |release, message, sender|
+ ERB.new(File.read('templates/collection_feed_entry.erb')).result(binding)
+ end
+end
+
+# Mailinglist configuration and template handling
+use Moka::Middleware::Mailinglists do |mailer|
+ mailer.lists = ['xfce-announce at xfce.org', 'xfce at xfce.org', 'thunar-dev at xfce.org', 'nickschermer at gmail.com']
+
+ mailer.project_subject do |release, message, sender|
+ "ANNOUNCE: #{release.project.name} #{release.version} released"
+ end
+
+ mailer.project_body do |release, message, sender|
+ ERB.new(File.read('templates/project_release_mail.erb')).result(binding)
+ end
+
+ mailer.collection_subject do |release, message, sender|
+ "ANNOUNCE: #{release.collection.display_name} #{release.version} released"
+ end
+
+ mailer.collection_body do |release, message, sender|
+ ERB.new(File.read('templates/collection_release_mail.erb')).result(binding)
+ end
+end
+
# global configuration
Moka::Models::Configuration.load do |conf|
conf.set :moka_url, 'https://releases.xfce.org'
@@ -28,7 +85,7 @@ Moka::Models::Configuration.load do |conf|
end
# Uncheck for production environment
-DataMapper.auto_migrate!
+DataMapper.auto_upgrade!
DataMapper.finalize
# create dummy roles
diff --git a/examples/one-man-one-project/templates/collection_feed_entry.erb b/examples/one-man-one-project/templates/collection_feed_entry.erb
new file mode 100644
index 0000000..9d11516
--- /dev/null
+++ b/examples/one-man-one-project/templates/collection_feed_entry.erb
@@ -0,0 +1,20 @@
+<pre><a href="<%= release.collection.website %>"><%= release.collection.display_name %></a> <%= release.version %> is now available for download.
+
+It includes the following releases of Xfce core components:
+<% for project in (Moka::Models::Project.find_all.sort.select do |project| release.included_project_release(project) != nil end) %>
+ <a href="<%= project.website %>"><%= project.name %></a> <%= release.included_project_release(project).version %><% end %>
+
+Release tarballs can be retrieved from the following mirrors (please
+note that it may take a few hours for the mirrors to catch up):
+<% for mirror in Moka::Models::Mirror.find_all %>
+ <a href="<%= mirror.download_url(release) %>"><%= mirror.download_url(release) %></a><% end %>
+
+A tarball including all individual releases can be downloaded here:
+<% for mirror in Moka::Models::Mirror.find_all %>
+ <a href="<%= mirror.fat_tarball_url(release) %>"><%= mirror.fat_tarball_url(release) %></a><% end %>
+
+
+Release notes for <%= release.version %>
+==================<%= Array.new(release.version.size, '=').join %>
+
+<%= wrap_text(message).strip %></pre>
diff --git a/examples/one-man-one-project/templates/collection_release_mail.erb b/examples/one-man-one-project/templates/collection_release_mail.erb
new file mode 100644
index 0000000..f7f7b22
--- /dev/null
+++ b/examples/one-man-one-project/templates/collection_release_mail.erb
@@ -0,0 +1,20 @@
+<%= release.collection.display_name %> <%= release.version %> is now available for download.
+
+It includes the following releases of Xfce core components:
+<% for project in (Moka::Models::Project.find_all.sort.select do |project| release.included_project_release(project) != nil end) %>
+ <%= project.name %> <%= release.included_project_release(project).version %><% end %>
+
+Release tarballs can be retrieved from the following mirrors (please
+note that it may take a few hours for the mirrors to catch up):
+<% for mirror in Moka::Models::Mirror.find_all %>
+ <%= mirror.download_url(release) %><% end %>
+
+A tarball including all individual releases can be downloaded here:
+<% for mirror in Moka::Models::Mirror.find_all %>
+ <%= mirror.fat_tarball_url(release) %><% end %>
+
+
+Release notes for <%= release.version %>
+==================<%= Array.new(release.version.size, '=').join %>
+
+<%= wrap_text(message).strip %>
diff --git a/examples/one-man-one-project/templates/login_password_canceled b/examples/one-man-one-project/templates/login_password_canceled
new file mode 100644
index 0000000..29c7c8f
--- /dev/null
+++ b/examples/one-man-one-project/templates/login_password_canceled
@@ -0,0 +1,14 @@
+A request was canceled from 84.107.218.238.
+
+If you did not request this, it could be either an honest
+mistake or someone attempting to break into your Bugzilla account.
+
+Take a look at the information below and forward this email
+to bugzilla-maintainer at xfce.org if you suspect foul play.
+
+ Token: vgBxX6jqV2
+ Token Type: password
+ User: nick at xfce.org
+ Issue Date: 2011-04-04 23:31:10 CEST
+ Event Data: 84.107.218.238
+Canceled Because: You have logged in.
diff --git a/examples/one-man-one-project/templates/login_password_request b/examples/one-man-one-project/templates/login_password_request
new file mode 100644
index 0000000..ef23ad0
--- /dev/null
+++ b/examples/one-man-one-project/templates/login_password_request
@@ -0,0 +1,13 @@
+You have (or someone impersonating you has) requested to change your
+Bugzilla password. To complete the change, visit the following link:
+
+https://bugzilla.xfce.org/token.cgi?t=vgBxX6jqV2&a=cfmpw
+
+If you are not the person who made this request, or you wish to cancel
+this request, visit the following link:
+
+https://bugzilla.xfce.org/token.cgi?t=vgBxX6jqV2&a=cxlpw
+
+If you do nothing, the request will lapse after 3 days
+(on April 7, 2011 at 23:31 CEST) or when you
+log in successfully.
diff --git a/examples/one-man-one-project/templates/project_feed_entry.erb b/examples/one-man-one-project/templates/project_feed_entry.erb
new file mode 100644
index 0000000..a06cc14
--- /dev/null
+++ b/examples/one-man-one-project/templates/project_feed_entry.erb
@@ -0,0 +1,25 @@
+<pre><a href="<%= release.project.website %>"><%= release.project.name %></a> <%= release.version %> is now available for download from
+
+ <a href="<%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %>"><%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %></a>
+ <a href="<%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %>.md5"><%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %>.md5</a>
+ <a href="<%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %>.sha1"><%= Moka::Models::Mirror.find_all.first.download_url(release) %>/<%= release.tarball_basename %>.sha1</a>
+
+ SHA1 checksum: <%= release.checksum(Digest::SHA1) %>
+ MD5 checksum: <%= release.checksum(Digest::MD5) %>
+
+
+What is <%= release.project.name %>?
+========<%= Array.new(release.project.name.size, '=').join %>=
+
+<%= wrap_text(release.project.description).strip %>
+
+Website:
+ <a href="<%= release.project.website %>"><%= release.project.website %></a>
+
+
+Release notes for <%= release.version %>
+==================<%= Array.new(release.version.size, '=').join %>
+<% if (release.version.split('.')[1].to_i % 2) > 0 %>[Please note that this is a development release.]
+<% end %>
+<%= wrap_text(message).strip %>
+
diff --git a/examples/one-man-one-project/templates/project_release_mail.erb b/examples/one-man-one-project/templates/project_release_mail.erb
new file mode 100644
index 0000000..26e67b2
--- /dev/null
+++ b/examples/one-man-one-project/templates/project_release_mail.erb
@@ -0,0 +1,24 @@
+<%= release.project.name %> <%= release.version %> is now available for download from
+
+ <%= release.download_url %>/<%= release.tarball_basename %>
+ <%= release.download_url %>/<%= release.tarball_basename %>.md5
+ <%= release.download_url %>/<%= release.tarball_basename %>.sha1
+
+ SHA1 checksum: <%= release.checksum(Digest::SHA1) %>
+ MD5 checksum: <%= release.checksum(Digest::MD5) %>
+
+
+What is <%= release.project.name %>?
+========<%= Array.new(release.project.name.size, '=').join %>=
+
+<%= wrap_text(release.project.description).strip %>
+
+Website:
+ <%= release.project.website %>
+
+
+Release notes for <%= release.version %>
+==================<%= Array.new(release.version.size, '=').join %>
+<% if (release.version.split('.')[1].to_i % 2) > 0 %>[Please note that this is a development release.]
+<% end %>
+<%= wrap_text(message).strip %>
diff --git a/lib/controllers/authentication.rb b/lib/controllers/authentication.rb
index b9f9522..150e1c6 100755
--- a/lib/controllers/authentication.rb
+++ b/lib/controllers/authentication.rb
@@ -92,7 +92,7 @@ module Moka
app.helpers Helpers
app.get '/login/?' do
- view :auth_login
+ view :login
end
app.post '/login/?' do
@@ -108,11 +108,35 @@ module Moka
env['warden'].authenticate!
redirect '/'
end
+
+ app.post '/unauthenticated' do
+ view :login_unauthenticated
+ end
app.get '/logout/?' do
env['warden'].logout
redirect '/'
end
+
+ app.get '/login/forgot' do
+
+ view :login_forgot
+ end
+
+ app.get '/login/request' do
+
+ view :login_request
+ end
+
+ app.get '/login/request/sshinfo' do
+
+ view :login_request_sshinfo
+ end
+
+ app.post '/login/request' do
+
+ view :login_request_finished
+ end
end
end
end
diff --git a/lib/controllers/projects.rb b/lib/controllers/projects.rb
index d6e6b6e..14d7757 100755
--- a/lib/controllers/projects.rb
+++ b/lib/controllers/projects.rb
@@ -106,7 +106,7 @@ module Moka
@release.delete
- redirect "/project/#{@project.id}"
+ redirect "/project/#{@project.name}"
end
app.get '/project/:name/new-release' do
@@ -190,18 +190,20 @@ module Moka
@branch = Project::Branch.new(@project, params[:branch])
@release = Project::Release.new(@project, @branch, params[:version])
- if env['identica'] and params[:identica]
- url = env['feeds'].get_project_feed_url(@project)
-
- if env['identica'].group.nil?
- @announcement_status = "#{@project.name} #{@release.version} released: #{url}"
- else
- @announcement_status = "#{@project.name} #{@release.version} released: #{url} !#{env['identica'].group}"
+ if env['feeds']
+ if env['identica'] and params[:identica]
+ url = env['feeds'].get_project_feed_url(@project)
+
+ if env['identica'].group.nil?
+ @announcement_status = "#{@project.name} #{@release.version} released: #{url}"
+ else
+ @announcement_status = "#{@project.name} #{@release.version} released: #{url} !#{env['identica'].group}"
+ end
end
- end
- if env['feeds'] and params[:feeds]
- # TODO
+ if params[:feeds]
+ # TODO
+ end
end
if env['mailinglists'] and params[:mailinglists]
diff --git a/lib/controllers/request.rb b/lib/controllers/request.rb
deleted file mode 100644
index 0971830..0000000
--- a/lib/controllers/request.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-module Moka
- module Controllers
- module Request
- include Moka::Models
-
- def self.registered(app)
- app.get '/request' do
-
- view :request
- end
-
- app.get '/request/sshinfo' do
-
- view :request_sshinfo
- end
-
- app.post '/request' do
-
- view :request_finished
- end
- end
- end
- end
-end
diff --git a/lib/helpers/general.rb b/lib/helpers/general.rb
index 18449cb..02bab1f 100755
--- a/lib/helpers/general.rb
+++ b/lib/helpers/general.rb
@@ -1,3 +1,5 @@
+require 'haml'
+
module Moka
module Helpers
module General
@@ -12,27 +14,22 @@ module Moka
module Helpers
include Moka::Models
- def header(args={})
- custom_binding = binding.clone
- eval 'params = ' + args.inspect, custom_binding
- import('head', custom_binding)
- end
-
- def footer
- import('foot')
- end
-
- def import(template, custom_binding=nil)
+ def render_layout(custom_binding, &block)
directory = File.expand_path(File.dirname(__FILE__))
- filename = File.join(directory, '..', 'views', "#{template}.erb")
- erb = open(filename) do |file|
- ERB.new(file.read)
+ filename = File.join(directory, '..', 'views', 'layout.haml')
+ engine = open(filename) do |file| Haml::Engine.new(file.read) end
+ engine.render(if custom_binding.nil? then binding else custom_binding end) do
+ block.call(self)
end
- erb.result(if custom_binding.nil? then binding else custom_binding end)
end
- def view(*args)
- import(*args)
+ def view(template, custom_binding = nil)
+ render_layout(custom_binding) do
+ directory = File.expand_path(File.dirname(__FILE__))
+ filename = File.join(directory, '..', 'views', "#{template}.haml")
+ engine = open(filename) do |file| Haml::Engine.new(file.read) end
+ engine.render(if custom_binding.nil? then binding else custom_binding end)
+ end
end
def error_set(key, value)
diff --git a/lib/models/project.rb b/lib/models/project.rb
index a3d790d..6ea3a6b 100755
--- a/lib/models/project.rb
+++ b/lib/models/project.rb
@@ -55,6 +55,11 @@ module Moka
and other.branch == branch \
and other.version == version
end
+
+ def <=>(other)
+ return 0 unless other.is_a?(self.class)
+ version <=> other.version
+ end
def checksum(type)
Archive.instance.project_release_checksum(self, type)
diff --git a/lib/moka.rb b/lib/moka.rb
index 593d956..e1c4247 100755
--- a/lib/moka.rb
+++ b/lib/moka.rb
@@ -8,26 +8,22 @@ require 'sass'
directory = File.expand_path(File.dirname(__FILE__))
-require File.join(directory, 'models', 'configuration')
-require File.join(directory, 'models', 'classification')
-require File.join(directory, 'models', 'role')
-require File.join(directory, 'models', 'maintainer')
-require File.join(directory, 'models', 'collection')
-require File.join(directory, 'models', 'project')
-require File.join(directory, 'models', 'archive')
+models = ['configuration', 'classification', 'role', 'maintainer', 'collection', 'project', 'archive']
+for model in models
+ require File.join(directory, 'models', model)
+end
require File.join(directory, 'helpers', 'general')
-require File.join(directory, 'controllers', 'announcements')
-require File.join(directory, 'controllers', 'authentication')
-require File.join(directory, 'controllers', 'collections')
-require File.join(directory, 'controllers', 'projects')
-require File.join(directory, 'controllers', 'maintainers')
-require File.join(directory, 'controllers', 'request')
+helpers = ['announcements', 'authentication', 'collections', 'projects', 'maintainers']
+for helper in helpers
+ require File.join(directory, 'controllers', helper)
+end
-require File.join(directory, 'middleware', 'feeds')
-require File.join(directory, 'middleware', 'identica')
-require File.join(directory, 'middleware', 'mailinglists')
+middlewares = ['feeds', 'identica', 'mailinglists']
+for middleware in middlewares
+ require File.join(directory, 'middleware', middleware)
+end
module Moka
class Application < Sinatra::Base
@@ -41,7 +37,6 @@ module Moka
register Moka::Controllers::Projects
register Moka::Controllers::Collections
register Moka::Controllers::Maintainers
- register Moka::Controllers::Request
authentication_initialize
@@ -57,7 +52,7 @@ module Moka
get '/' do
if authentication_finished?
- view :manage_releases
+ view :index_login
else
view :index
end
diff --git a/lib/views/announcements.erb b/lib/views/announcements.erb
deleted file mode 100644
index 987315d..0000000
--- a/lib/views/announcements.erb
+++ /dev/null
@@ -1,15 +0,0 @@
-<%= header :title => "Announcements" %>
-<h2>Publish an announcement on identi.ca</h2>
-<% if error(:identica) %>
- <p class="error"><%= error(:identica) %></p>
-<% end %>
-<form method="post" action="/announcements/identica">
- <fieldset>
- <p><label for="text">Text:</label> <textarea id="text" name="text" class="message" style="height:5em;"><%= params[:text] %></textarea></p>
- <% if error(:text) %>
- <p class="error quote"><%= error(:text) %></p>
- <% end %>
- <p class="quote"><input type="submit" value="Publish"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/announcements.haml b/lib/views/announcements.haml
new file mode 100644
index 0000000..a2577e5
--- /dev/null
+++ b/lib/views/announcements.haml
@@ -0,0 +1,14 @@
+%h2 Announcement
+%p Publish an announcement on identi.ca.
+
+- if error(:identica)
+ %p.error.quote #{error(:identica)}
+
+%form{:method => "post", :action => "/announcements/identica"}
+ %p
+ %label{:for => "test"} Text:
+ %textarea{:name => "test", :rows => "5", :wrap => "off", :value => params[:text]}
+ - if error(:text)
+ %p.error.quote #{error(:text)}
+ %p
+ %input{:type => "submit", :value => "Publish"}
diff --git a/lib/views/auth_login.erb b/lib/views/auth_login.erb
deleted file mode 100755
index 99ce703..0000000
--- a/lib/views/auth_login.erb
+++ /dev/null
@@ -1,9 +0,0 @@
-<%= header :title => 'Login' %>
-<form method="post" action="/login">
- <fieldset>
- <p><label for="username">Username:</label> <input type="text" id="username" name="username"/></p>
- <p><label for="password">Password:</label> <input type="password" id="password" name="password"/></p>
- <p class="quote"><input type="submit" value="Log in"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/collection.erb b/lib/views/collection.erb
deleted file mode 100755
index 2808a2e..0000000
--- a/lib/views/collection.erb
+++ /dev/null
@@ -1,23 +0,0 @@
-<%= header :title => "Manage #{@collection.display_name}" %>
-<h2>Collection information</h2>
-<form>
- <fieldset>
- <p><label for="website">Website:</label> <%= @collection.website %></p>
- <p><label for="maintainers">Maintainers:</label> <%= maintainer_names(@collection) %>.</p>
- </fieldset>
-</form>
-<p><a href="/collection/<%= @collection.name %>/new-release">Release new version</a></p>
-
-<h2>Releases</h2>
-<table cellspacing="0" cellpadding="0">
- <% for release in @collection.releases.sort.reverse %>
- <tr>
- <th><a href="<%= release.release_url %>"><%= release.version %></a></th>
- <td>
- <a href="/collection/<%= @collection.name %>/release/<%= release.version %>">Update</a>
- <a href="/collection/<%= @collection.name %>/release/<%= release.version %>/delete">Delete</a>
- </td>
- </tr>
- <% end %>
-</table>
-<%= footer %>
diff --git a/lib/views/collection.haml b/lib/views/collection.haml
new file mode 100755
index 0000000..21b26c2
--- /dev/null
+++ b/lib/views/collection.haml
@@ -0,0 +1,21 @@
+%h2 Collection information</h2>
+%form
+ %p
+ %label{:for => "website"} Website:
+ %input{:name => "website", :disabled => true, :value => "#{@collection.website}"}
+ %p
+ %label{:for => "maintainers"} Maintainers:
+ %input{:name => "maintainers", :disabled => true, :value => "#{maintainer_names(@collection)}"}
+
+%p
+ %a{:href => "/collection/#{@collection.name}/new-release"} Release new version
+
+%h2 Releases
+%table
+ - for release in @collection.releases.sort.reverse
+ %tr
+ %th
+ %a{:href => "#{release.release_url}"} #{release.version}
+ %td
+ %a{:href => "/collection/#{@collection.name}/release/#{release.version}"} Update
+ %a{:href => "/collection/#{@collection.name}/release/#{release.version}/delete"} Delete
diff --git a/lib/views/collection_delete.erb b/lib/views/collection_delete.erb
deleted file mode 100755
index 6ca0367..0000000
--- a/lib/views/collection_delete.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<%= header :title => "Delete #{@collection.display_name} #{params[:release]}" %>
-<h2>Do you really want to delete this release?</h2>
-<form method="post">
- <fieldset>
- <p>
- <input type="button" onclick="history.back()" value="No, I came here by mistake!"/>
- <input type="submit" value="Yes, please delete!"/>
- </p>
-</form>
-<%= footer %>
diff --git a/lib/views/collection_delete.haml b/lib/views/collection_delete.haml
new file mode 100755
index 0000000..78718ad
--- /dev/null
+++ b/lib/views/collection_delete.haml
@@ -0,0 +1,6 @@
+%h2 Delete #{@collection.display_name} #{params[:release]}
+%p Do you really want to delete this release?
+%form
+ %p
+ %input{:type => "button", onclick => "history.back()", :value => "No, I came here by mistake!"}
+ %input{:type => "submit", :value => "Yes, please delete!""}
diff --git a/lib/views/collection_new_release.erb b/lib/views/collection_new_release.erb
deleted file mode 100755
index a8acb39..0000000
--- a/lib/views/collection_new_release.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-<%= header :title => "Release new version of #{@collection.display_name}" %>
-<form method="post">
- <h2>Release information</h2>
- <fieldset>
- <p>
- <label for="version">Version:</label>
- <input type="text" id="version" name="version" value="<%= params[:version] %>" style="width:5em"/>
- </p>
- <% if error_set? :version %>
- <p class="error quote"><%= error :version %></p>
- <% end %>
- <p>
- <label for="message">Message:</label>
- <textarea id="message" name="message" style="height:20em"><%= params[:message] %></textarea>
- </p>
- <% if env['identica'] %>
- <p class="quote"><input type="checkbox" id="identica" name="identica" value="announce" checked="checked"/> Announce on <a href="http://identi.ca/xfce">identi.ca/xfce</a></p>
- <% end %>
- <% if env['mailinglists'] %>
- <% for list in env['mailinglists'].lists %>
- <p class="quote"><input type="checkbox" name="mailinglists[<%= list %>]" value="announce" <%= 'checked="checked"' if @collection.mailinglists.include?(list) %>/> Announce on <%= list %></p>
- <% end %>
- <p class="quote"><strong>Make sure to be subscribed to these mailinglists with <%= authentication_user.email %>. You can <a href="/maintainer/profile/<%= authentication_user.username %>">change your email address here</a>.</strong></p>
- <% end %>
- </fieldset>
- <h2>Projects</h2>
- <fieldset>
- <table cellspacing="0" cellpadding="0">
- <% for project in Project.find_all %>
- <tr>
- <th><%= project.name %></th>
- <td>
- <label class="inline">Version to include:</label>
- <select name="project_version[<%= project.name %>]">
- <option name="nil" value="nil" <%= 'selected="selected"' if (params['project_version'] and params['project_version'][project.name] == 'nil') %>>None</option>
- <% for release in project.releases %>
- <option value="<%= release.version %>" <%= 'selected="selected"' if (params['project_version'] and params['project_version'][project.name] == release.version) %>><%= release.version %></option>
- <% end %>
- </select>
- </td>
- </tr>
- <% end %>
- </table>
- </fieldset>
- <p><input type="submit" value="Release and celebrate!"/></p>
-</form>
-<%= footer %>
diff --git a/lib/views/collection_new_release.haml b/lib/views/collection_new_release.haml
new file mode 100755
index 0000000..bf587a9
--- /dev/null
+++ b/lib/views/collection_new_release.haml
@@ -0,0 +1,34 @@
+
+%form
+ %h2 Release information
+ %p
+ %label{:for => "version"} Version:
+ %input{:type => "text", :name => "version", :value => "#{params[:version]}", :style => "width: 5em"}
+ - if error_set? :version
+ %p #{error :version}
+ %p
+ %label{:for => "message"} Message:
+ %textarea{:name => "message"} #{params[:message]}
+ - if env['identica']
+ %p.quote
+ %input{:type => "checkbox", :name => "identica", :value => "announce", :checked => true} Announce on identi.ca/xfce
+ - if env['mailinglists']
+ - for list in env['mailinglists'].lists
+ %p.quote
+ %input{:type => "checkbox", :name => "mailinglists[#{list}]", :value => "announce"} Announce on #{list}
+ %p.quote Make sure to be subscribed to these mailinglists with #{authentication_user.email}. You can change your email address in your profile.
+
+ %h2 Projects to include in the release
+ %table
+ - for project in Project.find_all.sort
+ %tr
+ %th #{project.name}
+ %td
+ %label{:for => ""} Included version:
+ %select{:name => "project_version[#{project.name}]"}
+ - included_release = params['project_version'][project.name] if params['project_version']
+ %option{:selected => included_release.nil?} None
+ - for release in project.releases
+ %option{:value => "#{release.version}", :selected => (release.version == included_release)} #{release.version}
+ %p
+ %input{:type => "submit", :value => "Release and celebrate!"}
diff --git a/lib/views/collection_release.erb b/lib/views/collection_release.erb
deleted file mode 100755
index f86974a..0000000
--- a/lib/views/collection_release.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<%= header :title => "Update #{@collection.display_name} #{@release.version}" %>
-<h2>Administrative Tasks</h2>
-<p><a href="/collection/<%= @collection.name %>/release/<%= @release.version %>/update_fat_tarball">Regenerate fat tarball</a></p>
-<p><a href="/collection/<%= @collection.name %>/release/<%= @release.version %>/update_fat_tarball_checksums">Update fat tarball checksums</a></p>
-<h2>Projects to include in the release</h2>
-<form method="post">
- <table cellspacing="0" cellpadding="0">
- <% for project in Project.find_all.sort %>
- <tr>
- <th><%= project.name %></th>
- <td>
- <label class="inline">Included version:</label>
- <select name="version[<%= project.name %>]">
- <% included_release = @release.included_project_release(project) %>
- <option name="nil" value="nil" <%= 'selected="selected"' if included_release.nil? %>>None</option>
- <% for release in project.releases %>
- <option value="<%= release.branch.name %>:<%= release.version %>" <%= 'selected="selected"' if release == included_release %>><%= release.version %></option>
- <% end %>
- </select>
- </td>
- </tr>
- <% end %>
- </table>
- <p><input type="submit" value="Save"/></p>
-</form>
-<%= footer %>
diff --git a/lib/views/collection_release.haml b/lib/views/collection_release.haml
new file mode 100755
index 0000000..2b94f51
--- /dev/null
+++ b/lib/views/collection_release.haml
@@ -0,0 +1,22 @@
+%h2 Administrative Tasks
+%p
+ %a{:href => "/collection/#{@collection.name}/release/#{@release.version}/update_fat_tarball"} Regenerate fat tarball
+%p
+ %a{:href => "/collection/#{@collection.name}/release/#{@release.version}/update_fat_tarball_checksums"} Update fat tarball checksums
+
+%h2 Projects to include in the release
+%form
+ %table
+ - for project in Project.find_all.sort
+ %tr
+ %th #{project.name}
+ %td
+ %label{:for => ""} Included version:
+ %select{:name => "version[#{project.name}]"}
+ - included_release = @release.included_project_release(project)
+ %option{:selected => included_release.nil?} None
+ - for release in project.releases
+ %option{:value => "#{release.branch.name}:#{release.version}", :selected => (release == included_release)} #{release.version}
+ %p
+ %input{:type => "submit", :value => "Save"}
+
diff --git a/lib/views/foot.erb b/lib/views/foot.erb
deleted file mode 100644
index b605728..0000000
--- a/lib/views/foot.erb
+++ /dev/null
@@ -1,2 +0,0 @@
- </body>
-</html>
diff --git a/lib/views/head.erb b/lib/views/head.erb
deleted file mode 100755
index dc858e9..0000000
--- a/lib/views/head.erb
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <title>Xfce Release Manager<%= if params.has_key?(:title) then " | #{params[:title]}" end %></title>
- <link rel="stylesheet" href="/stylesheet.css" media="all" type="text/css"/>
- </head>
- <body>
- <h1><%= if params.has_key?(:title) then params[:title] else 'Xfce Release Manager' end %></h1>
- <p id="main-toolbar">
- <% if authentication_finished? %>
- <a href="/">Manage Releases</a>
- <% else %>
- <a href="/login">Login</a>
- <a href="/request">Request Account</a>
- <% end %>
- <% if authentication_finished? and authentication_user %>
- <% if authentication_user.is_admin %>
- <a href="/maintainer">Maintainers</a>
- <% end %>
- <a href="/maintainer/<%= authentication_user.username %>">My Profile</a>
- <a href="/logout">Logout</a>
- <% end %>
- <br />
- <% if env['feeds'] %>
- <a href="<%= env['feeds'].base_url %>">News Feeds</a>
- <% end %>
- <a href="http://identi.ca/xfce">identi.ca Channel</a>
- </p>
diff --git a/lib/views/index.erb b/lib/views/index.erb
deleted file mode 100755
index 22d3b96..0000000
--- a/lib/views/index.erb
+++ /dev/null
@@ -1,12 +0,0 @@
-<%= header %>
-<h2>What would you like to do?</h2>
-<ul>
- <li><a href="/feed">View the release news feed</a></li>
- <li><a href="http://identi.ca/xfce">Visit the identi.ca release news channel</a></li>
- <% if authentication_finished? %>
- <li><a href="/">Manage releases of your projects</a></li>
- <% else %>
- <li><a href="/login">Manage releases of your projects</a></li>
- <% end %>
-</ul>
-<%= footer %>
diff --git a/lib/views/index.haml b/lib/views/index.haml
new file mode 100644
index 0000000..6057c5b
--- /dev/null
+++ b/lib/views/index.haml
@@ -0,0 +1 @@
+%h2 Welcome
diff --git a/lib/views/index_login.haml b/lib/views/index_login.haml
new file mode 100644
index 0000000..156a9a2
--- /dev/null
+++ b/lib/views/index_login.haml
@@ -0,0 +1,23 @@
+%h2 Utilities
+%p
+ %a{:href => "/announcements"} Publish announcements
+
+%h2 Collections
+%table
+ %tr
+ - for collection in authentication_user.collections.sort
+ %tr
+ %th
+ %a{:href => "/collection/#{collection.name}"} #{collection.display_name}
+ %td
+ %a{:href => "/collection/#{collection.name}/new-release"} Release new version
+
+%h2 Projects
+%table
+ %tr
+ - for project in authentication_user.projects.sort
+ %tr
+ %th
+ %a{:href => "/project/#{project.name}"} #{project.name}
+ %td
+ %a{:href => "/project/#{project.name}/new-release"} Release new version
diff --git a/lib/views/layout.haml b/lib/views/layout.haml
new file mode 100644
index 0000000..8d4bd10
--- /dev/null
+++ b/lib/views/layout.haml
@@ -0,0 +1,29 @@
+!!! Strict
+%html
+ %head
+ %meta{"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8"}/
+ %title Xfce Release Manager
+ %link{:rel => "stylesheet", :href => "/stylesheet.css", :media => "all", :type => "text/css"}/
+ %body
+ %h1 Xfce Release Manager
+ %ul
+ %li
+ %a{:href => "/"} Home
+ - if authentication_finished? and authentication_user
+ %li
+ %a{:href => "/maintainer/#{authentication_user.username}"} Profile
+ %li
+ %a{:href => "/maintainer"} Maintainers
+ %li
+ %a{:href => "/project"} Projects
+ %li
+ %a{:href => "/logout"} Logout
+ - else
+ %li
+ %a{:href => "/login"} Log in
+ %li
+ %a{:href => "/login/request"} New Account
+ %li
+ %a{:href => "/login/forgot"} Forgot Password
+
+ =yield
diff --git a/lib/views/login.haml b/lib/views/login.haml
new file mode 100755
index 0000000..a4ae8bc
--- /dev/null
+++ b/lib/views/login.haml
@@ -0,0 +1,12 @@
+%h2 Login
+%form{:method => "post", :action => "/login"}
+ - if error(:unauthenticated)
+ %p.error The username or password you entered is not valid.
+ %p
+ %label{:for => "username"} username:
+ %input{:type => "text", :name => "username"}
+ %p
+ %label{:for => "password"} Password:
+ %input{:type => "password", :name => "password"}
+ %p
+ %input{:type => "submit", :value => "Log in"}
diff --git a/lib/views/login_forgot.haml b/lib/views/login_forgot.haml
new file mode 100755
index 0000000..813f8bc
--- /dev/null
+++ b/lib/views/login_forgot.haml
@@ -0,0 +1 @@
+%h2 Recover Login
diff --git a/lib/views/login_request.haml b/lib/views/login_request.haml
new file mode 100644
index 0000000..9e2934a
--- /dev/null
+++ b/lib/views/login_request.haml
@@ -0,0 +1,39 @@
+%h2 Introduction
+%p
+ The following form allows you to submit your user info to request an
+ Xfce developers account. This account needs to be approved by one of
+ the Xfce developers, so it is wise to introduce yourself on the
+ %a{:href => "http://www.xfce.org/community"} Xfce4-dev
+ mailing list first, else the request will be rejected. Translators
+ don't need a developer account, they can sign up at the
+ %a{:href => "https://translations.xfce.org/"} translation
+ page and request to join a translation team after registration.
+
+%h2 Account Information
+%form{:method => "post"}
+ %p
+ %label{:for => "username"} Login Name:
+ %input{:type => "text", :name => "username", :value => params[:username]}
+ %p
+ %label{:for => "realname"} Real Name:
+ %input{:type => "text", :name => "realname", :value => params[:realname]}
+ %p
+ %label{:for => "email"} Email address:
+ %input{:type => "text", :name => "email", :value => params[:email]}
+ %hr
+ %p
+ %label{:for => "password"} Password:
+ %input{:type => "password", :name => "password"}
+ %p
+ %label{:for => "password2"} Confirm password:
+ %input{:type => "password", :name => "password2"}
+ %hr
+ %p.quote
+ The public key is required to push git commits over ssh. Make sure you provide the publickey and
+ not the fingerprint... Read more about how to generate and use SSH keys
+ %a{:href => "/login/request/sshinfo"} here.
+ %p
+ %label{:for => "pubkeys"} SSH public-keys:
+ %textarea{:name => "pubkeys", :rows => "5", :wrap => "off"} #{params[:pubkeys]}
+ %p
+ %input{:type => "submit", :value => "Submit"}
diff --git a/lib/views/login_request_finished.haml b/lib/views/login_request_finished.haml
new file mode 100644
index 0000000..6fc83ee
--- /dev/null
+++ b/lib/views/login_request_finished.haml
@@ -0,0 +1,8 @@
+%h2 Done
+%p
+ Thank you for submitting your account information. We will process the
+ account as soon as possible and you will receive and email once the
+ account has been activated.
+
+%p
+ %a{:href => "/"} Take me back
diff --git a/lib/views/login_request_sshinfo.haml b/lib/views/login_request_sshinfo.haml
new file mode 100644
index 0000000..bb57617
--- /dev/null
+++ b/lib/views/login_request_sshinfo.haml
@@ -0,0 +1,35 @@
+%h2 Introduction
+%p
+ For a secure connection to push git commits, the Xfce project uses
+ SSH keys to authorize on the server. This has the advantage a secure
+ connection is established between the server with simple passwords.
+
+%h2 Generating SSH keys
+%p
+ SSH keys are stored in your home directory in the <em>~/.ssh</em>
+ directory. To generate a key pair use the following command:</p>
+
+%pre
+ :plain
+ <strong>cd ~/.ssh</strong>
+ .ssh <strong> ssh-keygen -t dsa -f id_dsa</strong>
+ Generating public/private dsa key pair.
+ Enter passphrase (empty for no passphrase): <strong>[ENTER]</strong>
+ Enter same passphrase again: <strong>[ENTER]</strong>
+ Your identification has been saved in id_dsa.
+ Your public key has been saved in id_dsa.pub.
+ The key fingerprint is:
+ e7:c3:bd:c9:33:2e:19:33:b2:62:75:74:b3:99:b1:99 user at localhost
+
+%p
+ After you have created the key files, you should submit the
+ <em>id_dsa.pub</em> file to us in the text field. This string looks
+ like <em>ssh-dss ... user at localhost</em>. Afterwards you can maintain
+ the keys through this website. We will add the pubkey to your
+ <em>~/.ssh/authorized_keys</em> file on the Xfce server and
+ you can then log onto our server without a password.
+
+%h2 Using SSH keys with GIT
+%p
+ You can read about this in the
+ %a{:href => "http://wiki.xfce.org/dev/howto/git#committers"} Xfce Wiki.
diff --git a/lib/views/login_unauthenticated.haml b/lib/views/login_unauthenticated.haml
new file mode 100755
index 0000000..53909bb
--- /dev/null
+++ b/lib/views/login_unauthenticated.haml
@@ -0,0 +1,5 @@
+%h2 Invalid Username or Password
+%p.error The username or password you entered is not valid.
+%p
+ Try
+ %a{:href => "/login"} again
diff --git a/lib/views/maintainer.erb b/lib/views/maintainer.erb
deleted file mode 100644
index 3e69acf..0000000
--- a/lib/views/maintainer.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<%= header :title => "Maintainers" %>
-<h2>Pending Accounts</h2>
-<p>Account added by the request account page</p>
-
-<h2>Active Maintainers</h2>
-<table cellspacing="0" cellpadding="0">
- <tr>
- <th>Username</th>
- <th>Real Name</th>
- <th>Email</th>
- </tr>
- <% for maintainer in Maintainer.all.sort %>
- <tr>
- <td>
- <a href="/maintainer/<%= maintainer.username %>"><%= maintainer.username %></a>
- </td>
- <td>
- <%= maintainer.realname %>
- </td>
- <td>
- <%= maintainer.email %>
- </td>
- </tr>
- <% end %>
-</table>
-<%= footer %>
diff --git a/lib/views/maintainer.haml b/lib/views/maintainer.haml
new file mode 100644
index 0000000..1a97438
--- /dev/null
+++ b/lib/views/maintainer.haml
@@ -0,0 +1,17 @@
+%h2 Inactive Maintainers
+%p Account for maintainers that have not been activated yet.
+
+%h2 Active Maintainers
+%p Accounts of the maintainers that are currently using the release manager.
+
+%table
+ %tr
+ %th Username
+ %th Real Name
+ %th Email
+ - for maintainer in Maintainer.all.sort
+ %tr
+ %td
+ %a{:href => "/maintainer/#{maintainer.username}"} #{maintainer.username}
+ %td #{maintainer.realname}
+ %td #{maintainer.email}
diff --git a/lib/views/maintainer_profile.erb b/lib/views/maintainer_profile.erb
deleted file mode 100755
index 0796986..0000000
--- a/lib/views/maintainer_profile.erb
+++ /dev/null
@@ -1,35 +0,0 @@
-<%= header :title => "Update account data for #{@maintainer.realname}" %>
-<h2>Account data</h2>
-<form method="post">
- <% if error(:succeed) %>
- <p class="info"><%= error(:succeed) %></p>
- <% end %>
- <fieldset>
- <p><label for="username">Login Name:</label> <input type="text" name="username" disabled="disabled" value="<%= @maintainer.username %>"/></p>
- <p><label for="email">Email address:</label> <input type="text" name="email" value="<%= @maintainer.email %>"/></p>
- <p><label for="realname">Real Name:</label> <input type="text" name="realname" value="<%= @maintainer.realname %>"/></p>
- <p><label for="pubkeys">SSH public-keys:</label> <textarea name="pubkeys" rows="5" wrap="off"><%= @maintainer.pubkeys %></textarea></p>
- <hr />
- <p class="quote">Leave the password fields empty if you don't want to set a new password. The password needs to be at least 6 characters long.</p>
- <% if error(:newpassword) %>
- <p class="info"><%= error(:newpassword) %></p>
- <% end %>
- <p><label for="new_password">New password:</label> <input type="password" name="new_password" value=""/></p>
- <p><label for="new_password2">Confirm new password:</label> <input type="password" name="new_password2" value=""/></p>
- <hr />
- <% if authentication_user.username == @maintainer.username %>
- <p class="quote">Please enter your existing password to confirm account changes.</p>
- <% else %>
- <p class="quote">You are editing the account of someone else; enter your <strong>OWN</strong> password to confirm.</strong></p>
- <% end %>
- <% if error(:password) %>
- <p class="info"><%= error(:password) %></p>
- <% end %>
- <p><label for="password">Password:</label> <input type="password" name="password" value=""></p>
- <p class="quote"><input type="submit" value="Save"/></p>
- </fieldset>
-</form>
-
-<h2>Permissions</h2>
-<p><label for="projects">Projects:</label> <%= @maintainer.project_names %>.</p>
-<%= footer %>
diff --git a/lib/views/maintainer_profile.haml b/lib/views/maintainer_profile.haml
new file mode 100644
index 0000000..beb42cc
--- /dev/null
+++ b/lib/views/maintainer_profile.haml
@@ -0,0 +1,32 @@
+%h2 Account data
+%form{:method => "post"}
+ %p
+ %label{:for => "username"} Login Name:
+ %input{:type => "text", :name => "username", :disabled => true, :value => @maintainer.username}
+ %p
+ %label{:for => "email"} Email address:
+ %input{:type => "text", :name => "email", :value => @maintainer.email}
+ %p
+ %label{:for => "realname"} Real Name:
+ %input{:type => "text", :name => "realname", :value => @maintainer.realname}
+ %p
+ %label{:for => "pubkeys"} SSH public-keys:
+ %textarea{:name => "pubkeys", :rows => "5", :wrap => "off", :value => @maintainer.pubkeys}
+ %hr
+ %p Leave the password fields empty if you don't want to set a new password. The password needs to be at least 6 characters long.
+ %p
+ %label{:for => "new_password"} New password:
+ %input{:type => "password", :name => "new_password"}
+ %p
+ %label{:for => "new_password2"} Confirm new password:
+ %input{:type => "password", :name => "new_password2"}
+ %hr
+ %p Please enter your existing password to confirm account changes.
+ %p
+ %label{:for => "password"} Password:
+ %input{:type => "password", :name => "password"}
+ %p
+ %input{:type => "submit", :value => "Save"}
+
+%h2 Permissions
+
diff --git a/lib/views/manage_releases.erb b/lib/views/manage_releases.erb
deleted file mode 100644
index 430cff7..0000000
--- a/lib/views/manage_releases.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<%= header :title => 'Manage releases' %>
-<h2>Utilities</h2>
-<p><a href="/announcements">Publish announcements</a></p>
-<h2>Collections</h2>
-<table cellspacing="0" cellpadding="0">
- <% for collection in authentication_user.collections.sort %>
- <tr>
- <th><a href="/collection/<%= collection.name %>"><%= collection.display_name %></a></th>
- <td>
- <a href="/collection/<%= collection.name %>/new-release">Release new version</a>
- </td>
- </tr>
- <% end %>
-</table>
-<h2>Projects</h2>
-<table cellspacing="0" cellpadding="0">
- <% for project in authentication_user.projects.sort %>
- <tr>
- <th><a href="/project/<%= project.name %>"><%= project.name %></a></th>
- <td>
- <a href="/project/<%= project.name %>/new-release">Release new version</a>
- </td>
- </tr>
- <% end %>
-</table>
-<%= footer %>
diff --git a/lib/views/permission_denied.erb b/lib/views/permission_denied.erb
deleted file mode 100755
index b14a37d..0000000
--- a/lib/views/permission_denied.erb
+++ /dev/null
@@ -1,15 +0,0 @@
-<%= header :title=> 'Permission denied' %>
-<p class="error">You're denied access to this page for the following reason:</p>
-<p class="error" style="text-align:center;"><strong>
- <% if context.is_a? Moka::Models::Project %>
- You are not listed as a maintainer of <%= context.name %> and your roles include none of <%= roles.to_s %> either.
- <% elsif context.is_a? Moka::Models::Collection %>
- You are not listed as a maintainer of <%= context.display_name %> and your roles include none of <%= roles.to_s %> either.
- <% elsif context.is_a? Moka::Models::Maintainer %>
- You are not <%= context.realname %> and your roles include none of <%= roles.to_s %> either.
- <% else %>
- One of the <%= roles.to_s %> roles is required for this.
- <% end %>
-</strong></p>
-<p><a href="javascript:history.back()">Bring me back!</a></p>
-<%= footer %>
diff --git a/lib/views/permission_denied.haml b/lib/views/permission_denied.haml
new file mode 100755
index 0000000..53edb87
--- /dev/null
+++ b/lib/views/permission_denied.haml
@@ -0,0 +1,14 @@
+%h2 Permission denied
+%p.error You're denied access to this page for the following reason:
+
+- if context.is_a? Moka::Models::Project
+ %p.error You are not listed as a maintainer of #{context.name} and your roles include none of #{roles.to_s} either.
+- elsif context.is_a? Moka::Models::Collection
+ %p.error You are not listed as a maintainer of #{context.display_name} and your roles include none of #{roles.to_s} either.
+- elsif context.is_a? Moka::Models::Maintainer
+ %p.error You are not #{context.realname} and your roles include none of #{roles.to_s} either.
+- else
+ %p.error One of the #{roles.to_s} roles is required for this.
+
+%p
+ %a{:href => "javascript:history.back()"} Bring me back!
diff --git a/lib/views/project.erb b/lib/views/project.erb
deleted file mode 100755
index affa7a6..0000000
--- a/lib/views/project.erb
+++ /dev/null
@@ -1,42 +0,0 @@
-<%= header :title => "Manage #{@project.name}" %>
-<h2>Project information</h2>
-<form method="post" action="/project/<%= @project.name %>/information">
- <fieldset>
- <p><label for="website">Website:</label> <input type="text" id="website" name="website" style="width:70%" value="<%= @project.website %>"/></p>
- <p><label for="description">Description:</label> <textarea id="description" name="description" style="height:10em;"><%= @project.description %></textarea></p>
- <p><label for="maintainers">Maintainers:</label> <%= maintainer_names(@project) %>.
- <p class="quote"><input type="submit" value="Save"/></p>
- </fieldset>
-</form>
-<h2>Classification</h2>
-<form method="post" action="/project/<%= @project.name %>/classify">
- <p>
- <select name="classification">
- <% for classification in Classification.find_all %>
- <% if @project.classification.name == classification.name %>
- <option name="<%= classification.name %>" selected="selected"><%= classification.name %></option>
- <% else %>
- <option name="<%= classification.name %>"><%= classification.name %></option>
- <% end %>
- <% end %>
- </select>
- <input type="submit" value="Change"/>
- </p>
-</form>
-<h2>Releases <a href="/project/<%= @project.name %>/new-release">Release new version</a></h2>
-<table cellspacing="0" cellpadding="0">
- <% for branch in @project.branches.sort.reverse %>
- <% releases = @project.releases(branch) %>
- <% for release in releases %>
- <tr>
- <th><%= "#{branch.name} Branch" if release == releases.first %></th>
- <th><a href="<%= release.download_url %>"><%= release.version %></a></th>
- <td>
- <a href="/project/<%= @project.name %>/branch/<%= branch.name %>/release/<%= release.version %>/update">Update</a>
- <a href="/project/<%= @project.name %>/branch/<%= branch.name %>/release/<%= release.version %>/delete">Delete</a>
- </td>
- </tr>
- <% end %>
- <% end %>
-</table>
-<%= footer %>
diff --git a/lib/views/project.haml b/lib/views/project.haml
new file mode 100755
index 0000000..9e2573b
--- /dev/null
+++ b/lib/views/project.haml
@@ -0,0 +1,39 @@
+%h2 Project information
+%form{:method => "post", :action => "/project/#{@project.name}/information"}
+ %p
+ %label{:for => "website"} Website:
+ %input{:type => "text", :name => "website", :value => "#{@project.website}"}
+ %p
+ %label{:for => "description"} Description:
+ %textarea{:name => "description"} #{@project.description}
+ %p
+ %label{:for => "maintainers"} Maintainers:
+ %input{:type => "text", :name => "maintainers", :disabled => true, :value => "#{maintainer_names(@project)}"}
+ %p.quote
+ %input{:type => "submit", :value => "Save"}
+
+%h2 Classification
+%form{:method => "post", :action => "/project/#{@project.name}/classify"}
+ %p
+ %select{:name => "classification"}
+ - for classification in Classification.find_all
+ %option{:name => classification.name, :selected => @project.classification.name == classification.name} #{classification.name}
+ %input{:type => "submit", :value => "Change"}
+
+%h2 Releases
+%p
+ %a{:href => "/project/#{@project.name}/new-release"} Release new version
+
+%table
+ - for branch in @project.branches.sort.reverse
+ - releases = @project.releases(branch).sort.reverse
+ - for release in releases
+ %tr
+ %th
+ - if release == releases.first
+ #{branch.name} Branch
+ %th
+ %a{:href => "#{release.download_url}"} #{release.version}
+ %td
+ %a{:href => "/project/#{@project.name}/branch/#{branch.name}/release/#{release.version}/update"} Update
+ %a{:href => "/project/#{@project.name}/branch/#{branch.name}/release/#{release.version}/delete"} Delete
diff --git a/lib/views/project_branch_new_release_announcement.erb b/lib/views/project_branch_new_release_announcement.erb
deleted file mode 100755
index d4dab51..0000000
--- a/lib/views/project_branch_new_release_announcement.erb
+++ /dev/null
@@ -1,24 +0,0 @@
-<%= header :title => "Release new version of #{@project.name} (3/4)" %>
-<h2>Tarball uploaded</h2>
-<p>The tarball is now uploaded. You can stop here if that is all you wanted to do.</p>
-<h2>Announcement</h2>
-<form method="post">
- <fieldset>
- <p><label for="message">Release notes:</label> <textarea class="message" id="message" name="message" style="height:20em"></textarea></p>
- <p class="quote"><strong>This message will appear below the download and project info, so you don't have to start it with a greeting.</strong></p>
- <% if env['feeds'] %>
- <p class="quote"><input type="checkbox" id="feeds" name="feeds" value="announce" checked="checked"/> Update <a href="<%= env['feeds'].get_project_feed_url(@project) %>">news feed</a></p>
- <% end %>
- <% if env['identica'] %>
- <p class="quote"><input type="checkbox" id="identica" name="identica" value="announce" checked="checked"/> Announce on <a href="http://identi.ca/xfce">identi.ca/xfce</a></p>
- <% end %>
- <% if env['mailinglists'] %>
- <% for list in env['mailinglists'].lists %>
- <p class="quote"><input type="checkbox" name="mailinglists[<%= list %>]" value="announce" <%= 'checked="checked"' if @project.mailinglists.include?(list) %>/> Announce on <%= list %></p>
- <% end %>
- <p class="quote"><strong>Make sure to be subscribed to these mailinglists with <%= authentication_user.email %>. You can <a href="/maintainer/profile/<%= authentication_user.username %>">change your email address here</a>.</strong></p>
- <% end %>
- <p class="quote"><input type="submit" value="Continue"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_branch_new_release_announcement.haml b/lib/views/project_branch_new_release_announcement.haml
new file mode 100755
index 0000000..0053548
--- /dev/null
+++ b/lib/views/project_branch_new_release_announcement.haml
@@ -0,0 +1,24 @@
+%h2 Tarball uploaded
+%p The tarball is now uploaded. You can stop here if that is all you wanted to do.
+
+%h2 Announcement
+%form{:method => "post"}
+ %p
+ %label{:for => "message"} Release notes:
+ %textarea{:name => "message", :class => "message"}
+ - if env['feeds']
+ %p.quote
+ %input{:type => "checkbox", :name => "feeds", :value => "announce", :checked => true} Update news feed
+ - if env['identica']
+ %p.quote
+ %input{:type => "checkbox", :name => "identica", :value => "announce", :checked => true} Announce on identi.ca
+ - if env['mailinglists']
+ - for list in env['mailinglists'].lists
+ %p.quote
+ %input{:type => "checkbox", :name => "mailinglists[#{list}]", :value => "announce"}
+ Announce on #{list}
+ %p.quote
+ Make sure to be subscribed to these mailinglists with #{authentication_user.email}.
+ You can change your email address in your profile.
+ %p.quote
+ %input{:type => "submit", :value => "Continue"}
diff --git a/lib/views/project_branch_new_release_confirm.erb b/lib/views/project_branch_new_release_confirm.erb
deleted file mode 100755
index 13d0029..0000000
--- a/lib/views/project_branch_new_release_confirm.erb
+++ /dev/null
@@ -1,36 +0,0 @@
-<%= header :title => "Release new version of #{@project.name} #{@branch.name} (4/4)" %>
-<h2>Confirmation</h2>
-<p>The following announcements will be sent.</p>
-<% if env['identica'] and params[:identica] %>
- <h3>Identi.ca</h3>
- <p class="preview"><%= @announcement_status %></p>
-<% end %>
-<% if env['mailinglists'] and params[:mailinglists] %>
- <h3>Mailinglists</h3>
- <h4>Subject</h4>
- <p class="preview"><%= @announcement_subject %></p>
- <h4>Body</h4>
- <p class="preview"><%= @announcement_body %></p>
-<% end %>
-<h2>Everything alright?</h2>
-<form method="post" action="/project/<%= @project.name %>/branch/<%= @branch.name %>/new-release/<%= @release.version %>/confirm">
- <fieldset>
- <% if env['feeds'] %>
- <input style="display:none" type="checkbox" id="feeds" name="feeds" value="announce" <%= 'checked="checked"' if params[:feeds] %>/>
- <% end %>
- <% if env['identica'] %>
- <input style="display:none" type="checkbox" name="identica" <%= 'checked="checked"' if params[:identica] %>/>
- <% end %>
- <% if env['mailinglists'] %>
- <% for list in env['mailinglists'].lists %>
- <input style="display:none" type="checkbox" name="mailinglists[<%= list %>]" value="announce" <%= 'checked="checked"' if (params[:mailinglists] and params[:mailinglists].has_key?(list)) %>/>
- <% end %>
- <% end %>
- <textarea style="display:none" name="message"><%= params[:message] %></textarea>
- <p class="center">
- <input type="button" onclick="history.back()" value="No, let me edit the announcement again"/>
- <input type="submit" value="Yes, release the damn thing already!"/>
- </p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_branch_new_release_confirm.haml b/lib/views/project_branch_new_release_confirm.haml
new file mode 100755
index 0000000..674362f
--- /dev/null
+++ b/lib/views/project_branch_new_release_confirm.haml
@@ -0,0 +1,30 @@
+%h2 Confirmation
+%p The following announcements will be sent.
+
+- if env['identica'] and params[:identica]
+ %h3 Identi.ca
+ %p.preview #{@announcement_status}
+
+- if env['mailinglists'] and params[:mailinglists]
+ %h3 Mailing Lists
+
+ %h4 Subject
+ %p.preview #{@announcement_subject}
+
+ %h4 Body
+ %p.preview #{@announcement_body}
+
+%h2 Everything alright?
+%form{:method => "post", :action => "/project/#{@project.name}/branch/#{@branch.name}/new-release/#{@release.version}/confirm"}
+ - if env['feeds'] and params[:feeds]
+ %input{:type => "hidden", :name => "feeds", :value => "announce"}
+ - if env['identica'] and params[:identica]
+ %input{:type => "hidden", :name => "identica", :value => "announce"}
+ - if env['mailinglists'] and params[:mailinglists]
+ - for list in env['mailinglists'].lists
+ - if params[:mailinglists].has_key?(list)
+ %input{:type => "hidden", :name => "mailinglists[#{list}]", :value => "announce"}
+ %input{:type => "hidden", :name => "message", :value => "#{params[:message]}"}
+ %p.center
+ %input{:type => "button", :onclick => "history.back()", :value => "No, let me edit the announcement again"}
+ %input{:type => "submit", :value => "Yes, release the damn thing already!"}
diff --git a/lib/views/project_new_release.erb b/lib/views/project_new_release.erb
deleted file mode 100755
index 3ffcbe4..0000000
--- a/lib/views/project_new_release.erb
+++ /dev/null
@@ -1,9 +0,0 @@
-<%= header :title => "Release new version of #{@project.name} (1/4)" %>
-<h2>Release information</h2>
-<p><strong>Before releasing, please make sure the <a href="/project/<%= @project.name %>">project information</a> is up to date. Also make sure you are subscribed to the mailing lists with <a href="/maintainer/profile/<%= authentication_user.username %>"><%= authentication_user.email %></a> else the announcement will not be posted.</strong></p>
-<form method="get" action="/project/<%= @project.name %>/new-release/tarball">
- <fieldset>
- <p class="quote"><input type="submit" value="I verified the information is correct"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_new_release.haml b/lib/views/project_new_release.haml
new file mode 100755
index 0000000..56c9572
--- /dev/null
+++ b/lib/views/project_new_release.haml
@@ -0,0 +1,19 @@
+%h2 Release information
+%p
+ Before releasing, please make sure the project information below is
+ up to date. Also make sure you are subscribed to the mailing lists with
+ <strong>#{authentication_user.email}</strong> else the announcement will
+ not be posted!
+
+%h3 Project information
+%form
+ %p
+ %label{:for => "website"} Website:
+ %input{:type => "text", :name => "website", :disabled => true, :value => "#{@project.website}"}
+ %p
+ %label{:for => "description"} Description:
+ %textarea{:name => "description", :disabled => true} #{@project.description}
+
+%form{:method => "get", :action => "/project/#{@project.name}/new-release/tarball"}
+ %p.quote
+ %input{:type => "submit", :value => "I verified the information is correct"}
diff --git a/lib/views/project_new_release_tarball.erb b/lib/views/project_new_release_tarball.erb
deleted file mode 100755
index 9087118..0000000
--- a/lib/views/project_new_release_tarball.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<%= header :title => "Release new version of #{@project.name} (2/4)" %>
-<h2>Tarball</h2>
-<form method="post" enctype="multipart/form-data">
- <fieldset>
- <p><label for="tarball">Tarball:</label> <input type="file" id="tarball" name="tarball" size="30"/></p>
- <% if error(:tarball) %>
- <p class="error quote"><%= error(:tarball) %></p>
- <% end %>
- <p><label for="checksum">Checksum (SHA1):</label> <input type="text" id="checksum" name="checksum" size="40" value="<%= params[:checksum] %>"/></p>
- <% if error(:checksum) %>
- <p class="error quote"><%= error(:checksum) %></p>
- <% end %>
- <p class="quote"><input type="submit" value="Upload file and continue"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_new_release_tarball.haml b/lib/views/project_new_release_tarball.haml
new file mode 100755
index 0000000..1045887
--- /dev/null
+++ b/lib/views/project_new_release_tarball.haml
@@ -0,0 +1,14 @@
+%h2 Tarball
+%form{:method => "post", :enctype => "multipart/form-data"}
+ %p
+ %label{:for => "tarball"} Tarball:
+ %input{:type => "file", :name => "tarball", :size => "30"}
+ - if error(:tarball)
+ %p.error.quote #{error(:tarball)}
+ %p
+ %label{:for => "checksum"} Checksum (SHA1):
+ %input{:type => "text", :name => "checksum", :size => "40", :value => "#{params[:checksum]}"}
+ - if error(:checksum)
+ %p.error.quote #{error(:checksum)}
+ %p.quote
+ %input{:type => "submit", :value => "Upload file and continue"}
diff --git a/lib/views/project_release_delete.erb b/lib/views/project_release_delete.erb
deleted file mode 100755
index 6acaf8c..0000000
--- a/lib/views/project_release_delete.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<%= header :title => "Delete #{@project.name} #{@release.version}" %>
-<h2>Are you sure you want to delete this version?</h2>
-<form method="post">
- <fieldset>
- <p class="center">
- <input type="button" value="No, please take me back" onclick="history.back()"/>
- <input type="submit" value="Yes, who cares about <%= @project.name %> <%= @release.version %> anyway?"/>
- </p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_release_delete.haml b/lib/views/project_release_delete.haml
new file mode 100755
index 0000000..ca44bd2
--- /dev/null
+++ b/lib/views/project_release_delete.haml
@@ -0,0 +1,6 @@
+%h2 Are you sure you want to delete this version?
+%form{:method => "post"}
+ %p
+ %input{:type => "button", :value => "No, please take me back", :onclick => "history.back()"}
+ %input{:type => "submit", :value => "Yes, who cares about #{@project.name} #{@release.version} anyway?"}
+
diff --git a/lib/views/project_release_update.erb b/lib/views/project_release_update.erb
deleted file mode 100755
index 01ec35b..0000000
--- a/lib/views/project_release_update.erb
+++ /dev/null
@@ -1,17 +0,0 @@
-<%= header :title => "Update #{@project.name} #{@release.version}" %>
-<h2>Tarball</h2>
-<form method="post" enctype="multipart/form-data">
- <fieldset>
- <p><label>Filename:</label> <tt><%= @release.tarball_basename %></tt></p>
- <p><label for="tarball">Tarball:</label> <input type="file" id="tarball" name="tarball"/></p>
- <% if env[:error][:tarball] %>
- <p class="error quote"><%= env[:error][:tarball] %></p>
- <% end %>
- <p><label for="checksum">Checksum (SHA1):</label> <input type="text" id="checksum" name="checksum" size="40" value="<%= params[:checksum] %>"/></p>
- <% if env[:error][:checksum] %>
- <p class="error quote"><%= env[:error][:checksum] %></p>
- <% end %>
- <p class="quote"><input type="submit" value="Replace current tarball"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/project_release_update.haml b/lib/views/project_release_update.haml
new file mode 100755
index 0000000..3c55e17
--- /dev/null
+++ b/lib/views/project_release_update.haml
@@ -0,0 +1,16 @@
+%h2 Tarball
+%form{:method => "post", :enctype => "multipart/form-data"}
+ %p
+ %label Filename: <tt>#{@release.tarball_basename}</tt>
+ %p
+ %label{:for => "tarball"} Tarball:
+ %input{:type => "file", :name => "tarball"}
+ - if env[:error][:tarball]
+ %p.error.quote #{env[:error][:tarball]}
+ %p
+ %label{:for => "checksum"} Checksum (SHA1):
+ %input{:type => "text", :name => "checksum", :size => "40", :value => "#{params[:checksum]}"}
+ - if env[:error][:checksum]
+ %p.error.quote #{env[:error][:checksum]}
+ %p.quote
+ %input{:type => "submit", :value => "Replace current tarball"}
diff --git a/lib/views/request.erb b/lib/views/request.erb
deleted file mode 100644
index a73f871..0000000
--- a/lib/views/request.erb
+++ /dev/null
@@ -1,35 +0,0 @@
-<%= header :title => "Request Developer Account" %>
-<h2>Introduction</h2>
-<p>The following form allows you to submit your user info to request an Xfce
- developers account. This account needs to be approved by one of the Xfce developers,
- so it is wise to introduce yourself on the
- <a href="http://www.xfce.org/community">Xfce4-dev</a> mailing list first, else
- the request will be rejected.</p>
-<p>Translators don't need a developer account, they can sign up at the
- <a href="https://translations.xfce.org/">translation</a> page and request to
- join a translation team after registration.</p>
-
-<h2>Account Information</h2>
-<form method="post">
- <fieldset>
- <p><label for="username">Login Name:</label>
- <input type="text" name="username" value="<%= params[:username] %>"/></p>
- <p><label for="realname">Real Name:</label>
- <input type="text" name="realname" value="<%= params[:realname] %>"/></p>
- <p><label for="email">Email address:</label>
- <input type="text" name="email" value="<%= params[:email] %>"/></p>
- <hr />
- <p class="quote">The password needs to be at least 6 characters long.</p>
- <p><label for="password">Password:</label>
- <input type="password" name="password" value=""/></p>
- <p><label for="password2">Confirm password:</label>
- <input type="password" name="password2" value=""/></p>
- <hr />
- <p class="quote">The public key is required to push git commits over ssh. Make sure you provide the publickey and
- not the fingerprint... Read more about how to generate and use SSH keys <a href="/request/sshinfo">here</a>.</p>
- <p><label for="pubkeys">SSH public-keys:</label>
- <textarea id="pubkeys" name="pubkeys" rows="5" wrap="off"><%= params[:pubkeys] %></textarea></p>
- <p class="quote"><input type="submit" value="Submit"/></p>
- </fieldset>
-</form>
-<%= footer %>
diff --git a/lib/views/request_finished.erb b/lib/views/request_finished.erb
deleted file mode 100644
index 2af10c1..0000000
--- a/lib/views/request_finished.erb
+++ /dev/null
@@ -1,9 +0,0 @@
-<%= header :title => "Request Developer Account" %>
-<h2>Done</h2>
-<p>Thank you for submitting your account information. We will process the
- account as soon as possible and you will receive and email once the
- account has been activated.</p>
-
-<p><a href="/">Take me back</a></p>
-
-<%= footer %>
diff --git a/lib/views/request_sshinfo.erb b/lib/views/request_sshinfo.erb
deleted file mode 100644
index e1f6aaa..0000000
--- a/lib/views/request_sshinfo.erb
+++ /dev/null
@@ -1,31 +0,0 @@
-<%= header :title => "Use and create SSH keys" %>
-<h2>Introduction</h2>
-<p>For a secure connection to push git commits, the Xfce project uses
- SSH keys to authorize on the server. This has the advantage a secure
- connection is established between the server with simple passwords.</p>
-
-<h2>Generating SSh keys</h2>
-<p>SSH keys are stored in your home directory in the <em>~/.ssh</em>
- directory. To generate a key pair use the following command:</p>
-
-<pre>~ $ <strong>cd ~/.ssh</strong>
-~/.ssh $ <strong>ssh-keygen -t dsa -f id_dsa</strong>
-Generating public/private dsa key pair.
-Enter passphrase (empty for no passphrase): <strong>[ENTER]</strong>
-Enter same passphrase again: <strong>[ENTER]</strong>
-Your identification has been saved in id_dsa.
-Your public key has been saved in id_dsa.pub.
-The key fingerprint is:
-e7:c3:bd:c9:33:2e:19:33:b2:62:75:74:b3:99:b1:99 user at localhost</pre>
-
-<p>After you have created the key files, you should submit the
- <em>id_dsa.pub</em> file to us in the text field. This string looks
- like <em>ssh-dss ... user at localhost</em>. Afterwards you can maintain
- the keys through this website. We will add the pubkey to your
- <em>~/.ssh/authorized_keys</em> file on the Xfce server and
- you can then log onto our server without a password.</p>
-
-<h2>Using SSH keys with GIT</h2>
-<p>You can read about this in the <a href="http://wiki.xfce.org/dev/howto/git#committers">
- Xfce Wiki</a></p>
-<%= footer %>
More information about the Xfce4-commits
mailing list