faalis 0.7.0

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