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.
- checksums.yaml +7 -0
- data/LICENSE +339 -0
- data/README.md +45 -0
- data/Rakefile +42 -0
- data/app/assets/fonts/DroidNaskh-Bold.ttf +0 -0
- data/app/assets/fonts/DroidNaskh-Regular.ttf +0 -0
- data/app/assets/fonts/OpenSans-Bold.ttf +0 -0
- data/app/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
- data/app/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Italic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Light.ttf +0 -0
- data/app/assets/fonts/OpenSans-LightItalic.ttf +0 -0
- data/app/assets/fonts/OpenSans-Regular.ttf +0 -0
- data/app/assets/fonts/OpenSans-Semibold.ttf +0 -0
- data/app/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- data/app/assets/images/faalis/select2-spinner.gif +0 -0
- data/app/assets/images/faalis/select2.png +0 -0
- data/app/assets/images/faalis/select2x2.png +0 -0
- data/app/assets/javascripts/faalis/application.js +20 -0
- data/app/assets/javascripts/faalis/dashboard/angular.js +9 -0
- data/app/assets/javascripts/faalis/dashboard/app.js +75 -0
- data/app/assets/javascripts/faalis/dashboard/application.js.erb +21 -0
- data/app/assets/javascripts/faalis/dashboard/functions.js.erb +91 -0
- data/app/assets/javascripts/faalis/dashboard/init.js +38 -0
- data/app/assets/javascripts/faalis/dashboard/lib/angular-animate.js +1226 -0
- data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +202 -0
- data/app/assets/javascripts/faalis/dashboard/lib/angular-resource.js +578 -0
- data/app/assets/javascripts/faalis/dashboard/lib/angular-route.js +880 -0
- data/app/assets/javascripts/faalis/dashboard/lib/angular.js +20031 -0
- data/app/assets/javascripts/faalis/dashboard/lib/lodash.underscore.js +4893 -0
- data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +3260 -0
- data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +297 -0
- data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +1066 -0
- data/app/assets/javascripts/faalis/dashboard/lib/select2.js +3255 -0
- data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +217 -0
- data/app/assets/javascripts/faalis/dashboard/locale/translations.js +5 -0
- data/app/assets/javascripts/faalis/dashboard/modules/anim.js +32 -0
- data/app/assets/javascripts/faalis/dashboard/modules/api.js +32 -0
- data/app/assets/javascripts/faalis/dashboard/modules/auth/auth.js +34 -0
- data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +174 -0
- data/app/assets/javascripts/faalis/dashboard/modules/auth/profile.js +59 -0
- data/app/assets/javascripts/faalis/dashboard/modules/auth/user.js +123 -0
- data/app/assets/javascripts/faalis/dashboard/modules/errors.js +47 -0
- data/app/assets/javascripts/faalis/dashboard/modules/filter.js +44 -0
- data/app/assets/javascripts/faalis/dashboard/modules/list-view.js +310 -0
- data/app/assets/javascripts/faalis/dashboard/modules/logs.js +41 -0
- data/app/assets/javascripts/faalis/dashboard/modules/modules.js +50 -0
- data/app/assets/javascripts/faalis/dashboard/modules/nav.js.erb +97 -0
- data/app/assets/javascripts/faalis/dashboard/templates/application.handlebars.erb +42 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/details.handlebars.erb +15 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/index.handlebars.erb +7 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/groups/new.handlebars.erb +39 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/index.handlebars.erb +31 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/users/details.handlebars.erb +15 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/users/index.handlebars.erb +11 -0
- data/app/assets/javascripts/faalis/dashboard/templates/auth/users/new.handlebars.erb +33 -0
- data/app/assets/javascripts/faalis/dashboard/templates/components/list-view.handlebars.erb +59 -0
- data/app/assets/javascripts/faalis/dashboard/templates/components/model-form.handlebars.erb +3 -0
- data/app/assets/javascripts/faalis/dashboard/templates/modules.handlebars.erb +15 -0
- data/app/assets/javascripts/faalis/dashboard/templates/navigation.handlebars.erb +43 -0
- data/app/assets/javascripts/faalis/dashboard/templates/widgets.handlebars +23 -0
- data/app/assets/javascripts/faalis/dashboard/variables.js.erb +17 -0
- data/app/assets/javascripts/faalis/groups.js +2 -0
- data/app/assets/javascripts/faalis/home.js +2 -0
- data/app/assets/javascripts/faalis/i18n.js +13 -0
- data/app/assets/javascripts/faalis/locale/en.json +27 -0
- data/app/assets/javascripts/faalis/locale/fa.json +27 -0
- data/app/assets/javascripts/faalis/users.js +2 -0
- data/app/assets/stylesheets/faalis/base.css.scss +264 -0
- data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +226 -0
- data/app/assets/stylesheets/faalis/dashboard/list_view.css.scss +169 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +26 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/base.css.scss.erb +28 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/buttons.css.scss.erb +48 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/direction.css.scss +38 -0
- data/app/assets/stylesheets/faalis/dashboard/ltr/foundation_and_overrides.css.scss +1014 -0
- data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +442 -0
- data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +20 -0
- data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +19 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +26 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +31 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/base.css_flymake.scss +25 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/buttons.css.scss.erb +45 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/direction.css.scss +37 -0
- data/app/assets/stylesheets/faalis/dashboard/rtl/foundation_and_overrides.css.scss +1014 -0
- data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +618 -0
- data/app/assets/stylesheets/faalis/dashboard/sidebar.css.scss +93 -0
- data/app/assets/stylesheets/faalis/devise.css.scss +34 -0
- data/app/assets/stylesheets/faalis/groups.css +4 -0
- data/app/assets/stylesheets/faalis/home.css.scss +14 -0
- data/app/assets/stylesheets/faalis/ltr/application.css +20 -0
- data/app/assets/stylesheets/faalis/ltr/buttons.css.scss.erb +48 -0
- data/app/assets/stylesheets/faalis/ltr/foundation_and_overrides.scss.erb +1012 -0
- data/app/assets/stylesheets/faalis/mixins.css.scss +15 -0
- data/app/assets/stylesheets/faalis/rtl/application.css +20 -0
- data/app/assets/stylesheets/faalis/rtl/buttons.css.scss.erb +48 -0
- data/app/assets/stylesheets/faalis/rtl/foundation_and_overrides.scss.erb +1012 -0
- data/app/assets/stylesheets/faalis/users.css +4 -0
- data/app/assets/stylesheets/faalis/variables.css.scss +102 -0
- data/app/controllers/faalis/api/v1/groups_controller.rb +75 -0
- data/app/controllers/faalis/api/v1/logs_controller.rb +12 -0
- data/app/controllers/faalis/api/v1/permissions_controller.rb +17 -0
- data/app/controllers/faalis/api/v1/profiles_controller.rb +42 -0
- data/app/controllers/faalis/api/v1/users_controller.rb +75 -0
- data/app/controllers/faalis/api_controller.rb +51 -0
- data/app/controllers/faalis/application_controller.rb +34 -0
- data/app/controllers/faalis/dashboard_controller.rb +44 -0
- data/app/controllers/faalis/home_controller.rb +19 -0
- data/app/controllers/faalis/omniauth/callbacks_controller.rb +43 -0
- data/app/helpers/faalis/application_helper.rb +4 -0
- data/app/helpers/faalis/dashboard_helper.rb +5 -0
- data/app/helpers/faalis/groups_helper.rb +4 -0
- data/app/helpers/faalis/home_helper.rb +4 -0
- data/app/helpers/faalis/users_helper.rb +4 -0
- data/app/models/ability.rb +42 -0
- data/app/models/faalis/group.rb +27 -0
- data/app/models/faalis/permission.rb +15 -0
- data/app/models/faalis/user.rb +81 -0
- data/app/views/angularjs_templates/#index.html# +8 -0
- data/app/views/angularjs_templates/auth/groups/details.html +21 -0
- data/app/views/angularjs_templates/auth/groups/index.html +5 -0
- data/app/views/angularjs_templates/auth/groups/new.html +41 -0
- data/app/views/angularjs_templates/auth/index.html +30 -0
- data/app/views/angularjs_templates/auth/profile/edit.html +54 -0
- data/app/views/angularjs_templates/auth/users/details.html +28 -0
- data/app/views/angularjs_templates/auth/users/index.html +6 -0
- data/app/views/angularjs_templates/auth/users/new.html +56 -0
- data/app/views/angularjs_templates/filter/index.html +15 -0
- data/app/views/angularjs_templates/index.html +8 -0
- data/app/views/angularjs_templates/list-view/index.html +81 -0
- data/app/views/angularjs_templates/locale/fa.po +25 -0
- data/app/views/angularjs_templates/locale/templates.pot +24 -0
- data/app/views/angularjs_templates/logs/index.html +6 -0
- data/app/views/angularjs_templates/modules.html +17 -0
- data/app/views/angularjs_templates/nav.html.erb +38 -0
- data/app/views/devise/confirmations/new.html.erb +34 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +44 -0
- data/app/views/devise/passwords/new.html.erb +32 -0
- data/app/views/devise/registrations/edit.html.erb +29 -0
- data/app/views/devise/registrations/new.html.erb +91 -0
- data/app/views/devise/sessions/new.html.erb +98 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +30 -0
- data/app/views/faalis/api/v1/groups/create.json.jbuilder +4 -0
- data/app/views/faalis/api/v1/groups/destroy.html.erb +2 -0
- data/app/views/faalis/api/v1/groups/destroy.json.jbuilder +1 -0
- data/app/views/faalis/api/v1/groups/edit.html.erb +2 -0
- data/app/views/faalis/api/v1/groups/index.html.erb +2 -0
- data/app/views/faalis/api/v1/groups/index.json.jbuilder +6 -0
- data/app/views/faalis/api/v1/groups/new.html.erb +2 -0
- data/app/views/faalis/api/v1/groups/show.html.erb +2 -0
- data/app/views/faalis/api/v1/groups/show.json.jbuilder +5 -0
- data/app/views/faalis/api/v1/groups/update.json.jbuilder +4 -0
- data/app/views/faalis/api/v1/logs/index.json.jbuilder +1 -0
- data/app/views/faalis/api/v1/permissions/index.json.jbuilder +1 -0
- data/app/views/faalis/api/v1/users/create.html.erb +2 -0
- data/app/views/faalis/api/v1/users/create.json.jbuilder +1 -0
- data/app/views/faalis/api/v1/users/destroy.json.jbuilder +1 -0
- data/app/views/faalis/api/v1/users/distroy.html.erb +2 -0
- data/app/views/faalis/api/v1/users/edit.html.erb +2 -0
- data/app/views/faalis/api/v1/users/index.html.erb +2 -0
- data/app/views/faalis/api/v1/users/index.json.jbuilder +4 -0
- data/app/views/faalis/api/v1/users/show.html.erb +2 -0
- data/app/views/faalis/api/v1/users/show.json.jbuilder +2 -0
- data/app/views/faalis/api/v1/users/update.json.jbuilder +1 -0
- data/app/views/faalis/dashboard/index.html.erb +37 -0
- data/app/views/faalis/dashboard/login_required_page.html.erb +5 -0
- data/app/views/faalis/home/index.html.erb +119 -0
- data/app/views/layouts/faalis/application.html.erb +90 -0
- data/app/views/layouts/faalis/dashboard.html.erb +21 -0
- data/config/initializers/devise.rb +28 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/locales/devise.fa.yml +56 -0
- data/config/locales/fa/LC_MESSAGES/faalis.mo +0 -0
- data/config/locales/fa/faalis.po +181 -0
- data/config/locales/fa/messages.mo +0 -0
- data/config/locales/faalis.pot +181 -0
- data/config/routes.rb +36 -0
- data/db/migrate/20131013091000_devise_create_red_base_users.rb +64 -0
- data/db/migrate/20131020124701_create_red_base_groups.rb +9 -0
- data/db/migrate/20131021170923_create_red_base_permissions.rb +10 -0
- data/db/migrate/20131123120422_add_permissions_groups_table.rb +8 -0
- data/db/seeds.rb +15 -0
- data/lib/faalis.rb +30 -0
- data/lib/faalis/active_record.rb +64 -0
- data/lib/faalis/api.rb +61 -0
- data/lib/faalis/api/groups_api.rb +41 -0
- data/lib/faalis/api/permissions_api.rb +24 -0
- data/lib/faalis/api/root.rb +15 -0
- data/lib/faalis/api/users_api.rb +20 -0
- data/lib/faalis/cucumber.rb +25 -0
- data/lib/faalis/cucumber/auth.rb +45 -0
- data/lib/faalis/cucumber/exceptions.rb +40 -0
- data/lib/faalis/cucumber/interaction.rb +43 -0
- data/lib/faalis/cucumber/query.rb +28 -0
- data/lib/faalis/cucumber/urls.rb +76 -0
- data/lib/faalis/dashboard.rb +60 -0
- data/lib/faalis/dashboard/controller.rb +42 -0
- data/lib/faalis/dashboard/module.rb +45 -0
- data/lib/faalis/engine.rb +128 -0
- data/lib/faalis/exceptions.rb +26 -0
- data/lib/faalis/i18n.rb +35 -0
- data/lib/faalis/initialize.rb +7 -0
- data/lib/faalis/omniauth.rb +24 -0
- data/lib/faalis/omniauth/callbacks.rb +58 -0
- data/lib/faalis/plugins.rb +44 -0
- data/lib/faalis/version.rb +22 -0
- data/lib/faalis_plugin.rb +476 -0
- data/lib/generators/faalis/USAGE +8 -0
- data/lib/generators/faalis/angularjs_resource_generator.rb +74 -0
- data/lib/generators/faalis/install_all_generator.rb +38 -0
- data/lib/generators/faalis/install_generator.rb +42 -0
- data/lib/generators/faalis/install_specs_generator.rb +48 -0
- data/lib/generators/faalis/js_scaffold_generator.rb +273 -0
- data/lib/generators/faalis/templates/README +41 -0
- data/lib/generators/faalis/templates/SPECS +13 -0
- data/lib/generators/faalis/templates/angularjs/details.html.erb +20 -0
- data/lib/generators/faalis/templates/angularjs/index.html.erb +62 -0
- data/lib/generators/faalis/templates/angularjs/module.js.erb +309 -0
- data/lib/generators/faalis/templates/angularjs/new.html.erb +105 -0
- data/lib/generators/faalis/templates/api/controller.rb.erb +56 -0
- data/lib/generators/faalis/templates/devise.rb +251 -0
- data/lib/generators/faalis/templates/faalis.rb +14 -0
- data/lib/generators/faalis/templates/fast_gettext.rb +4 -0
- data/lib/generators/faalis/templates/features/api.feature +92 -0
- data/lib/generators/faalis/templates/features/api.step.rb +7 -0
- data/lib/generators/faalis/templates/features/step_definitions/email_steps.rb +206 -0
- data/lib/generators/faalis/templates/features/support/email_spec.rb +1 -0
- data/lib/generators/faalis/templates/features/support/env.rb +79 -0
- data/lib/generators/faalis/templates/formtastic.rb +76 -0
- data/lib/generators/faalis/templates/js_scaffold.README +25 -0
- data/lib/generators/faalis/templates/seeds.rb +1 -0
- data/lib/generators/faalis/templates/spec/factories/groups.rb +5 -0
- data/lib/generators/faalis/templates/spec/factories/users.rb +10 -0
- data/lib/generators/faalis/templates/spec/spec_helper.rb +69 -0
- data/lib/generators/faalis/templates/spec/support/devise.rb +3 -0
- data/lib/generators/faalis/templates/views/create.json.jbuilder.erb +2 -0
- data/lib/generators/faalis/templates/views/destroy.json.jbuilder.erb +1 -0
- data/lib/generators/faalis/templates/views/index.json.jbuilder.erb +10 -0
- data/lib/generators/faalis/templates/views/show.json.jbuilder.erb +7 -0
- data/lib/generators/faalis/templates/views/update.json.jbuilder.erb +6 -0
- data/lib/generators/faalis/views_generator.rb +41 -0
- data/lib/tasks/faalis_tasks.rake +23 -0
- data/lib/tasks/grunt/Gruntfile.js +25 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +23 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +15 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/ember-rails/ember-data.js +10204 -0
- data/spec/dummy/tmp/ember-rails/ember.js +36991 -0
- data/spec/spec_helper.rb +52 -0
- 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
|
+
}]);
|