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 +8 -0
- data/Manifest.txt +0 -1
- data/RELEASE_NOTES.txt +12 -0
- data/deploy/config.yml +1 -1
- data/deploy/public/style/base.css +14 -8
- data/dump/junebug_pages.yml +3 -9
- data/lib/junebug/controllers.rb +31 -26
- data/lib/junebug/helpers.rb +1 -1
- data/lib/junebug/models.rb +6 -2
- data/lib/junebug/tasks/dump.rake +35 -13
- data/lib/junebug/version.rb +1 -1
- data/lib/junebug/views.rb +74 -63
- data/test/wiki_test.rb +14 -21
- metadata +2 -3
- data/deploy/public/style/yui/grids.css +0 -88
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
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
@@ -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
|
-
|
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 {
|
data/dump/junebug_pages.yml
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
---
|
2
2
|
- updated_at: 2006-11-23 09:39:25 -08:00
|
3
|
-
title:
|
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:
|
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:
|
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
|
data/lib/junebug/controllers.rb
CHANGED
@@ -9,72 +9,75 @@ module Junebug::Controllers
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
class Show < R '/([
|
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 '/([
|
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
|
-
|
26
|
-
@page = Page.find(:first, :conditions=>['title = ?',
|
27
|
-
@page = Page.create(:title =>
|
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(
|
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(
|
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
|
53
|
+
redirect "#{Junebug.config['url']}/#{page_name}"
|
52
54
|
end
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
class Delete < R '/([
|
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 '/([
|
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
|
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 '/([
|
75
|
+
class Versions < R '/([0-9A-Za-z_]+)/versions'
|
74
76
|
def get page_name
|
75
|
-
|
76
|
-
@page = Page.find_by_title(
|
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 '/([
|
93
|
+
class Backlinks < R '/([0-9A-Za-z_]+)/backlinks'
|
91
94
|
def get page_name
|
92
|
-
|
93
|
-
@
|
94
|
-
@
|
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 '/([
|
111
|
+
class Diff < R '/([0-9A-Za-z_]+)/(\d+)/(\d+)/diff'
|
108
112
|
include HTMLDiff
|
109
113
|
def get page_name, v1, v2
|
110
|
-
|
111
|
-
@
|
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
|
|
data/lib/junebug/helpers.rb
CHANGED
@@ -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.
|
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)
|
data/lib/junebug/models.rb
CHANGED
@@ -27,11 +27,11 @@ module Junebug::Models
|
|
27
27
|
class Page < Base
|
28
28
|
belongs_to :user
|
29
29
|
#PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
|
30
|
-
PAGE_LINK = /\[\[([
|
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 => /^[
|
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
|
data/lib/junebug/tasks/dump.rake
CHANGED
@@ -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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
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
|
data/lib/junebug/version.rb
CHANGED
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'
|
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)
|
25
|
-
_body
|
26
|
-
_button 'edit', R(Edit, @page.
|
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.
|
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.
|
41
|
-
a 'newer»', :href => R(Show, @page.
|
42
|
-
a 'current', :href => R(Show, @page.
|
43
|
-
a 'versions', :href => R(Versions, @page.
|
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.
|
49
|
-
_button 'revert to', R(Revert, @page.
|
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
|
56
|
-
_body
|
57
|
+
_header :show
|
58
|
+
_body do
|
59
|
+
h1 @page_title
|
57
60
|
div.formbox {
|
58
|
-
form :method => 'post', :action => R(Edit, @page.
|
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-
|
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
|
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.
|
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
|
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
|
126
|
-
_body
|
127
|
-
h1 "All
|
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.
|
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
|
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.
|
153
|
+
a page.title, :href => R(Show, page.title_url)
|
148
154
|
text ' ('
|
149
|
-
a 'versions', :href => R(Versions, page.
|
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
|
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.
|
177
|
+
a "back", :href => R(Show, @page.title_url)
|
172
178
|
br
|
173
179
|
br
|
174
180
|
pre.diff {
|
175
|
-
|
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
|
-
|
218
|
+
page_url = page.gsub(/ /, '_')
|
213
219
|
if titles.include?(page)
|
214
|
-
%Q{<a href="#{self/R(Show,
|
220
|
+
%Q{<a href="#{self/R(Show, page_url)}">#{title}</a>}
|
215
221
|
else
|
216
|
-
%Q{<span>#{title}<a href="#{self/R(Edit,
|
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
|
228
|
+
def _header type
|
223
229
|
div :id=>'hd' do
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
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
|
-
|
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, "
|
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
|
249
|
-
|
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 '/
|
18
|
+
assert_redirected_to '/Welcome_to_Junebug'
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_start_page
|
22
|
-
get '/
|
22
|
+
get '/Welcome_to_Junebug'
|
23
23
|
assert_response :success
|
24
|
-
assert_match_body %r!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 '/
|
30
|
+
assert_redirected_to '/Welcome_to_Junebug'
|
31
31
|
|
32
32
|
get '/logout'
|
33
33
|
assert_response :redirect
|
34
|
-
assert_redirected_to '/
|
34
|
+
assert_redirected_to '/Welcome_to_Junebug'
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_required_login
|
38
|
-
get '/
|
38
|
+
get '/Welcome_to_Junebug/edit'
|
39
39
|
assert_response :redirect
|
40
40
|
assert_redirected_to '/login'
|
41
41
|
|
42
|
-
get '/
|
42
|
+
get '/Welcome_to_Junebug/1/edit'
|
43
43
|
assert_response :redirect
|
44
44
|
assert_redirected_to '/login'
|
45
45
|
|
46
|
-
post '/
|
46
|
+
post '/Welcome_to_Junebug/edit'
|
47
47
|
assert_response :redirect
|
48
48
|
assert_redirected_to '/login'
|
49
49
|
|
50
|
-
get '/
|
50
|
+
get '/Welcome_to_Junebug/delete'
|
51
51
|
assert_response :redirect
|
52
52
|
assert_redirected_to '/login'
|
53
53
|
|
54
|
-
get '/
|
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.
|
7
|
-
date: 2006-11-
|
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 */
|