faalis 0.26.3 → 1.0.0.alpha0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +35 -6
  3. data/Rakefile +2 -25
  4. data/app/assets/javascripts/faalis/angular-manifest.js +8 -2
  5. data/app/assets/javascripts/faalis/application.js +0 -3
  6. data/app/assets/javascripts/faalis/dashboard/application.js.erb +0 -5
  7. data/app/assets/javascripts/faalis/dashboard/functions.js.erb +9 -0
  8. data/app/assets/javascripts/faalis/dashboard/init.js +1 -1
  9. data/app/assets/javascripts/faalis/dashboard/modules/auth/group.js +0 -6
  10. data/app/assets/javascripts/faalis/dashboard/modules/fields/fields.js +1 -1
  11. data/app/assets/javascripts/faalis/dashboard/modules/fields/image.js +115 -0
  12. data/app/assets/javascripts/faalis/dashboard/modules/fields/tag.js +76 -0
  13. data/app/assets/javascripts/faalis/dashboard/variables.js.erb +1 -1
  14. data/app/assets/locale/templates.pot +282 -0
  15. data/app/assets/stylesheets/faalis/dashboard/dashboard.css.scss +4 -0
  16. data/app/assets/stylesheets/faalis/dashboard/ltr/application.css +4 -4
  17. data/app/assets/stylesheets/faalis/dashboard/rtl/application.css +4 -4
  18. data/app/assets/stylesheets/faalis/dashboard/rtl/base.css.scss.erb +2 -2
  19. data/app/controllers/faalis/api/v1/permissions_controller.rb +8 -39
  20. data/app/controllers/faalis/api/v1/users_controller.rb +7 -7
  21. data/app/models/ability.rb +4 -6
  22. data/app/models/faalis/concerns/assignment.rb +2 -2
  23. data/app/models/faalis/group.rb +18 -4
  24. data/app/models/faalis/permission.rb +11 -2
  25. data/app/models/faalis/permissions/auth.rb +3 -2
  26. data/app/models/faalis/user.rb +27 -73
  27. data/app/models/faalis/user/auth_definitions.rb +94 -0
  28. data/app/models/faalis/user/mongoid_fields.rb +76 -0
  29. data/app/models/faalis/user/permission.rb +21 -0
  30. data/app/views/angularjs_templates/auth/groups/new.html +0 -20
  31. data/app/views/angularjs_templates/fields/image/image.html +1 -0
  32. data/app/views/angularjs_templates/fields/relation/relation.html +3 -1
  33. data/app/views/angularjs_templates/fields/tag/tag.html +1 -0
  34. data/app/views/angularjs_templates/nav.html.erb +0 -1
  35. data/app/views/faalis/api/v1/users/index.json.jbuilder +1 -1
  36. data/app/views/layouts/faalis/application.html.erb +2 -0
  37. data/app/views/layouts/faalis/dashboard.html.erb +1 -0
  38. data/app/views/layouts/faalis/simple.html.erb +1 -0
  39. data/config/initializers/devise.rb +0 -7
  40. data/db/migrate/20131013091000_devise_create_faalis_users.rb +3 -2
  41. data/db/migrate/20140613120923_add_users_groups_table.rb +8 -0
  42. data/db/migrate/20140617124019_faalis_groups_users.rb +4 -0
  43. data/db/seeds.rb +39 -11
  44. data/lib/faalis.rb +5 -4
  45. data/lib/faalis/concerns.rb +7 -0
  46. data/lib/faalis/concerns/authorizable.rb +76 -0
  47. data/lib/faalis/discovery.rb +8 -0
  48. data/lib/faalis/discovery/permissions.rb +51 -0
  49. data/lib/faalis/engine.rb +19 -5
  50. data/lib/faalis/extensions.rb +18 -0
  51. data/lib/faalis/extensions/base.rb +29 -0
  52. data/lib/faalis/fake_assets.rb +7 -0
  53. data/lib/faalis/generators/dashboard_scaffold.rb +23 -5
  54. data/lib/faalis/omniauth.rb +3 -0
  55. data/lib/faalis/orm.rb +29 -0
  56. data/lib/faalis/{active_record.rb → patches/models.rb} +1 -3
  57. data/lib/faalis/version.rb +1 -1
  58. data/lib/generators/faalis/install_generator.rb +7 -3
  59. data/lib/{faalis/plugins.rb → generators/faalis/js/install_i18n_generator.rb} +20 -17
  60. data/lib/generators/faalis/scaffold_generator.rb +139 -0
  61. data/lib/generators/faalis/templates/application.js +1 -1
  62. data/lib/generators/faalis/templates/i18n/Gruntfile.js.erb +30 -0
  63. data/lib/generators/faalis/templates/i18n/README +13 -0
  64. data/lib/generators/faalis/templates/i18n/fa.js +3 -0
  65. data/lib/generators/faalis/templates/js/list_view/README +1 -1
  66. data/lib/tasks/faalis_tasks.rake +26 -20
  67. data/lib/tasks/grunt/Gruntfile.js +7 -2
  68. data/spec/dummy/config/initializers/faalis.rb +40 -0
  69. metadata +134 -44
  70. data/app/assets/javascripts/faalis/dashboard/lib/angular-gettext.js +0 -202
  71. data/app/assets/javascripts/faalis/dashboard/lib/ng-grid.js +0 -3260
  72. data/app/assets/javascripts/faalis/dashboard/lib/ng-quick-date.js +0 -297
  73. data/app/assets/javascripts/faalis/dashboard/lib/restangular.js +0 -1066
  74. data/app/assets/javascripts/faalis/dashboard/lib/select2.js +0 -3255
  75. data/app/assets/javascripts/faalis/dashboard/lib/ui.select2.js +0 -217
  76. data/app/assets/stylesheets/faalis/dashboard/ng-grid.css.scss +0 -442
  77. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date-default-theme.css.scss +0 -20
  78. data/app/assets/stylesheets/faalis/dashboard/ng-quick-date.css.scss +0 -19
  79. data/app/assets/stylesheets/faalis/dashboard/select2.css.scss.erb +0 -618
  80. data/app/controllers/faalis/api/v1/#conversations_controller.rb# +0 -120
  81. data/app/models/faalis/workflow.rb +0 -4
  82. data/db/migrate/20140413180202_create_faalis_workflows.rb +0 -9
  83. data/lib/faalis/permissions.rb +0 -72
  84. data/lib/faalis/workflows.rb +0 -7
  85. data/lib/faalis/workflows/base.rb +0 -70
  86. data/lib/faalis/workflows/discovery.rb +0 -42
  87. data/lib/generators/faalis/js_scaffold_generator.rb +0 -113
@@ -1,217 +0,0 @@
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
- }]);
@@ -1,442 +0,0 @@
1
- @import "faalis/variables";
2
-
3
- .ngGrid {
4
- background-color: white;
5
- }
6
- .ngGrid input[type="checkbox"] {
7
- margin: 0;
8
- padding: 0;
9
- }
10
- .ngGrid input {
11
- vertical-align: top;
12
- }
13
- .ngGrid.unselectable {
14
- -moz-user-select: none;
15
- -khtml-user-select: none;
16
- -webkit-user-select: none;
17
- -o-user-select: none;
18
- user-select: none;
19
- }
20
- .ngViewport {
21
- overflow: auto;
22
- min-height: 20px;
23
- }
24
- .ngViewport:focus {
25
- outline: none;
26
- }
27
- .ngCanvas {
28
- position: relative;
29
- }
30
- .ngVerticalBar {
31
- position: absolute;
32
- right: 0;
33
- width: 0;
34
- }
35
- .ngVerticalBarVisible {
36
- width: 1px;
37
- background-color: $lightergray;
38
- }
39
- .ngHeaderContainer {
40
- position: relative;
41
- overflow: hidden;
42
- font-weight: bold;
43
- background-color: inherit;
44
- }
45
- .ngHeaderCell {
46
- position: absolute;
47
- top: 0;
48
- bottom: 0;
49
- background-color: inherit;
50
- }
51
- .ngHeaderCell.pinned {
52
- z-index: 1;
53
- }
54
- .ngHeaderSortColumn {
55
- position: absolute;
56
- overflow: hidden;
57
- }
58
- .ngTopPanel {
59
- position: relative;
60
- z-index: 1;
61
- background-color: $lightergray;
62
- color: $darkgray;
63
- border-bottom: 1px solid $lightgray;
64
- }
65
- .ngSortButtonDown {
66
- position: absolute;
67
- top: 3px;
68
- left: 0;
69
- right: 0;
70
- margin-left: auto;
71
- margin-right: auto;
72
- border-color: gray transparent;
73
- border-style: solid;
74
- border-width: 0 5px 5px 5px;
75
- height: 0;
76
- width: 0;
77
- }
78
- .ngNoSort {
79
- cursor: default;
80
- }
81
- .ngHeaderButton {
82
- position: absolute;
83
- right: 2px;
84
- top: 8px;
85
- -moz-border-radius: 50%;
86
- -webkit-border-radius: 50%;
87
- border-radius: 50%;
88
- width: 14px;
89
- height: 14px;
90
- z-index: 1;
91
- background-color: #9fbbb4;
92
- cursor: pointer;
93
- }
94
- .ngSortButtonUp {
95
- position: absolute;
96
- top: 3px;
97
- left: 0;
98
- right: 0;
99
- margin-left: auto;
100
- margin-right: auto;
101
- border-color: gray transparent;
102
- border-style: solid;
103
- border-width: 5px 5px 0 5px;
104
- height: 0;
105
- width: 0;
106
- }
107
- .ngHeaderScroller {
108
- position: absolute;
109
- background-color: inherit;
110
- }
111
- .ngSortPriority {
112
- position: absolute;
113
- top: -5px;
114
- left: 1px;
115
- font-size: 6pt;
116
- font-weight: bold;
117
- }
118
- .ngHeaderGrip {
119
- cursor: col-resize;
120
- width: 10px;
121
- right: -5px;
122
- top: 0;
123
- height: 100%;
124
- position: absolute;
125
- background-color: transparent;
126
- }
127
- .ngHeaderText {
128
- padding: 5px;
129
- -moz-box-sizing: border-box;
130
- -webkit-box-sizing: border-box;
131
- box-sizing: border-box;
132
- white-space: nowrap;
133
- -ms-text-overflow: ellipsis;
134
- -o-text-overflow: ellipsis;
135
- text-overflow: ellipsis;
136
- overflow: hidden;
137
- }
138
- .ngHeaderButtonArrow {
139
- position: absolute;
140
- top: 4px;
141
- left: 3px;
142
- width: 0;
143
- height: 0;
144
- border-style: solid;
145
- border-width: 6.5px 4.5px 0 4.5px;
146
- border-color: #4d4d4d transparent transparent transparent;
147
- }
148
- .ngPinnedIcon {
149
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAmElEQVQoU33PQapBURjA8UtkwJuaWYGSgfQWYBMvczPmTCzAAGVuaA228BZhRCkDGSmE31FucuRfvzq3vr5zT/JSjSU7DsypEPXDkDVn2hSIytJhw4kWGaLCxgHh2gt/RBuLzNhz5caWPjnSqqw4EraFfwznf8qklWjwy4IRTerkiQoPGtPl40OehcEJvcfXl8LglLfBJLkDcMgbgHlHhK8AAAAASUVORK5CYII=);
150
- background-repeat: no-repeat;
151
- position: absolute;
152
- right: 5px;
153
- top: 5px;
154
- height: 10px;
155
- width: 10px;
156
- }
157
- .ngUnPinnedIcon {
158
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTAw9HKhAAAAlElEQVQoU33PPQrCQBRF4fFnI2KfZVi5ARvdgo1l6mwmkCJVOgluwd5OwUoDtnoOxAei8cLXTN7cvEl/skCNDCMPfsUPO5zQwOHIDEvYtMURHe6wOVLgigvOePRyeDkyR4ln7wZ//7XfFBu8B23+aDJjrHGAwza7hjtHJvDmHg7b7Bru7AMjK7Rw2ObBVHDY5oGk9AKQNB2zy8MBTgAAAABJRU5ErkJggg==);
159
- background-repeat: no-repeat;
160
- position: absolute;
161
- height: 10px;
162
- width: 10px;
163
- right: 5px;
164
- top: 5px;
165
- }
166
- .ngColMenu {
167
- right: 2px;
168
- padding: 5px;
169
- top: 25px;
170
- -moz-border-radius: 3px;
171
- -webkit-border-radius: 3px;
172
- border-radius: 3px;
173
- background-color: #bdd0cb;
174
- position: absolute;
175
- border: 2px solid #d4d4d4;
176
- z-index: 1;
177
- }
178
- .ngColListCheckbox {
179
- position: relative;
180
- right: 3px;
181
- top: 4px;
182
- }
183
- .ngColList {
184
- list-style-type: none;
185
- }
186
- .ngColListItem {
187
- position: relative;
188
- right: 17px;
189
- top: 2px;
190
- white-space: nowrap;
191
- }
192
- .ngMenuText {
193
- position: relative;
194
- top: 2px;
195
- left: 2px;
196
- }
197
- .ngGroupPanel {
198
- background-color: #eaeaea;
199
- overflow: hidden;
200
- border-bottom: 1px solid #d4d4d4;
201
- }
202
- .ngGroupPanelDescription {
203
- margin-top: 5px;
204
- margin-left: 5px;
205
- }
206
- .ngGroupList {
207
- list-style-type: none;
208
- margin: 0;
209
- padding: 0;
210
- }
211
- .ngAggHeader {
212
- position: absolute;
213
- border: none;
214
- }
215
- .ngGroupElement {
216
- float: left;
217
- height: 100%;
218
- width: 100%;
219
- }
220
- .ngGroupIcon {
221
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAEFJREFUKFNjoAhISkr+h2J5JDZODNXGwGBsbPwfhIGAA8bGh6HaGBiAGhxAGJmND4M1gQCSM0adCsVQbcPcqQwMALWDGyDvWPefAAAAAElFTkSuQmCC);
222
- background-repeat: no-repeat;
223
- height: 15px;
224
- width: 15px;
225
- position: absolute;
226
- right: -2px;
227
- top: 2px;
228
- }
229
- .ngGroupedByIcon {
230
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAANCAYAAACZ3F9/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAElJREFUKFNjoAhISkr+R8LyaHwMDNXGwGBsbPwfhoGAA5mPDUO1oWpE52PDYE0gALTFAYbR+dgwWBMIoPlh1I9ADNU2NPzIwAAAFQYI9E4OLvEAAAAASUVORK5CYII=);
231
- background-repeat: no-repeat;
232
- height: 15px;
233
- width: 15px;
234
- position: absolute;
235
- right: -2px;
236
- top: 2px;
237
- }
238
- .ngGroupName {
239
- background-color: #fdfdfd;
240
- border: 1px solid #d4d4d4;
241
- padding: 3px 10px;
242
- float: left;
243
- margin-left: 0;
244
- margin-top: 2px;
245
- -moz-border-radius: 3px;
246
- -webkit-border-radius: 3px;
247
- border-radius: 3px;
248
- font-weight: bold;
249
- }
250
- .ngGroupArrow {
251
- width: 0;
252
- height: 0;
253
- border-top: 6px solid transparent;
254
- border-bottom: 6px solid transparent;
255
- border-left: 6px solid black;
256
- margin-top: 10px;
257
- margin-left: 5px;
258
- margin-right: 5px;
259
- float: right;
260
- }
261
- .ngGroupingNumber {
262
- position: absolute;
263
- right: -10px;
264
- top: -2px;
265
- }
266
- .ngAggArrowCollapsed {
267
- position: absolute;
268
- left: 8px;
269
- bottom: 10px;
270
- width: 0;
271
- height: 0;
272
- border-style: solid;
273
- border-width: 5px 0 5px 8.7px;
274
- border-color: transparent transparent transparent #000000;
275
- }
276
- .ngGroupItem {
277
- float: left;
278
- }
279
- .ngGroupItem:first-child {
280
- margin-left: 2px;
281
- }
282
- .ngRemoveGroup {
283
- width: 5px;
284
- -moz-opacity: 0.4;
285
- opacity: 0.4;
286
- margin-top: -1px;
287
- margin-left: 5px;
288
- }
289
- .ngRemoveGroup:hover {
290
- color: black;
291
- text-decoration: none;
292
- cursor: pointer;
293
- -moz-opacity: 0.7;
294
- opacity: 0.7;
295
- }
296
- .ngAggArrowExpanded {
297
- position: absolute;
298
- left: 8px;
299
- bottom: 10px;
300
- width: 0;
301
- height: 0;
302
- border-style: solid;
303
- border-width: 0 0 9px 9px;
304
- border-color: transparent transparent #000000 transparent;
305
- }
306
- .ngAggregate {
307
- position: absolute;
308
- background-color: #c9dde1;
309
- border-bottom: 1px solid beige;
310
- overflow: hidden;
311
- top: 0;
312
- bottom: 0;
313
- right: -1px;
314
- left: 0;
315
- }
316
- .ngAggregateText {
317
- position: absolute;
318
- left: 27px;
319
- top: 5px;
320
- line-height: 20px;
321
- white-space: nowrap;
322
- }
323
- .ngRow {
324
- position: absolute;
325
- border-bottom: 1px solid #d4d4d4;
326
- }
327
- .ngRow.odd {
328
- background-color: #f0f0f0;
329
- }
330
- .ngRow.even {
331
- background-color: #fafafa;
332
- }
333
- .ngRow.selected {
334
- background-color: $selected-bg;
335
- }
336
- .ngCell {
337
- overflow: hidden;
338
- position: absolute;
339
- top: 0;
340
- bottom: 0;
341
- background-color: inherit;
342
- }
343
- .ngCell.pinned {
344
- z-index: 1;
345
- }
346
- .ngCellText {
347
- padding: 5px;
348
- -moz-box-sizing: border-box;
349
- -webkit-box-sizing: border-box;
350
- box-sizing: border-box;
351
- white-space: nowrap;
352
- -ms-text-overflow: ellipsis;
353
- -o-text-overflow: ellipsis;
354
- text-overflow: ellipsis;
355
- overflow: hidden;
356
- }
357
- .ngSelectionCell {
358
- margin-top: 9px;
359
- margin-left: 6px;
360
- }
361
- .ngSelectionHeader {
362
- position: absolute;
363
- top: 11px;
364
- left: 6px;
365
- }
366
- .ngCellElement:focus {
367
- outline: 0;
368
- background-color: #b3c4c7;
369
- }
370
- .ngRow.canSelect {
371
- cursor: pointer;
372
- }
373
- .ngSelectionCheckbox {
374
- margin-top: 9px;
375
- margin-left: 6px;
376
- }
377
- .ngFooterPanel {
378
- background-color: #eaeaea;
379
- padding: 0;
380
- border-top: 1px solid #d4d4d4;
381
- position: relative;
382
- }
383
- .nglabel {
384
- display: block;
385
- float: left;
386
- font-weight: bold;
387
- padding-right: 5px;
388
- }
389
- .ngTotalSelectContainer {
390
- float: left;
391
- margin: 5px;
392
- margin-top: 7px;
393
- }
394
- .ngFooterSelectedItems {
395
- padding: 2px;
396
- }
397
- .ngFooterTotalItems.ngnoMultiSelect {
398
- padding: 0 !important;
399
- }
400
- .ngPagerFirstBar {
401
- width: 10px;
402
- border-left: 2px solid #4d4d4d;
403
- margin-top: -6px;
404
- height: 12px;
405
- margin-left: -3px;
406
- }
407
- .ngPagerButton {
408
- height: 25px;
409
- min-width: 26px;
410
- }
411
- .ngPagerFirstTriangle {
412
- width: 0;
413
- height: 0;
414
- border-style: solid;
415
- border-width: 5px 8.7px 5px 0;
416
- border-color: transparent #4d4d4d transparent transparent;
417
- margin-left: 2px;
418
- }
419
- .ngPagerNextTriangle {
420
- margin-left: 1px;
421
- }
422
- .ngPagerPrevTriangle {
423
- margin-left: 0;
424
- }
425
- .ngPagerLastTriangle {
426
- width: 0;
427
- height: 0;
428
- border-style: solid;
429
- border-width: 5px 0 5px 8.7px;
430
- border-color: transparent transparent transparent #4d4d4d;
431
- margin-left: -1px;
432
- }
433
- .ngPagerLastBar {
434
- width: 10px;
435
- border-left: 2px solid #4d4d4d;
436
- margin-top: -6px;
437
- height: 12px;
438
- margin-left: 1px;
439
- }
440
- .ngFooterTotalItems {
441
- padding: 2px;
442
- }