red_base 0.5.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 (278) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +339 -0
  3. data/README.rdoc +40 -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/javascripts/red_base/application.js +20 -0
  18. data/app/assets/javascripts/red_base/dashboard/angular.js +9 -0
  19. data/app/assets/javascripts/red_base/dashboard/app.js +65 -0
  20. data/app/assets/javascripts/red_base/dashboard/application.js.erb +24 -0
  21. data/app/assets/javascripts/red_base/dashboard/functions.js.erb +91 -0
  22. data/app/assets/javascripts/red_base/dashboard/init.js +38 -0
  23. data/app/assets/javascripts/red_base/dashboard/init.js~ +0 -0
  24. data/app/assets/javascripts/red_base/dashboard/lib/angular-animate.js +1226 -0
  25. data/app/assets/javascripts/red_base/dashboard/lib/angular-gettext.js +202 -0
  26. data/app/assets/javascripts/red_base/dashboard/lib/angular-resource.js +578 -0
  27. data/app/assets/javascripts/red_base/dashboard/lib/angular-route.js +880 -0
  28. data/app/assets/javascripts/red_base/dashboard/lib/angular.js +20031 -0
  29. data/app/assets/javascripts/red_base/dashboard/lib/lodash.underscore.js +4893 -0
  30. data/app/assets/javascripts/red_base/dashboard/lib/restangular.js +1066 -0
  31. data/app/assets/javascripts/red_base/dashboard/locale/translations.js +5 -0
  32. data/app/assets/javascripts/red_base/dashboard/modules/anim.js +32 -0
  33. data/app/assets/javascripts/red_base/dashboard/modules/api.js +32 -0
  34. data/app/assets/javascripts/red_base/dashboard/modules/auth/auth.js +34 -0
  35. data/app/assets/javascripts/red_base/dashboard/modules/auth/group.js +174 -0
  36. data/app/assets/javascripts/red_base/dashboard/modules/auth/user.js +122 -0
  37. data/app/assets/javascripts/red_base/dashboard/modules/list-view.js +293 -0
  38. data/app/assets/javascripts/red_base/dashboard/modules/logs.js +41 -0
  39. data/app/assets/javascripts/red_base/dashboard/modules/modules.js +50 -0
  40. data/app/assets/javascripts/red_base/dashboard/modules/nav.js.erb +92 -0
  41. data/app/assets/javascripts/red_base/dashboard/templates/application.handlebars.erb +42 -0
  42. data/app/assets/javascripts/red_base/dashboard/templates/auth/groups/details.handlebars.erb +15 -0
  43. data/app/assets/javascripts/red_base/dashboard/templates/auth/groups/index.handlebars.erb +7 -0
  44. data/app/assets/javascripts/red_base/dashboard/templates/auth/groups/new.handlebars.erb +39 -0
  45. data/app/assets/javascripts/red_base/dashboard/templates/auth/index.handlebars.erb +31 -0
  46. data/app/assets/javascripts/red_base/dashboard/templates/auth/users/details.handlebars.erb +15 -0
  47. data/app/assets/javascripts/red_base/dashboard/templates/auth/users/index.handlebars.erb +11 -0
  48. data/app/assets/javascripts/red_base/dashboard/templates/auth/users/new.handlebars.erb +33 -0
  49. data/app/assets/javascripts/red_base/dashboard/templates/components/list-view.handlebars.erb +59 -0
  50. data/app/assets/javascripts/red_base/dashboard/templates/components/model-form.handlebars.erb +3 -0
  51. data/app/assets/javascripts/red_base/dashboard/templates/modules.handlebars.erb +15 -0
  52. data/app/assets/javascripts/red_base/dashboard/templates/navigation.handlebars.erb +43 -0
  53. data/app/assets/javascripts/red_base/dashboard/templates/widgets.handlebars +23 -0
  54. data/app/assets/javascripts/red_base/dashboard/variables.js.erb +17 -0
  55. data/app/assets/javascripts/red_base/groups.js +2 -0
  56. data/app/assets/javascripts/red_base/home.js +2 -0
  57. data/app/assets/javascripts/red_base/i18n.js +13 -0
  58. data/app/assets/javascripts/red_base/locale/en.json +27 -0
  59. data/app/assets/javascripts/red_base/locale/fa.json +27 -0
  60. data/app/assets/javascripts/red_base/users.js +2 -0
  61. data/app/assets/stylesheets/red_base/base.css.scss +402 -0
  62. data/app/assets/stylesheets/red_base/dashboard/dashboard.css.scss +169 -0
  63. data/app/assets/stylesheets/red_base/dashboard/ltr/application.css +21 -0
  64. data/app/assets/stylesheets/red_base/dashboard/ltr/base.css.scss.erb +28 -0
  65. data/app/assets/stylesheets/red_base/dashboard/ltr/base.css.scss~ +15 -0
  66. data/app/assets/stylesheets/red_base/dashboard/ltr/buttons.css.scss.erb +48 -0
  67. data/app/assets/stylesheets/red_base/dashboard/ltr/direction.css.scss +38 -0
  68. data/app/assets/stylesheets/red_base/dashboard/ltr/foundation_and_overrides.css.scss +1014 -0
  69. data/app/assets/stylesheets/red_base/dashboard/rtl/application.css +21 -0
  70. data/app/assets/stylesheets/red_base/dashboard/rtl/base.css.scss.erb +31 -0
  71. data/app/assets/stylesheets/red_base/dashboard/rtl/base.css.scss~ +1 -0
  72. data/app/assets/stylesheets/red_base/dashboard/rtl/base.css_flymake.scss +25 -0
  73. data/app/assets/stylesheets/red_base/dashboard/rtl/buttons.css.scss.erb +45 -0
  74. data/app/assets/stylesheets/red_base/dashboard/rtl/direction.css.scss +37 -0
  75. data/app/assets/stylesheets/red_base/dashboard/rtl/foundation_and_overrides.css.scss +1014 -0
  76. data/app/assets/stylesheets/red_base/dashboard/sidebar.css.scss +93 -0
  77. data/app/assets/stylesheets/red_base/devise.css.scss +34 -0
  78. data/app/assets/stylesheets/red_base/groups.css +4 -0
  79. data/app/assets/stylesheets/red_base/home.css.scss +14 -0
  80. data/app/assets/stylesheets/red_base/ltr/application.css +20 -0
  81. data/app/assets/stylesheets/red_base/ltr/buttons.css.scss.erb +48 -0
  82. data/app/assets/stylesheets/red_base/ltr/foundation_and_overrides.scss.erb +1012 -0
  83. data/app/assets/stylesheets/red_base/mixins.css.scss +15 -0
  84. data/app/assets/stylesheets/red_base/mixins.css.scss~ +7 -0
  85. data/app/assets/stylesheets/red_base/rtl/application.css +20 -0
  86. data/app/assets/stylesheets/red_base/rtl/buttons.css.scss.erb +48 -0
  87. data/app/assets/stylesheets/red_base/rtl/foundation_and_overrides.scss.erb +1012 -0
  88. data/app/assets/stylesheets/red_base/users.css +4 -0
  89. data/app/assets/stylesheets/red_base/variables.css.scss +100 -0
  90. data/app/controllers/red_base/api/v1/groups_controller.rb +65 -0
  91. data/app/controllers/red_base/api/v1/logs_controller.rb +12 -0
  92. data/app/controllers/red_base/api/v1/permissions_controller.rb +17 -0
  93. data/app/controllers/red_base/api/v1/users_controller.rb +54 -0
  94. data/app/controllers/red_base/api_controller.rb +51 -0
  95. data/app/controllers/red_base/application_controller.rb +34 -0
  96. data/app/controllers/red_base/dashboard_controller.rb +40 -0
  97. data/app/controllers/red_base/home_controller.rb +19 -0
  98. data/app/controllers/red_base/omniauth/callbacks_controller.rb +43 -0
  99. data/app/controllers/red_base/users/omniauth_callbacks_controller.rb~ +2 -0
  100. data/app/helpers/red_base/application_helper.rb +4 -0
  101. data/app/helpers/red_base/dashboard_helper.rb +5 -0
  102. data/app/helpers/red_base/groups_helper.rb +4 -0
  103. data/app/helpers/red_base/home_helper.rb +4 -0
  104. data/app/helpers/red_base/users_helper.rb +4 -0
  105. data/app/models/ability.rb +39 -0
  106. data/app/models/red_base/group.rb +27 -0
  107. data/app/models/red_base/permission.rb +15 -0
  108. data/app/models/red_base/user.rb +77 -0
  109. data/app/views/angularjs_templates/auth/groups/details.html +21 -0
  110. data/app/views/angularjs_templates/auth/groups/index.html +5 -0
  111. data/app/views/angularjs_templates/auth/groups/new.html +40 -0
  112. data/app/views/angularjs_templates/auth/index.html +30 -0
  113. data/app/views/angularjs_templates/auth/users/details.html +28 -0
  114. data/app/views/angularjs_templates/auth/users/index.html +6 -0
  115. data/app/views/angularjs_templates/auth/users/new.html +45 -0
  116. data/app/views/angularjs_templates/index.html +8 -0
  117. data/app/views/angularjs_templates/list-view/index.html +66 -0
  118. data/app/views/angularjs_templates/locale/fa.po +25 -0
  119. data/app/views/angularjs_templates/locale/templates.pot +24 -0
  120. data/app/views/angularjs_templates/logs/index.html +6 -0
  121. data/app/views/angularjs_templates/modules.html +17 -0
  122. data/app/views/angularjs_templates/nav.html.erb +38 -0
  123. data/app/views/angularjs_templates/nav.html.erb~ +43 -0
  124. data/app/views/devise/confirmations/new.html.erb +34 -0
  125. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  126. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  127. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  128. data/app/views/devise/passwords/edit.html.erb +44 -0
  129. data/app/views/devise/passwords/new.html.erb +32 -0
  130. data/app/views/devise/registrations/edit.html.erb +29 -0
  131. data/app/views/devise/registrations/new.html.erb +91 -0
  132. data/app/views/devise/sessions/new.html.erb +98 -0
  133. data/app/views/devise/shared/_links.erb +25 -0
  134. data/app/views/devise/unlocks/new.html.erb +30 -0
  135. data/app/views/layouts/red_base/application.html.erb +90 -0
  136. data/app/views/layouts/red_base/dashboard.html.erb +21 -0
  137. data/app/views/red_base/api/v1/groups/create.json.jbuilder +4 -0
  138. data/app/views/red_base/api/v1/groups/destroy.html.erb +2 -0
  139. data/app/views/red_base/api/v1/groups/destroy.json.jbuilder +1 -0
  140. data/app/views/red_base/api/v1/groups/edit.html.erb +2 -0
  141. data/app/views/red_base/api/v1/groups/index.html.erb +2 -0
  142. data/app/views/red_base/api/v1/groups/index.json.jbuilder +6 -0
  143. data/app/views/red_base/api/v1/groups/new.html.erb +2 -0
  144. data/app/views/red_base/api/v1/groups/show.html.erb +2 -0
  145. data/app/views/red_base/api/v1/groups/show.json.jbuilder +5 -0
  146. data/app/views/red_base/api/v1/groups/update.json.jbuilder +4 -0
  147. data/app/views/red_base/api/v1/logs/index.json.jbuilder +1 -0
  148. data/app/views/red_base/api/v1/permissions/index.json.jbuilder +1 -0
  149. data/app/views/red_base/api/v1/users/create.html.erb +2 -0
  150. data/app/views/red_base/api/v1/users/create.json.jbuilder +1 -0
  151. data/app/views/red_base/api/v1/users/destroy.json.jbuilder +1 -0
  152. data/app/views/red_base/api/v1/users/distroy.html.erb +2 -0
  153. data/app/views/red_base/api/v1/users/edit.html.erb +2 -0
  154. data/app/views/red_base/api/v1/users/index.html.erb +2 -0
  155. data/app/views/red_base/api/v1/users/index.json.jbuilder +4 -0
  156. data/app/views/red_base/api/v1/users/show.html.erb +2 -0
  157. data/app/views/red_base/api/v1/users/show.json.jbuilder +2 -0
  158. data/app/views/red_base/api/v1/users/update.json.jbuilder +1 -0
  159. data/app/views/red_base/dashboard/index.html.erb +37 -0
  160. data/app/views/red_base/home/index.html.erb +119 -0
  161. data/config/initializers/devise.rb +28 -0
  162. data/config/locales/devise.en.yml +59 -0
  163. data/config/locales/devise.fa.yml +56 -0
  164. data/config/locales/fa/LC_MESSAGES/red_base.mo +0 -0
  165. data/config/locales/fa/messages.mo +0 -0
  166. data/config/locales/fa/red_base.po +181 -0
  167. data/config/locales/red_base.pot +181 -0
  168. data/config/routes.rb +33 -0
  169. data/db/migrate/20131013091000_devise_create_red_base_users.rb +64 -0
  170. data/db/migrate/20131020124701_create_red_base_groups.rb +9 -0
  171. data/db/migrate/20131021170923_create_red_base_permissions.rb +10 -0
  172. data/db/migrate/20131123120422_add_permissions_groups_table.rb +8 -0
  173. data/db/seeds.rb +15 -0
  174. data/lib/devise_patch.rb~ +5 -0
  175. data/lib/generators/red_base/USAGE +8 -0
  176. data/lib/generators/red_base/angularjs_resource_generator.rb +74 -0
  177. data/lib/generators/red_base/install_all_generator.rb +38 -0
  178. data/lib/generators/red_base/install_generator.rb +42 -0
  179. data/lib/generators/red_base/install_specs_generator.rb +48 -0
  180. data/lib/generators/red_base/js_scaffold_generator.rb +232 -0
  181. data/lib/generators/red_base/templates/README +41 -0
  182. data/lib/generators/red_base/templates/README~ +4 -0
  183. data/lib/generators/red_base/templates/SPECS +13 -0
  184. data/lib/generators/red_base/templates/angularjs/details.html.erb +20 -0
  185. data/lib/generators/red_base/templates/angularjs/details.html.erb~ +0 -0
  186. data/lib/generators/red_base/templates/angularjs/index.html.erb +59 -0
  187. data/lib/generators/red_base/templates/angularjs/module.js.erb +259 -0
  188. data/lib/generators/red_base/templates/angularjs/new.html.erb +43 -0
  189. data/lib/generators/red_base/templates/api/controller.rb.erb +54 -0
  190. data/lib/generators/red_base/templates/api/controller.rb.erb~ +37 -0
  191. data/lib/generators/red_base/templates/devise.rb +251 -0
  192. data/lib/generators/red_base/templates/devise.rb~ +238 -0
  193. data/lib/generators/red_base/templates/fast_gettext.rb +4 -0
  194. data/lib/generators/red_base/templates/features/api.feature +92 -0
  195. data/lib/generators/red_base/templates/features/api.step.rb +7 -0
  196. data/lib/generators/red_base/templates/features/step_definitions/email_steps.rb +206 -0
  197. data/lib/generators/red_base/templates/features/support/email_spec.rb +1 -0
  198. data/lib/generators/red_base/templates/features/support/env.rb +79 -0
  199. data/lib/generators/red_base/templates/formtastic.rb +76 -0
  200. data/lib/generators/red_base/templates/js_scaffold.README +25 -0
  201. data/lib/generators/red_base/templates/red_base.rb +14 -0
  202. data/lib/generators/red_base/templates/red_base.rb~ +251 -0
  203. data/lib/generators/red_base/templates/seeds.rb +1 -0
  204. data/lib/generators/red_base/templates/spec/factories/groups.rb +5 -0
  205. data/lib/generators/red_base/templates/spec/factories/users.rb +10 -0
  206. data/lib/generators/red_base/templates/spec/spec_helper.rb +69 -0
  207. data/lib/generators/red_base/templates/spec/support/devise.rb +3 -0
  208. data/lib/generators/red_base/templates/views/create.json.jbuilder.erb +2 -0
  209. data/lib/generators/red_base/templates/views/destroy.json.jbuilder.erb +1 -0
  210. data/lib/generators/red_base/templates/views/index.json.jbuilder.erb +10 -0
  211. data/lib/generators/red_base/templates/views/index.json.jbuilder.erb~ +0 -0
  212. data/lib/generators/red_base/templates/views/show.json.jbuilder.erb +6 -0
  213. data/lib/generators/red_base/templates/views/update.json.jbuilder.erb +6 -0
  214. data/lib/generators/red_base/views_generator.rb +41 -0
  215. data/lib/red_base/active_record.rb +78 -0
  216. data/lib/red_base/active_record.rb~ +0 -0
  217. data/lib/red_base/api/groups_api.rb +41 -0
  218. data/lib/red_base/api/permissions_api.rb +24 -0
  219. data/lib/red_base/api/root.rb +15 -0
  220. data/lib/red_base/api/users_api.rb +20 -0
  221. data/lib/red_base/api.rb +61 -0
  222. data/lib/red_base/cucumber/auth.rb +45 -0
  223. data/lib/red_base/cucumber/exceptions.rb +40 -0
  224. data/lib/red_base/cucumber/interaction.rb +43 -0
  225. data/lib/red_base/cucumber/query.rb +28 -0
  226. data/lib/red_base/cucumber/urls.rb +76 -0
  227. data/lib/red_base/cucumber.rb +25 -0
  228. data/lib/red_base/dashboard/controller.rb +42 -0
  229. data/lib/red_base/dashboard/module.rb +45 -0
  230. data/lib/red_base/dashboard/module.rb~ +25 -0
  231. data/lib/red_base/dashboard.rb +60 -0
  232. data/lib/red_base/dashboard.rb~ +18 -0
  233. data/lib/red_base/engine.rb +132 -0
  234. data/lib/red_base/exceptions.rb +26 -0
  235. data/lib/red_base/i18n.rb +35 -0
  236. data/lib/red_base/initialize.rb +7 -0
  237. data/lib/red_base/omniauth/callbacks.rb +58 -0
  238. data/lib/red_base/omniauth/callbakcs.rb~ +7 -0
  239. data/lib/red_base/omniauth.rb +24 -0
  240. data/lib/red_base/omniauth.rb~ +1 -0
  241. data/lib/red_base/plugins.rb +44 -0
  242. data/lib/red_base/version.rb +22 -0
  243. data/lib/red_base.rb +30 -0
  244. data/lib/tasks/grunt/Gruntfile.js +25 -0
  245. data/lib/tasks/red_base_tasks.rake +23 -0
  246. data/spec/dummy/README.rdoc +28 -0
  247. data/spec/dummy/Rakefile +6 -0
  248. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  249. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  250. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  251. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  252. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  253. data/spec/dummy/bin/bundle +3 -0
  254. data/spec/dummy/bin/rails +4 -0
  255. data/spec/dummy/bin/rake +4 -0
  256. data/spec/dummy/config/application.rb +23 -0
  257. data/spec/dummy/config/boot.rb +5 -0
  258. data/spec/dummy/config/database.yml +25 -0
  259. data/spec/dummy/config/environment.rb +5 -0
  260. data/spec/dummy/config/environments/development.rb +29 -0
  261. data/spec/dummy/config/environments/production.rb +80 -0
  262. data/spec/dummy/config/environments/test.rb +36 -0
  263. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  264. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  265. data/spec/dummy/config/initializers/inflections.rb +16 -0
  266. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  267. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  268. data/spec/dummy/config/initializers/session_store.rb +3 -0
  269. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  270. data/spec/dummy/config/locales/en.yml +23 -0
  271. data/spec/dummy/config/routes.rb +4 -0
  272. data/spec/dummy/config.ru +4 -0
  273. data/spec/dummy/public/404.html +58 -0
  274. data/spec/dummy/public/422.html +58 -0
  275. data/spec/dummy/public/500.html +57 -0
  276. data/spec/dummy/public/favicon.ico +0 -0
  277. data/spec/spec_helper.rb +52 -0
  278. metadata +661 -0
@@ -0,0 +1,5 @@
1
+ angular.module("Dashboard").run(['gettextCatalog', function (gettextCatalog) {
2
+ gettextCatalog.setStrings('fa', {"Menu":"منو","Languages":"زبان ها","Dashboard":"بخش کاربری","Change Password":"تغییر کامه عبور","Sign Out":"خروج"});
3
+ gettextCatalog.currentLanguage = $("html").attr("lang");
4
+ // gettextCatalog.debug = true;
5
+ }]);
@@ -0,0 +1,32 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Anim = angular.module("Anim", ["ngAnimate"]);
21
+
22
+ Anim.animation(".fade_anim", function(){
23
+ return {
24
+ leave: function(elem, done){
25
+ $(elem).fadeOut(500, done);
26
+ },
27
+ enter: function(elem, done){
28
+ $(elem).fadeIn(500, done);
29
+ return function(cancelled){};
30
+ }
31
+ };
32
+ });
@@ -0,0 +1,32 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var API = angular.module("API", []);
21
+
22
+ API.provider("API", function(){
23
+
24
+ var _resource;
25
+ this.resource = function(resource){
26
+ _resource = resource;
27
+ };
28
+
29
+ this.$get = ["Restangular", function(Restangular){
30
+ return new Restangular.all(_resource);
31
+ }];
32
+ });
@@ -0,0 +1,34 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Auth = angular.module("Auth", ["User","Group"]);
21
+
22
+ Auth.config(["$routeProvider", function($routeProvider){
23
+ $routeProvider.
24
+ when("/auth", {
25
+ templateUrl: template("auth/index")
26
+ });
27
+ }]);
28
+
29
+ Auth.controller("AuthMenuController", ["$scope", "gettext", function($scope, gettext){
30
+ this.menu_items = [
31
+ {title: gettext("Users"), url: "/auth/users"},
32
+ {title: gettext("Groups"), url: "/auth/groups"}
33
+ ];
34
+ }]);
@@ -0,0 +1,174 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var Group = angular.module("Group", ["ListView"]);
21
+
22
+ Group.config(["$routeProvider", function($routeProvider){
23
+ $routeProvider.
24
+ when("/auth/groups",{
25
+ templateUrl: template("auth/groups/index"),
26
+ controller: "GroupsController"
27
+ }).
28
+ when("/auth/groups/new",{
29
+ templateUrl: template("auth/groups/new"),
30
+ controller: "AddGroupController"
31
+ }).
32
+ when("/auth/groups/:id/edit",{
33
+ templateUrl: template("auth/groups/new"),
34
+ controller: "AddGroupController"
35
+ });
36
+
37
+ }]);
38
+
39
+ Group.controller("GroupsController", ["$scope", "gettext", "Restangular", function($scope, gettext, API){
40
+ $scope.details_template = template("auth/groups/details");
41
+
42
+ $scope.buttons = [
43
+ {
44
+ title: gettext("new"),
45
+ icon: "fa fa-plus",
46
+ classes: "btn tiny green",
47
+ route: "#/auth/groups/new"
48
+
49
+ }
50
+ ];
51
+
52
+ $scope.on_delete = function(groups){
53
+
54
+ var query = [];
55
+ groups.forEach(function(group){
56
+ query.push(group.id);
57
+ });
58
+
59
+ API.all("groups").customDELETE(query.join(","))
60
+ .then(function(data) {
61
+
62
+ $scope.groups = _.filter($scope.groups, function(x){
63
+ return !(query.indexOf(x.id) != -1);
64
+ });
65
+ success_message(data.msg);
66
+ })
67
+ .catch(catch_error);
68
+
69
+ };
70
+
71
+
72
+ API.all("groups").getList()
73
+ .then(function(data){
74
+ $scope.groups = data;
75
+ })
76
+ .catch(catch_error);
77
+
78
+ }]);
79
+
80
+ Group.controller("AddGroupController", ["Restangular", "$scope", "$location", "$routeParams", "gettext", function(API, $scope, $location, $routeParams, gettext){
81
+
82
+ $scope.selected_perms = [];
83
+ $scope.permissions = [];
84
+ $scope.editing = false;
85
+
86
+ $scope.$on("update_perms", function(event) {
87
+ var sel_perms = [];
88
+ event.targetScope.selected_perms.forEach(function(perm){
89
+
90
+ var tmpobj = _.find(event.targetScope.permissions, function(x) {
91
+ return perm.name == x.name;
92
+ });
93
+
94
+ if ( tmpobj ) {
95
+ event.targetScope.select_permission(tmpobj);
96
+ }
97
+ });
98
+
99
+ });
100
+
101
+ $scope.obj_id = null;
102
+
103
+ if("id" in $routeParams){
104
+ $scope.obj_id = $routeParams.id;
105
+ $scope.editing = true;
106
+ var obj = API.one("groups", $scope.obj_id).get()
107
+ .then(function(data) {
108
+ $scope.new_name = data.name;
109
+ $scope.selected_perms = data.permissions;
110
+ $scope.$emit("update_perms");
111
+ })
112
+ .catch(catch_error);
113
+ }
114
+
115
+
116
+ var permissions = API.all('permissions').getList()
117
+ .then(function(data){
118
+ $scope.permissions = data;
119
+ $scope.$emit("update_perms");
120
+ })
121
+ .catch(catch_error);
122
+
123
+
124
+ $scope.select_permission = function(perm){
125
+ if( "is_selected" in perm ){
126
+ perm.is_selected = ! perm.is_selected;
127
+ return;
128
+ }
129
+ perm.is_selected = true;
130
+ };
131
+
132
+ $scope.is_selected = function(perm){
133
+ if( "is_selected" in perm ){
134
+ return perm.is_selected;
135
+ }
136
+ return false;
137
+ };
138
+
139
+ $scope.cancel = function(){
140
+ $(".form input").val("");
141
+ for(var i = 0; i < $scope.permissions.length;i++) {
142
+ $scope.permissions[i].is_selected = false;
143
+ }
144
+ };
145
+
146
+ $scope.save = function(){
147
+ var permissions = [];
148
+
149
+ for(var i = 0; i < $scope.permissions.length;i++) {
150
+ if ($scope.permissions[i].is_selected){
151
+ permissions.push($scope.permissions[i].name);
152
+ }
153
+ }
154
+
155
+ var group = {name: $scope.new_name,
156
+ permissions: permissions};
157
+ if ($scope.obj_id) {
158
+ API.one("groups", $scope.obj_id).patch(group)
159
+ .then(function(){
160
+ success_message(gettext("Group updated successfully."));
161
+ $location.path("/auth/groups");
162
+ })
163
+ .catch(catch_error);
164
+ }
165
+ else {
166
+ API.all("groups").post(group).then(function(){
167
+ success_message(gettext("Group created successfully."));
168
+ $location.path("/auth/groups");
169
+
170
+ }).catch(catch_error);
171
+ }
172
+
173
+ };
174
+ }]);
@@ -0,0 +1,122 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+ var User = angular.module("User", ["ListView"]);
20
+
21
+ User.config(["$routeProvider", function($routeProvider){
22
+
23
+ $routeProvider.
24
+ when("/auth/users", {
25
+ templateUrl: template("auth/users/index"),
26
+ controller: "UsersController"
27
+ }).
28
+ when("/auth/users/new",{
29
+ templateUrl: template("auth/users/new"),
30
+ controller: "AddUsersController"
31
+ }).
32
+ when("/auth/users/:id/edit",{
33
+ templateUrl: template("auth/users/new"),
34
+ controller: "AddUsersController"
35
+ });
36
+ }]);
37
+
38
+ User.controller("UsersController", ["$scope", "Restangular","gettext",
39
+ function($scope, API, gettext){
40
+
41
+ $scope.details_template = template("auth/users/details");
42
+
43
+ API.all("users").getList().then(function(data){
44
+ $scope.users = data;
45
+ });
46
+
47
+ $scope.buttons = [
48
+ {
49
+ title: gettext("New"),
50
+ icon: "fa fa-plus",
51
+ classes: "btn small green",
52
+ route: "#/auth/users/new"
53
+ }
54
+ ];
55
+
56
+
57
+ $scope.on_delete = function(users){
58
+ var query = [];
59
+ users.forEach(function(user){
60
+ query.push(user.id);
61
+ });
62
+
63
+ API.all("users").customDELETE(query.join(","))
64
+ .then(function(data) {
65
+
66
+ $scope.users = _.filter($scope.users, function(x){
67
+ return !(query.indexOf(x.id) != -1);
68
+ });
69
+ success_message(data.msg);
70
+ })
71
+ .catch(catch_error);
72
+
73
+ };
74
+
75
+
76
+ }]);
77
+
78
+
79
+ User.controller("AddUsersController", ["$scope","Restangular","$location" ,"$routeParams", "gettext" ,function($scope, API, $location , $routeParams, gettext){
80
+
81
+ API.all("groups").getList().then(
82
+ function(data){
83
+ $scope.groups = data;
84
+ });
85
+
86
+ $scope.obj_id = null;
87
+ if("id" in $routeParams){
88
+ $scope.obj_id = $routeParams.id;
89
+ var obj = API.one("users", $scope.obj_id).get()
90
+ .then(function(data){
91
+ $scope.first_name = data.first_name;
92
+ $scope.last_name = data.last_name;
93
+ $scope.email = data.email;
94
+ $scope.group = data.group;
95
+ $scope.password = data.password;
96
+ });
97
+ }
98
+ $scope.save = function() {
99
+ var user = {
100
+ first_name: $scope.first_name,
101
+ last_name: $scope.last_name,
102
+ email: $scope.email,
103
+ password: $scope.password,
104
+ group: $scope.group
105
+ };
106
+ if ($scope.obj_id){
107
+ API.one("users",$scope.obj_id).patch(user).then(function(){
108
+ success_message(gettext("User updated successfully."));
109
+ $location.path("/auth/users");
110
+ });
111
+ }else{
112
+ API.all("users").post(user).then(function(){
113
+ success_message(gettext("User created Successfully"));
114
+ //$location.path("/auth/users");
115
+ }).catch(catch_error);
116
+ }
117
+ };
118
+
119
+ $scope.cansel = function(){
120
+ $(".form input").val("");
121
+ };
122
+ }]);
@@ -0,0 +1,293 @@
1
+ /* -----------------------------------------------------------------------------
2
+ Red Base - Basic website skel engine
3
+ Copyright (C) 2012-2013 Yellowen
4
+
5
+ This program is free software; you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation; either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along
16
+ with this program; if not, write to the Free Software Foundation, Inc.,
17
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
+ ----------------------------------------------------------------------------- */
19
+
20
+ var ListView = angular.module("ListView", []);
21
+
22
+ /*
23
+ * <element object-action></element> directive defination
24
+ */
25
+ ListView.directive("objectAction", function(){
26
+
27
+ function link(scope, element, attrs){
28
+
29
+ var object = scope.object;
30
+ var action = scope.action;
31
+
32
+ if ("route" in object){
33
+ element.attr("href", object.route);
34
+ }
35
+ else if ("action" in object) {
36
+ element.on("click", object.action);
37
+ }
38
+ }
39
+
40
+ // Actual object
41
+ return {
42
+ restrict: "A",
43
+ scope: {
44
+ object: "="
45
+ },
46
+ link: link
47
+ };
48
+
49
+ });
50
+
51
+
52
+ /*
53
+ * <list-view></list-view> directive defination
54
+ */
55
+ ListView.directive('listView', ["$filter", "gettext", function($filter, gettext) {
56
+
57
+ function link(scope, element, attrs){
58
+ var ltr = is_ltr();
59
+ var _item_per_page = parseInt(scope.item_per_page, 10) || 10;
60
+ var _current_page = 1;
61
+
62
+ var filtered_objects = function(){
63
+ var filterby = {};
64
+ filterby[scope.title_attr] = scope.searchterm;
65
+ var result = $filter('filter')(scope.objects, filterby, function(expected, actual){
66
+ var re = new RegExp(".*" + actual + ".*", "ig");
67
+ scope.go_to_first_page();
68
+ if( expected.match(re) ){
69
+ return true;
70
+ }
71
+ return false;
72
+ });
73
+ // TODO: Double check this or condition
74
+ return result || [];
75
+ };
76
+
77
+ var delete_method = scope.on_delete || function(x){
78
+ console.log( "undefined on delete method" );
79
+ };
80
+
81
+ scope.is_ltr = ltr;
82
+ scope.handle_icon = ltr ? "fa-angle-right" : "fa-angle-left";
83
+ scope.first_page_icon = ltr ? "fa-angle-double-left" : "fa-angle-double-right";
84
+ scope.last_page_icon = ltr ? "fa-angle-double-right" : "fa-angle-double-left";
85
+ scope.prev_page_icon = ltr ? "fa-angle-left" : "fa-angle-right";
86
+ scope.next_page_icon = ltr ? "fa-angle-right" : "fa-angle-left";
87
+ scope.hand_icon = ltr ? "fa-hand-o-right" : "fa-hand-o-left";
88
+ scope.is_all_selected = false;
89
+
90
+ scope.handle_icon_expand = function(object){
91
+ if(scope.should_view(object)) {
92
+ return ltr ? "fa-rotate-90" : "fa-rotate-270";
93
+ }
94
+ return "";
95
+ };
96
+
97
+ // View an item details
98
+ scope.toggle_details = function(object){
99
+ if ("view_details" in object){
100
+ object.view_details = ! object.view_details;
101
+ }
102
+ else {
103
+ object.view_details = true;
104
+ }
105
+ };
106
+
107
+ // Should we open details section
108
+ scope.should_view = function(object){
109
+ if ("view_details" in object) {
110
+ return object.view_details;
111
+
112
+ }
113
+ return false;
114
+ };
115
+
116
+ scope.delete_items = function(){
117
+ var len = scope.selected_count();
118
+ var objects_to_delete = [];
119
+
120
+ if( confirm(gettext("Are sure you want to delete ") + len + gettext(" item(s)?")) ){
121
+ var objects_list = filtered_objects();
122
+
123
+ for(i = 0 ; i < objects_list.length; i++){
124
+
125
+ if (objects_list[i].is_selected === true) {
126
+ objects_to_delete.push(objects_list[i]);
127
+ }
128
+
129
+ }
130
+
131
+ delete_method(objects_to_delete);
132
+ }
133
+
134
+
135
+ };
136
+ // Selection related methods -----------------------------------
137
+ // Select a row in table
138
+ scope.select_item = function(object) {
139
+ if ("is_selected" in object) {
140
+ object.is_selected = ! object.is_selected;
141
+ }
142
+ else {
143
+ object.is_selected = true;
144
+ }
145
+
146
+ };
147
+
148
+ scope.toggle_select = function (){
149
+ var objects_list = filtered_objects();
150
+
151
+ for(i = 0 ; i < objects_list.length; i++){
152
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
153
+ }
154
+ };
155
+
156
+ scope.toggle_select = function (){
157
+ var objects_list = filtered_objects();
158
+
159
+ for(i = 0 ; i < objects_list.length; i++){
160
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
161
+ }
162
+ };
163
+
164
+ scope.select_all = function (){
165
+ var objects_list = filtered_objects();
166
+
167
+ for(i = 0 ; i < objects_list.length; i++){
168
+ objects_list[i].is_selected = ! scope.is_all_selected;
169
+ }
170
+
171
+ scope.is_all_selected = ! scope.is_all_selected;
172
+
173
+ };
174
+
175
+ scope.selected_count = function(){
176
+ var myobjects = filtered_objects();
177
+ var count = 0;
178
+ for(i = 0; i < myobjects.length; i++) {
179
+ if("is_selected" in myobjects[i]){
180
+ if(myobjects[i].is_selected) {
181
+ count++;
182
+ }
183
+ }
184
+
185
+ }
186
+ return count;
187
+ };
188
+ // Pagination methods ---------------------------------
189
+
190
+ scope.has_pagination = function(){
191
+ return scope.total_pages() > 1 ? true : false;
192
+ };
193
+
194
+ scope.total_pages = function(){
195
+ var len = filtered_objects().length;
196
+ var pages = parseInt(len / _item_per_page, 10);
197
+
198
+ if (len % _item_per_page > 0 || len < _item_per_page) {
199
+ pages++;
200
+ }
201
+
202
+ return pages;
203
+ };
204
+
205
+ scope.current_page = function(){
206
+ return _current_page;
207
+ };
208
+
209
+ scope.go_to_next_page = function(){
210
+ if (_current_page < scope.total_pages()) {
211
+ _current_page++;
212
+ }
213
+ else {
214
+ _current_page = scope.total_pages();
215
+ }
216
+ };
217
+
218
+ scope.go_to_prev_page = function(){
219
+ if (_current_page > 1) {
220
+ _current_page--;
221
+ }
222
+ else {
223
+ _current_page = 1;
224
+ }
225
+ };
226
+
227
+ scope.go_to_last_page = function(){
228
+ _current_page = scope.total_pages();
229
+ };
230
+
231
+ scope.go_to_first_page = function(){
232
+ _current_page = 1;
233
+ };
234
+
235
+ scope.go_to_page = function($event, value){
236
+ if( $event.which == 13 ){
237
+
238
+ var page = parseInt(value, 10);
239
+
240
+ if (page > 0 && page <= scope.total_pages()) {
241
+ _current_page = page;
242
+ }
243
+ else {
244
+ value = _current_page;
245
+ }
246
+
247
+ }
248
+
249
+ };
250
+
251
+ scope.get_current_page = function(){
252
+ var start = (scope.current_page() * _item_per_page) - _item_per_page;
253
+ var end = (scope.current_page() * _item_per_page);
254
+
255
+ return filtered_objects().slice(start, end);
256
+ };
257
+
258
+ scope.objects_count = function(){
259
+ return filtered_objects().length;
260
+ };
261
+ // ----------------------------------------------------
262
+ // TODO: create some methods in scope for those buttons
263
+ // which need to call a method instead of changing location
264
+ }
265
+
266
+
267
+ // Actual object of <list-view> directive
268
+ return {
269
+ templateUrl: template("list-view/index"),
270
+ restrict: "E",
271
+ transclude: true,
272
+ scope: {
273
+ // Header section custom buttons
274
+ buttons: "=buttons",
275
+
276
+ // Objects which should listed
277
+ objects: "=",
278
+
279
+ // Object attribute which should show as title in main li
280
+ title_attr: "=titleAttribute",
281
+
282
+ // Template address for details section
283
+ details_template: "=detailsTemplate",
284
+
285
+ // Number of item per pages
286
+ item_per_page: "=itemPerPage",
287
+
288
+ // On delete method
289
+ on_delete: "=onDelete"
290
+ },
291
+ link: link
292
+ };
293
+ }]);