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,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
+ }]);