<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>AUTHORS</filename>
    </added>
    <added>
      <filename>README</filename>
    </added>
    <added>
      <filename>TODO</filename>
    </added>
    <added>
      <filename>css/active4d.css</filename>
    </added>
    <added>
      <filename>css/all_hallows_eve.css</filename>
    </added>
    <added>
      <filename>css/amy.css</filename>
    </added>
    <added>
      <filename>css/blackboard.css</filename>
    </added>
    <added>
      <filename>css/brilliance_black.css</filename>
    </added>
    <added>
      <filename>css/brilliance_dull.css</filename>
    </added>
    <added>
      <filename>css/cobalt.css</filename>
    </added>
    <added>
      <filename>css/dawn.css</filename>
    </added>
    <added>
      <filename>css/eiffel.css</filename>
    </added>
    <added>
      <filename>css/espresso_libre.css</filename>
    </added>
    <added>
      <filename>css/idle.css</filename>
    </added>
    <added>
      <filename>css/iplastic.css</filename>
    </added>
    <added>
      <filename>css/lazy.css</filename>
    </added>
    <added>
      <filename>css/mac_classic.css</filename>
    </added>
    <added>
      <filename>css/magicwb_amiga.css</filename>
    </added>
    <added>
      <filename>css/pastels_on_dark.css</filename>
    </added>
    <added>
      <filename>css/slush_poppies.css</filename>
    </added>
    <added>
      <filename>css/spacecadet.css</filename>
    </added>
    <added>
      <filename>css/style.css</filename>
    </added>
    <added>
      <filename>css/sunburst.css</filename>
    </added>
    <added>
      <filename>css/twilight.css</filename>
    </added>
    <added>
      <filename>css/zenburnesque.css</filename>
    </added>
    <added>
      <filename>environment.rb</filename>
    </added>
    <added>
      <filename>extensions.rb</filename>
    </added>
    <added>
      <filename>javascripts/application.js</filename>
    </added>
    <added>
      <filename>page.rb</filename>
    </added>
    <added>
      <filename>system/ruby.server.gitwiki.plist</filename>
    </added>
    <added>
      <filename>views/delta.erb</filename>
    </added>
    <added>
      <filename>views/edit.erb</filename>
    </added>
    <added>
      <filename>views/history.erb</filename>
    </added>
    <added>
      <filename>views/layout.erb</filename>
    </added>
    <added>
      <filename>views/list.erb</filename>
    </added>
    <added>
      <filename>views/show.erb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,4 @@
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-                    Version 2, December 2004
+The MIT License
 
  Copyright (C) 2004 Sam Hocevar
   14 rue de Plaisance, 75014 Paris, France
@@ -7,8 +6,21 @@
  copies of this license document, and changing it is allowed as long
  as the name is changed.
 
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the &quot;Software&quot;), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-  0. You just DO WHAT THE FUCK YOU WANT TO.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
+=======
+THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</diff>
      <filename>LICENSE</filename>
    </modified>
    <modified>
      <diff>@@ -1,187 +1,86 @@
 #!/usr/bin/env ruby
 
-%w(rubygems sinatra git bluecloth rubypants haml).each do |dependency| 
-  begin
-    require dependency
-  rescue LoadError =&gt; e
-    puts &quot;You need to install #{dependency} before we can proceed&quot;
-  end
-end
-
-GIT_REPO = ENV['HOME'] + '/wiki'
-HOMEPAGE = 'Home'
-
-unless File.exists?(GIT_REPO) &amp;&amp; File.directory?(GIT_REPO)
-  puts &quot;Initializing repository in #{GIT_REPO}...&quot;
-  Git.init(GIT_REPO)
-end
-
-$repo = Git.open(GIT_REPO)
+require 'environment'
 
-class Page
-  attr_reader :name
+require_gem_with_feedback 'sinatra'
 
-  def initialize(name)
-    @name = name
-    @filename = File.join(GIT_REPO, @name)
-  end
-
-  def body
-    @body ||= BlueCloth.new(RubyPants.new(raw_body).to_html).to_html.
-      gsub(/\b((?:[A-Z]\w+){2,})/) { |m| &quot;&lt;a href=\&quot;/#{m}\&quot;&gt;#{m}&lt;/a&gt;&quot; }
-  end
-
-  def raw_body
-    @raw_body ||= File.exists?(@filename) ? File.read(@filename) : ''
-  end
+layout { File.read('views/layout.erb') }
 
-  def body=(content)
-    File.open(@filename, 'w') { |f| f &lt;&lt; content }
-    message = tracked? ? &quot;Edited #{@name}&quot; : &quot;Created #{@name}&quot;
-    $repo.add(@name)
-    $repo.commit(message)
-  end
+def show(template, title)
+  @title = title
+  erb(template)
+end
 
-  def tracked?
-    begin
-      return false if $repo.log.size == 0
-      $repo.log.first.gtree.children.keys.include?(@name)    
-    rescue 
-      return false
-    end
+def page_with_ext
+  if params[:format] == &quot;html&quot;
+    params[:page]
+  else
+    &quot;#{params[:page]}.#{params[:format]}&quot;
   end
+end
 
-  def to_s
-    &quot;&lt;li&gt;&lt;strong&gt;&lt;a href='/#{@name}'&gt;#{@name}&lt;/a&gt;&lt;/strong&gt; &#8212; &lt;a href='/e/#{@name}'&gt;edit&lt;/a&gt;&lt;/li&gt;&quot;
-  end
+def page_url
+  &quot;#{request.env[&quot;rack.url_scheme&quot;]}://#{request.env[&quot;HTTP_HOST&quot;]}#{request.env[&quot;REQUEST_PATH&quot;]}&quot;
 end
 
 get('/') { redirect '/' + HOMEPAGE }
-get('/_stylesheet.css') { Sass::Engine.new(File.read(__FILE__).gsub(/.*__END__/m, '')).render }
+get('/_style.css') { header 'Content-Type' =&gt; 'text/css'; File.read(File.join(File.dirname(__FILE__), 'css', 'style.css')) }
+get('/_code.css') { header 'Content-Type' =&gt; 'text/css'; File.read(File.join(File.dirname(__FILE__), 'css', &quot;#{UV_THEME}.css&quot;)) }
+get('/_app.js') { header 'Content-Type' =&gt; 'application/x-javascript'; File.read(File.join(File.dirname(__FILE__), 'javascripts', &quot;application.js&quot;)) }
 
 get '/_list' do
-  if $repo.log.size == 0
-    @pages = []
-  else
-    @pages = $repo.log.first.gtree.children.map { |name, blob| Page.new(name) }
-  end
-  
-  haml(list)
+  @pages = $repo.log.first.gtree.children.map { |name, blob| Page.new(name) } rescue []
+  show(:list, 'Listing pages')  
 end
 
 get '/:page' do
-  @page = Page.new(params[:page])
-  @page.tracked? ? haml(show) : redirect('/e/' + @page.name)
+  @page_url = page_url
+  @page = Page.new(page_with_ext)
+  @page.tracked? ? show(:show, @page.name) : redirect('/e/' + @page.name)
+end
+
+get '/:page/append' do
+  @page = Page.new(page_with_ext)
+  @page.body = @page.raw_body + &quot;\n\n&quot; + params[:text]
+  redirect '/' + @page.name
 end
 
 get '/e/:page' do
-  @page = Page.new(params[:page])
-  haml(edit)
+  @page = Page.new(page_with_ext)
+  show :edit, &quot;Editing #{@page.name}&quot;
 end
 
 post '/e/:page' do
-  @page = Page.new(params[:page])
+  @page = Page.new(page_with_ext)
   @page.body = params[:body]
   redirect '/' + @page.name
 end
 
-def layout(title, content)
-  %Q(
-%html
-  %head
-    %title #{title}
-    %link{:rel =&gt; 'stylesheet', :href =&gt; '/_stylesheet.css', :type =&gt; 'text/css', :media =&gt; 'screen'}
-    %meta{'http-equiv' =&gt; 'Content-Type', :content =&gt; 'text/html; charset=utf-8'}
-
-  %body
-    #navigation
-      %a{:href =&gt; '/'} Home
-      %a{:href =&gt; '/_list'} List
-    #{content}
-  )
+get '/h/:page' do
+  @page = Page.new(page_with_ext)
+  show :history, &quot;History of #{@page.name}&quot;
 end
 
-def show
-  layout(@page.name, %q(
-      %a{:href =&gt; '/e/' + @page.name, :class =&gt; 'edit_link'} edit this page
-    %h1{:class =&gt; 'page_title'}= @page.name
-    #page_content= @page.body
-  ))
+get '/h/:page/:rev' do
+  @page = Page.new(page_with_ext, params[:rev])
+  show :show, &quot;#{@page.name} / version #{params[:rev]})&quot;
 end
 
-def edit
-  layout(&quot;Editing #{@page.name}&quot;, %q(
-    %h1
-      Editing
-      = @page.name
-      %a{:href =&gt; 'javascript:history.back()', :class =&gt; 'cancel'} Cancel
-    %form{ :method =&gt; 'POST', :action =&gt; '/e/' + params[:page]}
-      %p
-        ~&quot;&lt;textarea name='body' rows='25' cols='130'&gt;#{@page.raw_body}&lt;/textarea&gt;&quot;
-      %p
-        %input{:type =&gt; :submit, :value =&gt; 'Save as the newest version', :class =&gt; :submit}
-  ))
+# FIXME this repeats the above just to accomodate pages with 
+# file extensions.  bad!
+get '/h/:page.:format/:rev' do
+  @page = Page.new(page_with_ext, params[:rev])
+  show :show, &quot;#{@page.name} / version #{params[:rev]})&quot;
 end
 
-def list
-  layout('Listing pages', %q{
-    %h1 All pages
-    - if @pages.empty?
-      %p No pages found.
-    - else
-      %ul= @pages.each(&amp;:to_s)
-  })
+get '/d/:page/:rev' do
+  @page = Page.new(page_with_ext)
+  show :delta, &quot;Diff of #{@page.name}&quot;
 end
 
-__END__
-body
-  :font
-    family: Verdana, Arial, &quot;Bitstream Vera Sans&quot;, Helvetica, sans-serif
-    size: 14px
-    color: black
-  line-height: 160%
-  background-color: white
-  margin: 2em
-
-#navigation
-  a
-    background-color: #e0e0e0
-    color: black
-    text-decoration: none
-    padding: 2px
-  padding: 5px
-  border-bottom: 1px black solid
-
-h1
-  display: block
-  padding-bottom: 5px
-
-a
-  color: black
-
-.submit
-  font-size: large
-  font-weight: bold
-
-.page_title
-  font-size: xx-large
-
-.edit_link
-  color: black
-  font-size: 14px
-  font-weight: bold
-  background-color: #e0e0e0
-  font-variant: small-caps
-  text-decoration: none
-
-.cancel
-  background-color: #e0e0e0
-  font-weight: normal
-  text-decoration: none
-  font-size: 14px 
-
-.cancel:before
-  content: &quot;(&quot;
-
-.cancel:after
-  content: &quot;)&quot;
+# FIXME this repeats the above just to accomodate pages with 
+# file extensions.  bad!
+get '/d/:page.:format/:rev' do
+  @page = Page.new(page_with_ext)
+  show :delta, &quot;Diff of #{@page.name}&quot;
+end</diff>
      <filename>git-wiki.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7bfdd2d3239f64f95426a8f44a9eb2df5c7725b1</id>
    </parent>
    <parent>
      <id>b0f4475857c54a55d030ea14f04137c96a771023</id>
    </parent>
  </parents>
  <author>
    <name>Scott Chacon</name>
    <email>schacon@gmail.com</email>
  </author>
  <url>http://github.com/jeffbski/git-wiki/commit/8e78701e35bdcbdc365f9569e2d52660900222e6</url>
  <id>8e78701e35bdcbdc365f9569e2d52660900222e6</id>
  <committed-date>2008-03-06T16:20:07-08:00</committed-date>
  <authored-date>2008-03-06T16:20:07-08:00</authored-date>
  <message>merged from sr</message>
  <tree>f77fa5c569be513985eabb98ef597ccec9d1b7ac</tree>
  <committer>
    <name>Scott Chacon</name>
    <email>schacon@gmail.com</email>
  </committer>
</commit>
