parlement 0.11 → 0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +10 -1
- data/README +3 -0
- data/Rakefile +13 -0
- data/app/controllers/application.rb +2 -6
- data/app/controllers/elt_controller.rb +2 -2
- data/app/helpers/elt_helper.rb +3 -3
- data/app/models/elt.rb +1 -1
- data/app/views/_help.rhtml +1 -1
- data/app/views/account/_login.rhtml +9 -29
- data/app/views/account/_show.rhtml +8 -7
- data/app/views/elt/_elt.rhtml +2 -2
- data/app/views/elt/_form.rhtml +2 -2
- data/app/views/elt/new.rhtml +7 -54
- data/app/views/elt/show.rhtml +86 -7
- data/app/views/layouts/top.rhtml +1 -1
- data/app/views/person/_listElts.rhtml +1 -1
- data/app/views/person_notify/setEmail.rhtml +5 -18
- data/app/views/subscriber/_list.rhtml +3 -3
- data/config/environment.rb +3 -1
- data/config/routes.rb +9 -8
- data/public/stylesheets/default.css +9 -4
- data/vendor/plugins/google_analytics/lib/rubaidh/google_analytics.rb +3 -3
- data/vendor/plugins/responds_to_parent/MIT-LICENSE +20 -0
- data/vendor/plugins/responds_to_parent/README +42 -0
- data/vendor/plugins/responds_to_parent/Rakefile +22 -0
- data/vendor/plugins/responds_to_parent/init.rb +1 -0
- data/vendor/plugins/responds_to_parent/lib/responds_to_parent.rb +46 -0
- data/vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb +115 -0
- metadata +84 -75
data/CHANGES
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
- parlement changelog
|
2
2
|
|
3
|
+
== Version 0.12
|
4
|
+
|
5
|
+
Internationalization
|
6
|
+
|
7
|
+
* links
|
8
|
+
* i18n with gettext, english and french
|
9
|
+
* better blind up and down for login and logout
|
10
|
+
* better spam fighting against posts with numerous links
|
11
|
+
|
3
12
|
== Version 0.11
|
4
13
|
|
5
|
-
Most active forums presented first
|
14
|
+
Most active forums presented first. Passage to rails 1.2
|
6
15
|
|
7
16
|
* Corrected a small javascript error displaying subscriptionLink
|
8
17
|
* last_activity field added to elts
|
data/README
CHANGED
@@ -28,6 +28,9 @@ And then:
|
|
28
28
|
Only if you expect to develop and do any release:
|
29
29
|
# gem install meta_project
|
30
30
|
|
31
|
+
For i18n:
|
32
|
+
# apt-get install ruby1.8-dev
|
33
|
+
# gem install gettext
|
31
34
|
|
32
35
|
The database is setup for user "manu", you may need to change the file
|
33
36
|
config/database.yml for your own settings.
|
data/Rakefile
CHANGED
@@ -177,3 +177,16 @@ task :publish_news => [:verify_env_vars] do
|
|
177
177
|
"""
|
178
178
|
end
|
179
179
|
|
180
|
+
desc "Update pot/po files."
|
181
|
+
task :updatepo do
|
182
|
+
require 'gettext/utils'
|
183
|
+
GetText.update_pofiles(PKG_NAME, Dir.glob("{app}/**/*.{rb,rhtml}"), "#{PKG_NAME} #{PKG_VERSION}")
|
184
|
+
end
|
185
|
+
|
186
|
+
desc "Create mo-files"
|
187
|
+
task :makemo do
|
188
|
+
require 'gettext/utils'
|
189
|
+
#GetText.create_mofiles(true)
|
190
|
+
GetText.create_mofiles(true, "po", "locale") # This is for "Ruby on Rails".
|
191
|
+
end
|
192
|
+
|
@@ -8,7 +8,8 @@ class ApplicationController < ActionController::Base
|
|
8
8
|
include LoginEngine
|
9
9
|
include Term::ANSIColor
|
10
10
|
|
11
|
-
|
11
|
+
init_gettext "parlement"
|
12
|
+
|
12
13
|
before_filter :set_login_from_cookie
|
13
14
|
after_filter :fix_unicode_for_safari
|
14
15
|
after_filter OutputCompressionFilter
|
@@ -22,11 +23,6 @@ class ApplicationController < ActionController::Base
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
def set_charset
|
26
|
-
#@headers["Content-Type"] = "text/html; charset=iso-8859-15"
|
27
|
-
headers["Content-Type"] = "text/html; charset=utf-8"
|
28
|
-
end
|
29
|
-
|
30
26
|
def set_login_from_cookie
|
31
27
|
unless session[:person]
|
32
28
|
if (person = Person.find_by_name(cookies[:person_name])) and \
|
@@ -17,7 +17,7 @@ class EltController < ApplicationController
|
|
17
17
|
render :layout => 'top'
|
18
18
|
|
19
19
|
rescue ActiveRecord::RecordNotFound => e
|
20
|
-
flash[:error] = "Element
|
20
|
+
flash[:error] = _("Element %s does not exist") % params[:id]
|
21
21
|
headers["Status"] = "301 Moved Permanently"
|
22
22
|
redirect_to '/'
|
23
23
|
end
|
@@ -67,7 +67,7 @@ class EltController < ApplicationController
|
|
67
67
|
|
68
68
|
if !session[:person] and \
|
69
69
|
(@elt.subject =~ /([<>\/]|href)/ \
|
70
|
-
or @elt.body =~ /(.*(http|href)
|
70
|
+
or @elt.body =~ /(.*(http|href)(.*\n)*){3}/ \
|
71
71
|
or @elt.body =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i \
|
72
72
|
or @elt.body =~ /([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,}.*){3}/i) then
|
73
73
|
logger.error red { underline { "SPAM! '#{@elt.subject}'" } }
|
data/app/helpers/elt_helper.rb
CHANGED
@@ -23,17 +23,17 @@ module EltHelper
|
|
23
23
|
.gsub(/^(\d\d:\d\d\s)/, '* \\1') \
|
24
24
|
.gsub(/^\s\*(.*)\*/, '*\\1*') \
|
25
25
|
.gsub(/^\b(.{2,50})$(\n)\b/, '\\1<br/>\\2') \
|
26
|
-
.gsub(/\n*^\b(position
|
26
|
+
.gsub(/\n*^\b(position\s*:\s*(\d*(\.\d+)?))\s*$\n*/, ' <span class="position">\1</span>') \
|
27
27
|
if data != nil
|
28
28
|
|
29
29
|
# Only show the n first paragraphs
|
30
30
|
text.gsub!(/((?:(\n)(?:^.+$\n)*){#{NB_PARAGRAPH_TO_DISPLAY}})((?:.|\n)*)/,
|
31
|
-
'\1\2<a class="readMore" href="#" onclick="Element.hide(this); Element.removeClassName(this.parentNode.nextSibling, \'tooLarge\'); return false;">Read more...</a>\2<div class="tooLarge">\2\3\2</div>') \
|
31
|
+
'\1\2<a class="readMore" href="#" onclick="Element.hide(this); Element.removeClassName(this.parentNode.nextSibling, \'tooLarge\'); return false;">Read more... / Lire plus...</a>\2<div class="tooLarge">\2\3\2</div>') \
|
32
32
|
if data and text.strip =~ /((?:(\n)(?:^.+$\n)*){#{NB_PARAGRAPH_TO_DISPLAY+2}})/
|
33
33
|
|
34
34
|
# Only show the n*2 first list items
|
35
35
|
text.gsub!(/((?:^\*\s+.+$\n){#{NB_PARAGRAPH_TO_DISPLAY*2}})((?:.|\n)*)(\n)/,
|
36
|
-
'\1\3\3* <a class="readMore" href="#" onclick="Element.hide(this.parentNode.parentNode); Element.removeClassName(this.parentNode.parentNode.nextSibling.nextSibling, \'tooLarge\'); return false;">Read more...</a>\3\3<div class="tooLarge">\3\3\2</div>') \
|
36
|
+
'\1\3\3* <a class="readMore" href="#" onclick="Element.hide(this.parentNode.parentNode); Element.removeClassName(this.parentNode.parentNode.nextSibling.nextSibling, \'tooLarge\'); return false;">Read more... / Lire plus...</a>\3\3<div class="tooLarge">\3\3\2</div>') \
|
37
37
|
if data and text.strip =~ /(?:(?:^\*\s+.+$\n){#{NB_PARAGRAPH_TO_DISPLAY*2+2}})/
|
38
38
|
|
39
39
|
#hard_breaks = true
|
data/app/models/elt.rb
CHANGED
@@ -65,7 +65,7 @@ class Elt < ActiveRecord::Base
|
|
65
65
|
def publish
|
66
66
|
logger.info "Publish #{subject}"
|
67
67
|
|
68
|
-
self.position = Regexp.last_match(1) if body =~ /^\s*position
|
68
|
+
self.position = Regexp.last_match(1) if body =~ /^\s*position\s*:\s*(\d+(\.\d+)?)(\s|$)/
|
69
69
|
|
70
70
|
build_mail(:elt => self) unless mail
|
71
71
|
mail.publish
|
data/app/views/_help.rhtml
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
:style => "display:none") %>
|
15
15
|
|
16
16
|
<div style="display:none" class="help" id="help_<%= divId %>">
|
17
|
-
<%= link_to_function("
|
17
|
+
<%= link_to_function(_('Help')+":",
|
18
18
|
visual_effect(:Shrink, "help_#{divId}")+
|
19
19
|
visual_effect(:Shrink, "help_close_#{divId}_link")+
|
20
20
|
visual_effect(:Grow, "help_#{divId}_link"),
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<% form_remote_tag(
|
2
2
|
:update => 'identity',
|
3
3
|
:url => { :controller => 'account', :action => 'login', :elt => @elt },
|
4
|
-
:before => visual_effect(:BlindUp, 'identity')+";resetChoices();",
|
5
|
-
:loaded => visual_effect(:BlindDown, 'identity')) do %>
|
4
|
+
:before => visual_effect(:BlindUp, 'identity', { :queue => 'login' })+";resetChoices();",
|
5
|
+
:loaded => visual_effect(:BlindDown, 'identity', { :queue => 'login' })+visual_effect(:BlindDown, 'subscriptionLink')) do %>
|
6
6
|
|
7
|
-
|
7
|
+
<div class="login"><%= _('Please, choose a pseudo') %></div>
|
8
8
|
|
9
|
-
|
9
|
+
<label for="person_name"><%= _('Pseudo') %>:
|
10
10
|
<%= text_field "person", "name", :size => 10 %>
|
11
11
|
<script type="text/javascript">Form.focusFirstElement(document.forms[0]);</script>
|
12
12
|
</label>
|
@@ -16,9 +16,9 @@
|
|
16
16
|
+visual_effect(:Grow, 'user_password_identity') \
|
17
17
|
+"Form.focusFirstElement(document.forms[0])") %>
|
18
18
|
|
19
|
-
<span style="display: none
|
19
|
+
<span id="user_password_identity" style="display: none">
|
20
20
|
<br/>
|
21
|
-
|
21
|
+
<label for="user_password"><%= _('Password') %>:
|
22
22
|
<%= password_field "user", "password", :size => 10 %>
|
23
23
|
</label>
|
24
24
|
|
@@ -28,35 +28,15 @@
|
|
28
28
|
+"Form.focusFirstElement(document.forms[0])") %>
|
29
29
|
</span>
|
30
30
|
|
31
|
-
<span style="display: none
|
31
|
+
<span id="person_email_identity" style="display: none">
|
32
32
|
<br/>
|
33
|
-
|
33
|
+
<label for="person_email"><%= _('Email (or check key)') %>:</label>
|
34
34
|
<%= text_field "person", "email", :size => 20 %>
|
35
35
|
</span>
|
36
36
|
|
37
37
|
<%= submit_tag 'OK' %>
|
38
38
|
|
39
39
|
<%= render :partial => '/help',
|
40
|
-
:locals => { :divId => 'login', :content => '
|
41
|
-
<p>You can participate with:</p>
|
42
|
-
<ul>
|
43
|
-
<li>no pseudo</li>
|
44
|
-
<li>an unprotected pseudo</li>
|
45
|
-
<li>a password protected pseudo (click on "<span class="icon">>></span>")</li>
|
46
|
-
<li>a password protected and email verified pseudo</li>
|
47
|
-
</ul>
|
48
|
-
<p>
|
49
|
-
The last method is the only secure way to protect a nickname on
|
50
|
-
<strong>this</strong> server.
|
51
|
-
</p>
|
52
|
-
<p>
|
53
|
-
If a pseudo is not protected <strong>and</strong> verified, anybody
|
54
|
-
else can protect it for themselves if they at least supply a password
|
55
|
-
<em>and</em> an email.
|
56
|
-
</p>
|
57
|
-
<p>
|
58
|
-
A login must contain [3..40] characters, a password [5..40].
|
59
|
-
</p>
|
60
|
-
' } %>
|
40
|
+
:locals => { :divId => 'login', :content => _('<p>You can participate with:</p> <ul><li>no pseudo</li> <li>an unprotected pseudo</li> <li>a password protected pseudo (click on "<span class="icon">>></span>")</li> <li>a password protected and email verified pseudo</li></ul> <p> The last method is the only secure way to protect a nickname on <strong>this</strong> server.</p> <p>If a pseudo is not protected <strong>and</strong> verified, anybody else can protect it for themselves if they at least supply a password <em>and</em> an email.</p> <p>A login must contain [3..40] characters, a password [5..40].</p>') } %>
|
61
41
|
<% end %>
|
62
42
|
|
@@ -15,17 +15,17 @@
|
|
15
15
|
};
|
16
16
|
updateChoices(choices_to_update);
|
17
17
|
</script>
|
18
|
-
<script language="JavaScript">Element.show($('subscriptionLink'));</script>
|
19
18
|
</span>
|
20
19
|
<% end %>
|
21
20
|
|
22
21
|
<% if @person = session[:person] %>
|
22
|
+
<script language="JavaScript">Element.show($('subscriptionLink'));</script>
|
23
23
|
<span class="logout">
|
24
24
|
<%= link_to_remote('[X]',
|
25
25
|
{ :update => 'identity',
|
26
26
|
:url => { :controller => 'account', :action => 'logout', :elt => @elt },
|
27
|
-
:before => visual_effect(:BlindUp, 'identity')+visual_effect(:BlindUp, 'subscriptionLink')+";resetChoices();",
|
28
|
-
:loaded => visual_effect(:BlindDown, 'identity') },
|
27
|
+
:before => visual_effect(:BlindUp, 'identity', { :queue => 'login' })+visual_effect(:BlindUp, 'subscriptionLink', { :queue => 'login' })+";resetChoices();",
|
28
|
+
:loaded => visual_effect(:BlindDown, 'identity', { :queue => 'login' }) },
|
29
29
|
{ :href => url_for(:controller => 'account', :action => 'logout') }) %>
|
30
30
|
</span>
|
31
31
|
<span class="author">
|
@@ -40,13 +40,14 @@
|
|
40
40
|
:id => "person_avatar", :class => "avatar" %>
|
41
41
|
</div>
|
42
42
|
|
43
|
-
|
43
|
+
<fieldset id="edit">
|
44
|
+
<legend><%= _('Edit') %></legend>
|
44
45
|
<% form_remote_tag(
|
45
46
|
:update => 'identity',
|
46
47
|
:url => { :controller => 'account', :action => 'setPassword' },
|
47
48
|
:before => visual_effect(:BlindUp, 'identity'),
|
48
49
|
:loaded => visual_effect(:BlindDown, 'identity')) do %>
|
49
|
-
|
50
|
+
<label for="user_password"><%= _('Password') %>:</label>
|
50
51
|
<%= password_field "user", "password", :size => 12 %>
|
51
52
|
<%= submit_tag 'OK' %>
|
52
53
|
<% end %>
|
@@ -56,14 +57,14 @@
|
|
56
57
|
:url => { :controller => 'account', :action => 'setEmail' },
|
57
58
|
:before => visual_effect(:BlindUp, 'identity'),
|
58
59
|
:loaded => visual_effect(:BlindDown, 'identity')) do %>
|
59
|
-
|
60
|
+
<label for="person_email"><%= _('Email') %>:</label>
|
60
61
|
<%= text_field "person", "email", :size => 16 %>
|
61
62
|
<%= submit_tag 'OK' %>
|
62
63
|
<% end %>
|
63
64
|
|
64
65
|
<% form_tag( { :controller => "account", :action => "setAvatar"},
|
65
66
|
:multipart => true, :target => "avatar", :class => "setAvatar") do %>
|
66
|
-
|
67
|
+
<label><%= _('Avatar') %>:</label>
|
67
68
|
<%= file_field "person", "image", :onchange => "submit()", :size => 3 %>
|
68
69
|
<%= submit_tag 'OK' %>
|
69
70
|
<% end %>
|
data/app/views/elt/_elt.rhtml
CHANGED
@@ -58,7 +58,7 @@
|
|
58
58
|
|
59
59
|
<span class="eltMore" id="eltMore_<%= elt.id %>"
|
60
60
|
<%= 'style="display: none"' if (eltTop or elt.elts_count < SUB_THREAD_LENGTH) %>>
|
61
|
-
<%= link_to_remote(
|
61
|
+
<%= link_to_remote(n_('%s message...', '%s messages...', elt.elts_count) % elt.elts_count,
|
62
62
|
{ :update => 'eltSubs_'+elt.id.to_s,
|
63
63
|
:url => { :controller => 'elt', :action => 'list', :id => elt },
|
64
64
|
:before => visual_effect(:BlindUp, "eltMore_#{elt.id.to_s}")+
|
@@ -79,7 +79,7 @@
|
|
79
79
|
<span <%= 'style="display: none"' unless (elt.elts_count > 0 and (eltTop or elt.elts_count < SUB_THREAD_LENGTH)) %>
|
80
80
|
id="eltSubsClose_<%= elt.id %>" title="<%= elt.created_on %>"
|
81
81
|
class="eltSubsClose">
|
82
|
-
|
82
|
+
<%= link_to_function('<span class="icon"><<</span> '+_('Close'),
|
83
83
|
visual_effect(:BlindUp, "eltNew_#{elt.id}")+
|
84
84
|
visual_effect(:BlindUp, "eltSubsClose_#{elt.id}")+
|
85
85
|
visual_effect(:BlindUp, "eltSubs_#{elt.id}")+
|
data/app/views/elt/_form.rhtml
CHANGED
@@ -15,14 +15,14 @@
|
|
15
15
|
<%= hidden_field 'elt', 'parent_id' %></p>
|
16
16
|
|
17
17
|
<p style="display:<%= 'none' if @person.name != nil %>">
|
18
|
-
|
18
|
+
<label for="person_name"><%= _('Proposed by') %></label>
|
19
19
|
<%= text_field 'person', 'name' %>
|
20
20
|
</p>
|
21
21
|
|
22
22
|
<!-- <p><label for="elt_subject">Title</label><br/> -->
|
23
23
|
<%= text_field 'elt', 'subject' %>
|
24
24
|
|
25
|
-
<label for="elt_position"
|
25
|
+
<label for="elt_position"><%= _('Position') %></label>
|
26
26
|
<%= text_field 'elt', 'position', 'size' => 1, 'align' => 'right' %>
|
27
27
|
|
28
28
|
<label for="elt_body"></label><br/>
|
data/app/views/elt/new.rhtml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<%
|
1
|
+
<% flash.each do |key, value| %>
|
2
2
|
<div class="<%= key %>"><%= value %></div>
|
3
3
|
<% end %>
|
4
4
|
|
@@ -18,68 +18,21 @@
|
|
18
18
|
<%= text_field 'elt', 'subject' %>
|
19
19
|
|
20
20
|
<%= render :partial => '/help',
|
21
|
-
:locals => { :divId => 'title'+@elt.parent_id, :content => '
|
22
|
-
This is the title of your proposition.
|
23
|
-
<br/>
|
24
|
-
If you leave it as it is then it won\'t be displayed (recommanded if your
|
25
|
-
text is short, like in a conversation).
|
26
|
-
' } %>
|
21
|
+
:locals => { :divId => 'title'+@elt.parent_id, :content => _('This is the title of your proposition.<br/>If you leave it as it is then it won\'t be displayed (recommanded if your text is short, like in a conversation).') } %>
|
27
22
|
</h2>
|
28
23
|
|
29
24
|
<%= text_area 'elt', 'body' %>
|
30
25
|
|
31
26
|
<div class="eltNewButtons">
|
32
|
-
<%=
|
33
|
-
:locals => { :divId => 'body'+@elt.parent_id, :content => '
|
34
|
-
_<em>emphasis</em>_ *<strong>strong</strong>* -<span
|
35
|
-
style="text-decoration:line-through;">strike-through</span>- +added+
|
36
|
-
^<sup>sup</sup>^ ~<sub>sub</sub>~
|
37
|
-
<div>bg. blockquote => </div>
|
38
|
-
<blockquote>blockquote</blockquote>
|
39
|
-
"Google":http://google.com => <a href="http://google.com">Google</a>
|
40
|
-
<br/>
|
41
|
-
<pre>@code@</pre>
|
42
|
-
<div style="float:left">
|
43
|
-
ordered list
|
44
|
-
<br/>
|
45
|
-
# first item
|
46
|
-
<br/>
|
47
|
-
# second item
|
48
|
-
<br/>
|
49
|
-
# third item
|
50
|
-
</div>
|
51
|
-
<div style="margin-left:10em">
|
52
|
-
<ol>ordered list
|
53
|
-
<li>first item</li>
|
54
|
-
<li>second item</li>
|
55
|
-
<li>third item</li>
|
56
|
-
</ol>
|
57
|
-
</div>
|
58
|
-
<div style="float:left">
|
59
|
-
unordered list
|
60
|
-
<br/>
|
61
|
-
* item
|
62
|
-
<br/>
|
63
|
-
* item
|
64
|
-
<br/>
|
65
|
-
* item
|
66
|
-
</div>
|
67
|
-
<div style="margin-left:10em">
|
68
|
-
<ul>unordered list
|
69
|
-
<li>item</li>
|
70
|
-
<li>item</li>
|
71
|
-
<li>item</li>
|
72
|
-
</ul>
|
73
|
-
</div>
|
74
|
-
<a href="http://hobix.com/textile/quick.html">Textile Reference</a>
|
75
|
-
' } %>
|
76
|
-
|
77
|
-
<%= submit_to_remote('Preview', 'preview',
|
27
|
+
<%= submit_to_remote(_('Preview'), _('Preview'),
|
78
28
|
:update => "eltNewPreview_"+@elt.parent_id,
|
79
29
|
:url => { :action => "create", :id => @elt.parent, :submit => "preview" },
|
80
30
|
:loading => visual_effect(:BlindDown, 'eltNewPreview_'+@elt.parent_id)) %>
|
81
31
|
|
82
|
-
<%= submit_tag 'Propose!' %>
|
32
|
+
<%= submit_tag _('Propose!') %>
|
33
|
+
|
34
|
+
<%= render :partial => '/help',
|
35
|
+
:locals => { :divId => 'body'+@elt.parent_id, :content => _('_<em>emphasis</em>_ *<strong>strong</strong>* -<span style="text-decoration: line-through;">strike-through</span>- +added+^<sup>sup</sup>^ ~<sub>sub</sub>~<div>bg. blockquote => </div><blockquote>blockquote</blockquote> "Google":http://google.com => <a href="http://google.com">Google</a><br/><pre>@code@</pre><div style="float:left">ordered list<br/># first item<br/># second item<br/># third item</div><div style="margin-left:10em"><ol>ordered list<li>first item</li><li>second item</li><li>third item</li></ol></div><div style="float:left">unordered list<br/>* item<br/>* item<br/>* item</div><div style="margin-left:10em"><ul>unordered list<li>item</li><li>item</li><li>item</li></ul></div><a href="http://hobix.com/textile/quick.html">Textile Reference</a>') } %>
|
83
36
|
</div>
|
84
37
|
<% end %>
|
85
38
|
|
data/app/views/elt/show.rhtml
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
<% voters = Choice.count :select => 'person_id', :distinct => true %>
|
2
2
|
<div class="sidebar">
|
3
|
-
|
3
|
+
<h3 class="boxTitle"><%= _('Identity')%></h3>
|
4
4
|
<div class="box" id="identity"><%= render :partial => 'account/show' %></div>
|
5
5
|
|
6
|
-
|
6
|
+
<h3 class="boxTitle"><%= _('Filter') %></h3>
|
7
7
|
<div class="box">
|
8
|
-
|
8
|
+
<div><%= _('All voters:') %> <span class="result"><%= voters %></span></div>
|
9
9
|
<form id="filterForm" name="filterForm">
|
10
10
|
<a onclick="return decrementFilter()" href="#" accesskey="<"><</a>
|
11
11
|
<select id="filter" name="filter"
|
@@ -19,16 +19,46 @@
|
|
19
19
|
<script>setFilterFromCookie();</script>
|
20
20
|
</div>
|
21
21
|
|
22
|
-
|
22
|
+
<h3 class="boxTitle"><%= _('Subscribers') %></h3>
|
23
23
|
<div class="box"><%= render :partial => '/subscriber/list' %></div>
|
24
24
|
|
25
|
-
|
25
|
+
<h3 class="boxTitle"><%= _('Highest posts') %></h3>
|
26
26
|
<div class="box listByVote"><%= render :partial => '/elt/listByVote' %></div>
|
27
27
|
|
28
|
-
|
28
|
+
<h3 class="boxTitle"><%= _('Latest posts') %></h3>
|
29
29
|
<div class="box listByDate"><%= render :partial => '/elt/listByDate' %></div>
|
30
30
|
|
31
|
-
|
31
|
+
<h3 class="boxTitle"><%= _('Links') %></h3>
|
32
|
+
<div class="box">
|
33
|
+
<h4><%= _('Personal') %></h4>
|
34
|
+
<div class="boxLine"><a href="http://www.alivrouvert.com">
|
35
|
+
À Livr’ Ouvert</a></div>
|
36
|
+
<div class="boxLine"><a href="http://www.baratissus.com">
|
37
|
+
Le bar à tissus</a></div>
|
38
|
+
|
39
|
+
<div class="boxLine"><a href="http://echarp.org/blog">
|
40
|
+
echarp's blog</a></div>
|
41
|
+
<div class="boxLine"><a href="http://www-inf.int-evry.fr/~olberger/weblog/">
|
42
|
+
Olivier's</a></div>
|
43
|
+
<div class="boxLine"><a href="http://www.couchet.org/blog/">
|
44
|
+
mad’s</a></div>
|
45
|
+
<div class="boxLine"><a href="http://www.grassouille.org/blog/">
|
46
|
+
benj’s</a></div>
|
47
|
+
|
48
|
+
<h4><%= _('Democracy') %></h4>
|
49
|
+
<div class="boxLine"><a href="http://worldblu.com">
|
50
|
+
World BLU</a></div>
|
51
|
+
<div class="boxLine"><a href="http://groups.google.com/group/top-politics">
|
52
|
+
top politics</a></div>
|
53
|
+
<div class="boxLine"><a href="http://www.tdge.org">
|
54
|
+
world Parliament Experiment</a></div>
|
55
|
+
<div class="boxLine"><a href="http://groups.google.com/group/worldcit">
|
56
|
+
The Community of World Citizens</a></div>
|
57
|
+
<div class="boxLine"><a href="http://world-wide.democracy.net">
|
58
|
+
Worldwide Direct Democracy Movement</a></div>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<h3 class="boxTitle"><%= _('Search') %></h3>
|
32
62
|
<div class="box">
|
33
63
|
<form action="http://google.com/search">
|
34
64
|
<input type="hidden" name="q"
|
@@ -37,6 +67,55 @@
|
|
37
67
|
<%= submit_tag 'OK' %>
|
38
68
|
</form>
|
39
69
|
</div>
|
70
|
+
|
71
|
+
<!--
|
72
|
+
<table width="100%" bgcolor="#FFFFFF" style="font-size: smaller">
|
73
|
+
<tr>
|
74
|
+
<td align="center">
|
75
|
+
<img src="http://www.acthum.net/directdemocracy/images/dd-sml.gif">
|
76
|
+
</td>
|
77
|
+
<td colspan="3">
|
78
|
+
<b><font size="3">DIRECT DEMOCRACY</font></b>
|
79
|
+
<br/>
|
80
|
+
<font size="4">Web Ring</font>
|
81
|
+
</td>
|
82
|
+
</tr>
|
83
|
+
<tr>
|
84
|
+
<td align="center">
|
85
|
+
<a href="http://www.acthum.net/directdemocracy/">
|
86
|
+
<font color="#0000FF">Home</font>
|
87
|
+
</a>
|
88
|
+
</td>
|
89
|
+
<td width="47%" align="center" colspan="2">
|
90
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/rand.pl?ringid=common1;siteid=parlement">
|
91
|
+
<font color="#0000FF">Random Site</font></a>
|
92
|
+
</td>
|
93
|
+
<td width="23%" align="center">
|
94
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/list.pl?ringid=common1;siteid=parlement">
|
95
|
+
<font color="#0000FF">Site List</font>
|
96
|
+
</a>
|
97
|
+
</td>
|
98
|
+
</tr>
|
99
|
+
<tr>
|
100
|
+
<td align="center">
|
101
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/prev.pl?ringid=common1;siteid=parlement">
|
102
|
+
<font color="#0000FF">Previous</font></a>
|
103
|
+
</td>
|
104
|
+
<td width="24%" align="center">
|
105
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/next.pl?ringid=common1;siteid=parlement">
|
106
|
+
<font color="#0000FF">Next</font></a>
|
107
|
+
</td>
|
108
|
+
<td width="23%" align="center">
|
109
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/prev5.pl?ringid=common1;siteid=parlement">
|
110
|
+
<font color="#0000FF">Previous 5</font></a>
|
111
|
+
</td>
|
112
|
+
<td width="23%" align="center">
|
113
|
+
<a href="http://www.software-zone.com/cgi-bin/ringlink/next5.pl?ringid=common1;siteid=parlement">
|
114
|
+
<font color="#0000FF">Next 5</font></a>
|
115
|
+
</td>
|
116
|
+
</tr>
|
117
|
+
</table>
|
118
|
+
-->
|
40
119
|
</div>
|
41
120
|
|
42
121
|
<% flash.each do |key, value| %>
|
data/app/views/layouts/top.rhtml
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
<div class="links">
|
51
51
|
<a class="title" href="http://leparlement.org">Parlement</a>
|
52
52
|
<span class="signets">
|
53
|
-
|
53
|
+
<a href="/people"><%= _('people') %></a>
|
54
54
|
<a href="http://rubyforge.org/projects/parlement">forge</a>
|
55
55
|
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>
|
56
56
|
<a id="fr" href="/fr">fr</a>
|
@@ -48,7 +48,7 @@
|
|
48
48
|
<% for elt in e[0...PAGE_LENGTH] %>
|
49
49
|
<li class="elt">
|
50
50
|
<span class="author"><<%= elt.created_on.strftime('%d/%m %H:%M') %>></span>
|
51
|
-
<%= link_to elt.subject.gsub(/\[.*\]/, ''), :
|
51
|
+
<%= link_to elt.subject.gsub(/\[.*\]/, ''), :id => elt, :controller => 'elt', :action => 'show' %>
|
52
52
|
(<%= elt.children.size %> sub element(s))
|
53
53
|
<span class="choice result"><%= sprintf("%+d", elt.result) %></span>
|
54
54
|
<% " "*22 %>
|
@@ -1,24 +1,11 @@
|
|
1
|
-
Welcome to
|
1
|
+
<%= _('Welcome to %s') % @app_name %>, <%= @name %>.
|
2
2
|
|
3
|
-
Please click on the following link to confirm your email:
|
4
|
-
<a href="<%= @url%>"
|
3
|
+
<%= _('Please click on the following link to confirm your email:') %>
|
4
|
+
<a href="<%= @url%>"><%= _('Click me!') %></a>
|
5
5
|
|
6
6
|
<%= @url %>
|
7
7
|
|
8
|
-
If you received this email by mistake, just ignore it.
|
8
|
+
<%= _('If you received this email by mistake, just ignore it.') %>
|
9
9
|
|
10
|
-
Thank you
|
11
|
-
|
12
|
-
====================================================================
|
13
|
-
|
14
|
-
Bienvenue à <%= @app_name %>, <%= @name %>.
|
15
|
-
|
16
|
-
Veuillez cliquer sur le lien ci dessous pour confirmer votre email:
|
17
|
-
<a href="<%= @url%>">cliquez moi</a>
|
18
|
-
|
19
|
-
<%= @url %>
|
20
|
-
|
21
|
-
Si vous avez reçu ce mail par erreur, ignorez le tout simplement.
|
22
|
-
|
23
|
-
Merci
|
10
|
+
<%= _('Thank you') %>
|
24
11
|
|
@@ -8,11 +8,11 @@
|
|
8
8
|
|
9
9
|
<div id="subscriptionLink" class="boxLineR"
|
10
10
|
<%= "style='display: none'" unless session[:person] %> >
|
11
|
-
<%= link_to_remote 'Add/remove me!',
|
11
|
+
<%= link_to_remote _('Add/remove me!'),
|
12
12
|
:update => 'subscription',
|
13
13
|
:url => { :controller => 'subscriber', :action => 'subscribe', :id => @elt },
|
14
|
-
:before => visual_effect(:BlindUp, 'subscription'),
|
15
|
-
:loaded => visual_effect(:BlindDown, 'subscription') %>
|
14
|
+
:before => visual_effect(:BlindUp, 'subscription', { :queue => 'end' }),
|
15
|
+
:loaded => visual_effect(:BlindDown, 'subscription', { :queue => 'end' }) %>
|
16
16
|
</div>
|
17
17
|
</div>
|
18
18
|
|
data/config/environment.rb
CHANGED
@@ -64,6 +64,8 @@ require 'rails_file_column'
|
|
64
64
|
require 'jcode'
|
65
65
|
$KCODE = 'u'
|
66
66
|
|
67
|
+
require 'gettext/rails'
|
68
|
+
|
67
69
|
# What is the name of a quick anonymous poster
|
68
70
|
ANONYMOUS_POSTER = 'anon'
|
69
71
|
|
@@ -110,5 +112,5 @@ end
|
|
110
112
|
|
111
113
|
Rubaidh::GoogleAnalytics.tracker_id = 'UA-317241-1'
|
112
114
|
|
113
|
-
PARLEMENT_VERSION='0.
|
115
|
+
PARLEMENT_VERSION='0.12'
|
114
116
|
|
data/config/routes.rb
CHANGED
@@ -19,19 +19,20 @@ ActionController::Routing::Routes.draw do |map|
|
|
19
19
|
map.connect ':id//index.rss', :controller => 'elt', :action => 'rss'
|
20
20
|
map.connect ':id//vote.rss', :controller => 'elt', :action => 'vote_rss'
|
21
21
|
|
22
|
-
map.connect 'perso/:id', :controller => 'elt', :action => 'show'
|
23
|
-
map.connect 'perso/:id/index.rss', :controller => 'elt', :action => 'rss'
|
24
|
-
map.connect 'perso/blog/:id', :controller => 'elt'
|
25
|
-
map.connect 'perso/blog/:id/index.rss', :controller => 'elt', :action => 'rss'
|
26
|
-
map.connect 'perso/blog/:id/vote.rss', :controller => 'elt', :action => 'vote_rss'
|
27
|
-
|
28
22
|
# Allow downloading Web Service WSDL as a file with an extension
|
29
23
|
# instead of a file named 'wsdl'
|
30
24
|
#map.connect ':controller/service.wsdl', :action => 'wsdl'
|
31
25
|
|
26
|
+
map.connect ':id', :controller => 'elt', :action => 'rss', :requirements => { :id => /.*\.rss/ }
|
27
|
+
map.connect ':id', :controller => 'elt', :action => 'show'
|
28
|
+
|
32
29
|
# Install the default route as the lowest priority.
|
33
30
|
map.connect ':controller/:action/:id'
|
34
31
|
|
35
|
-
map.connect '
|
36
|
-
map.connect '
|
32
|
+
map.connect 'perso/:id', :controller => 'elt', :action => 'show'
|
33
|
+
map.connect 'perso/:id/index.rss', :controller => 'elt', :action => 'rss'
|
34
|
+
map.connect 'perso/blog/:id', :controller => 'elt'
|
35
|
+
map.connect 'perso/blog/:id/index.rss', :controller => 'elt', :action => 'rss'
|
36
|
+
map.connect 'perso/blog/:id/vote.rss', :controller => 'elt', :action => 'vote_rss'
|
37
37
|
end
|
38
|
+
|
@@ -70,7 +70,7 @@ h1 input {
|
|
70
70
|
#elt_fr > * > h1 a {
|
71
71
|
display: none; }
|
72
72
|
|
73
|
-
a:link, select, input[type='Button'], input[type='submit'] { color: #3b76ae; }
|
73
|
+
legend, a:link, select, input[type='Button'], input[type='submit'] { color: #3b76ae; }
|
74
74
|
a:visited { color: #1b568e; }
|
75
75
|
a:hover, a:active, select:hover, input[type='Button']:hover, input[type='submit']:hover { color: purple; }
|
76
76
|
a:active, input[type='Button']:active, input[type='submit']:active { color: orange; }
|
@@ -195,14 +195,13 @@ h1 .help {
|
|
195
195
|
font-weight: bolder; }
|
196
196
|
|
197
197
|
#identity form { display: block; }
|
198
|
-
#identity
|
199
|
-
#identity:hover
|
198
|
+
#identity #edit, #identity iframe { display: none; }
|
199
|
+
#identity:hover #edit { display: block; }
|
200
200
|
#identity fieldset#edit {
|
201
201
|
border: solid thin yellow;
|
202
202
|
padding: 0.5em 0;
|
203
203
|
margin: 0.5em 0; }
|
204
204
|
#identity fieldset#edit label { color: #3b76ae; }
|
205
|
-
#identity fieldset#edit legend { color: #333; }
|
206
205
|
img.avatar {
|
207
206
|
float: left;
|
208
207
|
width: auto;
|
@@ -240,6 +239,12 @@ div#listByDate .result, div#listByVote .result {
|
|
240
239
|
|
241
240
|
div#subscription + .boxLine + .boxLineR { font-size: smaller; }
|
242
241
|
|
242
|
+
.box h4 {
|
243
|
+
margin: 0;
|
244
|
+
padding: 0;
|
245
|
+
color: #333;
|
246
|
+
font-style: italic; }
|
247
|
+
|
243
248
|
/* _ _
|
244
249
|
___| | |_
|
245
250
|
/ _ \ | __|
|
@@ -2,14 +2,14 @@ module Rubaidh # :nodoc:
|
|
2
2
|
module GoogleAnalyticsMixin
|
3
3
|
def google_analytics_code(request = nil)
|
4
4
|
return unless GoogleAnalytics.enabled?
|
5
|
-
GoogleAnalytics.
|
5
|
+
GoogleAnalytics.google_analytics_code(request)
|
6
6
|
end
|
7
7
|
|
8
8
|
# An after_filter to automatically add the analytics code.
|
9
9
|
def add_google_analytics_code
|
10
10
|
code = google_analytics_code(request)
|
11
11
|
return if code.blank?
|
12
|
-
response.body.gsub! '</body>', code + '</body>'
|
12
|
+
response.body.gsub! '</body>', code + '</body>' if response.body.respond_to?(:gsub!)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -49,7 +49,7 @@ module Rubaidh # :nodoc:
|
|
49
49
|
not analytics_url.blank?)
|
50
50
|
end
|
51
51
|
|
52
|
-
def google_analytics_code(request = nil)
|
52
|
+
def self.google_analytics_code(request = nil)
|
53
53
|
extra_code = domain_name.blank? ? nil : "_udn = \"#{domain_name}\";"
|
54
54
|
url = (not request.blank? and request.ssl?) ? analytics_ssl_url : analytics_url
|
55
55
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2006 Sean Treadway
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
RespondsToParent
|
2
|
+
================
|
3
|
+
|
4
|
+
Adds responds_to_parent to your controller to respond to the parent document of your page.
|
5
|
+
Make Ajaxy file uploads by posting the form to a hidden iframe, and respond with
|
6
|
+
RJS to the parent window.
|
7
|
+
|
8
|
+
Example
|
9
|
+
=======
|
10
|
+
|
11
|
+
Controller:
|
12
|
+
|
13
|
+
class Test < ActionController::Base
|
14
|
+
def main
|
15
|
+
end
|
16
|
+
|
17
|
+
def form_action
|
18
|
+
# Do stuff with params[:uploaded_file]
|
19
|
+
|
20
|
+
responds_to_parent do
|
21
|
+
render :update do |page|
|
22
|
+
page << "alert($('stuff').innerHTML)"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
main.rhtml:
|
29
|
+
|
30
|
+
<html>
|
31
|
+
<body>
|
32
|
+
<div id="stuff">Here is some stuff</div>
|
33
|
+
|
34
|
+
<form target="frame" action="form_action">
|
35
|
+
<input type="file" name="uploaded_file"/>
|
36
|
+
<input type="submit"/>
|
37
|
+
</form>
|
38
|
+
|
39
|
+
<iframe id='frame' name="frame"></iframe>
|
40
|
+
</body>
|
41
|
+
</html>
|
42
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Test the responds_to_parent plugin.'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'lib'
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Generate documentation for the responds_to_parent plugin.'
|
16
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
17
|
+
rdoc.rdoc_dir = 'rdoc'
|
18
|
+
rdoc.title = 'RespondsToParent'
|
19
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
20
|
+
rdoc.rdoc_files.include('README')
|
21
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
22
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
ActionController::Base.send :include, RespondsToParent
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# Module containing the methods useful for child IFRAME to parent window communication
|
2
|
+
module RespondsToParent
|
3
|
+
|
4
|
+
# Executes the response body as JavaScript in the context of the parent window.
|
5
|
+
# Use this method of you are posting a form to a hidden IFRAME or if you would like
|
6
|
+
# to use IFRAME base RPC.
|
7
|
+
def responds_to_parent(&block)
|
8
|
+
yield
|
9
|
+
|
10
|
+
if performed?
|
11
|
+
# We're returning HTML instead of JS or XML now
|
12
|
+
response.headers['Content-Type'] = 'text/html; charset=UTF-8'
|
13
|
+
|
14
|
+
# Either pull out a redirect or the request body
|
15
|
+
script = if location = erase_redirect_results
|
16
|
+
"document.location.href = #{location.to_s.inspect}"
|
17
|
+
else
|
18
|
+
response.body
|
19
|
+
end
|
20
|
+
|
21
|
+
# Escape quotes, linebreaks and slashes, maintaining previously escaped slashes
|
22
|
+
# Suggestions for improvement?
|
23
|
+
script = (script || '').
|
24
|
+
gsub('\\', '\\\\\\').
|
25
|
+
gsub(/\r\n|\r|\n/, '\\n').
|
26
|
+
gsub(/['"]/, '\\\\\&').
|
27
|
+
gsub('</script>','</scr"+"ipt>')
|
28
|
+
|
29
|
+
# Clear out the previous render to prevent double render
|
30
|
+
erase_results
|
31
|
+
|
32
|
+
# Eval in parent scope and replace document location of this frame
|
33
|
+
# so back button doesn't replay action on targeted forms
|
34
|
+
# loc = document.location to be set after parent is updated for IE
|
35
|
+
# with(window.parent) - pull in variables from parent window
|
36
|
+
# setTimeout - scope the execution in the windows parent for safari
|
37
|
+
# window.eval - legal eval for Opera
|
38
|
+
render :text => "<html><body><script type='text/javascript' charset='utf-8'>
|
39
|
+
var loc = document.location;
|
40
|
+
with(window.parent) { setTimeout(function() { window.eval('#{script}'); loc.replace('about:blank'); }, 1) }
|
41
|
+
</script></body></html>"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
alias respond_to_parent responds_to_parent
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../../config/environment'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'test_help'
|
4
|
+
|
5
|
+
class IFrameController < ActionController::Base
|
6
|
+
def normal
|
7
|
+
render :update do |page|
|
8
|
+
page.alert "foo"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def aliased
|
13
|
+
respond_to_parent do
|
14
|
+
render :text => 'woot'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def redirect
|
19
|
+
responds_to_parent do
|
20
|
+
redirect_to '/another/place'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def no_block
|
25
|
+
responds_to_parent
|
26
|
+
end
|
27
|
+
|
28
|
+
def empty_render
|
29
|
+
responds_to_parent do
|
30
|
+
end
|
31
|
+
|
32
|
+
render :text => ''
|
33
|
+
end
|
34
|
+
|
35
|
+
def quotes
|
36
|
+
responds_to_parent do
|
37
|
+
render :text => %(single' double" qs\\' qd\\" escaped\\\' doubleescaped\\\\')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def newlines
|
42
|
+
responds_to_parent do
|
43
|
+
render :text => "line1\nline2\\nline2"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def update
|
48
|
+
responds_to_parent do
|
49
|
+
render :update do |page|
|
50
|
+
page.alert 'foo'
|
51
|
+
page.alert 'bar'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def rescue_action(e)
|
57
|
+
raise e
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class RespondsToParentTest < Test::Unit::TestCase
|
62
|
+
def setup
|
63
|
+
@controller = IFrameController.new
|
64
|
+
@request = ActionController::TestRequest.new
|
65
|
+
@response = ActionController::TestResponse.new
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_normal
|
69
|
+
get :normal
|
70
|
+
assert_match /alert\("foo"\)/, @response.body
|
71
|
+
assert_no_match /window\.parent/, @response.body
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_quotes_should_be_escaped
|
75
|
+
render :quotes
|
76
|
+
assert_match %r{eval\('single\\' double\\" qs\\\\\\' qd\\\\\\" escaped\\\\\\' doubleescaped\\\\\\\\\\'}, @response.body
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_newlines_should_be_escaped
|
80
|
+
render :newlines
|
81
|
+
assert_match %r{eval\('line1\\nline2\\\\nline2'\)}, @response.body
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_no_block_should_raise
|
85
|
+
assert_raises LocalJumpError do
|
86
|
+
get :no_block
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_empty_render_should_not_expand_javascript
|
91
|
+
get :empty_render
|
92
|
+
assert_equal '', @response.body
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_update_should_perform_combined_rjs
|
96
|
+
render :update
|
97
|
+
assert_match /alert\(\\"foo\\"\);\\nalert\(\\"bar\\"\)/, @response.body
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_aliased_method_should_not_raise
|
101
|
+
assert_nothing_raised do
|
102
|
+
render :aliased
|
103
|
+
assert_match /eval\('woot'\)/, @response.body
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
protected
|
108
|
+
|
109
|
+
def render(action)
|
110
|
+
get action
|
111
|
+
assert_match /<script type='text\/javascript'/, @response.body
|
112
|
+
assert_match /with\(window\.parent\)/, @response.body
|
113
|
+
assert_match /document\.location\.replace\('about:blank'\)/, @response.body
|
114
|
+
end
|
115
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: parlement
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2007-
|
6
|
+
version: "0.12"
|
7
|
+
date: 2007-04-21 00:00:00 +02:00
|
8
8
|
summary: Trusted Direct Democracy on a forum
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,10 +35,6 @@ files:
|
|
35
35
|
- CHANGES
|
36
36
|
- MEMORY
|
37
37
|
- app/models
|
38
|
-
- app/controllers
|
39
|
-
- app/apis
|
40
|
-
- app/views
|
41
|
-
- app/helpers
|
42
38
|
- app/models/mail_notify.rb
|
43
39
|
- app/models/user_notify.rb
|
44
40
|
- app/models/person.rb
|
@@ -49,30 +45,31 @@ files:
|
|
49
45
|
- app/models/person_mail.rb
|
50
46
|
- app/models/person_notify.rb
|
51
47
|
- app/models/user.rb
|
48
|
+
- app/controllers
|
52
49
|
- app/controllers/account_controller.rb
|
53
50
|
- app/controllers/application.rb
|
54
51
|
- app/controllers/subscriber_controller.rb
|
55
52
|
- app/controllers/person_controller.rb
|
56
53
|
- app/controllers/elt_controller.rb
|
54
|
+
- app/apis
|
55
|
+
- app/views
|
57
56
|
- app/views/_help.rhtml
|
58
57
|
- app/views/person
|
59
|
-
- app/views/account
|
60
|
-
- app/views/mail_notify
|
61
|
-
- app/views/layouts
|
62
|
-
- app/views/elt
|
63
|
-
- app/views/subscriber
|
64
|
-
- app/views/person_notify
|
65
58
|
- app/views/person/_listElts.rhtml
|
66
59
|
- app/views/person/show.rhtml
|
60
|
+
- app/views/account
|
67
61
|
- app/views/account/welcome.rhtml
|
68
62
|
- app/views/account/logout.rhtml
|
69
63
|
- app/views/account/_show.rhtml
|
70
64
|
- app/views/account/_login.rhtml
|
71
65
|
- app/views/account/signup.rhtml
|
66
|
+
- app/views/mail_notify
|
72
67
|
- app/views/mail_notify/publish.text.html.rhtml
|
73
68
|
- app/views/mail_notify/publish.text.plain.rhtml
|
69
|
+
- app/views/layouts
|
74
70
|
- app/views/layouts/scaffold.rhtml
|
75
71
|
- app/views/layouts/top.rhtml
|
72
|
+
- app/views/elt
|
76
73
|
- app/views/elt/vote_rss.rxml
|
77
74
|
- app/views/elt/show_tree.rhtml
|
78
75
|
- app/views/elt/_listByVote.rhtml
|
@@ -85,8 +82,11 @@ files:
|
|
85
82
|
- app/views/elt/show.rhtml
|
86
83
|
- app/views/elt/_listByDate.rhtml
|
87
84
|
- app/views/elt/_form.rhtml
|
85
|
+
- app/views/subscriber
|
88
86
|
- app/views/subscriber/_list.rhtml
|
87
|
+
- app/views/person_notify
|
89
88
|
- app/views/person_notify/setEmail.rhtml
|
89
|
+
- app/helpers
|
90
90
|
- app/helpers/mailman.rb
|
91
91
|
- app/helpers/elt_helper.rb
|
92
92
|
- app/helpers/subscriber_helper.rb
|
@@ -95,40 +95,35 @@ files:
|
|
95
95
|
- app/helpers/live_tree.rb
|
96
96
|
- app/helpers/person_helper.rb
|
97
97
|
- config/environments
|
98
|
-
- config/database.yml
|
99
|
-
- config/routes.rb
|
100
|
-
- config/boot.rb
|
101
|
-
- config/environment.rb
|
102
98
|
- config/environments/development.rb
|
103
99
|
- config/environments/production.rb
|
104
100
|
- config/environments/test.rb
|
105
101
|
- config/environments/user_environment.rb
|
102
|
+
- config/database.yml
|
103
|
+
- config/routes.rb
|
104
|
+
- config/boot.rb
|
105
|
+
- config/environment.rb
|
106
106
|
- db/schema.sql
|
107
107
|
- db/migrate
|
108
|
-
- db/ROOT
|
109
|
-
- db/development_structure.sql
|
110
|
-
- db/schema.rb
|
111
108
|
- db/migrate/005_filter_mail.rb
|
112
109
|
- db/migrate/001_create_choices.rb
|
113
110
|
- db/migrate/002_nested_set.rb
|
114
111
|
- db/migrate/003_elt_children_count.rb
|
115
112
|
- db/migrate/004_people_image.rb
|
116
113
|
- db/migrate/006_last_activity.rb
|
114
|
+
- db/ROOT
|
117
115
|
- db/ROOT/perso
|
118
116
|
- db/ROOT/parlement.txt
|
119
117
|
- db/ROOT/parlement
|
120
|
-
- db/ROOT/parleR.txt
|
121
|
-
- db/ROOT/fr.txt
|
122
|
-
- db/ROOT/mail.txt
|
123
118
|
- db/ROOT/parlement/ddRing.txt
|
124
119
|
- db/ROOT/parlement/our-constitution.txt
|
125
120
|
- db/ROOT/parlement/test.txt
|
126
121
|
- db/ROOT/parlement/Security
|
122
|
+
- db/ROOT/parlement/Security/anonymity.txt
|
127
123
|
- db/ROOT/parlement/top-politics.txt
|
128
124
|
- db/ROOT/parlement/security.txt
|
129
125
|
- db/ROOT/parlement/news.txt
|
130
126
|
- db/ROOT/parlement/News
|
131
|
-
- db/ROOT/parlement/Security/anonymity.txt
|
132
127
|
- db/ROOT/parlement/News/Version_01.txt
|
133
128
|
- db/ROOT/parlement/News/Version_02.txt
|
134
129
|
- db/ROOT/parlement/News/Version_07.txt
|
@@ -137,6 +132,11 @@ files:
|
|
137
132
|
- db/ROOT/parlement/News/Version_06.txt
|
138
133
|
- db/ROOT/parlement/News/Version_05.txt
|
139
134
|
- db/ROOT/parlement/News/Version_03.txt
|
135
|
+
- db/ROOT/parleR.txt
|
136
|
+
- db/ROOT/fr.txt
|
137
|
+
- db/ROOT/mail.txt
|
138
|
+
- db/development_structure.sql
|
139
|
+
- db/schema.rb
|
140
140
|
- lib/user_system.rb
|
141
141
|
- lib/data_import.rb
|
142
142
|
- lib/localizer.rb
|
@@ -206,30 +206,11 @@ files:
|
|
206
206
|
- script/console
|
207
207
|
- vendor/plugins
|
208
208
|
- vendor/plugins/engines
|
209
|
-
- vendor/plugins/file_column
|
210
|
-
- vendor/plugins/google_analytics
|
211
|
-
- vendor/plugins/output_compression
|
212
|
-
- vendor/plugins/login_engine
|
213
209
|
- vendor/plugins/engines/Rakefile
|
214
210
|
- vendor/plugins/engines/lib
|
215
|
-
- vendor/plugins/engines/about.yml
|
216
|
-
- vendor/plugins/engines/UPGRADING
|
217
|
-
- vendor/plugins/engines/CHANGELOG
|
218
|
-
- vendor/plugins/engines/README
|
219
|
-
- vendor/plugins/engines/init.rb
|
220
|
-
- vendor/plugins/engines/install.rb
|
221
|
-
- vendor/plugins/engines/tasks
|
222
|
-
- vendor/plugins/engines/generators
|
223
|
-
- vendor/plugins/engines/MIT-LICENSE
|
224
211
|
- vendor/plugins/engines/lib/engines
|
225
|
-
- vendor/plugins/engines/lib/engines.rb
|
226
212
|
- vendor/plugins/engines/lib/engines/plugin.rb
|
227
213
|
- vendor/plugins/engines/lib/engines/rails_extensions
|
228
|
-
- vendor/plugins/engines/lib/engines/testing.rb
|
229
|
-
- vendor/plugins/engines/lib/engines/plugin_migrator.rb
|
230
|
-
- vendor/plugins/engines/lib/engines/deprecated_config_support.rb
|
231
|
-
- vendor/plugins/engines/lib/engines/rails_extensions.rb
|
232
|
-
- vendor/plugins/engines/lib/engines/plugin_list.rb
|
233
214
|
- vendor/plugins/engines/lib/engines/rails_extensions/routing.rb
|
234
215
|
- vendor/plugins/engines/lib/engines/rails_extensions/rails_initializer.rb
|
235
216
|
- vendor/plugins/engines/lib/engines/rails_extensions/templates.rb
|
@@ -238,95 +219,118 @@ files:
|
|
238
219
|
- vendor/plugins/engines/lib/engines/rails_extensions/migrations.rb
|
239
220
|
- vendor/plugins/engines/lib/engines/rails_extensions/dependencies.rb
|
240
221
|
- vendor/plugins/engines/lib/engines/rails_extensions/active_record.rb
|
222
|
+
- vendor/plugins/engines/lib/engines/testing.rb
|
223
|
+
- vendor/plugins/engines/lib/engines/plugin_migrator.rb
|
224
|
+
- vendor/plugins/engines/lib/engines/deprecated_config_support.rb
|
225
|
+
- vendor/plugins/engines/lib/engines/rails_extensions.rb
|
226
|
+
- vendor/plugins/engines/lib/engines/plugin_list.rb
|
227
|
+
- vendor/plugins/engines/lib/engines.rb
|
228
|
+
- vendor/plugins/engines/about.yml
|
229
|
+
- vendor/plugins/engines/UPGRADING
|
230
|
+
- vendor/plugins/engines/CHANGELOG
|
231
|
+
- vendor/plugins/engines/README
|
232
|
+
- vendor/plugins/engines/init.rb
|
233
|
+
- vendor/plugins/engines/install.rb
|
234
|
+
- vendor/plugins/engines/tasks
|
241
235
|
- vendor/plugins/engines/tasks/engines.rake
|
236
|
+
- vendor/plugins/engines/generators
|
242
237
|
- vendor/plugins/engines/generators/plugin_migration
|
243
238
|
- vendor/plugins/engines/generators/plugin_migration/plugin_migration_generator.rb
|
244
239
|
- vendor/plugins/engines/generators/plugin_migration/USAGE
|
245
240
|
- vendor/plugins/engines/generators/plugin_migration/templates
|
246
241
|
- vendor/plugins/engines/generators/plugin_migration/templates/plugin_migration.erb
|
242
|
+
- vendor/plugins/engines/MIT-LICENSE
|
243
|
+
- vendor/plugins/file_column
|
247
244
|
- vendor/plugins/file_column/Rakefile
|
248
245
|
- vendor/plugins/file_column/test
|
249
|
-
- vendor/plugins/file_column/lib
|
250
|
-
- vendor/plugins/file_column/CHANGELOG
|
251
|
-
- vendor/plugins/file_column/README
|
252
|
-
- vendor/plugins/file_column/init.rb
|
253
|
-
- vendor/plugins/file_column/TODO
|
254
246
|
- vendor/plugins/file_column/test/magick_test.rb
|
255
247
|
- vendor/plugins/file_column/test/fixtures
|
256
|
-
- vendor/plugins/file_column/test/magick_view_only_test.rb
|
257
|
-
- vendor/plugins/file_column/test/file_column_helper_test.rb
|
258
|
-
- vendor/plugins/file_column/test/public
|
259
|
-
- vendor/plugins/file_column/test/abstract_unit.rb
|
260
|
-
- vendor/plugins/file_column/test/connection.rb
|
261
|
-
- vendor/plugins/file_column/test/file_column_test.rb
|
262
248
|
- vendor/plugins/file_column/test/fixtures/invalid-image.jpg
|
263
249
|
- vendor/plugins/file_column/test/fixtures/mysql.sql
|
264
250
|
- vendor/plugins/file_column/test/fixtures/entry.rb
|
265
251
|
- vendor/plugins/file_column/test/fixtures/kerb.jpg
|
266
252
|
- vendor/plugins/file_column/test/fixtures/skanthak.png
|
267
253
|
- vendor/plugins/file_column/test/fixtures/schema.rb
|
254
|
+
- vendor/plugins/file_column/test/magick_view_only_test.rb
|
255
|
+
- vendor/plugins/file_column/test/file_column_helper_test.rb
|
256
|
+
- vendor/plugins/file_column/test/public
|
257
|
+
- vendor/plugins/file_column/test/abstract_unit.rb
|
258
|
+
- vendor/plugins/file_column/test/connection.rb
|
259
|
+
- vendor/plugins/file_column/test/file_column_test.rb
|
260
|
+
- vendor/plugins/file_column/lib
|
268
261
|
- vendor/plugins/file_column/lib/file_column.rb
|
269
262
|
- vendor/plugins/file_column/lib/file_column_helper.rb
|
270
263
|
- vendor/plugins/file_column/lib/validations.rb
|
271
264
|
- vendor/plugins/file_column/lib/rails_file_column.rb
|
272
265
|
- vendor/plugins/file_column/lib/magick_file_column.rb
|
273
266
|
- vendor/plugins/file_column/lib/file_compat.rb
|
267
|
+
- vendor/plugins/file_column/CHANGELOG
|
268
|
+
- vendor/plugins/file_column/README
|
269
|
+
- vendor/plugins/file_column/init.rb
|
270
|
+
- vendor/plugins/file_column/TODO
|
271
|
+
- vendor/plugins/google_analytics
|
274
272
|
- vendor/plugins/google_analytics/Rakefile
|
275
273
|
- vendor/plugins/google_analytics/test
|
276
|
-
- vendor/plugins/google_analytics/lib
|
277
|
-
- vendor/plugins/google_analytics/README
|
278
|
-
- vendor/plugins/google_analytics/init.rb
|
279
274
|
- vendor/plugins/google_analytics/test/google_analytics_test.rb
|
275
|
+
- vendor/plugins/google_analytics/lib
|
280
276
|
- vendor/plugins/google_analytics/lib/rubaidh
|
281
277
|
- vendor/plugins/google_analytics/lib/rubaidh/google_analytics.rb
|
278
|
+
- vendor/plugins/google_analytics/README
|
279
|
+
- vendor/plugins/google_analytics/init.rb
|
280
|
+
- vendor/plugins/responds_to_parent
|
281
|
+
- vendor/plugins/responds_to_parent/Rakefile
|
282
|
+
- vendor/plugins/responds_to_parent/test
|
283
|
+
- vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb
|
284
|
+
- vendor/plugins/responds_to_parent/lib
|
285
|
+
- vendor/plugins/responds_to_parent/lib/responds_to_parent.rb
|
286
|
+
- vendor/plugins/responds_to_parent/README
|
287
|
+
- vendor/plugins/responds_to_parent/init.rb
|
288
|
+
- vendor/plugins/responds_to_parent/MIT-LICENSE
|
289
|
+
- vendor/plugins/output_compression
|
282
290
|
- vendor/plugins/output_compression/test
|
291
|
+
- vendor/plugins/output_compression/test/test_helper.rb
|
292
|
+
- vendor/plugins/output_compression/test/test_controller.rb
|
293
|
+
- vendor/plugins/output_compression/test/output_test.rb
|
283
294
|
- vendor/plugins/output_compression/lib
|
295
|
+
- vendor/plugins/output_compression/lib/output_compression.rb
|
284
296
|
- vendor/plugins/output_compression/rakefile
|
285
297
|
- vendor/plugins/output_compression/CHANGELOG
|
286
298
|
- vendor/plugins/output_compression/README
|
287
299
|
- vendor/plugins/output_compression/init.rb
|
288
300
|
- vendor/plugins/output_compression/MIT-LICENSE
|
289
|
-
- vendor/plugins/
|
290
|
-
- vendor/plugins/output_compression/test/test_controller.rb
|
291
|
-
- vendor/plugins/output_compression/test/output_test.rb
|
292
|
-
- vendor/plugins/output_compression/lib/output_compression.rb
|
301
|
+
- vendor/plugins/login_engine
|
293
302
|
- vendor/plugins/login_engine/test
|
294
|
-
- vendor/plugins/login_engine/lib
|
295
|
-
- vendor/plugins/login_engine/CHANGELOG
|
296
|
-
- vendor/plugins/login_engine/README
|
297
|
-
- vendor/plugins/login_engine/app
|
298
|
-
- vendor/plugins/login_engine/install.rb
|
299
|
-
- vendor/plugins/login_engine/db
|
300
|
-
- vendor/plugins/login_engine/public
|
301
|
-
- vendor/plugins/login_engine/init_engine.rb
|
302
303
|
- vendor/plugins/login_engine/test/fixtures
|
304
|
+
- vendor/plugins/login_engine/test/fixtures/users.yml
|
303
305
|
- vendor/plugins/login_engine/test/test_helper.rb
|
304
306
|
- vendor/plugins/login_engine/test/unit
|
305
|
-
- vendor/plugins/login_engine/test/mocks
|
306
|
-
- vendor/plugins/login_engine/test/functional
|
307
|
-
- vendor/plugins/login_engine/test/fixtures/users.yml
|
308
307
|
- vendor/plugins/login_engine/test/unit/user_test.rb
|
308
|
+
- vendor/plugins/login_engine/test/mocks
|
309
309
|
- vendor/plugins/login_engine/test/mocks/time.rb
|
310
310
|
- vendor/plugins/login_engine/test/mocks/mail.rb
|
311
|
+
- vendor/plugins/login_engine/test/functional
|
311
312
|
- vendor/plugins/login_engine/test/functional/user_controller_test.rb
|
313
|
+
- vendor/plugins/login_engine/lib
|
312
314
|
- vendor/plugins/login_engine/lib/login_engine.rb
|
313
315
|
- vendor/plugins/login_engine/lib/login_engine
|
314
316
|
- vendor/plugins/login_engine/lib/login_engine/authenticated_system.rb
|
315
317
|
- vendor/plugins/login_engine/lib/login_engine/authenticated_user.rb
|
318
|
+
- vendor/plugins/login_engine/CHANGELOG
|
319
|
+
- vendor/plugins/login_engine/README
|
320
|
+
- vendor/plugins/login_engine/app
|
316
321
|
- vendor/plugins/login_engine/app/models
|
317
|
-
- vendor/plugins/login_engine/app/controllers
|
318
|
-
- vendor/plugins/login_engine/app/views
|
319
|
-
- vendor/plugins/login_engine/app/helpers
|
320
322
|
- vendor/plugins/login_engine/app/models/user_notify.rb
|
321
323
|
- vendor/plugins/login_engine/app/models/user.rb
|
324
|
+
- vendor/plugins/login_engine/app/controllers
|
322
325
|
- vendor/plugins/login_engine/app/controllers/user_controller.rb
|
326
|
+
- vendor/plugins/login_engine/app/views
|
323
327
|
- vendor/plugins/login_engine/app/views/user_notify
|
324
|
-
- vendor/plugins/login_engine/app/views/user
|
325
328
|
- vendor/plugins/login_engine/app/views/user_notify/pending_delete.rhtml
|
326
329
|
- vendor/plugins/login_engine/app/views/user_notify/delete.rhtml
|
327
330
|
- vendor/plugins/login_engine/app/views/user_notify/change_password.rhtml
|
328
331
|
- vendor/plugins/login_engine/app/views/user_notify/forgot_password.rhtml
|
329
332
|
- vendor/plugins/login_engine/app/views/user_notify/signup.rhtml
|
333
|
+
- vendor/plugins/login_engine/app/views/user
|
330
334
|
- vendor/plugins/login_engine/app/views/user/login.rhtml
|
331
335
|
- vendor/plugins/login_engine/app/views/user/home.rhtml
|
332
336
|
- vendor/plugins/login_engine/app/views/user/edit.rhtml
|
@@ -336,11 +340,16 @@ files:
|
|
336
340
|
- vendor/plugins/login_engine/app/views/user/_edit.rhtml
|
337
341
|
- vendor/plugins/login_engine/app/views/user/signup.rhtml
|
338
342
|
- vendor/plugins/login_engine/app/views/user/_password.rhtml
|
343
|
+
- vendor/plugins/login_engine/app/helpers
|
339
344
|
- vendor/plugins/login_engine/app/helpers/user_helper.rb
|
345
|
+
- vendor/plugins/login_engine/install.rb
|
346
|
+
- vendor/plugins/login_engine/db
|
340
347
|
- vendor/plugins/login_engine/db/migrate
|
341
348
|
- vendor/plugins/login_engine/db/migrate/001_initial_schema.rb
|
349
|
+
- vendor/plugins/login_engine/public
|
342
350
|
- vendor/plugins/login_engine/public/stylesheets
|
343
351
|
- vendor/plugins/login_engine/public/stylesheets/login_engine.css
|
352
|
+
- vendor/plugins/login_engine/init_engine.rb
|
344
353
|
test_files:
|
345
354
|
- test/unit/attachment_test.rb
|
346
355
|
- test/unit/mail_notify_test.rb
|