dashstrap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.yardopts +1 -0
  4. data/Gemfile +8 -0
  5. data/LICENSE +339 -0
  6. data/README.md +40 -0
  7. data/Rakefile +13 -0
  8. data/TODO.org +3 -0
  9. data/app/assets/fonts/BYekan.eot +0 -0
  10. data/app/assets/fonts/BYekan.ttf +0 -0
  11. data/app/assets/fonts/BYekan.woff +0 -0
  12. data/app/assets/javascripts/dashstrap/application.js +2 -0
  13. data/app/assets/javascripts/dashstrap/functions.js +27 -0
  14. data/app/assets/javascripts/dashstrap/locales/translations.fa.js +5 -0
  15. data/app/assets/javascripts/dashstrap/modules/init.js +1 -0
  16. data/app/assets/javascripts/dashstrap/modules/list-view.js +376 -0
  17. data/app/assets/javascripts/dashstrap/modules/modules.js +79 -0
  18. data/app/assets/javascripts/dashstrap/modules/navigation.js +24 -0
  19. data/app/assets/javascripts/locales/translations.fa.js +5 -0
  20. data/app/assets/locales/templates.pot +92 -0
  21. data/app/assets/locales/translate.fa.pot +93 -0
  22. data/app/assets/stylesheets/dashstrap/ltr/application.css +17 -0
  23. data/app/assets/stylesheets/dashstrap/ltr/ltr.scss +15 -0
  24. data/app/assets/stylesheets/dashstrap/main.css.scss +63 -0
  25. data/app/assets/stylesheets/dashstrap/rtl/#application.css# +4 -0
  26. data/app/assets/stylesheets/dashstrap/rtl/application.css +18 -0
  27. data/app/assets/stylesheets/dashstrap/rtl/rtl.scss +38 -0
  28. data/app/assets/stylesheets/dashstrap/share.scss +7 -0
  29. data/app/assets/stylesheets/faalis/ltr/application.css +0 -0
  30. data/app/assets/stylesheets/faalis/rtl/application.css +0 -0
  31. data/app/assets/stylesheets/simple/ltr/application.css +4 -0
  32. data/app/assets/stylesheets/simple/rtl/application.css +5 -0
  33. data/app/assets/stylesheets/simple/rtl/rtl.scss +16 -0
  34. data/app/assets/stylesheets/simple/share.scss +11 -0
  35. data/app/views/angular/auth/groups/details.html +21 -0
  36. data/app/views/angular/auth/groups/index.html.slim +2 -0
  37. data/app/views/angular/auth/groups/new.html.slim +44 -0
  38. data/app/views/angular/auth/index.html +30 -0
  39. data/app/views/angular/auth/profile/edit.html +54 -0
  40. data/app/views/angular/auth/users/details.html +28 -0
  41. data/app/views/angular/auth/users/index.html +6 -0
  42. data/app/views/angular/auth/users/new.html +57 -0
  43. data/app/views/angular/fields/accordion/accordion-group.html +10 -0
  44. data/app/views/angular/fields/accordion/accordion.html +1 -0
  45. data/app/views/angular/fields/alert/alert.html +7 -0
  46. data/app/views/angular/fields/boolean/boolean.html +4 -0
  47. data/app/views/angular/fields/carousel/carousel.html +8 -0
  48. data/app/views/angular/fields/carousel/slide.html +7 -0
  49. data/app/views/angular/fields/control-combo/control-list.html +19 -0
  50. data/app/views/angular/fields/datepicker/datepicker.html +5 -0
  51. data/app/views/angular/fields/datepicker/day.html +21 -0
  52. data/app/views/angular/fields/datepicker/month.html +16 -0
  53. data/app/views/angular/fields/datepicker/popup.html +10 -0
  54. data/app/views/angular/fields/datepicker/year.html +16 -0
  55. data/app/views/angular/fields/datetime/datetime.html +10 -0
  56. data/app/views/angular/fields/datetime/time.html +25 -0
  57. data/app/views/angular/fields/float/float.html +4 -0
  58. data/app/views/angular/fields/image/image.html +1 -0
  59. data/app/views/angular/fields/integer/integer.html +4 -0
  60. data/app/views/angular/fields/modal/backdrop.html +4 -0
  61. data/app/views/angular/fields/modal/window.html +3 -0
  62. data/app/views/angular/fields/pagination/pager.html +4 -0
  63. data/app/views/angular/fields/pagination/pagination.html +7 -0
  64. data/app/views/angular/fields/popover/popover.html +8 -0
  65. data/app/views/angular/fields/progressbar/bar.html +1 -0
  66. data/app/views/angular/fields/progressbar/progress.html +1 -0
  67. data/app/views/angular/fields/progressbar/progressbar.html +3 -0
  68. data/app/views/angular/fields/rating/rating.html +5 -0
  69. data/app/views/angular/fields/relation/relation.html +43 -0
  70. data/app/views/angular/fields/string/string.html +22 -0
  71. data/app/views/angular/fields/tabs/tab.html +3 -0
  72. data/app/views/angular/fields/tabs/tabset.html +10 -0
  73. data/app/views/angular/fields/tag/tag.html +3 -0
  74. data/app/views/angular/fields/text/text.html +4 -0
  75. data/app/views/angular/fields/timepicker/timepicker.html +26 -0
  76. data/app/views/angular/fields/tooltip/tooltip-html-unsafe-popup.html +4 -0
  77. data/app/views/angular/fields/tooltip/tooltip-popup.html +4 -0
  78. data/app/views/angular/fields/typeahead/typeahead-match.html +1 -0
  79. data/app/views/angular/fields/typeahead/typeahead-popup.html +5 -0
  80. data/app/views/angular/index.html +448 -0
  81. data/app/views/angular/list-view/index.html +161 -0
  82. data/app/views/angular/modules.html +46 -0
  83. data/app/views/angular/nav.html.erb +273 -0
  84. data/app/views/dashstrap/.keep +0 -0
  85. data/app/views/devise/registrations/edit.html.erb +29 -0
  86. data/app/views/devise/registrations/new.html.erb +36 -0
  87. data/app/views/devise/sessions/new.html.erb +33 -0
  88. data/app/views/devise/shared/_links.erb +19 -0
  89. data/app/views/devise/shared/_omni_link.erb +15 -0
  90. data/app/views/faalis/dashboard/index.html.erb +44 -0
  91. data/app/views/faalis/dashboard/login_required_page.html.erb +5 -0
  92. data/app/views/layouts/dashstrap/.keep +0 -0
  93. data/app/views/layouts/faalis/application.html.erb +83 -0
  94. data/app/views/layouts/faalis/dashboard.html.erb +26 -0
  95. data/app/views/layouts/faalis/simple.html.erb +22 -0
  96. data/dashstrap.gemspec +39 -0
  97. data/lib/dashstrap/engine.rb +29 -0
  98. data/lib/dashstrap/version.rb +3 -0
  99. data/lib/dashstrap.rb +4 -0
  100. data/lib/generators/dashstrap/install_generator.rb +14 -0
  101. data/lib/generators/templates/js/list_view/README +31 -0
  102. data/lib/generators/templates/js/list_view/details.html.erb +25 -0
  103. data/lib/generators/templates/js/list_view/index.html.erb +89 -0
  104. data/lib/generators/templates/js/list_view/module.js.erb +10 -0
  105. data/lib/generators/templates/js/list_view/new.html.erb +81 -0
  106. data/lib/generators/templates/js/list_view/partials/add_controller.js.erb +103 -0
  107. data/lib/generators/templates/js/list_view/partials/config.js.erb +20 -0
  108. data/lib/generators/templates/js/list_view/partials/index_controller.js.erb +199 -0
  109. data/lib/generators/templates/js/list_view/partials/menu.js.erb +6 -0
  110. data/lib/generators/templates/stylesheets/application.css +13 -0
  111. data/lib/generators/templates/stylesheets/dashboard/ltr/application.css +1 -0
  112. data/lib/generators/templates/stylesheets/dashboard/rtl/application.css +1 -0
  113. data/lib/generators/templates/stylesheets/ltr/application.css +6 -0
  114. data/lib/generators/templates/stylesheets/rtl/application.css +4 -0
  115. data/lib/tasks/.keep +0 -0
  116. data/lib/tasks/build.rake +15 -0
  117. data/lib/tasks/grunt/Gruntfile.js +30 -0
  118. data/vendor/assets/fonts/FontAwesome.otf +0 -0
  119. data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
  120. data/vendor/assets/fonts/fontawesome-webfont.svg +414 -0
  121. data/vendor/assets/fonts/fontawesome-webfont.ttf +0 -0
  122. data/vendor/assets/fonts/fontawesome-webfont.woff +0 -0
  123. data/vendor/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  124. data/vendor/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  125. data/vendor/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  126. data/vendor/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  127. data/vendor/assets/fonts/ionicons.eot +0 -0
  128. data/vendor/assets/fonts/ionicons.svg +1623 -0
  129. data/vendor/assets/fonts/ionicons.ttf +0 -0
  130. data/vendor/assets/fonts/ionicons.woff +0 -0
  131. data/vendor/assets/javascripts/.keep +0 -0
  132. data/vendor/assets/javascripts/AdminLTE/app.js +1037 -0
  133. data/vendor/assets/javascripts/AdminLTE/dashboard.js +254 -0
  134. data/vendor/assets/javascripts/bootstrap.js +2114 -0
  135. data/vendor/assets/javascripts/ui-bootstrap.js +3799 -0
  136. data/vendor/assets/stylesheets/.keep +0 -0
  137. data/vendor/assets/stylesheets/AdminLTE.css +3024 -0
  138. data/vendor/assets/stylesheets/bootstrap.css +7118 -0
  139. data/vendor/assets/stylesheets/rtl/AdminLTE.css +3032 -0
  140. data/vendor/assets/stylesheets/rtl/bootstrap-rtl.css +442 -0
  141. data/vendor/assets/stylesheets/rtl/bootstrap.css +6239 -0
  142. metadata +366 -0
@@ -0,0 +1,376 @@
1
+ var ListView = angular.module("ListView", ['ngGrid', 'Permissions']);
2
+
3
+ /*
4
+ * <element object-action></element> directive defination
5
+ */
6
+ ListView.directive("objectAction", function(){
7
+
8
+ function link(scope, element, attrs){
9
+
10
+ var object = scope.object;
11
+ var action = scope.action;
12
+
13
+ if ("route" in object){
14
+ element.attr("href", object.route);
15
+ }
16
+ else if ("action" in object) {
17
+ element.on("click", object.action);
18
+ }
19
+ }
20
+
21
+ // Actual object
22
+ return {
23
+ restrict: "A",
24
+ scope: {
25
+ object: "="
26
+ },
27
+ link: link
28
+ };
29
+
30
+ });
31
+
32
+
33
+ /*
34
+ * <list-view></list-view> directive defination
35
+ */
36
+
37
+ ListView.directive('listView', ["$filter", "gettext", "UserPermissions", function($filter, gettext, User) {
38
+
39
+ function link(scope, element, attrs){
40
+ var ltr = is_ltr();
41
+ var _item_per_page = parseInt(scope.item_per_page, 10) || 10;
42
+ var _current_page = 1;
43
+
44
+ scope.list_view = true;
45
+ scope.grid_view = false;
46
+
47
+ var use_permissions;
48
+
49
+ if (scope.use_permissions === undefined) {
50
+ use_permissions = true;
51
+ }
52
+ else {
53
+ use_permissions = false;
54
+ }
55
+
56
+
57
+ scope.get_attr = function(object, attr_name, default_value) {
58
+ if (typeof(object[attr_name]) == "function") {
59
+ return object[attr_name]();
60
+ }
61
+ else if (object[attr_name] !== undefined) {
62
+ return object[attr_name] || default_value;
63
+ }
64
+ else {
65
+ var value = scope.title(object);
66
+ if ( value == false) {
67
+ throw "No attribute '" + attr_name + "' found for '" + object.toString() + "'";
68
+ }
69
+ return value;
70
+ }
71
+ };
72
+
73
+ scope.title = function(object, t) {
74
+ console.log(scope.title_attr);
75
+ if (typeof(scope.title_attr) == "function") {
76
+ return scope.title_attr(object);
77
+ }
78
+
79
+ if (object[scope.title_attr] !== undefined) {
80
+ return object[scope.title_attr];
81
+ }
82
+ else {
83
+ return false;
84
+ }
85
+ };
86
+
87
+ var filtered_objects = function(){
88
+ var filterby = {};
89
+
90
+ if (typeof(scope.title_attr) == "function") {
91
+ filterby = scope.title_attr;
92
+ }
93
+ else {
94
+ filterby[scope.title_attr] = scope.searchterm;
95
+ }
96
+ var result = $filter('filter')(scope.objects, filterby, function(expected, actual){
97
+ var re = new RegExp(".*" + actual + ".*", "ig");
98
+ scope.go_to_first_page();
99
+ if( expected.match(re) ){
100
+ return true;
101
+ }
102
+ return false;
103
+ });
104
+ // TODO: Double check this or condition
105
+ return result || [];
106
+ };
107
+
108
+ scope.grid_options = {
109
+ data: 'objects',
110
+ headerRowHeight: 30,
111
+ rowHeight: 30,
112
+ enablePaging: true,
113
+ afterSelectionChange: function(rowitem, event){
114
+ console.dir(rowitem);
115
+ console.dir(event);
116
+ },
117
+ columnDefs: scope.column_defs
118
+ };
119
+ var delete_method = scope.on_delete || function(x){
120
+ console.log( "undefined on delete method" );
121
+ };
122
+
123
+ scope.is_ltr = ltr;
124
+ scope.handle_icon = "fa-eye";
125
+ scope.first_page_icon = ltr ? "fa-angle-double-left" : "fa-angle-double-right";
126
+ scope.last_page_icon = ltr ? "fa-angle-double-right" : "fa-angle-double-left";
127
+ scope.prev_page_icon = ltr ? "fa-angle-left" : "fa-angle-right";
128
+ scope.next_page_icon = ltr ? "fa-angle-right" : "fa-angle-left";
129
+ scope.hand_icon = ltr ? "fa-hand-o-right" : "fa-hand-o-left";
130
+ scope.is_all_selected = false;
131
+
132
+ scope.handle_icon_expand = function(object){
133
+ if(scope.should_view(object)) {
134
+ return "fa-eye-slash";
135
+ }
136
+ return "";
137
+ };
138
+
139
+ // View an item details
140
+ scope.toggle_details = function(object){
141
+ if (object['view_details'] !== undefined){
142
+ object.view_details = ! object.view_details;
143
+ }
144
+ else {
145
+ object.view_details = true;
146
+ }
147
+ };
148
+
149
+ // Should we open details section
150
+ scope.should_view = function(object){
151
+ if ((object !== undefined) && (object['view_details'] !== undefined)) {
152
+ return object.view_details;
153
+ }
154
+ return false;
155
+ };
156
+
157
+ scope.delete_items = function(){
158
+
159
+ var len = scope.selected_count();
160
+ var objects_to_delete = [];
161
+
162
+ if( confirm(gettext("Are sure you want to delete ") + len + gettext(" item(s)?")) ){
163
+ var objects_list = filtered_objects();
164
+
165
+ for(var i = 0 ; i < objects_list.length; i++){
166
+
167
+ if (objects_list[i].is_selected === true) {
168
+ objects_to_delete.push(objects_list[i]);
169
+ }
170
+
171
+ }
172
+
173
+ delete_method(objects_to_delete);
174
+ }
175
+
176
+
177
+ };
178
+ // Selection related methods -----------------------------------
179
+ // Select a row in table
180
+ scope.select_item = function(object) {
181
+ if (object['is_selected'] !== undefined) {
182
+ object.is_selected = ! object.is_selected;
183
+ }
184
+ else {
185
+ object.is_selected = true;
186
+ }
187
+
188
+ };
189
+
190
+ scope.toggle_select = function (){
191
+ var objects_list = filtered_objects();
192
+
193
+ for(i = 0 ; i < objects_list.length; i++){
194
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
195
+ }
196
+ };
197
+
198
+ scope.toggle_select = function (){
199
+ var objects_list = filtered_objects();
200
+
201
+ for(i = 0 ; i < objects_list.length; i++){
202
+ objects_list[i].is_selected = ! objects_list[i].is_selected;
203
+ }
204
+ };
205
+
206
+ scope.select_all = function (){
207
+ var objects_list = filtered_objects();
208
+
209
+ for(i = 0 ; i < objects_list.length; i++){
210
+ objects_list[i].is_selected = ! scope.is_all_selected;
211
+ }
212
+
213
+ scope.is_all_selected = ! scope.is_all_selected;
214
+
215
+ };
216
+
217
+ scope.selected_count = function(){
218
+ var myobjects = filtered_objects();
219
+ var count = 0;
220
+ for(var i = 0; i < myobjects.length; i++) {
221
+ if(myobjects[i].is_selected !== undefined){
222
+ if(myobjects[i].is_selected) {
223
+ count++;
224
+ }
225
+ }
226
+
227
+ }
228
+ return count;
229
+ };
230
+ // Pagination methods ---------------------------------
231
+
232
+ scope.has_pagination = function(){
233
+ return scope.total_pages() > 1 ? true : false;
234
+ };
235
+
236
+ scope.total_pages = function(){
237
+ var len = filtered_objects().length;
238
+ var pages = parseInt(len / _item_per_page, 10);
239
+
240
+ if (len % _item_per_page > 0 || len < _item_per_page) {
241
+ pages++;
242
+ }
243
+
244
+ return pages;
245
+ };
246
+
247
+ scope.current_page = function(){
248
+ return _current_page;
249
+ };
250
+
251
+ scope.go_to_next_page = function(){
252
+ if (_current_page < scope.total_pages()) {
253
+ _current_page++;
254
+ }
255
+ else {
256
+ _current_page = scope.total_pages();
257
+ }
258
+ };
259
+
260
+ scope.go_to_prev_page = function(){
261
+ if (_current_page > 1) {
262
+ _current_page--;
263
+ }
264
+ else {
265
+ _current_page = 1;
266
+ }
267
+ };
268
+
269
+ scope.go_to_last_page = function(){
270
+ _current_page = scope.total_pages();
271
+ };
272
+
273
+ scope.go_to_first_page = function(){
274
+ _current_page = 1;
275
+ };
276
+
277
+ scope.go_to_page = function($event, value){
278
+ if( $event.which == 13 ){
279
+
280
+ var page = parseInt(value, 10);
281
+
282
+ if (page > 0 && page <= scope.total_pages()) {
283
+ _current_page = page;
284
+ }
285
+ else {
286
+ value = _current_page;
287
+ }
288
+
289
+ }
290
+
291
+ };
292
+
293
+ scope.get_current_page = function(){
294
+ var start = (scope.current_page() * _item_per_page) - _item_per_page;
295
+ var end = (scope.current_page() * _item_per_page);
296
+
297
+ return filtered_objects().slice(start, end);
298
+ };
299
+
300
+ scope.objects_count = function(){
301
+ return filtered_objects().length;
302
+ };
303
+
304
+ scope.has_permission = function(button) {
305
+ if (use_permissions === true) {
306
+ if( button.permission !== undefined ){
307
+ if ((!("name" in button.permission)) || (!("model" in button.permission))) {
308
+ console.log("Button permission should be an object and has 'name' and 'model' keys");
309
+ throw "Button permission should be an object and has 'name' and 'model' keys";
310
+ }
311
+ return User.can(button.permission.name, button.permission.model);
312
+ }
313
+ }
314
+ return true;
315
+ };
316
+ scope.can = function(perm, model) {
317
+ if (use_permissions === true) {
318
+ return User.can(perm, model);
319
+ }
320
+ return true;
321
+ };
322
+ }
323
+
324
+
325
+ // Actual object of <list-view> directive
326
+ return {
327
+ templateUrl: template("list-view/index"),
328
+ restrict: "E",
329
+ transclude: true,
330
+ scope: {
331
+ // Header section custom buttons
332
+ buttons: "=buttons",
333
+
334
+ // Objects which should listed
335
+ objects: "=",
336
+
337
+ // Object attribute which should show as title in main li
338
+ title_attr: "=titleAttribute",
339
+
340
+ // Template address for details section
341
+ details_template: "=detailsTemplate",
342
+
343
+ // Number of item per pages
344
+ item_per_page: "=itemPerPage",
345
+
346
+ // Search input
347
+ search: "=",
348
+
349
+ // Grid columns
350
+ column_defs: "=columnDefs",
351
+
352
+ // Permissions
353
+ use_permissions: "=usePermissions",
354
+
355
+ // Permission model
356
+ permission_model: "=model",
357
+
358
+ // On delete method
359
+ on_delete: "=onDelete",
360
+
361
+ // Title of list box
362
+ list_title: '=listTitle',
363
+
364
+ // Tools array to use/show for each row
365
+ tools_processor: '=toolsProcessor',
366
+
367
+ // Custom delete title method
368
+ delete_title: "=deleteTitle",
369
+
370
+ //Badge operation function
371
+ badge_processor: '=badgeProcessor'
372
+
373
+ },
374
+ link: link
375
+ };
376
+ }]);
@@ -0,0 +1,79 @@
1
+ // Module module :P
2
+ var Modules = angular.module("Modules", ["ngRoute", "ngAnimate"]);
3
+
4
+ add_dependency("Modules");
5
+
6
+ // This controller is responsible to parse modules and load them
7
+ Modules.controller("ModulesController", ["$location", "$scope", "$controller", "UserPermissions", function($location, $scope, $controller, User){
8
+
9
+ var that = this;
10
+ this.modules = _.filter(DModules, function(module){
11
+
12
+ // Check if current module should be appear in side bar
13
+ if (module.sidemenu === true) {
14
+
15
+ // If module is a sidebar module, it have to have a controller which
16
+ // represent the submenu. Name of the controller should be like:
17
+ // ```javascript
18
+ /// <modulename>MenuController
19
+ ///```
20
+ var menu_items = $controller(camelCase(module.resource) + "MenuController", {$scope: $scope}).menu_items;
21
+ module.menu_items = [];
22
+
23
+ // Iterate over submenu items
24
+ _.each(menu_items, function(menu) {
25
+ // If menu item provided a permission attribute we have to check user permission for that
26
+ if ("permission" in menu){
27
+
28
+ if ((!("action" in menu.permission)) || (!("model" in menu.permission))) {
29
+ console.log("Button permission should be an object and has 'action' and 'model' keys");
30
+ throw "Button permission should be an object and has 'name' and 'model' keys";
31
+ }
32
+ // Check if user can pass the permission
33
+ if (User.can(menu.permission.action, menu.permission.model)) {
34
+ console.debug("You have " + menu.permission.action + " permission on " + menu.permission.model);
35
+ module.menu_items.push(menu);
36
+ }
37
+ else {
38
+ console.debug("User don't have " + menu.permission.action + " permission on " + menu.permission.model);
39
+ }
40
+ }
41
+ else {
42
+ // Add item to submenu item list
43
+ module.menu_items.push(menu);
44
+ }
45
+ });
46
+ // Close the submenu section
47
+ module.show_menu = false;
48
+ }
49
+ return module.sidemenu || false;
50
+ });
51
+
52
+ // Event handler on menu click
53
+ this.on_click = function(url){
54
+ $location.path(url);
55
+ };
56
+
57
+ // Event handler of click on menu itself
58
+ this.view_menu = function(module) {
59
+ _.each(this.modules, function(x){
60
+ if (x !== module) {
61
+ x.show_menu = false;
62
+ }
63
+ });
64
+ module.show_menu = !module.show_menu;
65
+ };
66
+ }]);
67
+
68
+ // Animations of slide effect
69
+ Modules.animation(".slide", function(){
70
+ return {
71
+ leave: function(elem, done){
72
+ $(elem).slideUp(700, done);
73
+ },
74
+ enter: function(elem, done){
75
+ $(elem).slideDown(700, done);
76
+ return function(cancelled){};
77
+ }
78
+ };
79
+ });
@@ -0,0 +1,24 @@
1
+ var Nav = angular.module("Navigation", []);
2
+
3
+ add_dependency("Navigation");
4
+
5
+ Nav.controller("NavigationController", ["$rootScope", function($rootScope){
6
+ var that = this;
7
+
8
+ $rootScope.show_sidebar = true;
9
+
10
+ this.toggle_sidebar = function() {
11
+
12
+ if ($(window).width() <= 992) {
13
+ $('.row-offcanvas').toggleClass('active');
14
+ $('.left-side').removeClass("collapse-left");
15
+ $(".right-side").removeClass("strech");
16
+ $('.row-offcanvas').toggleClass("relative");
17
+ } else {
18
+ //Else, enable content streching
19
+ $('.left-side').toggleClass("collapse-left");
20
+ $(".right-side").toggleClass("strech");
21
+ }
22
+ $rootScope.show_sidebar = !$rootScope.show_sidebar;
23
+ };
24
+ }]);
@@ -0,0 +1,5 @@
1
+ angular.module('Dashboard').run(['gettextCatalog', function (gettextCatalog) {
2
+ /* jshint -W100 */
3
+ gettextCatalog.setStrings('fa', {"Are sure you want to delete":"آیا از حذف اطمینان دارید","Click to pick a date":"برای انتخاب تاریخ کلیک کنید","Current Page":"صفحه جاری","Dashboard":"پنل کاربری","Facility Name":"نام وسیله","Go!":"برو!","Item(s)":"آیتم(ها)","Note":"متن","Number":"عدد","Online":"آنلاین","Price?":"قیمت؟","Search":"جستجو","Selected":"انتخاب شده","There is no data!":"تاریخ نامعتبر","Toggle Select":"پین انتخاب","Total Pages":"کل صفحات","item(s)?":"آیتیم(ها)؟"});
4
+ /* jshint +W100 */
5
+ }]);
@@ -0,0 +1,92 @@
1
+ "Content-Type: text/plain; charset=UTF-8\n"
2
+ "Content-Transfer-Encoding: 8bit\n"
3
+ "#-#-#-#-# translate.fa.pot #-#-#-#-#\n"
4
+ "Content-Transfer-Encoding: 8bit\n"
5
+ "Last-Translator: Behnam Ahmad Khan Beigi <yottanamI@gnu.org>\n"
6
+ "Language: fa\n"
7
+ "Language-Team: Persian <>\n"
8
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
9
+ "PO-Revision-Date: 2014-09-02 11:11+0430\n"
10
+ "X-Generator: Gtranslator 2.91.6\n"
11
+
12
+ msgid ""
13
+ msgstr ""
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+
17
+ #: app/assets/javascripts/dashstrap/modules/list-view.js
18
+ msgid "Are sure you want to delete"
19
+ msgstr ""
20
+
21
+ #: app/views/angularjs_templates/fields/datetime/datetime.html
22
+ msgid "Click to pick a date"
23
+ msgstr ""
24
+
25
+ #: app/views/angularjs_templates/list-view/index.html
26
+ msgid "Current Page"
27
+ msgstr ""
28
+
29
+ #: app/views/angularjs_templates/modules.html
30
+ msgid "Dashboard"
31
+ msgstr ""
32
+
33
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
34
+ msgid "Facility Name"
35
+ msgstr ""
36
+
37
+ #: app/views/angularjs_templates/list-view/index.html
38
+ msgid "Go!"
39
+ msgstr ""
40
+
41
+ #: app/views/angularjs_templates/list-view/index.html
42
+ msgid "Item(s)"
43
+ msgstr ""
44
+
45
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
46
+ msgid "Note"
47
+ msgstr ""
48
+
49
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
50
+ msgid "Number"
51
+ msgstr ""
52
+
53
+ #: app/views/angularjs_templates/index.html
54
+ #: app/views/angularjs_templates/modules.html
55
+ msgid "Online"
56
+ msgstr ""
57
+
58
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
59
+ msgid "Price?"
60
+ msgstr ""
61
+
62
+ #: app/views/angularjs_templates/list-view/index.html
63
+ msgid "Search"
64
+ msgstr ""
65
+
66
+ #: app/views/angularjs_templates/list-view/index.html
67
+ msgid "Selected"
68
+ msgstr ""
69
+
70
+ #: app/views/angularjs_templates/list-view/index.html
71
+ msgid "There is no data!"
72
+ msgstr ""
73
+
74
+ #: app/views/angularjs_templates/list-view/index.html
75
+ msgid "Toggle Select"
76
+ msgstr ""
77
+
78
+ #: app/views/angularjs_templates/list-view/index.html
79
+ msgid "Total Pages"
80
+ msgstr ""
81
+
82
+ #: app/assets/javascripts/dashstrap/modules/list-view.js
83
+ msgid "item(s)?"
84
+ msgstr ""
85
+
86
+ #: app/views/angularjs_templates/fields/string/string.html
87
+ msgid "{{ item.title }}"
88
+ msgstr ""
89
+
90
+ #: app/views/angularjs_templates/modules.html
91
+ msgid "{{ module.title}}"
92
+ msgstr ""
@@ -0,0 +1,93 @@
1
+ "Content-Type: text/plain; charset=UTF-8\n"
2
+ "Content-Transfer-Encoding: 8bit\n"
3
+ "#-#-#-#-# translate.fa.pot #-#-#-#-#\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
6
+ "Last-Translator: Behnam Ahmad Khan Beigi <yottanamI@gnu.org>\n"
7
+ "Language: fa\n"
8
+ "Language-Team: Persian <>\n"
9
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
10
+ "PO-Revision-Date: 2014-09-02 11:11+0430\n"
11
+ "X-Generator: Gtranslator 2.91.6\n"
12
+
13
+ msgid ""
14
+ msgstr ""
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+
18
+ #: app/assets/javascripts/dashstrap/modules/list-view.js
19
+ msgid "Are sure you want to delete"
20
+ msgstr "آیا از حذف اطمینان دارید"
21
+
22
+ #: app/views/angularjs_templates/fields/datetime/datetime.html
23
+ msgid "Click to pick a date"
24
+ msgstr "برای انتخاب تاریخ کلیک کنید"
25
+
26
+ #: app/views/angularjs_templates/list-view/index.html
27
+ msgid "Current Page"
28
+ msgstr "صفحه جاری"
29
+
30
+ #: app/views/angularjs_templates/modules.html
31
+ msgid "Dashboard"
32
+ msgstr "پنل کاربری"
33
+
34
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
35
+ msgid "Facility Name"
36
+ msgstr "نام وسیله"
37
+
38
+ #: app/views/angularjs_templates/list-view/index.html
39
+ msgid "Go!"
40
+ msgstr "برو!"
41
+
42
+ #: app/views/angularjs_templates/list-view/index.html
43
+ msgid "Item(s)"
44
+ msgstr "آیتم(ها)"
45
+
46
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
47
+ msgid "Note"
48
+ msgstr "متن"
49
+
50
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
51
+ msgid "Number"
52
+ msgstr "عدد"
53
+
54
+ #: app/views/angularjs_templates/index.html
55
+ #: app/views/angularjs_templates/modules.html
56
+ msgid "Online"
57
+ msgstr "آنلاین"
58
+
59
+ #: app/views/angularjs_templates/fields/control-combo/control-list.html
60
+ msgid "Price?"
61
+ msgstr "قیمت؟"
62
+
63
+ #: app/views/angularjs_templates/list-view/index.html
64
+ msgid "Search"
65
+ msgstr "جستجو"
66
+
67
+ #: app/views/angularjs_templates/list-view/index.html
68
+ msgid "Selected"
69
+ msgstr "انتخاب شده"
70
+
71
+ #: app/views/angularjs_templates/list-view/index.html
72
+ msgid "There is no data!"
73
+ msgstr "تاریخ نامعتبر"
74
+
75
+ #: app/views/angularjs_templates/list-view/index.html
76
+ msgid "Toggle Select"
77
+ msgstr "پین انتخاب"
78
+
79
+ #: app/views/angularjs_templates/list-view/index.html
80
+ msgid "Total Pages"
81
+ msgstr "کل صفحات"
82
+
83
+ #: app/assets/javascripts/dashstrap/modules/list-view.js
84
+ msgid "item(s)?"
85
+ msgstr "آیتیم(ها)؟"
86
+
87
+ #: app/views/angularjs_templates/fields/string/string.html
88
+ msgid "{{ item.title }}"
89
+ msgstr ""
90
+
91
+ #: app/views/angularjs_templates/modules.html
92
+ msgid "{{ module.title}}"
93
+ msgstr ""
@@ -0,0 +1,17 @@
1
+ //= require bootstrap
2
+ //= require font-awesome
3
+ /*
4
+ ionicons
5
+ morris
6
+ jquery-jvectormap-1.2.2
7
+ datepicker3.css
8
+ daterangepicker-bs3
9
+ bootstrap3-wysihtml5
10
+ */
11
+
12
+ //= require AdminLTE
13
+ //= require dashstrap/share
14
+ //= require dashstrap/main
15
+ //= require dashstrap/ltr/ltr
16
+ //= require select2/select2
17
+ //= require select2/select2-bootstrap