faalis 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +339 -0
  3. data/README.md +45 -0
  4. data/Rakefile +42 -0
  5. data/app/assets/fonts/DroidNaskh-Bold.ttf +0 -0
  6. data/app/assets/fonts/DroidNaskh-Regular.ttf +0 -0
  7. data/app/assets/fonts/OpenSans-Bold.ttf +0 -0
  8. data/app/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
  9. data/app/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
  10. data/app/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  11. data/app/assets/fonts/OpenSans-Italic.ttf +0 -0
  12. data/app/assets/fonts/OpenSans-Light.ttf +0 -0
  13. data/app/assets/fonts/OpenSans-LightItalic.ttf +0 -0
  14. data/app/assets/fonts/OpenSans-Regular.ttf +0 -0
  15. data/app/assets/fonts/OpenSans-Semibold.ttf +0 -0
  16. data/app/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  17. data/app/assets/images/faalis/select2-spinner.gif +0 -0
  18. data/app/assets/images/faalis/select2.png +0 -0
  19. data/app/assets/images/faalis/select2x2.png +0 -0
  20. data/app/assets/javascripts/faalis/application.js +20 -0
  21. data/app/assets/javascripts/faalis/dashboard/angular.js +9 -0
  22. data/app/assets/javascripts/faalis/dashboard/app.js +75 -0
  23. data/app/assets/javascripts/faalis/dashboard/application.js.erb +21 -0
  24. data/app/assets/javascripts/faalis/dashboard/functions.js.erb +91 -0
  25. data/app/assets/javascripts/faalis/dashboard/init.js +38 -0
  26. data/app/assets/javascripts/faalis/dashboard/lib/angular-animate.js +1226 -0
  27. data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +202 -0
  28. data/app/assets/javascripts/faalis/dashboard/lib/angular-resource.js +578 -0
  29. data/app/assets/javascripts/faalis/dashboard/lib/angular-route.js +880 -0
  30. data/app/assets/javascripts/faalis/dashboard/lib/angular.js +20031 -0
  31. data/app/assets/javascripts/faalis/dashboard/lib/lodash.underscore.js +4893 -0
  32. data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +3260 -0
  33. data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +297 -0
  34. data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +1066 -0
  35. data/app/assets/javascripts/faalis/dashboard/lib/select2.js +3255 -0
  36. data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +217 -0
  37. data/app/assets/javascripts/faalis/dashboard/locale/translations.js +5 -0
  38. data/app/assets/javascripts/faalis/dashboard/modules/anim.js +32 -0
  39. data/app/assets/javascripts/faalis/dashboard/modules/api.js +32 -0
  40. data/app/assets/javascripts/faalis/dashboard/modules/auth/auth.js +34 -0
  41. data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +174 -0
  42. data/app/assets/javascripts/faalis/dashboard/modules/auth/profile.js +59 -0
  43. data/app/assets/javascripts/faalis/dashboard/modules/auth/user.js +123 -0
  44. data/app/assets/javascripts/faalis/dashboard/modules/errors.js +47 -0
  45. data/app/assets/javascripts/faalis/dashboard/modules/filter.js +44 -0
  46. data/app/assets/javascripts/faalis/dashboard/modules/list-view.js +310 -0
  47. data/app/assets/javascripts/faalis/dashboard/modules/logs.js +41 -0
  48. data/app/assets/javascripts/faalis/dashboard/modules/modules.js +50 -0
  49. data/app/assets/javascripts/faalis/dashboard/modules/nav.js.erb +97 -0
  50. data/app/assets/javascripts/faalis/dashboard/templates/application.handlebars.erb +42 -0
  51. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/details.handlebars.erb +15 -0
  52. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/index.handlebars.erb +7 -0
  53. data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/new.handlebars.erb +39 -0
  54. data/app/assets/javascripts/faalis/dashboard/templates/auth/index.handlebars.erb +31 -0
  55. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/details.handlebars.erb +15 -0
  56. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/index.handlebars.erb +11 -0
  57. data/app/assets/javascripts/faalis/dashboard/templates/auth/users/new.handlebars.erb +33 -0
  58. data/app/assets/javascripts/faalis/dashboard/templates/components/list-view.handlebars.erb +59 -0
  59. data/app/assets/javascripts/faalis/dashboard/templates/components/model-form.handlebars.erb +3 -0
  60. data/app/assets/javascripts/faalis/dashboard/templates/modules.handlebars.erb +15 -0
  61. data/app/assets/javascripts/faalis/dashboard/templates/navigation.handlebars.erb +43 -0
  62. data/app/assets/javascripts/faalis/dashboard/templates/widgets.handlebars +23 -0
  63. data/app/assets/javascripts/faalis/dashboard/variables.js.erb +17 -0
  64. data/app/assets/javascripts/faalis/groups.js +2 -0
  65. data/app/assets/javascripts/faalis/home.js +2 -0
  66. data/app/assets/javascripts/faalis/i18n.js +13 -0
  67. data/app/assets/javascripts/faalis/locale/en.json +27 -0
  68. data/app/assets/javascripts/faalis/locale/fa.json +27 -0
  69. data/app/assets/javascripts/faalis/users.js +2 -0
  70. data/app/assets/stylesheets/faalis/base.css.scss +264 -0
  71. data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +226 -0
  72. data/app/assets/stylesheets/faalis/dashboard/list_view.css.scss +169 -0
  73. data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +26 -0
  74. data/app/assets/stylesheets/faalis/dashboard/ltr/base.css.scss.erb +28 -0
  75. data/app/assets/stylesheets/faalis/dashboard/ltr/buttons.css.scss.erb +48 -0
  76. data/app/assets/stylesheets/faalis/dashboard/ltr/direction.css.scss +38 -0
  77. data/app/assets/stylesheets/faalis/dashboard/ltr/foundation_and_overrides.css.scss +1014 -0
  78. data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +442 -0
  79. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +20 -0
  80. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +19 -0
  81. data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +26 -0
  82. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +31 -0
  83. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css_flymake.scss +25 -0
  84. data/app/assets/stylesheets/faalis/dashboard/rtl/buttons.css.scss.erb +45 -0
  85. data/app/assets/stylesheets/faalis/dashboard/rtl/direction.css.scss +37 -0
  86. data/app/assets/stylesheets/faalis/dashboard/rtl/foundation_and_overrides.css.scss +1014 -0
  87. data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +618 -0
  88. data/app/assets/stylesheets/faalis/dashboard/sidebar.css.scss +93 -0
  89. data/app/assets/stylesheets/faalis/devise.css.scss +34 -0
  90. data/app/assets/stylesheets/faalis/groups.css +4 -0
  91. data/app/assets/stylesheets/faalis/home.css.scss +14 -0
  92. data/app/assets/stylesheets/faalis/ltr/application.css +20 -0
  93. data/app/assets/stylesheets/faalis/ltr/buttons.css.scss.erb +48 -0
  94. data/app/assets/stylesheets/faalis/ltr/foundation_and_overrides.scss.erb +1012 -0
  95. data/app/assets/stylesheets/faalis/mixins.css.scss +15 -0
  96. data/app/assets/stylesheets/faalis/rtl/application.css +20 -0
  97. data/app/assets/stylesheets/faalis/rtl/buttons.css.scss.erb +48 -0
  98. data/app/assets/stylesheets/faalis/rtl/foundation_and_overrides.scss.erb +1012 -0
  99. data/app/assets/stylesheets/faalis/users.css +4 -0
  100. data/app/assets/stylesheets/faalis/variables.css.scss +102 -0
  101. data/app/controllers/faalis/api/v1/groups_controller.rb +75 -0
  102. data/app/controllers/faalis/api/v1/logs_controller.rb +12 -0
  103. data/app/controllers/faalis/api/v1/permissions_controller.rb +17 -0
  104. data/app/controllers/faalis/api/v1/profiles_controller.rb +42 -0
  105. data/app/controllers/faalis/api/v1/users_controller.rb +75 -0
  106. data/app/controllers/faalis/api_controller.rb +51 -0
  107. data/app/controllers/faalis/application_controller.rb +34 -0
  108. data/app/controllers/faalis/dashboard_controller.rb +44 -0
  109. data/app/controllers/faalis/home_controller.rb +19 -0
  110. data/app/controllers/faalis/omniauth/callbacks_controller.rb +43 -0
  111. data/app/helpers/faalis/application_helper.rb +4 -0
  112. data/app/helpers/faalis/dashboard_helper.rb +5 -0
  113. data/app/helpers/faalis/groups_helper.rb +4 -0
  114. data/app/helpers/faalis/home_helper.rb +4 -0
  115. data/app/helpers/faalis/users_helper.rb +4 -0
  116. data/app/models/ability.rb +42 -0
  117. data/app/models/faalis/group.rb +27 -0
  118. data/app/models/faalis/permission.rb +15 -0
  119. data/app/models/faalis/user.rb +81 -0
  120. data/app/views/angularjs_templates/#index.html# +8 -0
  121. data/app/views/angularjs_templates/auth/groups/details.html +21 -0
  122. data/app/views/angularjs_templates/auth/groups/index.html +5 -0
  123. data/app/views/angularjs_templates/auth/groups/new.html +41 -0
  124. data/app/views/angularjs_templates/auth/index.html +30 -0
  125. data/app/views/angularjs_templates/auth/profile/edit.html +54 -0
  126. data/app/views/angularjs_templates/auth/users/details.html +28 -0
  127. data/app/views/angularjs_templates/auth/users/index.html +6 -0
  128. data/app/views/angularjs_templates/auth/users/new.html +56 -0
  129. data/app/views/angularjs_templates/filter/index.html +15 -0
  130. data/app/views/angularjs_templates/index.html +8 -0
  131. data/app/views/angularjs_templates/list-view/index.html +81 -0
  132. data/app/views/angularjs_templates/locale/fa.po +25 -0
  133. data/app/views/angularjs_templates/locale/templates.pot +24 -0
  134. data/app/views/angularjs_templates/logs/index.html +6 -0
  135. data/app/views/angularjs_templates/modules.html +17 -0
  136. data/app/views/angularjs_templates/nav.html.erb +38 -0
  137. data/app/views/devise/confirmations/new.html.erb +34 -0
  138. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  139. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  140. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  141. data/app/views/devise/passwords/edit.html.erb +44 -0
  142. data/app/views/devise/passwords/new.html.erb +32 -0
  143. data/app/views/devise/registrations/edit.html.erb +29 -0
  144. data/app/views/devise/registrations/new.html.erb +91 -0
  145. data/app/views/devise/sessions/new.html.erb +98 -0
  146. data/app/views/devise/shared/_links.erb +25 -0
  147. data/app/views/devise/unlocks/new.html.erb +30 -0
  148. data/app/views/faalis/api/v1/groups/create.json.jbuilder +4 -0
  149. data/app/views/faalis/api/v1/groups/destroy.html.erb +2 -0
  150. data/app/views/faalis/api/v1/groups/destroy.json.jbuilder +1 -0
  151. data/app/views/faalis/api/v1/groups/edit.html.erb +2 -0
  152. data/app/views/faalis/api/v1/groups/index.html.erb +2 -0
  153. data/app/views/faalis/api/v1/groups/index.json.jbuilder +6 -0
  154. data/app/views/faalis/api/v1/groups/new.html.erb +2 -0
  155. data/app/views/faalis/api/v1/groups/show.html.erb +2 -0
  156. data/app/views/faalis/api/v1/groups/show.json.jbuilder +5 -0
  157. data/app/views/faalis/api/v1/groups/update.json.jbuilder +4 -0
  158. data/app/views/faalis/api/v1/logs/index.json.jbuilder +1 -0
  159. data/app/views/faalis/api/v1/permissions/index.json.jbuilder +1 -0
  160. data/app/views/faalis/api/v1/users/create.html.erb +2 -0
  161. data/app/views/faalis/api/v1/users/create.json.jbuilder +1 -0
  162. data/app/views/faalis/api/v1/users/destroy.json.jbuilder +1 -0
  163. data/app/views/faalis/api/v1/users/distroy.html.erb +2 -0
  164. data/app/views/faalis/api/v1/users/edit.html.erb +2 -0
  165. data/app/views/faalis/api/v1/users/index.html.erb +2 -0
  166. data/app/views/faalis/api/v1/users/index.json.jbuilder +4 -0
  167. data/app/views/faalis/api/v1/users/show.html.erb +2 -0
  168. data/app/views/faalis/api/v1/users/show.json.jbuilder +2 -0
  169. data/app/views/faalis/api/v1/users/update.json.jbuilder +1 -0
  170. data/app/views/faalis/dashboard/index.html.erb +37 -0
  171. data/app/views/faalis/dashboard/login_required_page.html.erb +5 -0
  172. data/app/views/faalis/home/index.html.erb +119 -0
  173. data/app/views/layouts/faalis/application.html.erb +90 -0
  174. data/app/views/layouts/faalis/dashboard.html.erb +21 -0
  175. data/config/initializers/devise.rb +28 -0
  176. data/config/locales/devise.en.yml +59 -0
  177. data/config/locales/devise.fa.yml +56 -0
  178. data/config/locales/fa/LC_MESSAGES/faalis.mo +0 -0
  179. data/config/locales/fa/faalis.po +181 -0
  180. data/config/locales/fa/messages.mo +0 -0
  181. data/config/locales/faalis.pot +181 -0
  182. data/config/routes.rb +36 -0
  183. data/db/migrate/20131013091000_devise_create_red_base_users.rb +64 -0
  184. data/db/migrate/20131020124701_create_red_base_groups.rb +9 -0
  185. data/db/migrate/20131021170923_create_red_base_permissions.rb +10 -0
  186. data/db/migrate/20131123120422_add_permissions_groups_table.rb +8 -0
  187. data/db/seeds.rb +15 -0
  188. data/lib/faalis.rb +30 -0
  189. data/lib/faalis/active_record.rb +64 -0
  190. data/lib/faalis/api.rb +61 -0
  191. data/lib/faalis/api/groups_api.rb +41 -0
  192. data/lib/faalis/api/permissions_api.rb +24 -0
  193. data/lib/faalis/api/root.rb +15 -0
  194. data/lib/faalis/api/users_api.rb +20 -0
  195. data/lib/faalis/cucumber.rb +25 -0
  196. data/lib/faalis/cucumber/auth.rb +45 -0
  197. data/lib/faalis/cucumber/exceptions.rb +40 -0
  198. data/lib/faalis/cucumber/interaction.rb +43 -0
  199. data/lib/faalis/cucumber/query.rb +28 -0
  200. data/lib/faalis/cucumber/urls.rb +76 -0
  201. data/lib/faalis/dashboard.rb +60 -0
  202. data/lib/faalis/dashboard/controller.rb +42 -0
  203. data/lib/faalis/dashboard/module.rb +45 -0
  204. data/lib/faalis/engine.rb +128 -0
  205. data/lib/faalis/exceptions.rb +26 -0
  206. data/lib/faalis/i18n.rb +35 -0
  207. data/lib/faalis/initialize.rb +7 -0
  208. data/lib/faalis/omniauth.rb +24 -0
  209. data/lib/faalis/omniauth/callbacks.rb +58 -0
  210. data/lib/faalis/plugins.rb +44 -0
  211. data/lib/faalis/version.rb +22 -0
  212. data/lib/faalis_plugin.rb +476 -0
  213. data/lib/generators/faalis/USAGE +8 -0
  214. data/lib/generators/faalis/angularjs_resource_generator.rb +74 -0
  215. data/lib/generators/faalis/install_all_generator.rb +38 -0
  216. data/lib/generators/faalis/install_generator.rb +42 -0
  217. data/lib/generators/faalis/install_specs_generator.rb +48 -0
  218. data/lib/generators/faalis/js_scaffold_generator.rb +273 -0
  219. data/lib/generators/faalis/templates/README +41 -0
  220. data/lib/generators/faalis/templates/SPECS +13 -0
  221. data/lib/generators/faalis/templates/angularjs/details.html.erb +20 -0
  222. data/lib/generators/faalis/templates/angularjs/index.html.erb +62 -0
  223. data/lib/generators/faalis/templates/angularjs/module.js.erb +309 -0
  224. data/lib/generators/faalis/templates/angularjs/new.html.erb +105 -0
  225. data/lib/generators/faalis/templates/api/controller.rb.erb +56 -0
  226. data/lib/generators/faalis/templates/devise.rb +251 -0
  227. data/lib/generators/faalis/templates/faalis.rb +14 -0
  228. data/lib/generators/faalis/templates/fast_gettext.rb +4 -0
  229. data/lib/generators/faalis/templates/features/api.feature +92 -0
  230. data/lib/generators/faalis/templates/features/api.step.rb +7 -0
  231. data/lib/generators/faalis/templates/features/step_definitions/email_steps.rb +206 -0
  232. data/lib/generators/faalis/templates/features/support/email_spec.rb +1 -0
  233. data/lib/generators/faalis/templates/features/support/env.rb +79 -0
  234. data/lib/generators/faalis/templates/formtastic.rb +76 -0
  235. data/lib/generators/faalis/templates/js_scaffold.README +25 -0
  236. data/lib/generators/faalis/templates/seeds.rb +1 -0
  237. data/lib/generators/faalis/templates/spec/factories/groups.rb +5 -0
  238. data/lib/generators/faalis/templates/spec/factories/users.rb +10 -0
  239. data/lib/generators/faalis/templates/spec/spec_helper.rb +69 -0
  240. data/lib/generators/faalis/templates/spec/support/devise.rb +3 -0
  241. data/lib/generators/faalis/templates/views/create.json.jbuilder.erb +2 -0
  242. data/lib/generators/faalis/templates/views/destroy.json.jbuilder.erb +1 -0
  243. data/lib/generators/faalis/templates/views/index.json.jbuilder.erb +10 -0
  244. data/lib/generators/faalis/templates/views/show.json.jbuilder.erb +7 -0
  245. data/lib/generators/faalis/templates/views/update.json.jbuilder.erb +6 -0
  246. data/lib/generators/faalis/views_generator.rb +41 -0
  247. data/lib/tasks/faalis_tasks.rake +23 -0
  248. data/lib/tasks/grunt/Gruntfile.js +25 -0
  249. data/spec/dummy/README.rdoc +28 -0
  250. data/spec/dummy/Rakefile +6 -0
  251. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  252. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  253. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  254. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  255. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  256. data/spec/dummy/bin/bundle +3 -0
  257. data/spec/dummy/bin/rails +4 -0
  258. data/spec/dummy/bin/rake +4 -0
  259. data/spec/dummy/config.ru +4 -0
  260. data/spec/dummy/config/application.rb +23 -0
  261. data/spec/dummy/config/boot.rb +5 -0
  262. data/spec/dummy/config/database.yml +25 -0
  263. data/spec/dummy/config/environment.rb +5 -0
  264. data/spec/dummy/config/environments/development.rb +29 -0
  265. data/spec/dummy/config/environments/production.rb +80 -0
  266. data/spec/dummy/config/environments/test.rb +36 -0
  267. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  268. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  269. data/spec/dummy/config/initializers/inflections.rb +16 -0
  270. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  271. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  272. data/spec/dummy/config/initializers/session_store.rb +3 -0
  273. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  274. data/spec/dummy/config/locales/en.yml +23 -0
  275. data/spec/dummy/config/routes.rb +4 -0
  276. data/spec/dummy/db/test.sqlite3 +0 -0
  277. data/spec/dummy/log/development.log +0 -0
  278. data/spec/dummy/log/test.log +15 -0
  279. data/spec/dummy/public/404.html +58 -0
  280. data/spec/dummy/public/422.html +58 -0
  281. data/spec/dummy/public/500.html +57 -0
  282. data/spec/dummy/public/favicon.ico +0 -0
  283. data/spec/dummy/tmp/ember-rails/ember-data.js +10204 -0
  284. data/spec/dummy/tmp/ember-rails/ember.js +36991 -0
  285. data/spec/spec_helper.rb +52 -0
  286. metadata +678 -0
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Enhanced Select2 Dropmenus
3
+ *
4
+ * @AJAX Mode - When in this mode, your value will be an object (or array of objects) of the data used by Select2
5
+ * This change is so that you do not have to do an additional query yourself on top of Select2's own query
6
+ * @params [options] {object} The configuration options passed to $.fn.select2(). Refer to the documentation
7
+ */
8
+ angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelect2', ['uiSelect2Config', '$timeout', function (uiSelect2Config, $timeout) {
9
+ var options = {};
10
+ if (uiSelect2Config) {
11
+ angular.extend(options, uiSelect2Config);
12
+ }
13
+ return {
14
+ require: 'ngModel',
15
+ priority: 1,
16
+ compile: function (tElm, tAttrs) {
17
+ var watch,
18
+ repeatOption,
19
+ repeatAttr,
20
+ isSelect = tElm.is('select'),
21
+ isMultiple = angular.isDefined(tAttrs.multiple);
22
+
23
+ // Enable watching of the options dataset if in use
24
+ if (tElm.is('select')) {
25
+ repeatOption = tElm.find('option[ng-repeat], option[data-ng-repeat]');
26
+
27
+ if (repeatOption.length) {
28
+ repeatAttr = repeatOption.attr('ng-repeat') || repeatOption.attr('data-ng-repeat');
29
+ watch = jQuery.trim(repeatAttr.split('|')[0]).split(' ').pop();
30
+ }
31
+ }
32
+
33
+ return function (scope, elm, attrs, controller) {
34
+ // instance-specific options
35
+ var opts = angular.extend({}, options, scope.$eval(attrs.uiSelect2));
36
+
37
+ /*
38
+ Convert from Select2 view-model to Angular view-model.
39
+ */
40
+ var convertToAngularModel = function(select2_data) {
41
+ var model;
42
+ if (opts.simple_tags) {
43
+ model = [];
44
+ angular.forEach(select2_data, function(value, index) {
45
+ model.push(value.id);
46
+ });
47
+ } else {
48
+ model = select2_data;
49
+ }
50
+ return model;
51
+ };
52
+
53
+ /*
54
+ Convert from Angular view-model to Select2 view-model.
55
+ */
56
+ var convertToSelect2Model = function(angular_data) {
57
+ var model = [];
58
+ if (!angular_data) {
59
+ return model;
60
+ }
61
+
62
+ if (opts.simple_tags) {
63
+ model = [];
64
+ angular.forEach(
65
+ angular_data,
66
+ function(value, index) {
67
+ model.push({'id': value, 'text': value});
68
+ });
69
+ } else {
70
+ model = angular_data;
71
+ }
72
+ return model;
73
+ };
74
+
75
+ if (isSelect) {
76
+ // Use <select multiple> instead
77
+ delete opts.multiple;
78
+ delete opts.initSelection;
79
+ } else if (isMultiple) {
80
+ opts.multiple = true;
81
+ }
82
+
83
+ if (controller) {
84
+ // Watch the model for programmatic changes
85
+ scope.$watch(tAttrs.ngModel, function(current, old) {
86
+ if (!current) {
87
+ return;
88
+ }
89
+ if (current === old) {
90
+ return;
91
+ }
92
+ controller.$render();
93
+ }, true);
94
+ controller.$render = function () {
95
+ if (isSelect) {
96
+ elm.select2('val', controller.$viewValue);
97
+ } else {
98
+ if (opts.multiple) {
99
+ var viewValue = controller.$viewValue;
100
+ if (angular.isString(viewValue)) {
101
+ viewValue = viewValue.split(',');
102
+ }
103
+ elm.select2(
104
+ 'data', convertToSelect2Model(viewValue));
105
+ } else {
106
+ if (angular.isObject(controller.$viewValue)) {
107
+ elm.select2('data', controller.$viewValue);
108
+ } else if (!controller.$viewValue) {
109
+ elm.select2('data', null);
110
+ } else {
111
+ elm.select2('val', controller.$viewValue);
112
+ }
113
+ }
114
+ }
115
+ };
116
+
117
+ // Watch the options dataset for changes
118
+ if (watch) {
119
+ scope.$watch(watch, function (newVal, oldVal, scope) {
120
+ if (angular.equals(newVal, oldVal)) {
121
+ return;
122
+ }
123
+ // Delayed so that the options have time to be rendered
124
+ $timeout(function () {
125
+ elm.select2('val', controller.$viewValue);
126
+ // Refresh angular to remove the superfluous option
127
+ elm.trigger('change');
128
+ if(newVal && !oldVal && controller.$setPristine) {
129
+ controller.$setPristine(true);
130
+ }
131
+ });
132
+ });
133
+ }
134
+
135
+ // Update valid and dirty statuses
136
+ controller.$parsers.push(function (value) {
137
+ var div = elm.prev();
138
+ div
139
+ .toggleClass('ng-invalid', !controller.$valid)
140
+ .toggleClass('ng-valid', controller.$valid)
141
+ .toggleClass('ng-invalid-required', !controller.$valid)
142
+ .toggleClass('ng-valid-required', controller.$valid)
143
+ .toggleClass('ng-dirty', controller.$dirty)
144
+ .toggleClass('ng-pristine', controller.$pristine);
145
+ return value;
146
+ });
147
+
148
+ if (!isSelect) {
149
+ // Set the view and model value and update the angular template manually for the ajax/multiple select2.
150
+ elm.bind("change", function (e) {
151
+ e.stopImmediatePropagation();
152
+
153
+ if (scope.$$phase || scope.$root.$$phase) {
154
+ return;
155
+ }
156
+ scope.$apply(function () {
157
+ controller.$setViewValue(
158
+ convertToAngularModel(elm.select2('data')));
159
+ });
160
+ });
161
+
162
+ if (opts.initSelection) {
163
+ var initSelection = opts.initSelection;
164
+ opts.initSelection = function (element, callback) {
165
+ initSelection(element, function (value) {
166
+ var isPristine = controller.$pristine;
167
+ controller.$setViewValue(convertToAngularModel(value));
168
+ callback(value);
169
+ if (isPristine) {
170
+ controller.$setPristine();
171
+ }
172
+ elm.prev().toggleClass('ng-pristine', controller.$pristine);
173
+ });
174
+ };
175
+ }
176
+ }
177
+ }
178
+
179
+ elm.bind("$destroy", function() {
180
+ elm.select2("destroy");
181
+ });
182
+
183
+ attrs.$observe('disabled', function (value) {
184
+ elm.select2('enable', !value);
185
+ });
186
+
187
+ attrs.$observe('readonly', function (value) {
188
+ elm.select2('readonly', !!value);
189
+ });
190
+
191
+ if (attrs.ngMultiple) {
192
+ scope.$watch(attrs.ngMultiple, function(newVal) {
193
+ attrs.$set('multiple', !!newVal);
194
+ elm.select2(opts);
195
+ });
196
+ }
197
+
198
+ // Initialize the plugin late so that the injected DOM does not disrupt the template compiler
199
+ $timeout(function () {
200
+ elm.select2(opts);
201
+
202
+ // Set initial value - I'm not sure about this but it seems to need to be there
203
+ elm.val(controller.$viewValue);
204
+ // important!
205
+ controller.$render();
206
+
207
+ // Not sure if I should just check for !isSelect OR if I should check for 'tags' key
208
+ if (!opts.initSelection && !isSelect) {
209
+ controller.$setViewValue(
210
+ convertToAngularModel(elm.select2('data'))
211
+ );
212
+ }
213
+ });
214
+ };
215
+ }
216
+ };
217
+ }]);
@@ -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", "Errors"]);
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", "catch_error", function($scope, gettext, API, catch_error){
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", "catch_error", function(API, $scope, $location, $routeParams, gettext, catch_error){
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
+ }]);