sqliki_generator 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/USAGE CHANGED
@@ -28,3 +28,4 @@ EXAMPLE
28
28
  /wiki/rollback/(draft)
29
29
 
30
30
  The tables are always called pages, drafts, and links
31
+
@@ -2,19 +2,19 @@ require 'rubygems'
2
2
 
3
3
  SPEC = Gem::Specification.new do |s|
4
4
  s.name = %q{sqliki_generator}
5
- s.version = "0.0.2"
6
- s.date = %q{2005-08-25}
5
+ s.version = "0.0.4"
6
+ s.date = %q{2005-09-03}
7
7
  s.summary = %q{[Rails] SQL-based wiki generator.}
8
8
  s.require_paths = ["."]
9
9
  s.email = %q{Markus@reality.com}
10
- s.homepage = %q{http://www.rubyonrails.org/show/Generators}
10
+ s.homepage = %q{http://rubyforge.org/projects/sqliki/}
11
11
  s.description = %q{Generates code for (primative) a SQL-based wiki within your Rails app.}
12
12
  s.authors = ["Markus J. Q. Roberts"]
13
13
  s.files = %w{
14
14
  USAGE
15
15
  templates/lib_sanitize_html.rb
16
+ templates/lib_roparojo.rb
16
17
  templates/README
17
- templates/model_draft.rb
18
18
  templates/view_edit.rhtml
19
19
  templates/view__form.rhtml
20
20
  templates/view_inplace_edit.rhtml
@@ -22,14 +22,15 @@ SPEC = Gem::Specification.new do |s|
22
22
  templates/view_create.rhtml
23
23
  templates/view_rollback.rhtml
24
24
  templates/view_show.rhtml
25
+ templates/model_draft.rb
25
26
  templates/model_link.rb
26
27
  templates/model_page.rb
27
28
  templates/controller_sqliki_controller.rb
28
29
  sqliki_generator.rb
29
- sqliki_generator-0.0.2.gemspec
30
+ sqliki_generator-0.0.4.gemspec
30
31
  }
31
32
  s.add_dependency('rails', [">= 0.13.1"])
32
- s.add_dependency('redcloth')
33
+ s.add_dependency('RedCloth')
33
34
  end
34
35
 
35
36
  if $0 == __FILE__
@@ -16,7 +16,7 @@ class SqlikiGenerator < Rails::Generator::NamedBase
16
16
  m.template "controller_sqliki_controller.rb",File.join("app/controllers", class_path, "#{file_name}_controller.rb")
17
17
 
18
18
  # Libs.
19
- %w{sanitize_html}.each do |x|
19
+ %w{sanitize_html roparojo}.each do |x|
20
20
  m.template "lib_#{x}.rb",File.join("lib", class_path, "#{x}.rb")
21
21
  end
22
22
 
@@ -1,6 +1,9 @@
1
1
  == Installation
2
2
 
3
- NOTE: THIS IS THE VERY FIRST ALPHA VERSION OF SQLIKI!!!
3
+ NOTE: THIS IS A LATE ALPHA VERSION OF SQLIKI
4
+
5
+ It is in use by several people, and almost ready to go beta.
6
+ But it is not feature-complete, and probably still has bugs.
4
7
 
5
8
  Done generating SQLiki. but there are still a few things you have to
6
9
  do manually.
@@ -82,6 +85,77 @@ CREATE TABLE links (
82
85
 
83
86
  == Tips & Tricks
84
87
 
88
+ === Inplace editing
89
+
90
+ This is still very alpha; it's working for me, but not yet well integrated in
91
+ the generator. If you want to hack on it, feel free, or you can wait until
92
+ I've given it a bit more testing/polish. Basically, in addition to SQLiki and
93
+ the usual ajax javascript, you will need to add something like this to your
94
+ application controller:
95
+
96
+ ------------------------------------------------------------------------------------
97
+ after_filter :wikify
98
+ def wiki_fetch(word)
99
+ (p = Page.find(word)) ? p.current_draft.html : ''
100
+ end
101
+ def wiki_text(word)
102
+ word = $2 if word =~ /<a.*\/(show|new)\/(.+?)">.+?<\/a>/
103
+ word = $2 if word =~ /&lt;a.*\/(show|new)\/(.+?)&quot;&gt;.+?&lt;\/a&gt;/ #may only be needed because of another bug...
104
+ word = word.gsub(/\\/,'')
105
+ %Q{<div
106
+ id='web_#{word}'
107
+ class='wiki_edit_block'
108
+ ondblclick="#{remote_function(:url => { :controller => 'wiki', :action => 'inplace_edit', :id => word}, :update => "web_#{word}", :method => 'get')};"
109
+ >
110
+ #{wikify(wiki_fetch(word))}
111
+ </div>}
112
+ end
113
+ def wiki_link(word,mode=:show,content=word)
114
+ "<a class='wiki_#{mode}_link' href='http://127.0.0.1:2500/wiki/#{mode}/#{word}'>#{content}</a>"
115
+ end
116
+ def wikify(what = @response.body)
117
+ processing = true
118
+ what.gsub!(/wiki_(link|text|processing)\[(.+?)\]/) {
119
+ case $1
120
+ when 'processing' then processing = $2 == 'on'; ''
121
+ when 'text' then processing ? wiki_text($2) : "wiki_#{$1}[#{$2}]"
122
+ else processing ? wiki_link($2) : "wiki_#{$1}[#{$2}]"
123
+ end
124
+ }
125
+ what
126
+ end
127
+ ------------------------------------------------------------------------------------
128
+
129
+ and something like this to your css so you can identify editable blocks (intentionally
130
+ ugly colours to prompt you to choose your own):
131
+
132
+ ------------------------------------------------------------------------------------
133
+
134
+ div.wiki_edit_block { padding-right: 3px; }
135
+ div.wiki_edit_block:hover {
136
+ background-color: #8f0;
137
+ color: black;
138
+ padding-right: 0px;
139
+ border-right: solid 1px f08;
140
+ margin-right: 2px;
141
+ }
142
+
143
+
144
+ ------------------------------------------------------------------------------------
145
+
146
+ Then, in your web pages, just put "wiki_text[MyPage]" wherever you want to get the
147
+ content from the wiki as in-place editable text (double click to edit).
148
+
149
+ Planned extentions:
150
+
151
+ * page-by-page access control (so that only authorized users can see/edit text)
152
+ *
153
+
154
+ Planned uses:
155
+
156
+ * A help system generator
157
+ *
158
+
85
159
  == Changelog
86
160
 
87
161
  0.0.1
@@ -90,6 +164,26 @@ CREATE TABLE links (
90
164
  Made the name of the controller changeable
91
165
  Removed the system specific path for RedCloth
92
166
  Implemented Orphaned/Wanted/Recently_revised
93
- Cleaned up the controller interface (w. the the
94
- trick from Tobias Luetke's Postback Generator)
167
+ Cleaned up the controller interface (w. the the trick from
168
+ Tobias Luetke's Postback Generator)
169
+ 0.0.3
170
+ Fixed two typos in the gemspec that were making it hard for
171
+ some people to install
172
+ 0.0.4
173
+ Added ".id" to the Uses of "User.current_user" to fix a bug
174
+ which misattributed pages
175
+ Reworked & cleaned up page name canonicalization
176
+ Split RopoRoja (RedCloth wrapper) off to its own file in /lib/
177
+ Added rudamentary tab/notebook/accordion support (Sabre Airline
178
+ Solutions's rico.js library is needed for this; see
179
+ http://openrico.org/rico/home.page)
180
+ Got inplace_editing working (additional code needed in
181
+ application. See README_SQL/Tips & Tricks/Inplace editing)
182
+ Fixed a minor cross-browser ("Is the IE development team on
183
+ drugs?!") bug.
184
+ Began live testing with the goal of releasing a 0.1.0 beta in a
185
+ week or so.
186
+
187
+
188
+
95
189
 
@@ -3,7 +3,7 @@ class <%= class_name %>Controller < ApplicationController
3
3
  include LoginSystem
4
4
  before_filter :login_required
5
5
  def identify_page
6
- @page ||= Page.find_by_title(params[:id])
6
+ @page ||= Page.find(Page.key_from_URL(params[:id]))
7
7
  end
8
8
  def index
9
9
  list
@@ -55,9 +55,11 @@ class <%= class_name %>Controller < ApplicationController
55
55
  end
56
56
  def inplace_edit
57
57
  if not identify_page
58
- redirect_to(:action => 'create', :id => @params[:id])
58
+ render :action => 'create', :layout => false
59
59
  elsif @request.post? and @page.update_attributes(params[:page])
60
- redirect_to :action => 'html', :id => @page.title
60
+ html
61
+ else
62
+ render :action => 'inplace_edit', :layout => false
61
63
  end
62
64
  end
63
65
  def edit
@@ -72,5 +74,9 @@ class <%= class_name %>Controller < ApplicationController
72
74
  identify_page.destroy if @request.post?
73
75
  redirect_to :action => 'list'
74
76
  end
77
+ #def wikify(what = @response.body)
78
+ # # don't wikify the wiki!
79
+ # super if %w{cancel_inplace_edit save_inplace}.include? @params[:action]
80
+ # end
75
81
  end
76
82
 
@@ -0,0 +1,140 @@
1
+ require 'redcloth'
2
+
3
+ class RopaRojo < RedCloth
4
+ def hard_break(text)
5
+ @rules.each do |rule_name|
6
+ method( rule_name ).call( text ) if rule_name.to_s.match /^pre_/
7
+ end
8
+ #super
9
+ end
10
+ def to_html(*rules,&callback)
11
+ @callback = callback
12
+ rules = DEFAULT_RULES if rules.empty?
13
+ text = super(*([:pre_accordion,:pre_wiki_words,:pre_make_divs,:post_add_toggle]+rules))
14
+ @rules.each do |rule_name|
15
+ method( rule_name ).call( text ) if rule_name.to_s.match /^post_/
16
+ end
17
+ text
18
+ end
19
+ def htmlesc(str,mode)
20
+ super
21
+ str
22
+ end
23
+ ACCEDENTAL_WIKI_WORD = /(([A-Z]+[a-z0-9]+){2,})/
24
+ def text_from(lines,block_type=nil)
25
+ result = []
26
+ while line = lines.shift and not (line =~ /^\.wiki_(?:accordion|notebook|tab)_end/)
27
+ result << case line
28
+ when /^\.wiki_accordion *(.*)$/
29
+ name = "accordionDiv#{@panel}"
30
+ "\n<div #{(shelve %Q{id="#{name}" class="accordionDiv"})}>"+
31
+ text_from(lines,'accordion')+
32
+ %Q{</div>
33
+ <script type="text/javascript" language="javascript">
34
+ // <![CDATA[
35
+ #{ shelve "new Rico.Accordion( $('#{name}'), {panelHeight:350} );"}
36
+ // ]]>
37
+ </script>
38
+ }
39
+ when /^\.wiki_notebook *(.*)$/
40
+ when /^\.wiki_tab *(.*)$/
41
+ @panel += 1
42
+ (shelve %Q{
43
+ <div id="panel#{@panel}">
44
+ <div id="panel#{@panel}Header" class="accordionTabTitleBar">})+$1+"</div>"+
45
+ (shelve %Q{<div id="panel#{@panel}Content" class="accordionTabContentBox"><div>})+
46
+ text_from(lines,'tab')+
47
+ "</div></div></div>"
48
+ else line
49
+ end
50
+ end
51
+ if line and block_type and line !~ /^\.wiki_#{block_type}_end/
52
+ lines.unshift line
53
+ line = nil
54
+ end
55
+ lines.unshift "\nERROR: expected '.wiki_#{block_type}_end'\n" if block_type and !line
56
+ lines.unshift "\nERROR: unexpected '#{line}'\n" if line and !block_type
57
+ result.join
58
+ end
59
+ def pre_accordion(text)
60
+ @panel = 1
61
+ lines = text.split(/^(\.wiki_(?:accordion|notebook|tab)(?:_end)?.*?)$/im)
62
+ text.replace text_from(lines)
63
+ end
64
+ # Bracket free text consists of either
65
+ # characters that are not "{" or "}",
66
+ # one or two "{"s, not followed by a third "{",
67
+ # one or two "}"s, not followed by a third "}",
68
+ #
69
+ BRACKET_FREE_TEXT = "((:?[^{}]|[{]{1,2}(?![{])|[}]{1,2}(?![}]))*?)"
70
+ DIV_BRACKETS = /\{\{\{#{BRACKET_FREE_TEXT}\}\}\}/m
71
+ ALT_TEXT = /
72
+ (
73
+ ([\s\[{(]|[#{PUNCT}])? # $pre
74
+ " # start
75
+ (#{C}) # $atts
76
+ ([^"]+?) # $text
77
+ \s?
78
+ (?:\(([^)]+?)\)(?="))? # $title
79
+ ":
80
+ )?
81
+ /mx
82
+ XDIV_RE = /
83
+ (
84
+ ([\s\[{(]|[#{PUNCT}])? # $pre
85
+ " # start
86
+ (#{C}) # $atts
87
+ ([^"]+?) # $text
88
+ \s?
89
+ (?:\(([^)]+?)\)(?="))? # $title
90
+ ":
91
+ )?
92
+ #{DIV_BRACKETS} # $div_block
93
+ /mx
94
+ DIV_RE = /#{ALT_TEXT}#{DIV_BRACKETS}/m
95
+
96
+ def pre_make_divs( text )
97
+ ## break the text into <div> blocks based on {{{ ... }}}
98
+ while text.gsub!( DIV_RE ) { |m|
99
+ has_link,pre,atts,link_text,title,div_block = $~.captures
100
+ if has_link
101
+ @need_toggle_function = true
102
+ id = "div_#{rand(100000)}"
103
+ atts = shelve(" onclick=\"toggle('#{id}'); return false;\" #{ pba(atts) } title=\"#{ title||'more...' }\"")
104
+ "#{ pre }<a#{ atts }>#{ link_text }</a><div id=\"#{id}\" style=\"display:none\">#{div_block}</div>"
105
+ else
106
+ "<div #{shelve(attrs) }>#{div_block}</div>"
107
+ end
108
+ }; end
109
+ text
110
+ end
111
+ def post_add_toggle(text)
112
+ text << %q{
113
+ <script type="text/javascript" language="JavaScript">
114
+ <!--
115
+ function toggle(name) {
116
+ q=document.getElementById(name);
117
+ if (q.style.display == 'none')
118
+ {q.style.display = 'block';}
119
+ else
120
+ {q.style.display = 'none';};
121
+ }
122
+ //-->
123
+ </script>
124
+ } if @need_toggle_function
125
+ end
126
+ NOT_WIKI_WORD = /\\(([A-Z]+[a-z0-9]+){2,})/
127
+ WIKI_WORD = /#{ALT_TEXT}(([A-Z]+['a-z1-9]+){2,})/
128
+ WIKI_PHRASE = /#{ALT_TEXT}\[\[(.*?)\]\]/m
129
+ def pre_wiki_words(text)
130
+ text.gsub!(NOT_WIKI_WORD) { |m| shelve $1 }
131
+ [WIKI_PHRASE,WIKI_WORD].each {|pattern|
132
+ text.gsub!(pattern) { |m|
133
+ has_link,pre,atts,link_text,title,ww = $~.captures
134
+ (pre||'') + shelve(@callback.call(:wiki_link,pattern,pba(atts),link_text,ww))
135
+ }
136
+ }
137
+ text
138
+ end
139
+ end
140
+
@@ -1,5 +1,6 @@
1
1
  require 'sanitize_html'
2
- require 'redcloth'
2
+ require 'roparojo'
3
+ require 'cgi'
3
4
 
4
5
  class Draft < ActiveRecord::Base
5
6
  acts_as_tree :foreign_key => 'based_on_draft_id'
@@ -13,129 +14,27 @@ class Draft < ActiveRecord::Base
13
14
  def raw
14
15
  body
15
16
  end
16
- class RopaRojo < RedCloth
17
- def hard_break(text)
18
- @rules.each do |rule_name|
19
- method( rule_name ).call( text ) if rule_name.to_s.match /^pre_/
20
- end
21
- super
22
- end
23
- def to_html(*rules,&callback)
24
- @callback = callback
25
- rules = DEFAULT_RULES if rules.empty?
26
- text = super(*([:pre_wiki_words,:pre_make_divs,:post_add_toggle]+rules))
27
- end
28
- def htmlesc(str,mode)
29
- super
30
- str
31
- end
32
- # Bracket free text consists of either
33
- # characters that are not "{" or "}",
34
- # one or two "{"s, not followed by a third "{",
35
- # one or two "}"s, not followed by a third "}",
36
- #
37
- BRACKET_FREE_TEXT = "((:?[^{}]|[{]{1,2}(?![{])|[}]{1,2}(?![}]))*?)"
38
- DIV_BRACKETS = /\{\{\{#{BRACKET_FREE_TEXT}\}\}\}/m
39
- ALT_TEXT = /
40
- (
41
- ([\s\[{(]|[#{PUNCT}])? # $pre
42
- " # start
43
- (#{C}) # $atts
44
- ([^"]+?) # $text
45
- \s?
46
- (?:\(([^)]+?)\)(?="))? # $title
47
- ":
48
- )?
49
- /mx
50
- XDIV_RE = /
51
- (
52
- ([\s\[{(]|[#{PUNCT}])? # $pre
53
- " # start
54
- (#{C}) # $atts
55
- ([^"]+?) # $text
56
- \s?
57
- (?:\(([^)]+?)\)(?="))? # $title
58
- ":
59
- )?
60
- #{DIV_BRACKETS} # $div_block
61
- /mx
62
- DIV_RE = /#{ALT_TEXT}#{DIV_BRACKETS}/m
63
-
64
- def pre_make_divs( text )
65
- ## break the text into <div> blocks based on {{{ ... }}}
66
- while text.gsub!( DIV_RE ) { |m|
67
- has_link,pre,atts,link_text,title,div_block = $~.captures
68
- if has_link
69
- @need_toggle_function = true
70
- id = "div_#{rand(100000)}"
71
- atts = shelve(" onclick=\"toggle('#{id}'); return false;\" #{ pba(atts) } title=\"#{ title||'more...' }\"")
72
- "#{ pre }<a#{ atts }>#{ link_text }</a><div id=\"#{id}\" style=\"display:none\">#{div_block}</div>"
73
- else
74
- "<div #{shelve(attrs) }>#{div_block}</div>"
75
- end
76
- }; end
77
- text
78
- end
79
- def post_add_toggle(text)
80
- text << %q{
81
- <script type="text/javascript" language="JavaScript">
82
- <!--
83
- function toggle(name) {
84
- q=document.getElementById(name);
85
- if (q.style.display == 'none')
86
- {q.style.display = 'block';}
87
- else
88
- {q.style.display = 'none';};
89
- }
90
- //-->
91
- </script>
92
- } if @need_toggle_function
93
- end
94
- NOT_WIKI_WORD = /\\(([A-Z]+[a-z0-9]+){2,})/
95
- WIKI_WORD = /#{ALT_TEXT}(([A-Z]+[a-z1-9]+){2,})/
96
- WIKI_PHRASE = /#{ALT_TEXT}\[\[(.*?)\]\]/m
97
- def split_wiki_word(ww)
98
- ww.gsub(/([a-z0-9])([A-Z])/,'\1 \2');
99
- end
100
- def clean_wiki_word(ww)
101
- ww.gsub(/[^A-Za-z0-9$-_.+!*'(),]/,'')
102
- end
103
- include ActionView::Helpers::TagHelper
104
- include ActionView::Helpers::UrlHelper
105
- def wiki_link(link_text,ww)
106
- (@callback && @callback.call(:wiki_link,link_text,ww)) ||
107
- (link_to link_text, "/<%= file_name %>/show/#{clean_wiki_word(ww)}")
108
- end
109
- def pre_wiki_words(text)
110
- text.gsub!(NOT_WIKI_WORD) { |m| shelve $1 }
111
- [WIKI_PHRASE,WIKI_WORD].each {|pattern|
112
- text.gsub!(pattern) { |m|
113
- has_link,pre,atts,link_text,title,ww = $~.captures
114
- ww = split_wiki_word(ww) if pattern == WIKI_WORD
115
- (pre||'') + shelve(wiki_link("<span #{pba(atts)}>#{link_text||ww}</span>",ww))
116
- }
117
- }
118
- text
119
- end
120
- end
121
- def textilize(body) #html
122
- if body.blank?
123
- ""
124
- else
17
+ include ActionView::Helpers::TagHelper
18
+ include ActionView::Helpers::UrlHelper
19
+ def html
20
+ @controller = []
21
+ #ObjectSpace.each_object(<%= class_name %>Controller) { |wc| @controller = wc }
22
+ ObjectSpace.each_object(ApplicationController) { |wc| @controller = wc }
23
+ sanitize_html(
125
24
  RopaRojo.new(body, [:hard_breaks ]).to_html { |event,*details|
126
25
  case event
127
26
  when :wiki_link
128
- link_text,ww = *details
129
- page = (Page.find_by_title(ww) || Page.new_page(ww))
27
+ pattern,attributes,link_text,ww = *details
28
+ ww = Page.key_from_CamelCase(ww) if pattern == RopaRojo::WIKI_WORD
29
+ page = (Page.find(ww) || Page.new_page(ww))
30
+ ww = page.title
130
31
  links << page unless links.include? page
131
- nil
32
+ #link_to "<span #{attributes}>#{link_text||ww}</span>",:action => "show", :id => page.for_URL
33
+ link_to "<span #{attributes}>#{link_text||ww}</span>",:controller => "<%= file_name %>", :action => "show", :id => page.for_URL
132
34
  else
133
35
  nil
134
36
  end
135
- }
136
- end
137
- end
138
- def html
139
- sanitize_html(textilize(body))
37
+ })
140
38
  end
141
39
  end
40
+
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  class Page < ActiveRecord::Base
2
4
  belongs_to :current_draft, :class_name => 'Draft', :foreign_key => :current_draft_id
3
5
  has_many :drafts, :foreign_key => :draft_of_page_id
@@ -7,7 +9,7 @@ class Page < ActiveRecord::Base
7
9
  validates_length_of :title, :within => 1..80
8
10
  validates_presence_of :title
9
11
  def self.new_page(title)
10
- p = Page.new :created_by => User.current_user, :title => title
12
+ p = Page.new :created_by => User.current_user.id, :title => title
11
13
  p.raw = ''
12
14
  p
13
15
  end
@@ -18,7 +20,7 @@ class Page < ActiveRecord::Base
18
20
  d = Draft.new(
19
21
  :body => new_text || '',
20
22
  :based_on_draft_id => self.current_draft && self.current_draft.id,
21
- :created_by => User.current_user
23
+ :created_by => User.current_user.id
22
24
  );
23
25
  d.save;
24
26
  self.current_draft = d
@@ -28,4 +30,33 @@ class Page < ActiveRecord::Base
28
30
  def html
29
31
  current_draft.html
30
32
  end
33
+ #
34
+ # Key/URL/title/text canonicalization
35
+ #
36
+ def self.key_from_CamelCase(s)
37
+ s.gsub(/([a-z])([A-Z][a-z])/,'\1 \2')
38
+ end
39
+ def self.key_from_URL(s)
40
+ URI.unescape(s||'').gsub(/[+_]/,' ').gsub(/''/,'"')
41
+ end
42
+ def self.key_from_text(s)
43
+ s.gsub(/[+_]/,' ').gsub(/''/,'"')
44
+ end
45
+ def for_URL
46
+ URI.escape(title.gsub(/ /,'+').gsub(/"/,"''"),/[^-A-Za-z0-9$_.+!*'(),]/)
47
+ end
48
+ #def split_wiki_word(ww)
49
+ # ww.gsub(/([a-z0-9])([A-Z])/,'\1 \2');
50
+ # end
51
+ #def clean_wiki_word(ww)
52
+ # ww.gsub(/[^-A-Za-z0-9$_.+!*'(),]/,'')
53
+ # end
54
+ def self.find(*s)
55
+ return super(*s) unless s.length == 1 and s.first.is_a? String
56
+ s = key_from_text(s.first)
57
+ find_by_title(s) ||
58
+ ((s =~ /[a-z][A-Z][a-z]/) && find_by_title(key_from_CamelCase(s))) ||
59
+ find_by_sql(["SELECT * FROM pages WHERE REPLACE(title,' ','')=?",s.gsub(/ /,'')]).first
60
+ end
31
61
  end
62
+
@@ -1,12 +1,13 @@
1
1
  <%%= error_messages_for 'page' %>
2
2
 
3
3
  <!--[form:page]-->
4
-
4
+ <!-- wiki_processing[off] -->
5
5
  <%% unless @page.title %>
6
6
  <p><label for="page_title">Title</label><br/>
7
7
  <%%= text_field 'page', 'title' %></p>
8
8
  <%% end %>
9
9
  <%%= text_area 'page', 'raw' %></p>
10
10
 
11
+ <!-- wiki_processing[on] -->
11
12
  <!--[eoform:page]-->
12
13
 
@@ -1,2 +1,15 @@
1
- <h1>Page#inplace_edit</h1>
2
- <p>Find me in app/views/page/inplace_edit.rhtml</p>
1
+ <h1><%%= @page.title %></h1>
2
+
3
+ <%%= form_remote_tag(:html => {}, :url => { :action => 'inplace_edit', :id => @params[:id]}, :update => "web_#{@params[:id]}") %>
4
+ <%%= render_partial 'form' %>
5
+ <%%= submit_tag 'Save changes' %>
6
+ <%%= link_to_function(
7
+ 'Cancel edit',
8
+ remote_function(
9
+ :url => { :controller => 'wiki', :action => 'html', :id => @params[:id]},
10
+ :update => "web_#{@params[:id]}"
11
+ )
12
+ ) %>
13
+ <%%= end_form_tag %>
14
+
15
+
metadata CHANGED
@@ -3,13 +3,13 @@ rubygems_version: 0.8.10
3
3
  specification_version: 1
4
4
  name: sqliki_generator
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2005-08-25
6
+ version: 0.0.4
7
+ date: 2005-09-03
8
8
  summary: "[Rails] SQL-based wiki generator."
9
9
  require_paths:
10
10
  - "."
11
11
  email: Markus@reality.com
12
- homepage: http://www.rubyonrails.org/show/Generators
12
+ homepage: http://rubyforge.org/projects/sqliki/
13
13
  rubyforge_project:
14
14
  description: Generates code for (primative) a SQL-based wiki within your Rails app.
15
15
  autorequire:
@@ -29,8 +29,8 @@ authors:
29
29
  files:
30
30
  - USAGE
31
31
  - templates/lib_sanitize_html.rb
32
+ - templates/lib_roparojo.rb
32
33
  - templates/README
33
- - templates/model_draft.rb
34
34
  - templates/view_edit.rhtml
35
35
  - templates/view__form.rhtml
36
36
  - templates/view_inplace_edit.rhtml
@@ -38,11 +38,12 @@ files:
38
38
  - templates/view_create.rhtml
39
39
  - templates/view_rollback.rhtml
40
40
  - templates/view_show.rhtml
41
+ - templates/model_draft.rb
41
42
  - templates/model_link.rb
42
43
  - templates/model_page.rb
43
44
  - templates/controller_sqliki_controller.rb
44
45
  - sqliki_generator.rb
45
- - sqliki_generator-0.0.2.gemspec
46
+ - sqliki_generator-0.0.4.gemspec
46
47
  test_files: []
47
48
  rdoc_options: []
48
49
  extra_rdoc_files: []
@@ -61,7 +62,7 @@ dependencies:
61
62
  version: 0.13.1
62
63
  version:
63
64
  - !ruby/object:Gem::Dependency
64
- name: redcloth
65
+ name: RedCloth
65
66
  version_requirement:
66
67
  version_requirements: !ruby/object:Gem::Version::Requirement
67
68
  requirements: