junebug-wiki 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ = 0.0.22 2006-11-28
2
+
3
+ * *EXISTING USERS PLEASE READ THE RELEASE NOTES*
4
+ * Data dump improvements
5
+ * Removed yahoo grids (weren't using them), page structure simplification
6
+ * Changed page naming convention (underscores in url, spaces in title and db)
7
+ * Changed header format to help avoid title duplication in text
8
+
1
9
  = 0.0.21 2006-11-26
2
10
 
3
11
  * *EXISTING USERS PLEASE READ THE RELEASE NOTES*
data/Manifest.txt CHANGED
@@ -10,7 +10,6 @@ deploy/console
10
10
  deploy/public/images/feed-icon-14x14.png
11
11
  deploy/public/style/base.css
12
12
  deploy/public/style/yui/fonts.css
13
- deploy/public/style/yui/grids.css
14
13
  deploy/public/style/yui/reset.css
15
14
  deploy/wiki
16
15
  dump/junebug_pages.yml
data/RELEASE_NOTES.txt CHANGED
@@ -1,3 +1,15 @@
1
+ = 0.0.22 2006-11-28
2
+
3
+ The wikiword syntax has changed slightly. Starting in this version, wikiwords can not contain underscores. Furthermore, in page urls, spaces will now be replaced by underscores. Example:
4
+
5
+ Invalid wikiword link syntax: [[Test_page]]
6
+
7
+ Valid wikiword link syntax: [[Test page]]
8
+ Corresponding page url: http://www.wiki.com/Test_page
9
+
10
+ Also, you will notice that the page title is now presented in the page body rather than the header. I was finding that the previous location in the header usually led me to rewrite the title in the body for clarity.
11
+
12
+
1
13
  = 0.0.21 2006-11-26
2
14
 
3
15
  The database configuration in config.yml has been changed to allow easy support for databases other than sqlite3. Existing junebug installations will need to make the following changes:
data/deploy/config.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  # this what you want to be the default wiki page
2
- startpage: JunebugWiki
2
+ startpage: Welcome_to_Junebug
3
3
 
4
4
  # server configuration
5
5
  host: 0.0.0.0
@@ -48,10 +48,16 @@ ins {
48
48
  /* PAGE STRUCTURE */
49
49
  body {
50
50
  background:#d7d7d7;
51
+ text-align: center;
52
+ min-width: 800px;
51
53
  }
52
54
 
53
55
  #doc {
54
56
  font-family: 'Lucida Grande', 'Trebuchet MS', Arial, Helvetica, sans-serif;
57
+ width: 800px;
58
+ margin-left: auto;
59
+ margin-right: auto;
60
+ text-align: left;
55
61
  }
56
62
 
57
63
  #hd {
@@ -59,13 +65,18 @@ body {
59
65
  background-color: #6677aa;
60
66
  padding: 8px 25px;
61
67
  color: #ffffff;
68
+ margin-bottom: 10px;
69
+ }
70
+
71
+ #hd #userlinks {
72
+ float: right;
62
73
  }
63
74
 
64
75
  #hd a {
65
76
  color: #ffffff;
66
77
  }
67
78
 
68
- #hd h1 a {
79
+ /*#hd h1 a {
69
80
  color: #ffffff;
70
81
  }
71
82
  #hd h1 a:link, #hd h1 a:visited {
@@ -77,7 +88,7 @@ body {
77
88
  font-size: 167%;
78
89
  padding-bottom: 5px;
79
90
  font-weight: normal;
80
- }
91
+ }*/
81
92
 
82
93
  #bd {
83
94
  background-color: #ffffff;
@@ -85,12 +96,6 @@ body {
85
96
  border-width:0 5px 5px 0;
86
97
  }
87
98
 
88
- #yui-main{
89
- }
90
-
91
- .yui-b{
92
- }
93
-
94
99
  #ft {
95
100
  border: 1px solid #eee;
96
101
  background-color: #ddd;
@@ -169,6 +174,7 @@ body {
169
174
  .content h1 {
170
175
  font-size: 182%;
171
176
  margin-bottom: 10px;
177
+ border-bottom: 2px dotted #bbb;
172
178
  }
173
179
 
174
180
  .content h2 {
@@ -1,10 +1,8 @@
1
1
  ---
2
2
  - updated_at: 2006-11-23 09:39:25 -08:00
3
- title: JunebugWiki
3
+ title: Welcome to Junebug
4
4
  readonly: true
5
5
  body: |
6
- h1. Welcome to Junebug!
7
-
8
6
  To complete setup of you new wiki, here are a few things you should do:
9
7
 
10
8
 
@@ -35,11 +33,9 @@
35
33
  user_id: 1
36
34
  created_at: 2006-10-29 16:19:34 -08:00
37
35
  - updated_at: 2006-11-23 12:08:56 -08:00
38
- title: JunebugHelp
36
+ title: Junebug help
39
37
  readonly:
40
38
  body: |
41
- h1. Junebug Help
42
-
43
39
  h2. Wiki Words
44
40
 
45
41
  Junebug will create a wiki link for any text enclosed in double brackets:
@@ -80,11 +76,9 @@
80
76
  user_id: 1
81
77
  created_at: 2006-11-01 00:10:07 -08:00
82
78
  - updated_at: 2006-11-23 09:42:05 -08:00
83
- title: TextileTest
79
+ title: Textile syntax test
84
80
  readonly:
85
81
  body: |-
86
- h1. Textile Syntax Test
87
-
88
82
  See "this page":http://hobix.com/textile/ for the full range of formatting options
89
83
 
90
84
  h2. Headers
@@ -9,72 +9,75 @@ module Junebug::Controllers
9
9
  end
10
10
  end
11
11
 
12
- class Show < R '/([\w ]+)', '/([\w ]+)/(\d+)'
12
+ class Show < R '/([0-9A-Za-z_]+)', '/([0-9A-Za-z_]+)/(\d+)'
13
13
  def get page_name, version = nil
14
- @page_title = page_name
15
14
  #redirect(Edit, page_name, 1) and return unless @page = Page.find_by_title(page_name)
16
- redirect("#{Junebug.config['url']}/#{page_name.gsub(/ /,'+')}/1/edit") and return unless @page = Page.find_by_title(page_name)
15
+ redirect("#{Junebug.config['url']}/#{page_name.gsub(/ /,'+')}/1/edit") and return unless @page = Page.find_by_title(page_name.gsub(/_/,' '))
16
+ @page_title = @page.title
17
17
  @version = (version.nil? or version == @page.version.to_s) ? @page : @page.versions.find_by_version(version)
18
18
  render :show
19
19
  end
20
20
  end
21
21
 
22
- class Edit < R '/([\w ]+)/edit', '/([\w ]+)/(\d+)/edit'
22
+ class Edit < R '/([0-9A-Za-z_]+)/edit', '/([0-9A-Za-z_]+)/(\d+)/edit'
23
23
  def get page_name, version = nil
24
24
  redirect("#{Junebug.config['url']}/login") and return unless logged_in?
25
- @page_title = "Edit #{page_name}"
26
- @page = Page.find(:first, :conditions=>['title = ?', page_name])
27
- @page = Page.create(:title => page_name, :user_id=>@state.user.id) unless @page
25
+ page_name_spc = page_name.gsub(/_/,' ')
26
+ @page = Page.find(:first, :conditions=>['title = ?', page_name_spc])
27
+ @page = Page.create(:title => page_name_spc, :user_id=>@state.user.id) unless @page
28
28
  @page = @page.versions.find_by_version(version) unless version.nil? or version == @page.version.to_s
29
+ @page_title = "Editing: #{page_name_spc}"
29
30
  render :edit
30
31
  end
31
32
 
32
33
  # FIXME: no error checking, also no verify quicksave/readonly rights
33
34
  def post page_name
34
35
  redirect("#{Junebug.config['url']}/login") and return unless logged_in?
36
+ page_name_spc = page_name.gsub(/_/,' ')
35
37
  if input.submit == 'save'
36
38
  if ! input.quicksave
37
39
  attrs = { :body => input.post_body, :title => input.post_title, :user_id =>@state.user.id }
38
40
  attrs[:readonly] = input.post_readonly if is_admin?
39
- Page.find_or_create_by_title(page_name).update_attributes(attrs)
41
+ Page.find_or_create_by_title(page_name_spc).update_attributes(attrs)
40
42
  else
41
43
  attrs = { :body => input.post_body }
42
44
  attrs[:readonly] = input.post_readonly if is_admin?
43
- page = Page.find_by_title(page_name)
45
+ page = Page.find_by_title(page_name_spc)
44
46
  current_version = page.find_version(page.version)
45
47
  current_version.update_attributes(attrs)
46
48
  page.without_revision { page.update_attributes(attrs) }
47
49
  end
48
50
  # redirect Show, input.post_title
49
- redirect "#{Junebug.config['url']}/#{input.post_title.gsub(/ /,'+')}"
51
+ redirect "#{Junebug.config['url']}/#{input.post_title.gsub(/ /,'_')}"
50
52
  else # cancel
51
- redirect "#{Junebug.config['url']}/#{page_name.gsub(/ /,'+')}"
53
+ redirect "#{Junebug.config['url']}/#{page_name}"
52
54
  end
53
55
  end
54
56
  end
55
57
 
56
- class Delete < R '/([\w ]+)/delete'
58
+ class Delete < R '/([0-9A-Za-z_]+)/delete'
57
59
  def get page_name
58
60
  redirect("#{Junebug.config['url']}/login") and return unless logged_in?
59
- Page.find_by_title(page_name).destroy() if is_admin?
61
+ Page.find_by_title(page_name.gsub(/_/,' ')).destroy() if is_admin?
60
62
  redirect Junebug.startpage
61
63
  end
62
64
 
63
65
  end
64
66
 
65
- class Revert < R '/([\w ]+)/(\d+)/revert'
67
+ class Revert < R '/([0-9A-Za-z_]+)/(\d+)/revert'
66
68
  def get page_name, version
67
69
  redirect("#{Junebug.config['url']}/login") and return unless logged_in?
68
- Page.find_by_title(page_name).revert_to!(version) if is_admin?
69
- redirect "#{Junebug.config['url']}/#{page_name.gsub(/ /,'+')}"
70
+ Page.find_by_title(page_name.gsub(/_/,' ')).revert_to!(version) if is_admin?
71
+ redirect "#{Junebug.config['url']}/#{page_name}"
70
72
  end
71
73
  end
72
74
 
73
- class Versions < R '/([\w ]+)/versions'
75
+ class Versions < R '/([0-9A-Za-z_]+)/versions'
74
76
  def get page_name
75
- @page_title = "Version History: #{page_name}"
76
- @page = Page.find_by_title(page_name)
77
+ page_name_spc = page_name.gsub(/_/,' ')
78
+ @page = Page.find_by_title(page_name_spc)
77
79
  @versions = @page.find_versions(:order => 'version DESC', :include => [:user])
80
+ @page_title = "Version History: #{page_name_spc}"
78
81
  render :versions
79
82
  end
80
83
  end
@@ -87,11 +90,12 @@ module Junebug::Controllers
87
90
  end
88
91
  end
89
92
 
90
- class Backlinks < R '/([\w ]+)/backlinks'
93
+ class Backlinks < R '/([0-9A-Za-z_]+)/backlinks'
91
94
  def get page_name
92
- @page = Page.find_by_title(page_name)
93
- @page_title = "Backlinks for: #{page_name}"
94
- @pages = Page.find(:all, :conditions => ["body LIKE ?", "%#{page_name}%"])
95
+ page_name_spc = page_name.gsub(/_/,' ')
96
+ @page = Page.find_by_title(page_name_spc)
97
+ @page_title = "Backlinks for: #{page_name_spc}"
98
+ @pages = Page.find(:all, :conditions => ["body LIKE ?", "%#{page_name_spc}%"])
95
99
  render :backlinks
96
100
  end
97
101
  end
@@ -104,11 +108,12 @@ module Junebug::Controllers
104
108
  end
105
109
  end
106
110
 
107
- class Diff < R '/([\w ]+)/(\d+)/(\d+)/diff'
111
+ class Diff < R '/([0-9A-Za-z_]+)/(\d+)/(\d+)/diff'
108
112
  include HTMLDiff
109
113
  def get page_name, v1, v2
110
- @page_title = "Diff: #{page_name}"
111
- @page = Page.find_by_title(page_name)
114
+ page_name_spc = page_name.gsub(/_/,' ')
115
+ @page_title = "Diff: #{page_name_spc}"
116
+ @page = Page.find_by_title(page_name_spc)
112
117
  @v1 = @page.find_version(v1)
113
118
  @v2 = @page.find_version(v2)
114
119
 
@@ -27,7 +27,7 @@ module Junebug::Helpers
27
27
 
28
28
  def diff_link(page, version=nil)
29
29
  version = page if version.nil?
30
- a 'diff', :href => R(Junebug::Controllers::Diff,page.title,version.version-1,version.version)
30
+ a 'diff', :href => R(Junebug::Controllers::Diff,page.title_url,version.version-1,version.version)
31
31
  end
32
32
 
33
33
  def auto_link_urls(text)
@@ -27,11 +27,11 @@ module Junebug::Models
27
27
  class Page < Base
28
28
  belongs_to :user
29
29
  #PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
30
- PAGE_LINK = /\[\[([\w ]+)[|]?([^\]]*)\]\]/
30
+ PAGE_LINK = /\[\[([0-9A-Za-z ]+)[|]?([^\]]*)\]\]/
31
31
  #before_save { |r| r.title = r.title.underscore }
32
32
  #PAGE_LINK = /([A-Z][a-z]+[A-Z]\w+)/
33
33
  validates_uniqueness_of :title
34
- validates_format_of :title, :with => /^[\w ]+$/
34
+ validates_format_of :title, :with => /^[0-9A-Za-z ]+$/
35
35
  validates_presence_of :title
36
36
  acts_as_versioned
37
37
  non_versioned_fields.push 'title'
@@ -39,6 +39,10 @@ module Junebug::Models
39
39
  def title=(text)
40
40
  write_attribute(:title, text ? text.strip.squeeze(' ') : text)
41
41
  end
42
+
43
+ def title_url
44
+ title.gsub(' ','_')
45
+ end
42
46
  end
43
47
 
44
48
  class Page::Version < Base
@@ -4,31 +4,53 @@ require 'active_record'
4
4
 
5
5
  namespace :dump do
6
6
 
7
+ desc 'Dump page and user data'
8
+ task :all => [:pages, :users]
9
+
7
10
  desc 'Dump wiki pages'
8
11
  task :pages do
12
+ Junebug.connect
13
+
9
14
  fixtures_dir = File.join('.', 'dump')
10
-
11
- # clean out fixtures dir
12
- puts "fixtures_dir: #{fixtures_dir}"
13
- Dir[File.join(fixtures_dir, '*')].each { |f| rm_f(f, :verbose => false) }
14
-
15
- # open db connection
16
- ActiveRecord::Base.establish_connection( :adapter => "sqlite3", :database => "./junebug.db")
17
-
15
+
18
16
  # open fixtures file
19
17
  File.open(File.join(fixtures_dir, "junebug_pages.yml"), 'w') do |file|
20
18
 
21
19
  # grab all pages
22
- pages = Junebug::Models::Page.find(:all)
23
- page_data = []
24
- pages.each do |page|
25
- page_data << page.attributes
20
+ objs = Junebug::Models::Page.find(:all)
21
+ data = []
22
+ objs.each do |obj|
23
+ data << obj.attributes
26
24
  end
27
25
 
28
- file.write page_data.to_yaml
26
+ file.write data.to_yaml
29
27
  end
30
28
 
31
29
  puts "Got pages and put them in #{fixtures_dir}."
32
30
  end
33
31
 
32
+ desc 'Dump user data'
33
+ task :users do
34
+ Junebug.connect
35
+
36
+ fixtures_dir = File.join('.', 'dump')
37
+
38
+ # open fixtures file
39
+ File.open(File.join(fixtures_dir, "junebug_users.yml"), 'w') do |file|
40
+
41
+ # grab all users
42
+ objs = Junebug::Models::User.find(:all)
43
+ data = []
44
+ objs.each do |obj|
45
+ data << obj.attributes
46
+ end
47
+
48
+ file.write data.to_yaml
49
+ end
50
+
51
+ puts "Got users and put them in #{fixtures_dir}."
52
+ end
53
+
54
+
55
+
34
56
  end
@@ -2,7 +2,7 @@ module Junebug #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 21
5
+ TINY = 22
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/lib/junebug/views.rb CHANGED
@@ -1,33 +1,34 @@
1
1
  require 'redcloth'
2
2
 
3
3
  module Junebug::Views
4
+
4
5
  def layout
5
6
  html {
6
7
  head {
7
8
  title @page_title ? @page_title : @page.title
8
9
  link :href=>'/style/yui/reset.css', :type=>'text/css', :rel=>'stylesheet'
9
10
  link :href=>'/style/yui/fonts.css', :type=>'text/css', :rel=>'stylesheet'
10
- link :href=>'/style/yui/grids.css', :type=>'text/css', :rel=>'stylesheet'
11
11
  link :href=>'/style/base.css', :type=>'text/css', :rel=>'stylesheet'
12
12
  link :href=>Junebug.config['feed'], :rel => "alternate", :title => "Recently Updated Pages", :type => "application/atom+xml"
13
-
14
13
  }
15
14
  body {
16
- div :id=>'doc', :class=>'yui-t7' do
15
+ div :id=>'doc' do
17
16
  self << yield
18
17
  end
19
18
  }
20
19
  }
21
20
  end
22
21
 
22
+
23
23
  def show
24
- _header (@version.version == @page.version ? :backlinks : :show), @page.title
25
- _body {
26
- _button 'edit', R(Edit, @page.title, @version.version), {:style=>'float: right; margin: 0 0 5px 5px;'} if logged_in? && (@version.version == @page.version && (! @page.readonly || is_admin?))
24
+ _header (@version.version == @page.version ? :backlinks : :show)
25
+ _body do
26
+ _button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 0 0 5px 5px;'} if logged_in? && (@version.version == @page.version && (! @page.readonly || is_admin?))
27
+ h1 @page.title
27
28
  _markup @version.body
28
- _button 'edit', R(Edit, @page.title, @version.version), {:style=>'float: right; margin: 5px 0 0 5px;'} if logged_in? && (@version.version == @page.version && (! @page.readonly || is_admin?)) && (@version.body && @version.body.size > 200)
29
+ _button 'edit', R(Edit, @page.title_url, @version.version), {:style=>'float: right; margin: 5px 0 0 5px;'} if logged_in? && (@version.version == @page.version && (! @page.readonly || is_admin?)) && (@version.body && @version.body.size > 200)
29
30
  br :clear=>'all'
30
- }
31
+ end
31
32
  _footer {
32
33
  text "Last edited by <b>#{@version.user.username}</b> on #{@page.updated_at.strftime('%B %d, %Y %I:%M %p')}"
33
34
  text " (#{diff_link(@page, @version)}) " if @version.version > 1
@@ -37,31 +38,33 @@ module Junebug::Views
37
38
  text "Version #{@version.version} "
38
39
  text "(current) " if @version.version == @page.version
39
40
  #text 'Other versions: '
40
- a '«older', :href => R(Show, @page.title, @version.version-1) unless @version.version == 1
41
- a 'newer»', :href => R(Show, @page.title, @version.version+1) unless @version.version == @page.version
42
- a 'current', :href => R(Show, @page.title) unless @version.version == @page.version
43
- a 'versions', :href => R(Versions, @page.title)
41
+ a '«older', :href => R(Show, @page.title_url, @version.version-1) unless @version.version == 1
42
+ a 'newer»', :href => R(Show, @page.title_url, @version.version+1) unless @version.version == @page.version
43
+ a 'current', :href => R(Show, @page.title_url) unless @version.version == @page.version
44
+ a 'versions', :href => R(Versions, @page.title_url)
44
45
  }
45
46
  }
46
47
  if is_admin?
47
48
  div.admin {
48
- _button 'delete', R(Delete, @page.title), {:onclick=>"return confirm('Sure you want to delete?')"} if @version.version == @page.version
49
- _button 'revert to', R(Revert, @page.title, @version.version), {:onclick=>"return confirm('Sure you want to revert?')"} if @version.version != @page.version
49
+ _button 'delete', R(Delete, @page.title_url), {:onclick=>"return confirm('Sure you want to delete?')"} if @version.version == @page.version
50
+ _button 'revert to', R(Revert, @page.title_url, @version.version), {:onclick=>"return confirm('Sure you want to revert?')"} if @version.version != @page.version
50
51
  }
51
52
  end
52
53
  end
53
54
 
55
+
54
56
  def edit
55
- _header :show, @page.title
56
- _body {
57
+ _header :show
58
+ _body do
59
+ h1 @page_title
57
60
  div.formbox {
58
- form :method => 'post', :action => R(Edit, @page.title) do
61
+ form :method => 'post', :action => R(Edit, @page.title_url) do
59
62
  p {
60
63
  label 'Page Title'
61
64
  br
62
65
  input :value => @page.title, :name => 'post_title', :size => 30,
63
66
  :type => 'text'
64
- small " word characters [0-9A-Za-z_] and spaces only"
67
+ small " word characters [0-9A-Za-z] and spaces only"
65
68
  }
66
69
  p {
67
70
  label 'Page Content'
@@ -85,18 +88,19 @@ module Junebug::Views
85
88
  a 'syntax help', :href => 'http://hobix.com/textile/', :target=>'_blank'
86
89
  br :clear=>'all'
87
90
  }
88
- }
91
+ end
89
92
  _footer { '' }
90
93
  end
91
94
 
95
+
92
96
  def versions
93
- _header :show, @page.title
94
- _body {
97
+ _header :show
98
+ _body do
95
99
  h1 @page_title
96
100
  ul {
97
101
  @versions.each_with_index do |page,i|
98
102
  li {
99
- a "version #{page.version}", :href => R(Show, @page.title, page.version)
103
+ a "version #{page.version}", :href => R(Show, @page.title_url, page.version)
100
104
  text " (#{diff_link(@page, page)}) " if page.version > 1
101
105
  text' - created '
102
106
  text last_updated(page)
@@ -106,36 +110,38 @@ module Junebug::Views
106
110
  }
107
111
  end
108
112
  }
109
- }
113
+ end
110
114
  _footer { '' }
111
115
  end
112
116
 
117
+
113
118
  def backlinks
114
- _header :show, @page.title
115
- _body {
119
+ _header :show
120
+ _body do
116
121
  h1 "Backlinks to #{@page.title}"
117
122
  ul {
118
123
  @pages.each { |p| li{ a p.title, :href => R(Show, p.title) } }
119
124
  }
120
- }
125
+ end
121
126
  _footer { '' }
122
127
  end
123
128
 
129
+
124
130
  def list
125
- _header :static, @page_title
126
- _body {
127
- h1 "All Wiki Pages"
131
+ _header :static
132
+ _body do
133
+ h1 "All wiki pages"
128
134
  ul {
129
- @pages.each { |p| li{ a p.title, :href => R(Show, p.title) } }
135
+ @pages.each { |p| li{ a p.title, :href => R(Show, p.title_url) } }
130
136
  }
131
- }
137
+ end
132
138
  _footer { '' }
133
139
  end
134
140
 
135
141
 
136
142
  def recent
137
- _header :static, @page_title
138
- _body {
143
+ _header :static
144
+ _body do
139
145
  h1 "Updates in the last 30 days"
140
146
  page = @pages.shift
141
147
  while page
@@ -144,9 +150,9 @@ module Junebug::Views
144
150
  ul {
145
151
  loop do
146
152
  li {
147
- a page.title, :href => R(Show, page.title)
153
+ a page.title, :href => R(Show, page.title_url)
148
154
  text ' ('
149
- a 'versions', :href => R(Versions, page.title)
155
+ a 'versions', :href => R(Versions, page.title_url)
150
156
  text ",#{diff_link(page)}" if page.version > 1
151
157
  text ') '
152
158
  span page.updated_at.strftime('%I:%M %p')
@@ -156,25 +162,25 @@ module Junebug::Views
156
162
  end
157
163
  }
158
164
  end
159
- }
165
+ end
160
166
  _footer { '' }
161
167
  end
162
168
 
163
169
  def diff
164
- _header :show, @page.title
165
- _body {
170
+ _header :show
171
+ _body do
166
172
  text 'Comparing '
167
173
  span "version #{@v2.version}", :style=>"background-color: #cfc; padding: 1px 4px;"
168
174
  text ' and '
169
175
  span "version #{@v1.version}", :style=>"background-color: #ddd; padding: 1px 4px;"
170
176
  text ' '
171
- a "back", :href => R(Show, @page.title)
177
+ a "back", :href => R(Show, @page.title_url)
172
178
  br
173
179
  br
174
180
  pre.diff {
175
- text @difftext
181
+ text @difftext
176
182
  }
177
- }
183
+ end
178
184
  _footer { '' }
179
185
  end
180
186
 
@@ -209,48 +215,53 @@ module Junebug::Views
209
215
  txt.gsub!(Junebug::Models::Page::PAGE_LINK) do
210
216
  page = title = $1
211
217
  title = $2 unless $2.empty?
212
- #page = page.gsub /\W/, '_'
218
+ page_url = page.gsub(/ /, '_')
213
219
  if titles.include?(page)
214
- %Q{<a href="#{self/R(Show, page)}">#{title}</a>}
220
+ %Q{<a href="#{self/R(Show, page_url)}">#{title}</a>}
215
221
  else
216
- %Q{<span>#{title}<a href="#{self/R(Edit, page, 1)}">?</a></span>}
222
+ %Q{<span>#{title}<a href="#{self/R(Edit, page_url, 1)}">?</a></span>}
217
223
  end
218
224
  end
219
225
  text RedCloth.new(auto_link_urls(txt), [ ]).to_html
220
226
  end
221
227
 
222
- def _header type, page_title
228
+ def _header type
223
229
  div :id=>'hd' do
224
- span :id=>'userlinks', :style=>'float: right;' do
225
- logged_in? ? (text "Welcome, #{@state.user.username} - " ; a('sign out', :href=>"#{R(Logout)}?return_to=#{@env['REQUEST_URI']}")) : a('sign in', :href=> "#{R(Login)}?return_to=#{@env['REQUEST_URI']}")
226
- end
227
- if type == :static
228
- h1 page_title
229
- elsif type == :backlinks
230
- h1 { a page_title, :href => R(Backlinks, page_title) }
231
- else
232
- h1 { a page_title, :href => R(Show, page_title) }
230
+
231
+ span :id=>'userlinks' do
232
+ if logged_in?
233
+ text "Welcome, #{@state.user.username} - "
234
+ a 'sign out', :href=>"#{R(Logout)}?return_to=#{@env['REQUEST_URI']}"
235
+ else
236
+ a 'sign in', :href=> "#{R(Login)}?return_to=#{@env['REQUEST_URI']}"
237
+ end
233
238
  end
234
- span {
239
+
240
+ span :id=>'navlinks' do
235
241
  a 'Home', :href => R(Show, Junebug.config['startpage'])
236
242
  text ' | '
237
243
  a 'RecentChanges', :href => R(Recent)
238
244
  text ' | '
239
245
  a 'All Pages', :href => R(List)
240
246
  text ' | '
241
- a 'Help', :href => R(Show, "JunebugHelp")
242
- }
247
+ a 'Help', :href => R(Show, "Junebug_help")
248
+ end
249
+
250
+ # if type == :static
251
+ # h1 page_title
252
+ # elsif type == :backlinks
253
+ # h1 { a page_title, :href => R(Backlinks, page_title) }
254
+ # else
255
+ # h1 { a page_title, :href => R(Show, page_title) }
256
+ # end
257
+
243
258
  end
244
259
  end
245
260
 
246
261
  def _body
247
262
  div :id=>'bd' do
248
- div :id=>'yui-main' do
249
- div :class=>'yui-b' do
250
- div.content do
251
- yield
252
- end
253
- end
263
+ div.content do
264
+ yield
254
265
  end
255
266
  end
256
267
  end
data/test/wiki_test.rb CHANGED
@@ -15,43 +15,43 @@ class JunebugTest < Camping::FunctionalTest
15
15
  def test_index
16
16
  get
17
17
  assert_response :redirect
18
- assert_redirected_to '/JunebugWiki'
18
+ assert_redirected_to '/Welcome_to_Junebug'
19
19
  end
20
20
 
21
21
  def test_start_page
22
- get '/JunebugWiki'
22
+ get '/Welcome_to_Junebug'
23
23
  assert_response :success
24
- assert_match_body %r!title>JunebugWiki</title!
24
+ assert_match_body %r!title>Welcome to Junebug</title!
25
25
  end
26
26
 
27
27
  def test_login
28
28
  post '/login', :username => 'admin', :password => 'password'
29
29
  assert_response :redirect
30
- assert_redirected_to '/JunebugWiki'
30
+ assert_redirected_to '/Welcome_to_Junebug'
31
31
 
32
32
  get '/logout'
33
33
  assert_response :redirect
34
- assert_redirected_to '/JunebugWiki'
34
+ assert_redirected_to '/Welcome_to_Junebug'
35
35
  end
36
36
 
37
37
  def test_required_login
38
- get '/JunebugWiki/edit'
38
+ get '/Welcome_to_Junebug/edit'
39
39
  assert_response :redirect
40
40
  assert_redirected_to '/login'
41
41
 
42
- get '/JunebugWiki/1/edit'
42
+ get '/Welcome_to_Junebug/1/edit'
43
43
  assert_response :redirect
44
44
  assert_redirected_to '/login'
45
45
 
46
- post '/JunebugWiki/edit'
46
+ post '/Welcome_to_Junebug/edit'
47
47
  assert_response :redirect
48
48
  assert_redirected_to '/login'
49
49
 
50
- get '/JunebugWiki/delete'
50
+ get '/Welcome_to_Junebug/delete'
51
51
  assert_response :redirect
52
52
  assert_redirected_to '/login'
53
53
 
54
- get '/JunebugWiki/1/revert'
54
+ get '/Welcome_to_Junebug/1/revert'
55
55
  assert_response :redirect
56
56
  assert_redirected_to '/login'
57
57
  end
@@ -100,9 +100,6 @@ class PageTest < Camping::UnitTest
100
100
 
101
101
  page = create(:title => 'test page')
102
102
  assert page.valid?
103
-
104
- page = create(:title => 'test_page')
105
- assert page.valid?
106
103
 
107
104
  page = create(:title => 'test')
108
105
  assert page.valid?
@@ -139,6 +136,10 @@ class PageTest < Camping::UnitTest
139
136
  page = create(:title => 'page\'s')
140
137
  deny page.valid?
141
138
  assert_not_nil page.errors.on(:title)
139
+
140
+ page = create(:title => 'test_title')
141
+ deny page.valid?
142
+ assert_not_nil page.errors.on(:title)
142
143
  end
143
144
 
144
145
  def test_unique_title
@@ -153,14 +154,6 @@ class PageTest < Camping::UnitTest
153
154
  # lowercase
154
155
  page2 = create(:title => 'testtitle')
155
156
  assert page2.valid?
156
-
157
- # create page with underscores
158
- page1 = create(:title => 'test_title')
159
- assert page1.valid?
160
-
161
- # different from page with spaces
162
- page1 = create(:title => 'test title')
163
- assert page1.valid?
164
157
  end
165
158
 
166
159
  def test_spaces
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: junebug-wiki
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.21
7
- date: 2006-11-26 00:00:00 -08:00
6
+ version: 0.0.22
7
+ date: 2006-11-28 00:00:00 -08:00
8
8
  summary: Junebug is a minimalist ruby wiki running on Camping.
9
9
  require_paths:
10
10
  - lib
@@ -41,7 +41,6 @@ files:
41
41
  - deploy/public/images/feed-icon-14x14.png
42
42
  - deploy/public/style/base.css
43
43
  - deploy/public/style/yui/fonts.css
44
- - deploy/public/style/yui/grids.css
45
44
  - deploy/public/style/yui/reset.css
46
45
  - deploy/wiki
47
46
  - dump/junebug_pages.yml
@@ -1,88 +0,0 @@
1
- /*
2
- Copyright (c) 2006, Yahoo! Inc. All rights reserved.
3
- Code licensed under the BSD License:
4
- http://developer.yahoo.net/yui/license.txt
5
- version: 0.11.3
6
- */
7
- body {
8
- text-align:center;
9
- }
10
-
11
- #doc {
12
- width:57.69em;
13
- *width:56.3em; /* IE */
14
- min-width:750px;
15
- margin:auto;
16
- text-align:left;
17
- }
18
-
19
- #hd,#bd {margin-bottom:1em;text-align:left;}
20
- #ft {/*font-size:77%;font-family:verdana;*/clear:both;}
21
-
22
- /* rules for main templates */
23
- .yui-t1 #yui-main .yui-b, .yui-t2 #yui-main .yui-b, .yui-t3 #yui-main .yui-b,
24
- .yui-t4 .yui-b, .yui-t5 .yui-b, .yui-t6 .yui-b {float:right;}
25
- .yui-t1 .yui-b, .yui-t2 .yui-b, .yui-t3 .yui-b, .yui-t4 #yui-main .yui-b, .yui-
26
- t5 #yui-main .yui-b, .yui-t6 #yui-main .yui-b {float:left;}
27
-
28
- /* t1: L160 */
29
- .yui-t1 #yui-main .yui-b {width:76%;min-width:570px;}
30
- .yui-t1 .yui-b {width:21.33%;min-width:160px;}
31
-
32
- /* t2 & t4: L180 & R180 */
33
- .yui-t2 #yui-main .yui-b, .yui-t4 #yui-main .yui-b {width:73.4%;min-
34
- width:550px;}
35
- .yui-t2 .yui-b, .yui-t4 .yui-b {width:24%;min-width:180px;}
36
-
37
- /* t3 & t6: L300 & R300 */
38
- .yui-t3 #yui-main .yui-b, .yui-t6 #yui-main .yui-b {width:57.6%;min-
39
- width:430px;}
40
- .yui-t3 .yui-b, .yui-t6 .yui-b {width:40%;min-width:300px;}
41
-
42
- /* t5: R240 */
43
- .yui-t5 #yui-main .yui-b {width:65.4%;min-width:490px;}
44
- .yui-t5 .yui-b {width:32%;min-width:240px;}
45
-
46
- /* t7: 750 */
47
-
48
-
49
-
50
- /* grid-generic rules for all templates */
51
-
52
- /* all modules and grids nested in a grid get floated */
53
- .yui-g .yui-u, .yui-g .yui-g, .yui-ge .yui-u, .yui-gf .yui-u {
54
- float:right;
55
- display:inline; /* IE */
56
- }
57
-
58
- /* float left and kill margin on first for added flex */
59
- .yui-g .first, .yui-gd .first, .yui-ge .first, .yui-gf .first {float:left; }
60
-
61
- /* 2 col */
62
- .yui-g .yui-u, .yui-g .yui-g {width:49.1%;}
63
- .yui-g .yui-g .yui-u {width:48.1%;} /* smaller for nested to preserve margins */
64
-
65
- /* 3 col */
66
- .yui-gb .yui-u, .yui-gc .yui-u, .yui-gd .yui-u {
67
- float:left; /* need to reverse the order for 3 */
68
- margin-left:2%; *margin-left:1.895%;
69
- width:32%;
70
- }
71
-
72
- .yui-gb .first, .yui-gc .first, .yui-gd .first {margin-left:0;}
73
-
74
- /* colspan 2 */
75
- .yui-gc .first, .yui-gd .yui-u {width:66%;}
76
- .yui-gd .first {width:32%;}
77
-
78
- /* colspan 3 */
79
- .yui-ge .yui-u {width:24%;}
80
- .yui-ge .first, .yui-gf .yui-u {width:74.2%;}
81
- .yui-gf .first {width:24%;}
82
- .yui-ge .first {width:74.2%;}
83
-
84
- /* self clear floated parent containers */
85
- #bd:after, .yui-g:after, .yui-gb:after, .yui-gc:after, .yui-gd:after, .yui-
86
- ge:after, .yui-gf:after
87
- {content:".";display:block;height:0;clear:both;visibility:hidden;}
88
- #bd, .yui-g, .yui-gb, .yui-gc, .yui-gd, .yui-ge, .yui-gf {zoom:1;} /* IE */