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,59 @@
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 Profile = angular.module("Profile", []);
21
+
22
+ Profile.config(["$routeProvider", function($routeProvider){
23
+
24
+ $routeProvider.
25
+ when("/auth/profile/edit",{
26
+ templateUrl: template("auth/profile/edit"),
27
+ controller: "ProfileController"
28
+ });
29
+ }]);
30
+
31
+
32
+
33
+ Profile.controller("ProfileController", ["$scope","Restangular","$location" ,"$routeParams", "gettext", "catch_error", function($scope, API, $location , $routeParams, gettext, catch_error){
34
+ var obj = API.one("profile").get()
35
+ .then(function(data){
36
+ $scope.first_name = data.first_name;
37
+ $scope.last_name = data.last_name;
38
+ $scope.email = data.email;
39
+
40
+ });
41
+ $scope.save = function() {
42
+ var user = {
43
+ first_name: $scope.first_name,
44
+ last_name: $scope.last_name,
45
+ email: $scope.email,
46
+ password: $scope.password,
47
+ password_confirmation: $scope.password_confirmation
48
+ };
49
+ API.one("profile").patch(user).then(function(){
50
+ success_message(gettext("Profile updated successfully."));
51
+ }).catch(catch_error);
52
+ };
53
+
54
+ $scope.cancel = function(){
55
+ $(".form input").val("");
56
+ $location.path("/");
57
+ };
58
+
59
+ }]);
@@ -0,0 +1,123 @@
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", "Errors"]);
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", "catch_error",
39
+ function($scope, API, gettext, catch_error){
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 tiny 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", "catch_error", function($scope, API, $location , $routeParams, gettext, catch_error){
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.cancel = function(){
120
+ $(".form input").val("");
121
+ $location.path("auth/users");
122
+ };
123
+ }]);
@@ -0,0 +1,47 @@
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 Errors = angular.module("Errors", []);
20
+
21
+ Errors.factory('catch_error', ["gettext", function(gettext) {
22
+ return function(error) {
23
+
24
+ if ("data" in error) {
25
+ if ((typeof(error.data) == "object") && ("fields" in error.data)) {
26
+ _.each(error.data.fields, function(value, key) {
27
+ $("#id_" + key).addClass("input-error");
28
+ _.each(value, function(x){
29
+ $("#id_" + key + "_msg").append(value);
30
+ $("#id_" + key + "_msg").addClass("error");
31
+
32
+ });
33
+ });
34
+ error_message(gettext("Validation error. Fixup errors first."));
35
+ return;
36
+ }
37
+ if ((typeof(error.data) == "object") && ("error" in error.data)) {
38
+ console.log(error.data.error);
39
+ error_message(error.data.error);
40
+ return;
41
+ }
42
+ }
43
+ console.log(error);
44
+ error_message(gettext("Unkown error: please try again or contact to administrator."));
45
+
46
+ };
47
+ }]);
@@ -0,0 +1,44 @@
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 Filter = angular.module("Filter", ["Errors"]);
21
+
22
+ /*
23
+ * <filter></filter> directive defination
24
+ */
25
+ Filter.directive('filter', ["catch_error", "gettext", function(catch_error, gettext) {
26
+
27
+ function link(scope, element, attrs){
28
+ var config = scope.config;
29
+ config.list.getList().then(function(data){
30
+ scope.result = data;
31
+ }, catch_error);
32
+ }
33
+ // Actual object of <filter> directive
34
+ return {
35
+ templateUrl: template("filter/index"),
36
+ restrict: "E",
37
+ transclude: true,
38
+ scope: {
39
+ result: "=",
40
+ config: "="
41
+ },
42
+ link: link
43
+ };
44
+ }]);
@@ -0,0 +1,310 @@
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", ['ngGrid']);
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
+ scope.list_view = true;
62
+ scope.grid_view = false;
63
+
64
+ var filtered_objects = function(){
65
+ var filterby = {};
66
+ filterby[scope.title_attr] = scope.searchterm;
67
+ var result = $filter('filter')(scope.objects, filterby, function(expected, actual){
68
+ var re = new RegExp(".*" + actual + ".*", "ig");
69
+ scope.go_to_first_page();
70
+ if( expected.match(re) ){
71
+ return true;
72
+ }
73
+ return false;
74
+ });
75
+ // TODO: Double check this or condition
76
+ return result || [];
77
+ };
78
+ scope.grid_options = {
79
+ data: 'objects',
80
+ headerRowHeight: 30,
81
+ rowHeight: 30,
82
+ enablePaging: true,
83
+ afterSelectionChange: function(rowitem, event){
84
+ console.dir(rowitem);
85
+ console.dir(event);
86
+ },
87
+ columnDefs: scope.column_defs
88
+ };
89
+ var delete_method = scope.on_delete || function(x){
90
+ console.log( "undefined on delete method" );
91
+ };
92
+
93
+ scope.is_ltr = ltr;
94
+ scope.handle_icon = ltr ? "fa-angle-right" : "fa-angle-left";
95
+ scope.first_page_icon = ltr ? "fa-angle-double-left" : "fa-angle-double-right";
96
+ scope.last_page_icon = ltr ? "fa-angle-double-right" : "fa-angle-double-left";
97
+ scope.prev_page_icon = ltr ? "fa-angle-left" : "fa-angle-right";
98
+ scope.next_page_icon = ltr ? "fa-angle-right" : "fa-angle-left";
99
+ scope.hand_icon = ltr ? "fa-hand-o-right" : "fa-hand-o-left";
100
+ scope.is_all_selected = false;
101
+
102
+ scope.handle_icon_expand = function(object){
103
+ if(scope.should_view(object)) {
104
+ return ltr ? "fa-rotate-90" : "fa-rotate-270";
105
+ }
106
+ return "";
107
+ };
108
+
109
+ // View an item details
110
+ scope.toggle_details = function(object){
111
+ if ("view_details" in object){
112
+ object.view_details = ! object.view_details;
113
+ }
114
+ else {
115
+ object.view_details = true;
116
+ }
117
+ };
118
+
119
+ // Should we open details section
120
+ scope.should_view = function(object){
121
+ if ("view_details" in object) {
122
+ return object.view_details;
123
+
124
+ }
125
+ return false;
126
+ };
127
+
128
+ scope.delete_items = function(){
129
+ var len = scope.selected_count();
130
+ var objects_to_delete = [];
131
+
132
+ if( confirm(gettext("Are sure you want to delete ") + len + gettext(" item(s)?")) ){
133
+ var objects_list = filtered_objects();
134
+
135
+ for(i = 0 ; i < objects_list.length; i++){
136
+
137
+ if (objects_list[i].is_selected === true) {
138
+ objects_to_delete.push(objects_list[i]);
139
+ }
140
+
141
+ }
142
+
143
+ delete_method(objects_to_delete);
144
+ }
145
+
146
+
147
+ };
148
+ // Selection related methods -----------------------------------
149
+ // Select a row in table
150
+ scope.select_item = function(object) {
151
+ if ("is_selected" in object) {
152
+ object.is_selected = ! object.is_selected;
153
+ }
154
+ else {
155
+ object.is_selected = true;
156
+ }
157
+
158
+ };
159
+
160
+ scope.toggle_select = function (){
161
+ var objects_list = filtered_objects();
162
+
163
+ for(i = 0 ; i < objects_list.length; i++){
164
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
165
+ }
166
+ };
167
+
168
+ scope.toggle_select = function (){
169
+ var objects_list = filtered_objects();
170
+
171
+ for(i = 0 ; i < objects_list.length; i++){
172
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
173
+ }
174
+ };
175
+
176
+ scope.select_all = function (){
177
+ var objects_list = filtered_objects();
178
+
179
+ for(i = 0 ; i < objects_list.length; i++){
180
+ objects_list[i].is_selected = ! scope.is_all_selected;
181
+ }
182
+
183
+ scope.is_all_selected = ! scope.is_all_selected;
184
+
185
+ };
186
+
187
+ scope.selected_count = function(){
188
+ var myobjects = filtered_objects();
189
+ var count = 0;
190
+ for(i = 0; i < myobjects.length; i++) {
191
+ if("is_selected" in myobjects[i]){
192
+ if(myobjects[i].is_selected) {
193
+ count++;
194
+ }
195
+ }
196
+
197
+ }
198
+ return count;
199
+ };
200
+ // Pagination methods ---------------------------------
201
+
202
+ scope.has_pagination = function(){
203
+ return scope.total_pages() > 1 ? true : false;
204
+ };
205
+
206
+ scope.total_pages = function(){
207
+ var len = filtered_objects().length;
208
+ var pages = parseInt(len / _item_per_page, 10);
209
+
210
+ if (len % _item_per_page > 0 || len < _item_per_page) {
211
+ pages++;
212
+ }
213
+
214
+ return pages;
215
+ };
216
+
217
+ scope.current_page = function(){
218
+ return _current_page;
219
+ };
220
+
221
+ scope.go_to_next_page = function(){
222
+ if (_current_page < scope.total_pages()) {
223
+ _current_page++;
224
+ }
225
+ else {
226
+ _current_page = scope.total_pages();
227
+ }
228
+ };
229
+
230
+ scope.go_to_prev_page = function(){
231
+ if (_current_page > 1) {
232
+ _current_page--;
233
+ }
234
+ else {
235
+ _current_page = 1;
236
+ }
237
+ };
238
+
239
+ scope.go_to_last_page = function(){
240
+ _current_page = scope.total_pages();
241
+ };
242
+
243
+ scope.go_to_first_page = function(){
244
+ _current_page = 1;
245
+ };
246
+
247
+ scope.go_to_page = function($event, value){
248
+ if( $event.which == 13 ){
249
+
250
+ var page = parseInt(value, 10);
251
+
252
+ if (page > 0 && page <= scope.total_pages()) {
253
+ _current_page = page;
254
+ }
255
+ else {
256
+ value = _current_page;
257
+ }
258
+
259
+ }
260
+
261
+ };
262
+
263
+ scope.get_current_page = function(){
264
+ var start = (scope.current_page() * _item_per_page) - _item_per_page;
265
+ var end = (scope.current_page() * _item_per_page);
266
+
267
+ return filtered_objects().slice(start, end);
268
+ };
269
+
270
+ scope.objects_count = function(){
271
+ return filtered_objects().length;
272
+ };
273
+ // ----------------------------------------------------
274
+ // TODO: create some methods in scope for those buttons
275
+ // which need to call a method instead of changing location
276
+ }
277
+
278
+
279
+ // Actual object of <list-view> directive
280
+ return {
281
+ templateUrl: template("list-view/index"),
282
+ restrict: "E",
283
+ transclude: true,
284
+ scope: {
285
+ // Header section custom buttons
286
+ buttons: "=buttons",
287
+
288
+ // Objects which should listed
289
+ objects: "=",
290
+
291
+ // Object attribute which should show as title in main li
292
+ title_attr: "=titleAttribute",
293
+
294
+ // Template address for details section
295
+ details_template: "=detailsTemplate",
296
+
297
+ // Number of item per pages
298
+ item_per_page: "=itemPerPage",
299
+
300
+ // Search input
301
+ search: "=",
302
+
303
+ // Grid columns
304
+ column_defs: "=columnDefs",
305
+ // On delete method
306
+ on_delete: "=onDelete"
307
+ },
308
+ link: link
309
+ };
310
+ }]);