wheels 0.0.48 → 0.0.49

Sign up to get free protection for your applications and to get access to all the features.
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.");