wheels 0.0.48 → 0.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. data/VERSION +1 -1
  2. data/app/controllers/access_control_entries_controller.rb +4 -4
  3. data/app/controllers/external_links_controller.rb +5 -0
  4. data/app/controllers/feedbacks_controller.rb +10 -0
  5. data/app/controllers/menus_controller.rb +2 -0
  6. data/app/controllers/pages_controller.rb +16 -29
  7. data/app/controllers/sitemaps_controller.rb +135 -0
  8. data/app/helpers/application_helper.rb +4 -3
  9. data/app/helpers/external_links_helper.rb +2 -0
  10. data/app/helpers/feedbacks_helper.rb +2 -0
  11. data/app/helpers/menus_helper.rb +2 -0
  12. data/app/helpers/sitemaps_helper.rb +12 -0
  13. data/app/mailers/feedback_mailer.rb +10 -0
  14. data/app/models/ability.rb +2 -1
  15. data/app/models/access_control_entry.rb +17 -15
  16. data/app/models/external_link.rb +4 -0
  17. data/app/models/feedback.rb +13 -0
  18. data/app/models/image.rb +1 -1
  19. data/app/models/menu.rb +4 -0
  20. data/app/models/page.rb +2 -5
  21. data/app/models/sitemap.rb +153 -0
  22. data/app/models/user.rb +7 -1
  23. data/app/validators/email_validator.rb +22 -0
  24. data/app/views/access_control_entries/_form.html.haml +1 -1
  25. data/app/views/access_control_entries/_index.html.haml +3 -3
  26. data/app/views/access_control_entries/_show.html.haml +1 -1
  27. data/app/views/external_links/_fields_for.html.haml +2 -0
  28. data/app/views/external_links/_form.html.haml +18 -0
  29. data/app/views/external_links/_show.html.haml +7 -0
  30. data/app/views/external_links/edit.html.haml +7 -0
  31. data/app/views/external_links/index.html.haml +23 -0
  32. data/app/views/external_links/new.html.haml +5 -0
  33. data/app/views/external_links/show.html.haml +2 -0
  34. data/app/views/feedback_mailer/submit_feedback.html.haml +22 -0
  35. data/app/views/feedbacks/_form.html.haml +37 -0
  36. data/app/views/feedbacks/index.html.haml +27 -0
  37. data/app/views/feedbacks/new.html.haml +5 -0
  38. data/app/views/feedbacks/show.html.haml +19 -0
  39. data/app/views/layouts/application.html.haml +21 -16
  40. data/app/views/layouts/bare.html.haml +2 -0
  41. data/app/views/loadbehind/_view.js.haml +1 -2
  42. data/app/views/menus/_form.html.haml +13 -0
  43. data/app/views/menus/edit.html.haml +7 -0
  44. data/app/views/menus/index.html.haml +19 -0
  45. data/app/views/menus/new.html.haml +5 -0
  46. data/app/views/menus/show.html.haml +7 -0
  47. data/app/views/pages/_child_pages_links.html.haml +1 -1
  48. data/app/views/pages/_control_panel.html.haml +1 -6
  49. data/app/views/pages/_form.html.haml +2 -2
  50. data/app/views/pages/_form_fields.html.haml +7 -2
  51. data/app/views/pages/_show.html.haml +4 -0
  52. data/app/views/pages/create.js.haml +2 -1
  53. data/app/views/pages/destroy.js.haml +3 -0
  54. data/app/views/pages/edit.js.haml +4 -0
  55. data/app/views/pages/index.html.haml +4 -2
  56. data/app/views/pages/index.js.haml +3 -0
  57. data/app/views/pages/new.js.haml +3 -0
  58. data/app/views/pages/show.html.haml +2 -10
  59. data/app/views/pages/show.js.haml +3 -0
  60. data/app/views/pages/update.js.haml +2 -2
  61. data/app/views/sitemaps/edit.html.haml +12 -0
  62. data/app/views/sitemaps/edit.js.erb +0 -0
  63. data/app/views/sitemaps/index.html.haml +93 -0
  64. data/app/views/sitemaps/index.json.erb +23 -0
  65. data/app/views/sitemaps/new.html.haml +8 -0
  66. data/app/views/sitemaps/new.js.erb +0 -0
  67. data/app/views/users/edit.html.haml +45 -0
  68. data/db/migrate/{add_fields_to_users.rb → 0010_add_fields_to_users.rb} +0 -0
  69. data/db/migrate/{create_blogs.rb → 0020_create_blogs.rb} +0 -0
  70. data/db/migrate/{create_galleries.rb → 0030_create_galleries.rb} +0 -0
  71. data/db/migrate/{create_images.rb → 0040_create_images.rb} +0 -0
  72. data/db/migrate/{create_profiles.rb → 0050_create_profiles.rb} +0 -0
  73. data/db/migrate/{insert_admin_user_and_roles.rb → 0060_insert_admin_user_and_roles.rb} +0 -0
  74. data/db/migrate/{create_pages.rb → 0070_create_pages.rb} +0 -0
  75. data/db/migrate/{create_forums.rb → 0080_create_forums.rb} +0 -0
  76. data/db/migrate/{create_discussions.rb → 0090_create_discussions.rb} +0 -0
  77. data/db/migrate/{create_forum_messages.rb → 0100_create_forum_messages.rb} +0 -0
  78. data/db/migrate/{create_access_control_entries.rb → 0110_create_access_control_entries.rb} +3 -3
  79. data/db/migrate/{create_attachments.rb → 0120_create_attachments.rb} +0 -4
  80. data/db/migrate/{create_roles.rb → 0130_create_roles.rb} +0 -0
  81. data/db/migrate/0140_create_feedbacks.rb +20 -0
  82. data/db/migrate/0150_create_external_links.rb +14 -0
  83. data/db/migrate/0160_create_sitemaps.rb +17 -0
  84. data/db/migrate/0170_create_menus.rb +14 -0
  85. data/lib/development_mail_interceptor.rb +7 -0
  86. data/lib/generators/wheels/recipes/wheels.rb +18 -12
  87. data/lib/wheels/base.rb +7 -0
  88. data/lib/wheels/routes.rb +8 -3
  89. data/lib/wheels.rb +2 -0
  90. data/public/javascripts/jquery-validate/additional-methods.js +259 -0
  91. data/public/javascripts/jquery-validate/changelog.txt +239 -0
  92. data/public/javascripts/jquery-validate/jquery.validate.js +1146 -0
  93. data/public/javascripts/jquery-validate/jquery.validate.min.js +16 -0
  94. data/public/javascripts/jquery-validate/jquery.validate.pack.js +15 -0
  95. data/public/javascripts/jquery-validate/lib/jquery-1.4.2.js +6240 -0
  96. data/public/javascripts/jquery-validate/lib/jquery.form.js +660 -0
  97. data/public/javascripts/jquery-validate/lib/jquery.js +4376 -0
  98. data/public/javascripts/jquery-validate/lib/jquery.metadata.js +122 -0
  99. data/public/javascripts/jquery-validate/localization/messages_ar.js +24 -0
  100. data/public/javascripts/jquery-validate/localization/messages_bg.js +23 -0
  101. data/public/javascripts/jquery-validate/localization/messages_cn.js +23 -0
  102. data/public/javascripts/jquery-validate/localization/messages_cs.js +23 -0
  103. data/public/javascripts/jquery-validate/localization/messages_da.js +20 -0
  104. data/public/javascripts/jquery-validate/localization/messages_de.js +20 -0
  105. data/public/javascripts/jquery-validate/localization/messages_el.js +24 -0
  106. data/public/javascripts/jquery-validate/localization/messages_es.js +23 -0
  107. data/public/javascripts/jquery-validate/localization/messages_fa.js +23 -0
  108. data/public/javascripts/jquery-validate/localization/messages_fi.js +21 -0
  109. data/public/javascripts/jquery-validate/localization/messages_fr.js +23 -0
  110. data/public/javascripts/jquery-validate/localization/messages_he.js +23 -0
  111. data/public/javascripts/jquery-validate/localization/messages_hu.js +20 -0
  112. data/public/javascripts/jquery-validate/localization/messages_it.js +23 -0
  113. data/public/javascripts/jquery-validate/localization/messages_kk.js +23 -0
  114. data/public/javascripts/jquery-validate/localization/messages_lt.js +23 -0
  115. data/public/javascripts/jquery-validate/localization/messages_lv.js +23 -0
  116. data/public/javascripts/jquery-validate/localization/messages_nl.js +23 -0
  117. data/public/javascripts/jquery-validate/localization/messages_no.js +23 -0
  118. data/public/javascripts/jquery-validate/localization/messages_pl.js +23 -0
  119. data/public/javascripts/jquery-validate/localization/messages_ptbr.js +23 -0
  120. data/public/javascripts/jquery-validate/localization/messages_ptpt.js +23 -0
  121. data/public/javascripts/jquery-validate/localization/messages_ro.js +23 -0
  122. data/public/javascripts/jquery-validate/localization/messages_ru.js +23 -0
  123. data/public/javascripts/jquery-validate/localization/messages_se.js +21 -0
  124. data/public/javascripts/jquery-validate/localization/messages_sk.js +20 -0
  125. data/public/javascripts/jquery-validate/localization/messages_tr.js +23 -0
  126. data/public/javascripts/jquery-validate/localization/messages_tw.js +23 -0
  127. data/public/javascripts/jquery-validate/localization/messages_ua.js +23 -0
  128. data/public/javascripts/jquery-validate/localization/methods_de.js +12 -0
  129. data/public/javascripts/jquery-validate/localization/methods_nl.js +9 -0
  130. data/public/javascripts/jquery-validate/localization/methods_pt.js +9 -0
  131. data/public/javascripts/jquery-validate/todo +172 -0
  132. data/public/javascripts/jquery.cookie.js +96 -0
  133. data/public/javascripts/jquery.filedrop.js +253 -0
  134. data/public/javascripts/jquery.hotkeys.js +99 -0
  135. data/public/javascripts/jquery.js +6240 -0
  136. data/public/javascripts/jquery.jstree.js +3510 -0
  137. data/public/javascripts/jquery.uploadify.js +26 -0
  138. data/public/javascripts/jquery.validate.js +1147 -0
  139. data/public/javascripts/sitemap_jstree.js +329 -0
  140. data/public/javascripts/swfobject.js +4 -0
  141. data/public/jstree/_demo/_dump.sql +20 -0
  142. data/public/jstree/_demo/_inc/__mysql_errors.log +0 -0
  143. data/public/jstree/_demo/_inc/class._database.php +146 -0
  144. data/public/jstree/_demo/_inc/class._database_i.php +152 -0
  145. data/public/jstree/_demo/_inc/class.tree.php +602 -0
  146. data/public/jstree/_demo/_install.txt +6 -0
  147. data/public/jstree/_demo/config.php +14 -0
  148. data/public/jstree/_demo/index.html +262 -0
  149. data/public/jstree/_demo/server.php +69 -0
  150. data/public/jstree/_docs/!style.css +37 -0
  151. data/public/jstree/_docs/_drive.png +0 -0
  152. data/public/jstree/_docs/_html_data.html +2 -0
  153. data/public/jstree/_docs/_json_data.json +4 -0
  154. data/public/jstree/_docs/_search_data.json +6 -0
  155. data/public/jstree/_docs/_search_result.json +1 -0
  156. data/public/jstree/_docs/_xml_flat.xml +12 -0
  157. data/public/jstree/_docs/_xml_nest.xml +18 -0
  158. data/public/jstree/_docs/checkbox.html +148 -0
  159. data/public/jstree/_docs/contextmenu.html +120 -0
  160. data/public/jstree/_docs/cookies.html +96 -0
  161. data/public/jstree/_docs/core.html +622 -0
  162. data/public/jstree/_docs/crrm.html +315 -0
  163. data/public/jstree/_docs/dnd.html +197 -0
  164. data/public/jstree/_docs/hotkeys.html +81 -0
  165. data/public/jstree/_docs/html_data.html +174 -0
  166. data/public/jstree/_docs/index.html +75 -0
  167. data/public/jstree/_docs/json_data.html +240 -0
  168. data/public/jstree/_docs/languages.html +138 -0
  169. data/public/jstree/_docs/search.html +114 -0
  170. data/public/jstree/_docs/sort.html +84 -0
  171. data/public/jstree/_docs/syntax/!script.js +2232 -0
  172. data/public/jstree/_docs/syntax/!style.css +511 -0
  173. data/public/jstree/_docs/syntax/clipboard.swf +0 -0
  174. data/public/jstree/_docs/syntax/help.png +0 -0
  175. data/public/jstree/_docs/syntax/magnifier.png +0 -0
  176. data/public/jstree/_docs/syntax/page_white_code.png +0 -0
  177. data/public/jstree/_docs/syntax/page_white_copy.png +0 -0
  178. data/public/jstree/_docs/syntax/printer.png +0 -0
  179. data/public/jstree/_docs/syntax/wrapping.png +0 -0
  180. data/public/jstree/_docs/themeroller.html +98 -0
  181. data/public/jstree/_docs/themes.html +126 -0
  182. data/public/jstree/_docs/types.html +173 -0
  183. data/public/jstree/_docs/ui.html +188 -0
  184. data/public/jstree/_docs/unique.html +70 -0
  185. data/public/jstree/_docs/xml_data.html +214 -0
  186. data/public/jstree/_lib/jquery.cookie.js +96 -0
  187. data/public/jstree/_lib/jquery.hotkeys.js +99 -0
  188. data/public/jstree/_lib/jquery.js +6240 -0
  189. data/public/jstree/jquery.jstree.js +3510 -0
  190. data/public/jstree/jstree.html +237 -0
  191. data/public/jstree/themes/apple/bg.jpg +0 -0
  192. data/public/jstree/themes/apple/d.png +0 -0
  193. data/public/jstree/themes/apple/dot_for_ie.gif +0 -0
  194. data/public/jstree/themes/apple/style.css +60 -0
  195. data/public/jstree/themes/apple/throbber.gif +0 -0
  196. data/public/jstree/themes/classic/d.png +0 -0
  197. data/public/jstree/themes/classic/dot_for_ie.gif +0 -0
  198. data/public/jstree/themes/classic/style.css +59 -0
  199. data/public/jstree/themes/classic/throbber.gif +0 -0
  200. data/public/jstree/themes/default/d.gif +0 -0
  201. data/public/jstree/themes/default/d.png +0 -0
  202. data/public/jstree/themes/default/style.css +73 -0
  203. data/public/jstree/themes/default/throbber.gif +0 -0
  204. data/public/jstree/themes/default-rtl/d.gif +0 -0
  205. data/public/jstree/themes/default-rtl/d.png +0 -0
  206. data/public/jstree/themes/default-rtl/dots.gif +0 -0
  207. data/public/jstree/themes/default-rtl/style.css +83 -0
  208. data/public/jstree/themes/default-rtl/throbber.gif +0 -0
  209. data/public/stylesheets/sass/dreamy.sass +21 -56
  210. data/public/stylesheets/sass/menu.sass +43 -9
  211. data/public/stylesheets/sass/uploadify.sass +52 -0
  212. data/public/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  213. data/public/stylesheets/ui-lightness/jquery-ui-1.8.4.custom.css +549 -0
  214. data/wheels.gemspec +187 -15
  215. metadata +188 -16
@@ -0,0 +1,45 @@
1
+ %h1 Change Your Password
2
+
3
+ .form
4
+ = form_for resource do |f|
5
+ -if resource.errors.any?
6
+ #errorExplanation
7
+ %h2= "#{pluralize(resource.errors.count, "error")} prohibited this change:"
8
+ %ul
9
+ - resource.errors.full_messages.each do |msg|
10
+ %li= msg
11
+ .field
12
+ .fieldName Old Password:
13
+ = f.password_field :old_password, :id=>"old_password"
14
+ .field
15
+ .fieldName New Password:
16
+ = f.password_field :password, :id=>"password"
17
+ .field
18
+ .fieldName Confirm Password:
19
+ = f.password_field :password_confirmation
20
+ .submit= f.submit "Change Password"
21
+
22
+ :css
23
+ .extra_form_data {
24
+ display: none;
25
+ }
26
+
27
+ = content_for :head do
28
+ = javascript_include_tag 'jquery.validate'
29
+
30
+
31
+ :javascript
32
+ var checkingPassword = true;
33
+ $(function(){
34
+ jQuery.validator.addMethod("verify_user", function(value, element, params) {
35
+ //alert($(element).attr('data-verify-user-path'));
36
+ return $.ajax({
37
+ async: false,
38
+ url: $(element).attr('data-verify-user-path')+ '?password='+value
39
+ }).responseText == "true";
40
+ }, "Password is incorrect.");
41
+
42
+ $('form').validate({onkeyup: function(element) {}});
43
+ $('#old_password').rules("add", {verify_user : true, alphanumeric: true})
44
+ });
45
+
@@ -1,7 +1,7 @@
1
1
  class CreateAccessControlEntries < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :access_control_entries do |t|
4
- t.string :resource_class_name
4
+ t.string :resource_type
5
5
  t.integer :resource_id
6
6
  t.integer :user_id
7
7
  t.integer :role_id
@@ -10,8 +10,8 @@ class CreateAccessControlEntries < ActiveRecord::Migration
10
10
  t.string :serialized_options
11
11
  t.timestamps
12
12
  end
13
- add_index :access_control_entries, :resource_class_name
14
- add_index :access_control_entries, [:resource_class_name, :resource_id]
13
+ add_index :access_control_entries, :resource_type
14
+ add_index :access_control_entries, [:resource_type, :resource_id]
15
15
  add_index :access_control_entries, :user_id
16
16
  add_index :access_control_entries, :role_id
17
17
  end
@@ -6,12 +6,8 @@ class CreateAttachments < ActiveRecord::Migration
6
6
  t.integer :file_file_size
7
7
  t.datetime :file_updated_at
8
8
  t.integer :page_id
9
- t.string :resource_class_name
10
- t.integer :resource_id
11
-
12
9
  t.timestamps
13
10
  end
14
- add_index :attachments, [:resource_class_name, :resource_id]
15
11
  end
16
12
 
17
13
  def self.down
@@ -0,0 +1,20 @@
1
+ class CreateFeedbacks < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :feedbacks do |t|
4
+ t.string :name
5
+ t.string :phone
6
+ t.string :subject
7
+ t.boolean :been_read
8
+ t.string :email
9
+ t.text :message
10
+ t.boolean :want_response
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ drop_table :feedbacks
18
+ end
19
+ end
20
+
@@ -0,0 +1,14 @@
1
+ class CreateExternalLinks < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :external_links do |t|
4
+ t.string :url
5
+ t.text :link_text
6
+ t.timestamps
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :external_links
12
+ end
13
+ end
14
+
@@ -0,0 +1,17 @@
1
+ class CreateSitemaps < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :sitemaps do |t|
4
+ t.integer :position
5
+ t.string :menu_text
6
+ t.string :resource_type
7
+ t.integer :resource_id
8
+ t.integer :parent_id
9
+ t.timestamps
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table :sitemaps
15
+ end
16
+ end
17
+
@@ -0,0 +1,14 @@
1
+ class CreateMenus < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :menus do |t|
4
+ t.string :title
5
+ t.timestamps
6
+ end
7
+ Menu.create(:title=>"Main Menu")
8
+ end
9
+
10
+ def self.down
11
+ drop_table :menus
12
+ end
13
+ end
14
+
@@ -0,0 +1,7 @@
1
+ class DevelopmentMailInterceptor
2
+ def self.delivering_email(message)
3
+ message.subject = "#{message.to} #{message.subject}"
4
+ message.to = "tgannon@gmail.com"
5
+ end
6
+ end
7
+
@@ -37,20 +37,26 @@ run "git submodule add -b rails3 http://github.com/mislav/will_paginate.git vend
37
37
  stategies << lambda do
38
38
  generate "devise:install"
39
39
  generate "devise User"; sleep 1
40
- migration_template 'db/migrate/add_fields_to_users.rb', 'db/migrate/add_fields_to_users'
40
+ migration_template 'db/migrate/0010_add_fields_to_users.rb', 'db/migrate/add_fields_to_users'
41
41
  generate "acts_as_taggable_on:migration"; sleep 1
42
+ migration_template 'db/migrate/0020_create_blogs.rb', 'db/migrate/create_blogs'; sleep 1
43
+ migration_template 'db/migrate/0030_create_galleries.rb', 'db/migrate/create_galleries'; sleep 1
44
+ migration_template 'db/migrate/0040_create_images.rb', 'db/migrate/create_images'; sleep 1
45
+ migration_template 'db/migrate/0050_create_profiles.rb', 'db/migrate/create_profiles'; sleep 1
46
+ migration_template 'db/migrate/0060_insert_admin_user_and_roles.rb', 'db/migrate/insert_admin_user_and_roles'; sleep 1
47
+ migration_template "db/migrate/0070_create_pages.rb", "db/migrate/create_pages"; sleep 1
48
+ migration_template "db/migrate/0080_create_forums.rb", "db/migrate/create_forums"; sleep 1
49
+ migration_template "db/migrate/0090_create_discussions.rb", "db/migrate/create_discussions"; sleep 1
50
+ migration_template "db/migrate/0100_create_forum_messages.rb", "db/migrate/create_forum_messages"; sleep 1
51
+ migration_template "db/migrate/0110_create_access_control_entries.rb", "db/migrate/create_access_control_entries"; sleep 1
52
+ migration_template "db/migrate/0120_create_attachments.rb", "db/migrate/create_attachments"; sleep 1
53
+ migration_template 'db/migrate/0130_create_roles.rb', 'db/migrate/create_roles'; sleep 1
54
+ migration_template "db/migrate/0140_create_feedbacks.rb", "db/migrate/create_feedbacks"; sleep 1
55
+ migration_template "db/migrate/0150_create_external_links.rb", "db/migrate/create_external_links"; sleep 1
56
+ migration_template "db/migrate/0160_create_sitemaps.rb", "db/migrate/create_sitemaps"; sleep 1
57
+ migration_template "db/migrate/0170_create_menus.rb", "db/migrate/create_menus"; sleep 1
58
+
42
59
 
43
- migration_template "db/migrate/create_access_control_entries.rb", "db/migrate/create_access_control_entries"; sleep 1
44
- migration_template "db/migrate/create_attachments.rb", "db/migrate/create_attachments"; sleep 1
45
- migration_template 'db/migrate/create_blogs.rb', 'db/migrate/create_blogs'; sleep 1
46
- migration_template "db/migrate/create_discussions.rb", "db/migrate/create_discussions"; sleep 1
47
- migration_template "db/migrate/create_forums.rb", "db/migrate/create_forums"; sleep 1
48
- migration_template 'db/migrate/create_galleries.rb', 'db/migrate/create_galleries'; sleep 1
49
- migration_template 'db/migrate/create_images.rb', 'db/migrate/create_images'; sleep 1
50
- migration_template "db/migrate/create_pages.rb", "db/migrate/create_pages"; sleep 1
51
- migration_template 'db/migrate/create_profiles.rb', 'db/migrate/create_profiles'; sleep 1
52
- migration_template 'db/migrate/create_roles.rb', 'db/migrate/create_roles'; sleep 1
53
- migration_template 'db/migrate/insert_admin_user_and_roles.rb', 'db/migrate/insert_admin_user_and_roles'; sleep 1
54
60
  plugin 'hassle', :git=>"http://github.com/pedro/hassle.git"
55
61
 
56
62
  # create wheels_resources first so that devise_for :users will appear first in routes.rb
@@ -0,0 +1,7 @@
1
+ module InheritedResources
2
+ class Base
3
+
4
+ end
5
+
6
+ end
7
+
data/lib/wheels/routes.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  module ActionDispatch::Routing
2
2
  class Mapper
3
3
  def wheels_resources
4
- scope "/admin" do
5
- resources :access_control_entries
6
- end
4
+ resources :access_control_entries
7
5
 
8
6
  resources :blogs, :path=>"blog"
9
7
 
8
+ resources :external_links
9
+
10
10
  resources :forums do
11
11
  resources :discussions do
12
12
  resources :forum_messages
@@ -19,6 +19,8 @@ module ActionDispatch::Routing
19
19
 
20
20
  resources :layouts
21
21
 
22
+ resources :menus
23
+
22
24
  resources :pages do
23
25
  resources :attachments
24
26
  resources :children, :controller=>"pages", :as => "children"
@@ -26,6 +28,8 @@ module ActionDispatch::Routing
26
28
 
27
29
  resource :profile
28
30
 
31
+ resources :sitemaps
32
+
29
33
  devise_for :users
30
34
  resources :users do
31
35
  resources :blogs, :path=>"blog"
@@ -36,6 +40,7 @@ module ActionDispatch::Routing
36
40
  end
37
41
  end
38
42
 
43
+ match '/admin' => "sitemaps#index"
39
44
  match "change_password" => "users#edit"
40
45
  match "verify_password" => "users#verify", :format=>:json
41
46
  end
data/lib/wheels.rb CHANGED
@@ -7,3 +7,5 @@ require 'wheels/paperclip_interpolations.rb'
7
7
  require 'wheels/password_validators.rb'
8
8
  # require 'wheels/s3login_provider.rb'
9
9
 
10
+ require 'development_mail_interceptor.rb'
11
+
@@ -0,0 +1,259 @@
1
+ (function() {
2
+
3
+ function stripHtml(value) {
4
+ // remove html tags and space chars
5
+ return value.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' ')
6
+ // remove numbers and punctuation
7
+ .replace(/[0-9.(),;:!?%#$'"_+=\/-]*/g,'');
8
+ }
9
+ jQuery.validator.addMethod("maxWords", function(value, element, params) {
10
+ return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length < params;
11
+ }, jQuery.validator.format("Please enter {0} words or less."));
12
+
13
+ jQuery.validator.addMethod("minWords", function(value, element, params) {
14
+ return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
15
+ }, jQuery.validator.format("Please enter at least {0} words."));
16
+
17
+ jQuery.validator.addMethod("rangeWords", function(value, element, params) {
18
+ return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params[0] && value.match(/bw+b/g).length < params[1];
19
+ }, jQuery.validator.format("Please enter between {0} and {1} words."));
20
+
21
+ })();
22
+
23
+ jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
24
+ return this.optional(element) || /^[a-z-.,()'\"\s]+$/i.test(value);
25
+ }, "Letters or punctuation only please");
26
+
27
+ jQuery.validator.addMethod("alphanumeric", function(value, element) {
28
+ return this.optional(element) || /^\w+$/i.test(value);
29
+ }, "Letters, numbers, spaces or underscores only please");
30
+
31
+ jQuery.validator.addMethod("lettersonly", function(value, element) {
32
+ return this.optional(element) || /^[a-z]+$/i.test(value);
33
+ }, "Letters only please");
34
+
35
+ jQuery.validator.addMethod("nowhitespace", function(value, element) {
36
+ return this.optional(element) || /^\S+$/i.test(value);
37
+ }, "No white space please");
38
+
39
+ jQuery.validator.addMethod("ziprange", function(value, element) {
40
+ return this.optional(element) || /^90[2-5]\d\{2}-\d{4}$/.test(value);
41
+ }, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");
42
+
43
+ jQuery.validator.addMethod("integer", function(value, element) {
44
+ return this.optional(element) || /^-?\d+$/.test(value);
45
+ }, "A positive or negative non-decimal number please");
46
+
47
+ /**
48
+ * Return true, if the value is a valid vehicle identification number (VIN).
49
+ *
50
+ * Works with all kind of text inputs.
51
+ *
52
+ * @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
53
+ * @desc Declares a required input element whose value must be a valid vehicle identification number.
54
+ *
55
+ * @name jQuery.validator.methods.vinUS
56
+ * @type Boolean
57
+ * @cat Plugins/Validate/Methods
58
+ */
59
+ jQuery.validator.addMethod(
60
+ "vinUS",
61
+ function(v){
62
+ if (v.length != 17)
63
+ return false;
64
+ var i, n, d, f, cd, cdv;
65
+ var LL = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"];
66
+ var VL = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9];
67
+ var FL = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];
68
+ var rs = 0;
69
+ for(i = 0; i < 17; i++){
70
+ f = FL[i];
71
+ d = v.slice(i,i+1);
72
+ if(i == 8){
73
+ cdv = d;
74
+ }
75
+ if(!isNaN(d)){
76
+ d *= f;
77
+ }
78
+ else{
79
+ for(n = 0; n < LL.length; n++){
80
+ if(d.toUpperCase() === LL[n]){
81
+ d = VL[n];
82
+ d *= f;
83
+ if(isNaN(cdv) && n == 8){
84
+ cdv = LL[n];
85
+ }
86
+ break;
87
+ }
88
+ }
89
+ }
90
+ rs += d;
91
+ }
92
+ cd = rs % 11;
93
+ if(cd == 10){cd = "X";}
94
+ if(cd == cdv){return true;}
95
+ return false;
96
+ },
97
+ "The specified vehicle identification number (VIN) is invalid."
98
+ );
99
+
100
+ /**
101
+ * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
102
+ *
103
+ * @example jQuery.validator.methods.date("01/01/1900")
104
+ * @result true
105
+ *
106
+ * @example jQuery.validator.methods.date("01/13/1990")
107
+ * @result false
108
+ *
109
+ * @example jQuery.validator.methods.date("01.01.1900")
110
+ * @result false
111
+ *
112
+ * @example <input name="pippo" class="{dateITA:true}" />
113
+ * @desc Declares an optional input element whose value must be a valid date.
114
+ *
115
+ * @name jQuery.validator.methods.dateITA
116
+ * @type Boolean
117
+ * @cat Plugins/Validate/Methods
118
+ */
119
+ jQuery.validator.addMethod(
120
+ "dateITA",
121
+ function(value, element) {
122
+ var check = false;
123
+ var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
124
+ if( re.test(value)){
125
+ var adata = value.split('/');
126
+ var gg = parseInt(adata[0],10);
127
+ var mm = parseInt(adata[1],10);
128
+ var aaaa = parseInt(adata[2],10);
129
+ var xdata = new Date(aaaa,mm-1,gg);
130
+ if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
131
+ check = true;
132
+ else
133
+ check = false;
134
+ } else
135
+ check = false;
136
+ return this.optional(element) || check;
137
+ },
138
+ "Please enter a correct date"
139
+ );
140
+
141
+ jQuery.validator.addMethod("dateNL", function(value, element) {
142
+ return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
143
+ }, "Vul hier een geldige datum in."
144
+ );
145
+
146
+ jQuery.validator.addMethod("time", function(value, element) {
147
+ return this.optional(element) || /^([01][0-9])|(2[0123]):([0-5])([0-9])$/.test(value);
148
+ }, "Please enter a valid time, between 00:00 and 23:59"
149
+ );
150
+
151
+ /**
152
+ * matches US phone number format
153
+ *
154
+ * where the area code may not start with 1 and the prefix may not start with 1
155
+ * allows '-' or ' ' as a separator and allows parens around area code
156
+ * some people may want to put a '1' in front of their number
157
+ *
158
+ * 1(212)-999-2345
159
+ * or
160
+ * 212 999 2344
161
+ * or
162
+ * 212-999-0983
163
+ *
164
+ * but not
165
+ * 111-123-5434
166
+ * and not
167
+ * 212 123 4567
168
+ */
169
+ jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
170
+ phone_number = phone_number.replace(/\s+/g, "");
171
+ return this.optional(element) || phone_number.length > 9 &&
172
+ phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
173
+ }, "Please specify a valid phone number");
174
+
175
+ jQuery.validator.addMethod('phoneUK', function(phone_number, element) {
176
+ return this.optional(element) || phone_number.length > 9 &&
177
+ phone_number.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/);
178
+ }, 'Please specify a valid phone number');
179
+
180
+ jQuery.validator.addMethod('mobileUK', function(phone_number, element) {
181
+ return this.optional(element) || phone_number.length > 9 &&
182
+ phone_number.match(/^((0|\+44)7(5|6|7|8|9){1}\d{2}\s?\d{6})$/);
183
+ }, 'Please specify a valid mobile number');
184
+
185
+ // TODO check if value starts with <, otherwise don't try stripping anything
186
+ jQuery.validator.addMethod("strippedminlength", function(value, element, param) {
187
+ return jQuery(value).text().length >= param;
188
+ }, jQuery.validator.format("Please enter at least {0} characters"));
189
+
190
+ // same as email, but TLD is optional
191
+ jQuery.validator.addMethod("email2", function(value, element, param) {
192
+ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
193
+ }, jQuery.validator.messages.email);
194
+
195
+ // same as url, but TLD is optional
196
+ jQuery.validator.addMethod("url2", function(value, element, param) {
197
+ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
198
+ }, jQuery.validator.messages.url);
199
+
200
+ // NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
201
+ // Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
202
+ // Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
203
+ jQuery.validator.addMethod("creditcardtypes", function(value, element, param) {
204
+
205
+ if (/[^0-9-]+/.test(value))
206
+ return false;
207
+
208
+ value = value.replace(/\D/g, "");
209
+
210
+ var validTypes = 0x0000;
211
+
212
+ if (param.mastercard)
213
+ validTypes |= 0x0001;
214
+ if (param.visa)
215
+ validTypes |= 0x0002;
216
+ if (param.amex)
217
+ validTypes |= 0x0004;
218
+ if (param.dinersclub)
219
+ validTypes |= 0x0008;
220
+ if (param.enroute)
221
+ validTypes |= 0x0010;
222
+ if (param.discover)
223
+ validTypes |= 0x0020;
224
+ if (param.jcb)
225
+ validTypes |= 0x0040;
226
+ if (param.unknown)
227
+ validTypes |= 0x0080;
228
+ if (param.all)
229
+ validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
230
+
231
+ if (validTypes & 0x0001 && /^(51|52|53|54|55)/.test(value)) { //mastercard
232
+ return value.length == 16;
233
+ }
234
+ if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
235
+ return value.length == 16;
236
+ }
237
+ if (validTypes & 0x0004 && /^(34|37)/.test(value)) { //amex
238
+ return value.length == 15;
239
+ }
240
+ if (validTypes & 0x0008 && /^(300|301|302|303|304|305|36|38)/.test(value)) { //dinersclub
241
+ return value.length == 14;
242
+ }
243
+ if (validTypes & 0x0010 && /^(2014|2149)/.test(value)) { //enroute
244
+ return value.length == 15;
245
+ }
246
+ if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
247
+ return value.length == 16;
248
+ }
249
+ if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
250
+ return value.length == 16;
251
+ }
252
+ if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
253
+ return value.length == 15;
254
+ }
255
+ if (validTypes & 0x0080) { //unknown
256
+ return true;
257
+ }
258
+ return false;
259
+ }, "Please enter a valid credit card number.");