carnival 0.2.7 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.eot +0 -0
  2. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.svg +0 -0
  3. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.ttf +0 -0
  4. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.woff +0 -0
  5. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.eot +0 -0
  6. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.svg +0 -0
  7. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.ttf +0 -0
  8. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.woff +0 -0
  9. data/app/assets/{images/carnival/fonts → fonts/carnival}/up-not.png +0 -0
  10. data/app/assets/javascripts/carnival/{vizir_admin.js → vizir_admin.js.erb} +44 -18
  11. data/app/assets/stylesheets/carnival/actions.css.scss +3 -7
  12. data/app/assets/stylesheets/carnival/carnival-table.css.scss +12 -3
  13. data/app/assets/stylesheets/carnival/forms.css.scss +1 -0
  14. data/app/assets/stylesheets/carnival/menu.css.scss +3 -3
  15. data/app/assets/stylesheets/carnival/period.css.scss +1 -1
  16. data/app/assets/stylesheets/carnival/search.css.scss +9 -6
  17. data/app/assets/stylesheets/carnival/structure.css.scss +10 -10
  18. data/app/controllers/carnival/base_admin_controller.rb +37 -57
  19. data/app/helpers/carnival/base_admin_helper.rb +52 -70
  20. data/app/inputs/admin_date_input.rb +2 -1
  21. data/app/models/carnival/batch_action.rb +1 -2
  22. data/app/models/carnival/field.rb +3 -2
  23. data/app/presenters/carnival/base_admin_presenter.rb +47 -192
  24. data/app/presenters/carnival/dsl.rb +55 -0
  25. data/app/services/carnival/klass_service.rb +5 -1
  26. data/app/services/carnival/presenters/advanced_search_parser.rb +4 -5
  27. data/app/services/carnival/query_service.rb +15 -24
  28. data/app/view_objects/carnival/paginator.rb +10 -12
  29. data/app/view_objects/carnival/thead_renderer.rb +11 -18
  30. data/app/views/carnival/base_admin/_index_as_table.html.haml +6 -4
  31. data/app/views/carnival/base_admin/index.html.haml +8 -4
  32. data/app/views/carnival/shared/_advanced_search.html.haml +6 -5
  33. data/app/views/carnival/shared/form/_form.html.haml +3 -2
  34. data/config/locales/carnival.en.yml +13 -5
  35. data/config/locales/carnival.pt-br.yml +1 -1
  36. data/lib/carnival.rb +10 -12
  37. data/lib/carnival/engine.rb +3 -2
  38. data/lib/carnival/routes.rb +4 -4
  39. data/lib/carnival/version.rb +1 -1
  40. data/spec/dummy/app/controllers/admin/todo_lists_controller.rb +7 -0
  41. data/spec/dummy/app/controllers/admin/todos_controller.rb +7 -0
  42. data/spec/dummy/app/models/todo.rb +7 -0
  43. data/spec/dummy/app/models/todo_list.rb +4 -0
  44. data/spec/dummy/app/presenters/admin/todo_list_presenter.rb +13 -0
  45. data/spec/dummy/app/presenters/admin/todo_presenter.rb +32 -0
  46. data/spec/dummy/config/application.rb +3 -0
  47. data/spec/dummy/config/database.yml +1 -1
  48. data/spec/dummy/config/environments/development.rb +2 -0
  49. data/spec/dummy/config/initializers/carnival_initializer.rb +25 -0
  50. data/spec/dummy/config/locales/carnival.en.yml +28 -0
  51. data/spec/dummy/config/locales/carnival.pt-br.yml +259 -0
  52. data/spec/dummy/config/routes.rb +7 -52
  53. data/spec/dummy/db/migrate/20150316021645_create_todos.rb +10 -0
  54. data/spec/dummy/db/migrate/20150408165317_create_todo_lists.rb +8 -0
  55. data/spec/dummy/db/migrate/20150408165333_add_todo_list_relation_to_todos.rb +5 -0
  56. data/spec/dummy/db/schema.rb +32 -0
  57. data/spec/factories/todo_lists_factory.rb +5 -0
  58. data/spec/factories/todos_factory.rb +18 -0
  59. data/spec/features/create_spec.rb +28 -0
  60. data/spec/features/destroy_spec.rb +11 -0
  61. data/spec/features/index/basic_index_spec.rb +14 -0
  62. data/spec/features/index/pagination_spec.rb +19 -0
  63. data/spec/features/index/scope_spec.rb +29 -0
  64. data/spec/features/index/search_spec.rb +28 -0
  65. data/spec/features/show_spec.rb +15 -0
  66. data/spec/features/update_spec.rb +26 -0
  67. data/spec/rails_helper.rb +25 -5
  68. data/spec/support/features/index_helpers.rb +15 -0
  69. metadata +386 -284
  70. checksums.yaml +0 -7
  71. data/app/views/carnival/base_admin/index.pdf.haml +0 -13
  72. data/app/views/carnival/shared/_header.pdf.haml +0 -13
  73. data/app/views/carnival/shared/_list_cel.pdf.haml +0 -9
  74. data/app/views/carnival/shared/_report.pdf.haml +0 -21
  75. data/config/initializers/wicked_pdf.rb +0 -5
@@ -1,5 +1,10 @@
1
1
  // add/remove dynamic fields
2
- var Carnival = {}
2
+ var Carnival = {
3
+ config: {
4
+ dateFormat: "<%= I18n.t('date.formats.default').gsub('%', '') %>"
5
+ }
6
+ };
7
+
3
8
  String.prototype.unescapeHtml = function () {
4
9
  var temp = document.createElement("div");
5
10
  temp.innerHTML = this;
@@ -185,34 +190,55 @@ var pageLoad = function(){
185
190
  });
186
191
 
187
192
  var $lefty = $('div.menu.full');
188
- $lefty.animate({
189
- marginLeft: '-20%'
190
- }, 100);
193
+ $lefty.hide();
191
194
 
192
195
  $('.minify').on("click", function(){
193
196
  var $lefty = $('div.menu.full');
194
- $lefty.animate({
195
- marginLeft: parseInt($lefty.css('margin-left'),10) == 0 ?
196
- -$lefty.outerWidth()-2:
197
- 0
198
- }, 100);
199
- setTimeout("$('div.menu.short').fadeToggle(100)", 0)
200
- setTimeout("$('#content').toggleClass('menu-opened')", 0)
201
- })
197
+ var shouldHideExpandedMenu = (parseInt($lefty.css('margin-left'),10) == 0);
198
+
199
+ if(shouldHideExpandedMenu){
200
+ $lefty.animate({
201
+ marginLeft: (-$lefty.outerWidth() - 2)
202
+ }, 100);
203
+ setTimeout("$('div.menu.full').hide()", 100);
204
+ }
205
+ else{
206
+ $lefty.show();
207
+ $lefty.animate({
208
+ marginLeft: 0
209
+ }, 100);
210
+ }
211
+ setTimeout("$('div.menu.short').fadeToggle(100)", 0);
212
+ setTimeout("$('#content').toggleClass('menu-opened')", 0);
213
+ });
202
214
  };
203
215
 
204
216
  // form load functions
205
217
 
206
218
  function setupDateFields(){
219
+ var dateFormat = Carnival.config.dateFormat;
207
220
  var dateOptions = {
208
- format: 'Y/m/d',
209
- mask: true,
210
- timepicker: false
221
+ format: dateFormat,
222
+ scrollInput: false,
223
+ mask: true,
224
+ timepicker: false
211
225
  };
212
- var dateTimeOptions = $.extend({}, dateOptions, { timepicker: true, format: 'Y/m/d H:i'})
213
226
 
214
- $(".datepicker").datetimepicker(dateOptions);
215
- $(".datetimepicker").datetimepicker(dateTimeOptions);
227
+ var dateTimeOptions = $.extend({}, dateOptions, { timepicker: true, mask: true, format: dateFormat + ' H:i'} );
228
+
229
+ function addPicker(elem, options){
230
+ var value = $(elem).val();
231
+ $(elem).datetimepicker(options);
232
+ if(value)
233
+ $(elem).val(value);
234
+ }
235
+
236
+ $(".datepicker").each(function(){
237
+ addPicker(this, dateOptions);
238
+ });
239
+ $(".datetimepicker").each(function(){
240
+ addPicker(this, dateTimeOptions);
241
+ });
216
242
  }
217
243
 
218
244
  var formLoad = function(){
@@ -112,12 +112,12 @@
112
112
  color:#fff;
113
113
  }
114
114
 
115
- .pdf, .csv{
115
+ .csv{
116
116
  padding: 0px 10px 0px 25px;
117
117
  position: relative;
118
118
  }
119
119
 
120
- .pdf:before, .csv:before{
120
+ .csv:before{
121
121
  content: '';
122
122
  display: block;
123
123
  width: 25px;
@@ -129,10 +129,6 @@
129
129
  top: 6px;
130
130
  }
131
131
 
132
- .pdf:before{
133
- background-position: -279px -502px;
134
- }
135
-
136
132
  .csv:before{
137
133
  background-position: -101px -50px;
138
134
  }
@@ -153,7 +149,7 @@
153
149
  float: right;
154
150
  margin-left: 10px;
155
151
  font-size: 14px;
156
- line-height: 25px;
152
+ line-height: 25px;
157
153
  cursor: pointer;
158
154
  }
159
155
 
@@ -1,4 +1,4 @@
1
- /********************* TABLE BASE STYEL ********************* START */
1
+ /********************* TABLE BASE STYLE ********************* START */
2
2
 
3
3
  .carnival-table{
4
4
  border-collapse: collapse;
@@ -86,7 +86,16 @@
86
86
 
87
87
  }
88
88
 
89
- /*********************** TABLE BASE STYEL ********************* END */
89
+ /*********************** TABLE BASE STYLE ********************* END */
90
+
91
+ /*********************** TABLE BATCHING ********************** START */
92
+
93
+ .batching {
94
+ padding-left: 10px !important;
95
+ width: 36px;
96
+ }
97
+
98
+ /*********************** TABLE BATCHING ********************* END */
90
99
 
91
100
  /*********************** TABLE SORTABLES ********************** START */
92
101
 
@@ -101,4 +110,4 @@
101
110
  #sortable > li > a {float: right; padding-right: 10px;}
102
111
  #sortable > .ui-state-default {border: 0px; border-bottom: 1px solid lightGrey; background: transparent;}
103
112
 
104
- /*********************** TABLE SORTABLES ********************** END */
113
+ /*********************** TABLE SORTABLES ********************** END */
@@ -150,6 +150,7 @@ input::-webkit-inner-spin-button {
150
150
  width: 100%;
151
151
  float: left;
152
152
  padding: 0 0 10px;
153
+ min-height: 28px;
153
154
  }
154
155
 
155
156
  .gray_border h2{
@@ -97,6 +97,9 @@ display: block;
97
97
  text-indent: -99999px !important;
98
98
  }
99
99
 
100
+ ul.menu li.minify{
101
+ cursor: pointer;
102
+ }
100
103
 
101
104
  ul.menu a.actived{
102
105
  color: #0088CC !important;
@@ -329,6 +332,3 @@ ul.menu .dropdown_main_menu_sublevel li a{
329
332
  background-repeat:no-repeat;
330
333
  }
331
334
 
332
- a.btn_usuario.sublevel.link{
333
- display: none !important;
334
- }
@@ -36,7 +36,7 @@
36
36
  }
37
37
 
38
38
  #filtro_tempo #container_tempo #search_button_range{
39
- background-image: url(image_path('search-button.png'));
39
+ background-image: image-url('carnival/search-button.png');
40
40
  width: 24px;
41
41
  height: 24px;
42
42
  display: block;
@@ -16,7 +16,6 @@
16
16
  height: 25px;
17
17
  background: url(image_path('carnival/sprites.png')) -375px 547px;
18
18
  left: 0px;
19
- top: 0px;
20
19
  background-size: 400px;
21
20
  }
22
21
 
@@ -46,7 +45,7 @@
46
45
  display: none;
47
46
  border: 1px solid #ccc;
48
47
  padding: 20px;
49
- margin-top: 26px;
48
+ margin-top: 87px;
50
49
  float: left;
51
50
  width: 270px;
52
51
  box-sizing: border-box;
@@ -83,15 +82,15 @@
83
82
  }
84
83
 
85
84
  .advanced-search-tags.explode1:hover{
86
- height: 61px;
85
+ height: 61px;
87
86
  }
88
87
 
89
88
  .advanced-search-tags.explode2:hover{
90
- height: 122px;
89
+ height: 122px;
91
90
  }
92
91
 
93
92
  .advanced-search-tags.explode3:hover{
94
- height: 183px;
93
+ height: 183px;
95
94
  }
96
95
  .advanced-search-tag{
97
96
  font-size: 13px;
@@ -107,6 +106,10 @@
107
106
  transition: all 0.3s ease;
108
107
  }
109
108
 
109
+ .advanced-search-tag span{
110
+ float: left;
111
+ }
112
+
110
113
  .advanced-search-tag a{
111
114
  color: #555;
112
115
  position: relative;
@@ -128,7 +131,7 @@
128
131
  height: 15px;
129
132
  width: 15px;
130
133
  line-height: 15px;
131
- top: 1px;
134
+ top: 6px;
132
135
  color: #222;
133
136
  border-radius: 100px;
134
137
  text-align: center;
@@ -2,22 +2,22 @@
2
2
 
3
3
  @font-face {
4
4
  font-family: 'OpenSansRegular';
5
- src: url(image_path('fonts/opensans-regular-webfont.eot'));
6
- src: url(image_path('fonts/opensans-regular-webfont.eot?#iefix')) format('embedded-opentype'),
7
- url(image_path('fonts/opensans-regular-webfont.woff')) format('woff'),
8
- url(image_path('fonts/opensans-regular-webfont.ttf')) format('truetype'),
9
- url(image_path('fonts/opensans-regular-webfont.svg#OpenSansRegular')) format('svg');
5
+ src: url(font-path('carnival/opensans-regular-webfont.eot'));
6
+ src: url(font-path('carnival/opensans-regular-webfont.eot?#iefix')) format('embedded-opentype'),
7
+ url(font-path('carnival/opensans-regular-webfont.woff')) format('woff'),
8
+ url(font-path('carnival/opensans-regular-webfont.ttf')) format('truetype'),
9
+ url(font-path('carnival/opensans-regular-webfont.svg#OpenSansRegular')) format('svg');
10
10
  font-weight: normal;
11
11
  font-style: normal;
12
12
  }
13
13
 
14
14
  @font-face {
15
15
  font-family: 'OpenSansSemibold';
16
- src: url(image_path('fonts/opensans-semibold-webfont.eot'));
17
- src: url(image_path('fonts/opensans-semibold-webfont.eot?#iefix')) format('embedded-opentype'),
18
- url(image_path('fonts/opensans-semibold-webfont.woff')) format('woff'),
19
- url(image_path('fonts/opensans-semibold-webfont.ttf')) format('truetype'),
20
- url(image_path('fonts/opensans-semibold-webfont.svg#OpenSansSemibold')) format('svg');
16
+ src: url(font-path('carnival/opensans-semibold-webfont.eot'));
17
+ src: url(font-path('carnival/opensans-semibold-webfont.eot?#iefix')) format('embedded-opentype'),
18
+ url(font-path('carnival/opensans-semibold-webfont.woff')) format('woff'),
19
+ url(font-path('carnival/opensans-semibold-webfont.ttf')) format('truetype'),
20
+ url(font-path('carnival/opensans-semibold-webfont.svg#OpenSansSemibold')) format('svg');
21
21
  font-weight: normal;
22
22
  font-style: normal;
23
23
  }
@@ -1,88 +1,59 @@
1
1
  module Carnival
2
2
  class BaseAdminController < InheritedResources::Base
3
3
  respond_to :html, :json
4
- layout "carnival/admin"
4
+ layout 'carnival/admin'
5
5
  before_action :instantiate_presenter
6
6
  helper_method :back_or_model_path
7
7
 
8
- def home
9
- end
10
-
11
- def table_items
12
- nil
13
- end
14
-
15
- def render_inner_form
16
- @presenter = presenter_name(params[:field]).new controller: self
17
- model_class = params[:field].classify.constantize
18
- @model_object = model_class.find(params[:id])
19
- end
20
-
21
- def presenter_name field
22
- field_name = field.split('/').last
23
- carnival_mount = Carnival::Config.mount_at
24
- "#{carnival_mount}/#{field_name.singularize}_presenter".classify.constantize
25
- end
26
-
27
8
  def index
28
- @query_form = Carnival::QueryFormCreator.create(@presenter, params)
9
+ @query_form = QueryFormCreator.create(@presenter, params)
29
10
  @model = @presenter.model_class
30
- @query_service = Carnival::QueryService.new(table_items || @model, @presenter, @query_form)
11
+ @query_service = QueryService.new(table_items, @presenter, @query_form)
12
+ @thead_renderer = TheadRenderer.new @presenter.fields_for_action(:index), @query_form.sort_column, @query_form.sort_direction
31
13
 
32
14
  respond_to do |format|
33
15
  format.html do
34
16
  @records = @query_service.get_query
35
- last_page = (@query_service.total_records / @presenter.items_per_page.to_f).ceil
36
- @paginator = Carnival::Paginator.new @query_form.page, last_page
37
- @thead_renderer = Carnival::TheadRenderer.new @presenter.fields_for_action(:index), @query_form.sort_column, @query_form.sort_direction
17
+ @paginator = Paginator.new @query_form.page, @query_service.page_count
38
18
  end
39
19
  format.csv do
40
20
  @records = @query_service.records_without_pagination
41
- render :csv => @model.model_name.human
42
- end
43
- format.pdf do
44
- @records = @query_service.records_without_pagination
45
- @thead_renderer = Carnival::TheadRenderer.new @presenter.fields_for_action(:index), @query_form.sort_column, @query_form.sort_direction
46
- render :pdf => t("activerecord.attributes.#{@presenter.full_model_name}.pdf_name") , :template => 'carnival/base_admin/index.pdf.haml', :show_as_html => params[:debug].present?
21
+ render csv: @model.model_name.human
47
22
  end
48
23
  end
49
24
  end
50
25
 
51
- def show
52
- show! do
53
- instantiate_model
54
- end
55
- end
56
-
57
- def new
58
- new! do
59
- instantiate_model
60
- end
61
- end
62
-
63
- def edit
64
- edit! do
65
- instantiate_model
26
+ [:show, :new, :edit].each do |action|
27
+ define_method action do
28
+ send("#{action}!") do
29
+ instantiate_model
30
+ end
66
31
  end
67
32
  end
68
33
 
69
34
  def create
70
35
  create! do |success, failure|
71
- success.html { redirect_to back_or_model_path, :notice => I18n.t("messages.created") }
72
- failure.html { instantiate_model and render 'new' }
36
+ success.html { redirect_to back_or_model_path, notice: I18n.t('messages.created') }
37
+ failure.html { instantiate_model && render('new') }
73
38
  end
74
39
  end
75
40
 
76
41
  def update
77
42
  update! do |success, failure|
78
- success.html { redirect_to back_or_model_path, :notice => I18n.t("messages.updated") }
79
- failure.html { instantiate_model and render 'edit' }
43
+ success.html { redirect_to back_or_model_path, notice: I18n.t('messages.updated') }
44
+ failure.html { instantiate_model && render('edit') }
80
45
  end
81
46
  end
82
47
 
48
+ def render_inner_form
49
+ @presenter = presenter_name(params[:field]).new controller: self
50
+ model_class = params[:field].classify.constantize
51
+ @model_object = model_class.find(params[:id])
52
+ end
53
+
83
54
  def load_dependent_select_options
84
- presenter = params[:presenter].constantize.send(:new, :controller => self)
85
- model = presenter.relation_model(params[:field].gsub("_id", "").to_sym)
55
+ presenter = params[:presenter].constantize.send(:new, controller: self)
56
+ model = presenter.relation_model(params[:field].gsub('_id', '').to_sym)
86
57
  @options = model.list_for_select(add_empty_option: true, query: ["#{params[:dependency_field]} = ?", params[:dependency_value]])
87
58
  render layout: nil
88
59
  end
@@ -90,18 +61,28 @@ module Carnival
90
61
  def load_select_options
91
62
  model_name = params[:model_name]
92
63
  search_field = params[:search_field]
93
- presenter = params[:presenter_name].constantize.send(:new, :controller => self)
64
+ presenter = params[:presenter_name].constantize.send(:new, controller: self)
94
65
  model = presenter.relation_model(model_name.to_sym)
95
66
  list = []
96
67
  model.where("#{search_field} like '%#{params[:q]}%'").each do |elem|
97
- list << {id: elem.id, text: elem.send(search_field.to_sym)}
68
+ list << { id: elem.id, text: elem.send(search_field.to_sym) }
98
69
  end
99
70
 
100
- render :json => list
71
+ render json: list
101
72
  end
102
73
 
103
74
  protected
104
75
 
76
+ def presenter_name(field)
77
+ field_name = field.split('/').last
78
+ carnival_mount = Carnival::Config.mount_at
79
+ "#{carnival_mount}/#{field_name.singularize}_presenter".classify.constantize
80
+ end
81
+
82
+ def table_items
83
+ @presenter.model_class
84
+ end
85
+
105
86
  def instantiate_model
106
87
  @model = instance_variable_get("@#{resource_instance_name}")
107
88
  end
@@ -120,7 +101,7 @@ module Carnival
120
101
  end
121
102
 
122
103
  def extract_namespace
123
- module_class_split = self.class.to_s.split("::")
104
+ module_class_split = self.class.to_s.split('::')
124
105
  if module_class_split.size > 1
125
106
  module_class_split[0]
126
107
  else
@@ -131,6 +112,5 @@ module Carnival
131
112
  def back_or_model_path
132
113
  params[:HTTP_REFERER] || @presenter.model_path(:index)
133
114
  end
134
-
135
115
  end
136
116
  end