faalis 0.7.0

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 (286) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +339 -0
  3. data/README.md +45 -0
  4. data/Rakefile +42 -0
  5. data/app/assets/fonts/DroidNaskh-Bold.ttf +0 -0
  6. data/app/assets/fonts/DroidNaskh-Regular.ttf +0 -0
  7. data/app/assets/fonts/OpenSans-Bold.ttf +0 -0
  8. data/app/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
  9. data/app/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
  10. data/app/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  11. data/app/assets/fonts/OpenSans-Italic.ttf +0 -0
  12. data/app/assets/fonts/OpenSans-Light.ttf +0 -0
  13. data/app/assets/fonts/OpenSans-LightItalic.ttf +0 -0
  14. data/app/assets/fonts/OpenSans-Regular.ttf +0 -0
  15. data/app/assets/fonts/OpenSans-Semibold.ttf +0 -0
  16. data/app/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  17. data/app/assets/images/faalis/select2-spinner.gif +0 -0
  18. data/app/assets/images/faalis/select2.png +0 -0
  19. data/app/assets/images/faalis/select2x2.png +0 -0
  20. data/app/assets/javascripts/faalis/application.js +20 -0
  21. data/app/assets/javascripts/faalis/dashboard/angular.js +9 -0
  22. data/app/assets/javascripts/faalis/dashboard/app.js +75 -0
  23. data/app/assets/javascripts/faalis/dashboard/application.js.erb +21 -0
  24. data/app/assets/javascripts/faalis/dashboard/functions.js.erb +91 -0
  25. data/app/assets/javascripts/faalis/dashboard/init.js +38 -0
  26. data/app/assets/javascripts/faalis/dashboard/lib/angular-animate.js +1226 -0
  27. data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +202 -0
  28. data/app/assets/javascripts/faalis/dashboard/lib/angular-resource.js +578 -0
  29. data/app/assets/javascripts/faalis/dashboard/lib/angular-route.js +880 -0
  30. data/app/assets/javascripts/faalis/dashboard/lib/angular.js +20031 -0
  31. data/app/assets/javascripts/faalis/dashboard/lib/lodash.underscore.js +4893 -0
  32. data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +3260 -0
  33. data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +297 -0
  34. data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +1066 -0
  35. data/app/assets/javascripts/faalis/dashboard/lib/select2.js +3255 -0
  36. data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +217 -0
  37. data/app/assets/javascripts/faalis/dashboard/locale/translations.js +5 -0
  38. data/app/assets/javascripts/faalis/dashboard/modules/anim.js +32 -0
  39. data/app/assets/javascripts/faalis/dashboard/modules/api.js +32 -0
  40. data/app/assets/javascripts/faalis/dashboard/modules/auth/auth.js +34 -0
  41. data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +174 -0
  42. data/app/assets/javascripts/faalis/dashboard/modules/auth/profile.js +59 -0
  43. data/app/assets/javascripts/faalis/dashboard/modules/auth/user.js +123 -0
  44. data/app/assets/javascripts/faalis/dashboard/modules/errors.js +47 -0
  45. data/app/assets/javascripts/faalis/dashboard/modules/filter.js +44 -0
  46. data/app/assets/javascripts/faalis/dashboard/modules/list-view.js +310 -0
  47. data/app/assets/javascripts/faalis/dashboard/modules/logs.js +41 -0
  48. data/app/assets/javascripts/faalis/dashboard/modules/modules.js +50 -0
  49. data/app/assets/javascripts/faalis/dashboard/modules/nav.js.erb +97 -0
  50. data/app/assets/javascripts/faalis/dashboard/templates/application.handlebars.erb +42 -0
  51. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/details.handlebars.erb +15 -0
  52. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/index.handlebars.erb +7 -0
  53. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/new.handlebars.erb +39 -0
  54. data/app/assets/javascripts/faalis/dashboard/templates/auth/index.handlebars.erb +31 -0
  55. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/details.handlebars.erb +15 -0
  56. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/index.handlebars.erb +11 -0
  57. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/new.handlebars.erb +33 -0
  58. data/app/assets/javascripts/faalis/dashboard/templates/components/list-view.handlebars.erb +59 -0
  59. data/app/assets/javascripts/faalis/dashboard/templates/components/model-form.handlebars.erb +3 -0
  60. data/app/assets/javascripts/faalis/dashboard/templates/modules.handlebars.erb +15 -0
  61. data/app/assets/javascripts/faalis/dashboard/templates/navigation.handlebars.erb +43 -0
  62. data/app/assets/javascripts/faalis/dashboard/templates/widgets.handlebars +23 -0
  63. data/app/assets/javascripts/faalis/dashboard/variables.js.erb +17 -0
  64. data/app/assets/javascripts/faalis/groups.js +2 -0
  65. data/app/assets/javascripts/faalis/home.js +2 -0
  66. data/app/assets/javascripts/faalis/i18n.js +13 -0
  67. data/app/assets/javascripts/faalis/locale/en.json +27 -0
  68. data/app/assets/javascripts/faalis/locale/fa.json +27 -0
  69. data/app/assets/javascripts/faalis/users.js +2 -0
  70. data/app/assets/stylesheets/faalis/base.css.scss +264 -0
  71. data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +226 -0
  72. data/app/assets/stylesheets/faalis/dashboard/list_view.css.scss +169 -0
  73. data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +26 -0
  74. data/app/assets/stylesheets/faalis/dashboard/ltr/base.css.scss.erb +28 -0
  75. data/app/assets/stylesheets/faalis/dashboard/ltr/buttons.css.scss.erb +48 -0
  76. data/app/assets/stylesheets/faalis/dashboard/ltr/direction.css.scss +38 -0
  77. data/app/assets/stylesheets/faalis/dashboard/ltr/foundation_and_overrides.css.scss +1014 -0
  78. data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +442 -0
  79. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +20 -0
  80. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +19 -0
  81. data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +26 -0
  82. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +31 -0
  83. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css_flymake.scss +25 -0
  84. data/app/assets/stylesheets/faalis/dashboard/rtl/buttons.css.scss.erb +45 -0
  85. data/app/assets/stylesheets/faalis/dashboard/rtl/direction.css.scss +37 -0
  86. data/app/assets/stylesheets/faalis/dashboard/rtl/foundation_and_overrides.css.scss +1014 -0
  87. data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +618 -0
  88. data/app/assets/stylesheets/faalis/dashboard/sidebar.css.scss +93 -0
  89. data/app/assets/stylesheets/faalis/devise.css.scss +34 -0
  90. data/app/assets/stylesheets/faalis/groups.css +4 -0
  91. data/app/assets/stylesheets/faalis/home.css.scss +14 -0
  92. data/app/assets/stylesheets/faalis/ltr/application.css +20 -0
  93. data/app/assets/stylesheets/faalis/ltr/buttons.css.scss.erb +48 -0
  94. data/app/assets/stylesheets/faalis/ltr/foundation_and_overrides.scss.erb +1012 -0
  95. data/app/assets/stylesheets/faalis/mixins.css.scss +15 -0
  96. data/app/assets/stylesheets/faalis/rtl/application.css +20 -0
  97. data/app/assets/stylesheets/faalis/rtl/buttons.css.scss.erb +48 -0
  98. data/app/assets/stylesheets/faalis/rtl/foundation_and_overrides.scss.erb +1012 -0
  99. data/app/assets/stylesheets/faalis/users.css +4 -0
  100. data/app/assets/stylesheets/faalis/variables.css.scss +102 -0
  101. data/app/controllers/faalis/api/v1/groups_controller.rb +75 -0
  102. data/app/controllers/faalis/api/v1/logs_controller.rb +12 -0
  103. data/app/controllers/faalis/api/v1/permissions_controller.rb +17 -0
  104. data/app/controllers/faalis/api/v1/profiles_controller.rb +42 -0
  105. data/app/controllers/faalis/api/v1/users_controller.rb +75 -0
  106. data/app/controllers/faalis/api_controller.rb +51 -0
  107. data/app/controllers/faalis/application_controller.rb +34 -0
  108. data/app/controllers/faalis/dashboard_controller.rb +44 -0
  109. data/app/controllers/faalis/home_controller.rb +19 -0
  110. data/app/controllers/faalis/omniauth/callbacks_controller.rb +43 -0
  111. data/app/helpers/faalis/application_helper.rb +4 -0
  112. data/app/helpers/faalis/dashboard_helper.rb +5 -0
  113. data/app/helpers/faalis/groups_helper.rb +4 -0
  114. data/app/helpers/faalis/home_helper.rb +4 -0
  115. data/app/helpers/faalis/users_helper.rb +4 -0
  116. data/app/models/ability.rb +42 -0
  117. data/app/models/faalis/group.rb +27 -0
  118. data/app/models/faalis/permission.rb +15 -0
  119. data/app/models/faalis/user.rb +81 -0
  120. data/app/views/angularjs_templates/#index.html# +8 -0
  121. data/app/views/angularjs_templates/auth/groups/details.html +21 -0
  122. data/app/views/angularjs_templates/auth/groups/index.html +5 -0
  123. data/app/views/angularjs_templates/auth/groups/new.html +41 -0
  124. data/app/views/angularjs_templates/auth/index.html +30 -0
  125. data/app/views/angularjs_templates/auth/profile/edit.html +54 -0
  126. data/app/views/angularjs_templates/auth/users/details.html +28 -0
  127. data/app/views/angularjs_templates/auth/users/index.html +6 -0
  128. data/app/views/angularjs_templates/auth/users/new.html +56 -0
  129. data/app/views/angularjs_templates/filter/index.html +15 -0
  130. data/app/views/angularjs_templates/index.html +8 -0
  131. data/app/views/angularjs_templates/list-view/index.html +81 -0
  132. data/app/views/angularjs_templates/locale/fa.po +25 -0
  133. data/app/views/angularjs_templates/locale/templates.pot +24 -0
  134. data/app/views/angularjs_templates/logs/index.html +6 -0
  135. data/app/views/angularjs_templates/modules.html +17 -0
  136. data/app/views/angularjs_templates/nav.html.erb +38 -0
  137. data/app/views/devise/confirmations/new.html.erb +34 -0
  138. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  139. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  140. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  141. data/app/views/devise/passwords/edit.html.erb +44 -0
  142. data/app/views/devise/passwords/new.html.erb +32 -0
  143. data/app/views/devise/registrations/edit.html.erb +29 -0
  144. data/app/views/devise/registrations/new.html.erb +91 -0
  145. data/app/views/devise/sessions/new.html.erb +98 -0
  146. data/app/views/devise/shared/_links.erb +25 -0
  147. data/app/views/devise/unlocks/new.html.erb +30 -0
  148. data/app/views/faalis/api/v1/groups/create.json.jbuilder +4 -0
  149. data/app/views/faalis/api/v1/groups/destroy.html.erb +2 -0
  150. data/app/views/faalis/api/v1/groups/destroy.json.jbuilder +1 -0
  151. data/app/views/faalis/api/v1/groups/edit.html.erb +2 -0
  152. data/app/views/faalis/api/v1/groups/index.html.erb +2 -0
  153. data/app/views/faalis/api/v1/groups/index.json.jbuilder +6 -0
  154. data/app/views/faalis/api/v1/groups/new.html.erb +2 -0
  155. data/app/views/faalis/api/v1/groups/show.html.erb +2 -0
  156. data/app/views/faalis/api/v1/groups/show.json.jbuilder +5 -0
  157. data/app/views/faalis/api/v1/groups/update.json.jbuilder +4 -0
  158. data/app/views/faalis/api/v1/logs/index.json.jbuilder +1 -0
  159. data/app/views/faalis/api/v1/permissions/index.json.jbuilder +1 -0
  160. data/app/views/faalis/api/v1/users/create.html.erb +2 -0
  161. data/app/views/faalis/api/v1/users/create.json.jbuilder +1 -0
  162. data/app/views/faalis/api/v1/users/destroy.json.jbuilder +1 -0
  163. data/app/views/faalis/api/v1/users/distroy.html.erb +2 -0
  164. data/app/views/faalis/api/v1/users/edit.html.erb +2 -0
  165. data/app/views/faalis/api/v1/users/index.html.erb +2 -0
  166. data/app/views/faalis/api/v1/users/index.json.jbuilder +4 -0
  167. data/app/views/faalis/api/v1/users/show.html.erb +2 -0
  168. data/app/views/faalis/api/v1/users/show.json.jbuilder +2 -0
  169. data/app/views/faalis/api/v1/users/update.json.jbuilder +1 -0
  170. data/app/views/faalis/dashboard/index.html.erb +37 -0
  171. data/app/views/faalis/dashboard/login_required_page.html.erb +5 -0
  172. data/app/views/faalis/home/index.html.erb +119 -0
  173. data/app/views/layouts/faalis/application.html.erb +90 -0
  174. data/app/views/layouts/faalis/dashboard.html.erb +21 -0
  175. data/config/initializers/devise.rb +28 -0
  176. data/config/locales/devise.en.yml +59 -0
  177. data/config/locales/devise.fa.yml +56 -0
  178. data/config/locales/fa/LC_MESSAGES/faalis.mo +0 -0
  179. data/config/locales/fa/faalis.po +181 -0
  180. data/config/locales/fa/messages.mo +0 -0
  181. data/config/locales/faalis.pot +181 -0
  182. data/config/routes.rb +36 -0
  183. data/db/migrate/20131013091000_devise_create_red_base_users.rb +64 -0
  184. data/db/migrate/20131020124701_create_red_base_groups.rb +9 -0
  185. data/db/migrate/20131021170923_create_red_base_permissions.rb +10 -0
  186. data/db/migrate/20131123120422_add_permissions_groups_table.rb +8 -0
  187. data/db/seeds.rb +15 -0
  188. data/lib/faalis.rb +30 -0
  189. data/lib/faalis/active_record.rb +64 -0
  190. data/lib/faalis/api.rb +61 -0
  191. data/lib/faalis/api/groups_api.rb +41 -0
  192. data/lib/faalis/api/permissions_api.rb +24 -0
  193. data/lib/faalis/api/root.rb +15 -0
  194. data/lib/faalis/api/users_api.rb +20 -0
  195. data/lib/faalis/cucumber.rb +25 -0
  196. data/lib/faalis/cucumber/auth.rb +45 -0
  197. data/lib/faalis/cucumber/exceptions.rb +40 -0
  198. data/lib/faalis/cucumber/interaction.rb +43 -0
  199. data/lib/faalis/cucumber/query.rb +28 -0
  200. data/lib/faalis/cucumber/urls.rb +76 -0
  201. data/lib/faalis/dashboard.rb +60 -0
  202. data/lib/faalis/dashboard/controller.rb +42 -0
  203. data/lib/faalis/dashboard/module.rb +45 -0
  204. data/lib/faalis/engine.rb +128 -0
  205. data/lib/faalis/exceptions.rb +26 -0
  206. data/lib/faalis/i18n.rb +35 -0
  207. data/lib/faalis/initialize.rb +7 -0
  208. data/lib/faalis/omniauth.rb +24 -0
  209. data/lib/faalis/omniauth/callbacks.rb +58 -0
  210. data/lib/faalis/plugins.rb +44 -0
  211. data/lib/faalis/version.rb +22 -0
  212. data/lib/faalis_plugin.rb +476 -0
  213. data/lib/generators/faalis/USAGE +8 -0
  214. data/lib/generators/faalis/angularjs_resource_generator.rb +74 -0
  215. data/lib/generators/faalis/install_all_generator.rb +38 -0
  216. data/lib/generators/faalis/install_generator.rb +42 -0
  217. data/lib/generators/faalis/install_specs_generator.rb +48 -0
  218. data/lib/generators/faalis/js_scaffold_generator.rb +273 -0
  219. data/lib/generators/faalis/templates/README +41 -0
  220. data/lib/generators/faalis/templates/SPECS +13 -0
  221. data/lib/generators/faalis/templates/angularjs/details.html.erb +20 -0
  222. data/lib/generators/faalis/templates/angularjs/index.html.erb +62 -0
  223. data/lib/generators/faalis/templates/angularjs/module.js.erb +309 -0
  224. data/lib/generators/faalis/templates/angularjs/new.html.erb +105 -0
  225. data/lib/generators/faalis/templates/api/controller.rb.erb +56 -0
  226. data/lib/generators/faalis/templates/devise.rb +251 -0
  227. data/lib/generators/faalis/templates/faalis.rb +14 -0
  228. data/lib/generators/faalis/templates/fast_gettext.rb +4 -0
  229. data/lib/generators/faalis/templates/features/api.feature +92 -0
  230. data/lib/generators/faalis/templates/features/api.step.rb +7 -0
  231. data/lib/generators/faalis/templates/features/step_definitions/email_steps.rb +206 -0
  232. data/lib/generators/faalis/templates/features/support/email_spec.rb +1 -0
  233. data/lib/generators/faalis/templates/features/support/env.rb +79 -0
  234. data/lib/generators/faalis/templates/formtastic.rb +76 -0
  235. data/lib/generators/faalis/templates/js_scaffold.README +25 -0
  236. data/lib/generators/faalis/templates/seeds.rb +1 -0
  237. data/lib/generators/faalis/templates/spec/factories/groups.rb +5 -0
  238. data/lib/generators/faalis/templates/spec/factories/users.rb +10 -0
  239. data/lib/generators/faalis/templates/spec/spec_helper.rb +69 -0
  240. data/lib/generators/faalis/templates/spec/support/devise.rb +3 -0
  241. data/lib/generators/faalis/templates/views/create.json.jbuilder.erb +2 -0
  242. data/lib/generators/faalis/templates/views/destroy.json.jbuilder.erb +1 -0
  243. data/lib/generators/faalis/templates/views/index.json.jbuilder.erb +10 -0
  244. data/lib/generators/faalis/templates/views/show.json.jbuilder.erb +7 -0
  245. data/lib/generators/faalis/templates/views/update.json.jbuilder.erb +6 -0
  246. data/lib/generators/faalis/views_generator.rb +41 -0
  247. data/lib/tasks/faalis_tasks.rake +23 -0
  248. data/lib/tasks/grunt/Gruntfile.js +25 -0
  249. data/spec/dummy/README.rdoc +28 -0
  250. data/spec/dummy/Rakefile +6 -0
  251. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  252. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  253. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  254. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  255. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  256. data/spec/dummy/bin/bundle +3 -0
  257. data/spec/dummy/bin/rails +4 -0
  258. data/spec/dummy/bin/rake +4 -0
  259. data/spec/dummy/config.ru +4 -0
  260. data/spec/dummy/config/application.rb +23 -0
  261. data/spec/dummy/config/boot.rb +5 -0
  262. data/spec/dummy/config/database.yml +25 -0
  263. data/spec/dummy/config/environment.rb +5 -0
  264. data/spec/dummy/config/environments/development.rb +29 -0
  265. data/spec/dummy/config/environments/production.rb +80 -0
  266. data/spec/dummy/config/environments/test.rb +36 -0
  267. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  268. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  269. data/spec/dummy/config/initializers/inflections.rb +16 -0
  270. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  271. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  272. data/spec/dummy/config/initializers/session_store.rb +3 -0
  273. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  274. data/spec/dummy/config/locales/en.yml +23 -0
  275. data/spec/dummy/config/routes.rb +4 -0
  276. data/spec/dummy/db/test.sqlite3 +0 -0
  277. data/spec/dummy/log/development.log +0 -0
  278. data/spec/dummy/log/test.log +15 -0
  279. data/spec/dummy/public/404.html +58 -0
  280. data/spec/dummy/public/422.html +58 -0
  281. data/spec/dummy/public/500.html +57 -0
  282. data/spec/dummy/public/favicon.ico +0 -0
  283. data/spec/dummy/tmp/ember-rails/ember-data.js +10204 -0
  284. data/spec/dummy/tmp/ember-rails/ember.js +36991 -0
  285. data/spec/spec_helper.rb +52 -0
  286. metadata +678 -0
@@ -0,0 +1,41 @@
1
+ ==================================================
2
+ Steps to finish up installation:
3
+
4
+ 1. Ensure you have defined default url options in your environments files. Here
5
+ is an example of default_url_options appropriate for a development environment
6
+ in config/environments/development.rb:
7
+
8
+ config.action_mailer.default_url_options = { :host => 'localhost:3000' }
9
+
10
+ In production, :host should be set to the actual host of your application.
11
+
12
+ 2. You can override your root controller through Faalis::HomeController class.
13
+
14
+ 3. Ensure you have flash messages in app/views/layouts/application.html.erb.
15
+ Only if you want to change the layout
16
+
17
+ For example:
18
+
19
+ <p class="notice"><%= notice %></p>
20
+ <p class="alert"><%= alert %></p>
21
+
22
+ 4. Create a javascript manifest in 'app/assets/javascripts/dashboard/application.js'
23
+ and require 'faalis/dashboard/application.js'.
24
+
25
+ NOTE: You can change the default manifest name and path via 'config.dashboard_js_manifest'
26
+ in 'config/initializers/faalis.rb'.
27
+
28
+ 5. Make sure you take a look and configured conf/initializer/devise.rb
29
+
30
+ NOTE: if you want to use devise with omniauth configure them in
31
+ conf/initializer/devise.rb according to devise wiki
32
+
33
+ 6. Make sure you take a look and configured conf/initializer/fast_gettext.rb
34
+ 7. Make sure you take a look and configured conf/initializer/formtastic.rb
35
+ 8. Add your resources to routes.rb like this:
36
+
37
+ namespace :api, :defaults => {:format => :json} do
38
+ namespace :v1 do
39
+ resources :resource
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ =======================================================================
2
+
3
+ Copy this snippet to your `config/application.rb`:
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec, :fixture => false
7
+ g.fixture_replacement :factory_girl, :dir => 'spec/factories'
8
+ g.assets false
9
+ g.helper false
10
+ g.helper = false
11
+ g.view_specs false
12
+ g.helper_specs false
13
+ end
@@ -0,0 +1,20 @@
1
+ <div class="details">
2
+ <% fields.each do |field_name, field_type| %>
3
+ <p>
4
+ <% case field_type
5
+ when "belongs_to" %> <b translate><%= field_name.capitalize %> :</b> {{object.<%= field_name %>.name}}
6
+ <% when "has_many" %><p>
7
+ <b translate><%= field_name.capitalize %> :</b>
8
+ <ul>
9
+ <li ng-repeat="item in object.<%= field_name %>"> {{ item.name }}</li>
10
+ </ul>
11
+ </p>
12
+ <% else %><b translate><%= field_name.capitalize %> :</b> {{object.<%= field_name %>}}
13
+ <% end %></p>
14
+ <% end %>
15
+ <ul class="button-group float-right">
16
+ <a ng-href="#/<%= resource_url %>/{{ object.id }}/edit" class="small">
17
+ <span class="fa fa-edit"></span> <span translated>Edit</span>
18
+ </a>
19
+ </ul>
20
+ </div>
@@ -0,0 +1,62 @@
1
+ <% unless options[:no_filter] %>
2
+ <filter config="filter_config" result="<%= resource.pluralize.underscore %>"></filter>
3
+ <% end %>
4
+ <% unless options[:no_bulk] %>
5
+ <div ng-if="bulk_edit" class="fade_anim">
6
+ <form id="bulk_form">
7
+ <fieldset class="row clearmargin">
8
+ <legend translate>Bulk Edit</legend>
9
+ <div class="row">
10
+ <div class="small-6 columns">
11
+ <label for="field_name" translate>Field Name:</label>
12
+
13
+ <select id="field_name" ng-model="field_name" ng-change="field_name_change()">
14
+ <option value="0" selected translate>-- Select a field --</option>
15
+ <option ng-repeat="field in fields" value="{{ field.name }}" data-type="{{ field.type }}" data-to="{{ field.to }}"><span translate>{{ field.title }}</span></option>
16
+ </select>
17
+ </div>
18
+ <div class="small-6 columns">
19
+ <label for="field_value" translate>Field Value:</label>
20
+ <div id="value_field">
21
+ <input id="field_value" ng-model="field_value" type="text" ng-if="current_field.type == 'string' || current_field.type == 'integer'">
22
+ <textarea id="field_value" ng-model="field_value" ng-if="current_field.type == 'text'"></textarea>
23
+
24
+ <select id="field_value" ng-model="field_value" ng-if="current_field.type == 'belongs_to'">
25
+ <option ng-repeat="item in cache[current_field.name]" value="{{ item.id }}">{{ item.name }}</option>
26
+ </select>
27
+ <select id="field_value" ng-model="field_value" ng-if="current_field.type == 'has_many'" multiple>
28
+ <option ng-repeat="item in cache[current_field.name]" value="{{ item.id }}">{{ item.name }}</option>
29
+ </select>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ <div class="row progressbar-container" ng-if="view_progressbar">
34
+ <div class="small-12 columns">
35
+ <div class="progressbar">
36
+ <div id="request_filler" class="filler yellow" style="width: {{ rfiller}};"></div>
37
+ <div id="success_filler" class="filler green" style="width: {{ sfiller}};"></div>
38
+ </div>
39
+ </div>
40
+ <div class="row">
41
+ <div class="small-3 columns float-right text-right">
42
+ <small>
43
+ {{ success }} <span translate>of</span> {{ total }}<span ng-if="failed > 0"> - <span translate>field:</span><span class="text-error"> {{ failed }}</span></span>
44
+ </small>
45
+ </div>
46
+ </div>
47
+ </fieldset>
48
+ <br />
49
+ <div class="row">
50
+ <div class="small-6 columns">
51
+ <button class="btn tiny green" ng-click="bulk_save()"><i class="fa fa-check"></i> <span translate>Save</span></button>
52
+ <button class="btn tiny red" ng-click="bulk_cancel()"><i class="fa fa-times"></i> <span translate>Cancel</span></button>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ <% end %>
58
+ <list-view buttons="buttons" objects="<%= resource.pluralize.underscore %>" title-attribute="'<%= options[:title_field] %>'" details-template="details_template" item-per-page="10" on_delete="on_delete" column_defs="columns">
59
+ <div class="small-6 column text-left clearpadding">
60
+ <h3><i class="fa fa-group"></i> <span translate><%= resource.underscore.pluralize.humanize %></span></h3>
61
+ </div>
62
+ </list-view>
@@ -0,0 +1,309 @@
1
+ <% if is_in_engine? %>
2
+ /* -----------------------------------------------------------------------------
3
+ Red Base - Basic website skel engine
4
+ Copyright (C) 2012-2013 Yellowen
5
+
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License along
17
+ with this program; if not, write to the Free Software Foundation, Inc.,
18
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ ----------------------------------------------------------------------------- */
20
+
21
+ <% end %>
22
+ // <%= resource.pluralize %> Module
23
+ var <%= resource.pluralize %> = angular.module("<%= resource %>", ["ListView", "Filter", "Anim"<% if options[:deps] %><% options[:deps].split(",").each do |dependency| %>, "<%= dependency.camelize %>"<% end %><% end %>]);
24
+
25
+ // <%= resource.pluralize %> configuration section ---------------------------
26
+ <%= resource.pluralize %>.config(["$routeProvider", function($routeProvider){
27
+
28
+ // Add any route you need here
29
+ $routeProvider.
30
+ when("/<%= resource_url %>", {
31
+ templateUrl: template("<%= resource_path %>/index"),
32
+ controller: "<%= resource %>Controller"
33
+ }).
34
+ when("/<%= resource_url %>/new",{
35
+ templateUrl: template("<%= resource_path %>/new"),
36
+ controller: "Add<%= resource %>Controller"
37
+ }).
38
+ when("/<%= resource_url %>/:id/edit",{
39
+ templateUrl: template("<%= resource_path %>/new"),
40
+ controller: "Add<%= resource %>Controller"
41
+ });
42
+
43
+ }]);
44
+
45
+ // <%= resource %> index controller -------------------------------------------------------
46
+ // This controller is responsible for list page (index)
47
+ <%= resource.pluralize %>.controller("<%= resource %>Controller", ["$scope", "gettext", "Restangular", "catch_error", "$location",
48
+ function($scope, gettext, API, catch_error, $location){
49
+
50
+ <% unless options[:no_filter] %>$scope.filter_config = {
51
+ list: API.all("<%= resource.pluralize.underscore %>")
52
+ };
53
+ $scope.<%= resource.pluralize.underscore %> = [];<% end %>
54
+ <% unless options[:no_bulk] %>// Cache object for each field name possible values
55
+ $scope.cache = {};
56
+
57
+ // Change event handler for field_name combobox in bulk edit
58
+ $scope.field_name_change = function(x){
59
+ var current_value = $("#field_name").val();
60
+ $scope.current_field= _.find($scope.fields, function(x){
61
+ return x.name == current_value;
62
+ });
63
+ if( "to" in $scope.current_field ){
64
+ if (! ($scope.current_field.name in $scope.cache)) {
65
+ $scope.current_field.to().then(function(x){
66
+ $scope.cache[$scope.current_field.name] = x;
67
+ });
68
+ }
69
+ }
70
+ };
71
+
72
+ $scope.columns = [<% grid_fields.each do |name, type| %>
73
+ {field:'<%= name %>', displayName: gettext('<%= name.capitalize.humanize %>')},
74
+ <% end %>];
75
+ $scope.fields = [<% bulk_edit_fields.each do |name| %>
76
+ {
77
+ name: "<%= name %><% if ["belongs_to", "has_many"].include? fields_hash[name] %>_id<% end %>",
78
+ title: gettext("<%= name.capitalize.humanize %>"),
79
+ type: "<%= fields_hash[name] %>"<% if ["belongs_to", "has_many"].include? fields_hash[name] %>,
80
+ to: API.all("<%= fields_hash[name].to %>").getList<% end %>
81
+ },<% end %>
82
+ ];<% end %>
83
+
84
+ // details_template is the address of template which should load for
85
+ // each item details section
86
+ $scope.details_template = template("<%= resource_path %>/details");
87
+
88
+ // Buttons for top of the list-view
89
+ $scope.buttons = [
90
+ {
91
+ title: gettext("New"),
92
+ icon: "fa fa-plus",
93
+ classes: "btn tiny green",
94
+ route: "#<%= resource_url %>/new"
95
+
96
+ },<% unless options[:no_bulk] %>
97
+ {
98
+ title: gettext("Bulk Edit"),
99
+ icon: "fa fa-edit",
100
+ classes: "btn tiny yellow",
101
+ action: function(){
102
+ $scope.$apply("bulk_edit = ! bulk_edit");
103
+ },
104
+
105
+ },<% end %>
106
+ {
107
+ title: gettext("Duplicate"),
108
+ icon: "fa fa-files-o",
109
+ classes: "btn tiny red",
110
+ action: function(){
111
+ var selected = _.find($scope.<%= resource.pluralize.underscore %>, function(x){
112
+ return x.is_selected === true;
113
+ });
114
+
115
+ if (selected === undefined ) {
116
+ error_message(gettext("You should only select one item to copy."));
117
+ }
118
+ else {
119
+ $location.path("/<%= resource.pluralize.underscore %>/-" + selected.id + "/edit");
120
+ }
121
+ }
122
+ }
123
+
124
+ ];<% unless options[:no_bulk] %>
125
+
126
+ /*
127
+ * On bulk save event
128
+ */
129
+ $scope.bulk_save = function(){
130
+
131
+ $scope.view_progressbar = true;
132
+ var value = $("#field_value").val();
133
+ var field = $scope.current_field.name;
134
+ var type = $scope.current_field.type;
135
+ var field_name = $scope.current_field.title;
136
+ if ((type == "has_many") || (type == "belongs_to")) {
137
+ value = parseInt(value, 10);
138
+ }
139
+ var requests_count = 0;
140
+
141
+ $scope.rfiller = 0;
142
+ $scope.sfiller = 0;
143
+ $scope.success = 0;
144
+ $scope.failed = 0;
145
+ $scope.total = _.where($scope.<%= resource.pluralize.underscore %>, function(x){return x.is_selected === true;}).length;
146
+
147
+ _.each($scope.<%= resource.pluralize.underscore %>, function(x){
148
+ if( x.is_selected === true ){
149
+ x[field] = value;
150
+ requests_count++;
151
+
152
+ var rwidth = (requests_count * 100) / $scope.total;
153
+ if (requests_count == $scope.total) { rwidth = 100; }
154
+ $scope.rfiller = rwidth + "%";
155
+
156
+ API.one("<%= resource.pluralize.underscore %>", x.id).patch(x).then(function(data){
157
+ $scope.success++;
158
+ var swidth = parseInt(($scope.success * 100) / $scope.total);
159
+ if ($scope.sucess == $scope.total) { swidth = 100; }
160
+ $scope.sfiller = swidth + "%";
161
+ x[field_name.toLowerCase()] = data[field_name.toLowerCase()];
162
+ }, function(data){
163
+ $scope.failed++;
164
+ catch_error(data);
165
+ });
166
+
167
+ }
168
+ });
169
+
170
+ };
171
+
172
+ /*
173
+ * On bulk cancel event
174
+ */
175
+ $scope.bulk_cancel = function(){
176
+ $("#field_name").val(0);
177
+ document.getElementById("bulk_form").reset();
178
+ $scope.view_progressbar = false;
179
+ $scope.bulk_edit = false;
180
+ };
181
+ <% end %>
182
+ /*
183
+ * On delete event handler - `items` is an array of objects to delete
184
+ */
185
+ $scope.on_delete = function(items){
186
+
187
+ var query = [];
188
+ items.forEach(function(item){
189
+ query.push(item.id);
190
+ });
191
+
192
+ API.all("<%= resource.pluralize.underscore %>").customDELETE(query.join(","))
193
+ .then(function(data) {
194
+
195
+ $scope.<%= resource.pluralize.underscore %> = _.filter($scope.<%= resource.pluralize.underscore %>, function(x){
196
+ return !(query.indexOf(x.id) != -1);
197
+ });
198
+ success_message(data.msg);
199
+ }, function(data){
200
+ catch_error(data);
201
+ });
202
+
203
+ };
204
+ <% unless options[:no_filter] %>/*<% end %>
205
+ API.all("<%= resource.pluralize.underscore %>").getList()
206
+ .then(function(data){
207
+ $scope.<%= resource.pluralize.underscore %> = data;
208
+ }, function(data){
209
+ catch_error(data);
210
+ });
211
+ <% unless options[:no_filter] %>*/<% end %>
212
+ }]);
213
+
214
+ <%= resource.pluralize %>.controller("Add<%= resource %>Controller", ["Restangular", "$scope", "$location", "$routeParams", "gettext", "catch_error", function(API, $scope, $location, $routeParams, gettext, catch_error){
215
+
216
+ $scope.select2options = {};
217
+ $scope.editing = false;<% if any_tabs? %>
218
+ $scope.current_tab = 1;
219
+ $scope.activate_tab = function(tab, $event){
220
+ $scope.current_tab = tab;
221
+ };<% end %>
222
+ $scope.obj_id = null;
223
+ var is_copy = false;
224
+
225
+ <% fields.each do |name, type| %><% if ["belongs_to", "has_many"].include? type %><%= type.get_list %>.then(function(data){
226
+ $scope.all_<%= type.resource_name %> = data;
227
+ }, function(data){
228
+ catch_error(data);
229
+ });<% end %><% end %>
230
+ <% fields.each do |name, type| %><% if type == "in" %>$scope.<%= name %>_choices = _.sortBy([<% type.to.split(",").each do |choice| %>
231
+ {name: "<%= choice.underscore %>", title: "<%= choice.humanize %>"},<% end %>
232
+ ], "title");<% end %><% end %>
233
+ if( "id" in $routeParams ){
234
+ $scope.obj_id = $routeParams.id;
235
+ $scope.editing = true;
236
+ if ($scope.obj_id < 0) {
237
+ is_copy = true;
238
+ $scope.obj_id = $scope.obj_id * -1;
239
+ }
240
+
241
+ var obj = API.one("<%= resource.pluralize.underscore %>", $scope.obj_id).get()
242
+ .then(function(data) {
243
+ <% fields.each do |field_name, field_type| %>
244
+ $scope.<%= field_name %> = <% if not ["string", "integer", "belongs_to", "text", "has_many", "in"].include? field_type %><%= "to_#{field_type}(data.#{field_name})" %><% elsif field_type == "belongs_to" %>data.<%= field_name %>.id<% else %>data.<%= field_name %><% end %>;<% end %>
245
+ }, function(data){
246
+ catch_error(data);
247
+ });
248
+
249
+ }
250
+
251
+
252
+ $scope.have = function(field, obj_id) {
253
+ var tmp = _.where($scope[field], {id: obj_id});
254
+ if (tmp.length > 0) {
255
+ return true;
256
+ }
257
+ else {
258
+ return false;
259
+ }
260
+ };
261
+
262
+ $scope.cancel = function(){
263
+ $(".form input").val("");
264
+ $location.path("<%= resource_url %>");
265
+ };
266
+
267
+ $scope.save = function(save_another){
268
+ var <%= resource.underscore %> = {<%= resource.underscore %>: {<% fields.each do |field_name, field_type| %>
269
+ <% if ["belongs_to"].include? field_type %><%= field_name %>_id: parseInt($scope.<%= field_name %>),<% else %><%= field_name %>: $scope.<%= field_name %>,<% end %><% end %>
270
+ __res__: 0
271
+ }};
272
+ if (($scope.obj_id) && (is_copy === false)) {
273
+
274
+ API.one("<%= resource.pluralize.underscore %>", $scope.obj_id).patch(<%= resource.underscore %>)
275
+ .then(function(){
276
+ success_message(gettext("<%= resource %> updated successfully."));
277
+ if (save_another) {
278
+ $(".form input").val("");
279
+ }
280
+ else {
281
+ $location.path("<%= resource_url %>");
282
+ }
283
+ }, function(data){
284
+ catch_error(data);
285
+ });
286
+
287
+ }
288
+ else {
289
+ API.all("<%= resource.pluralize.underscore %>").customPOST(<%= resource.underscore %>, "").then(function(){
290
+ success_message(gettext("<%= resource %> created successfully."));
291
+ if (save_another) {
292
+ $(".form input").val("");
293
+ }
294
+ else {
295
+ $location.path("<%= resource_url %>");
296
+ }
297
+ }, function(data){
298
+ catch_error(data);
299
+ });
300
+ }
301
+
302
+ };
303
+ }]);
304
+ <% unless options[:menu].empty? %>
305
+ <%= resource.pluralize %>.controller("<%= resource %>MenuController", ["gettext", function(gettext){
306
+ this.menu_items = [<% options[:menu].split(",").each do |menu| %><% title, url = menu.split(":") %>
307
+ {title: gettext("<%= title %>"), url: "<%= url %>"},<% end %>
308
+ ];
309
+ }]);<% end %>