netzke-basepack 0.7.7 → 0.8.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 (192) hide show
  1. data/.travis.yml +15 -10
  2. data/{CHANGELOG.rdoc → CHANGELOG.md} +146 -110
  3. data/LICENSE +7 -1
  4. data/README.md +47 -56
  5. data/Rakefile +5 -5
  6. data/config/before-travis.sh +10 -0
  7. data/javascripts/basepack.js +0 -130
  8. data/javascripts/netzkeremotecombo.js +59 -0
  9. data/lib/netzke/basepack.rb +9 -14
  10. data/lib/netzke/basepack/accordion.rb +45 -0
  11. data/lib/netzke/basepack/active_record.rb +12 -0
  12. data/lib/netzke/basepack/active_record/relation_extensions.rb +27 -0
  13. data/lib/netzke/basepack/columns.rb +309 -0
  14. data/lib/netzke/basepack/data_accessor.rb +22 -12
  15. data/lib/netzke/basepack/data_adapters/abstract_adapter.rb +75 -11
  16. data/lib/netzke/basepack/data_adapters/active_record_adapter.rb +154 -49
  17. data/lib/netzke/basepack/fields.rb +162 -0
  18. data/lib/netzke/basepack/form.rb +136 -0
  19. data/lib/netzke/basepack/{form_panel → form}/javascripts/comma_list_cbg.js +0 -1
  20. data/lib/netzke/basepack/{form_panel/javascripts/form_panel.js → form/javascripts/form.js} +20 -26
  21. data/lib/netzke/basepack/{form_panel → form}/javascripts/n_radio_group.js +0 -1
  22. data/lib/netzke/basepack/{form_panel → form}/javascripts/readonly_mode.js +0 -0
  23. data/lib/netzke/basepack/form/services.rb +115 -0
  24. data/lib/netzke/basepack/{form_panel → form}/stylesheets/readonly_mode.css +0 -0
  25. data/lib/netzke/basepack/grid.rb +355 -0
  26. data/lib/netzke/basepack/{grid_panel → grid}/javascripts/advanced_search.js +1 -1
  27. data/lib/netzke/basepack/{grid_panel → grid}/javascripts/check_column_fix.js +0 -0
  28. data/lib/netzke/basepack/{grid_panel → grid}/javascripts/edit_in_form.js +3 -3
  29. data/lib/netzke/basepack/{grid_panel → grid}/javascripts/event_handling.js +5 -2
  30. data/lib/netzke/basepack/{grid_panel/javascripts/grid_panel.js → grid/javascripts/grid.js} +120 -132
  31. data/lib/netzke/basepack/{grid_panel → grid}/javascripts/misc.js +0 -0
  32. data/lib/netzke/basepack/grid/services.rb +216 -0
  33. data/lib/netzke/basepack/item_persistence.rb +44 -0
  34. data/lib/netzke/basepack/item_persistence/events_plugin.rb +47 -0
  35. data/lib/netzke/basepack/{paging_form_panel.rb → paging_form.rb} +24 -30
  36. data/lib/netzke/basepack/{paging_form_panel/javascripts/paging_form_panel.js → paging_form/javascripts/paging_form.js} +2 -4
  37. data/lib/netzke/basepack/query_builder.rb +44 -73
  38. data/lib/netzke/basepack/query_builder/javascripts/query_builder.js +16 -2
  39. data/lib/netzke/basepack/record_form_window.rb +67 -0
  40. data/lib/netzke/basepack/search_panel.rb +22 -24
  41. data/lib/netzke/basepack/search_panel/javascripts/condition_field.js +2 -2
  42. data/lib/netzke/basepack/search_window.rb +47 -53
  43. data/lib/netzke/basepack/simple_app.rb +10 -13
  44. data/lib/netzke/basepack/simple_app/javascripts/simple_app.js +2 -8
  45. data/lib/netzke/basepack/tab_panel.rb +5 -4
  46. data/lib/netzke/basepack/tab_panel/javascripts/tab_panel.js +5 -5
  47. data/lib/netzke/basepack/version.rb +2 -2
  48. data/lib/netzke/basepack/viewport.rb +16 -0
  49. data/lib/netzke/basepack/window.rb +27 -18
  50. data/lib/netzke/basepack/window/javascripts/window.js +7 -1
  51. data/lib/netzke/basepack/wrap_lazy_loaded.rb +18 -18
  52. data/locales/en.yml +40 -24
  53. data/netzke-basepack.gemspec +51 -82
  54. data/stylesheets/basepack.css +0 -41
  55. data/test/basepack_test_app/Gemfile +9 -46
  56. data/test/basepack_test_app/Gemfile.lock +61 -96
  57. data/test/basepack_test_app/app/components/author_form.rb +8 -5
  58. data/test/basepack_test_app/app/components/author_grid.rb +2 -2
  59. data/test/basepack_test_app/app/components/book_form.rb +34 -31
  60. data/test/basepack_test_app/app/components/book_form_with_defaults.rb +6 -7
  61. data/test/basepack_test_app/app/components/book_form_with_file_upload.rb +10 -0
  62. data/test/basepack_test_app/app/components/book_form_with_nested_attributes.rb +5 -6
  63. data/test/basepack_test_app/app/components/book_grid.rb +19 -8
  64. data/test/basepack_test_app/app/components/book_grid_filtering.rb +4 -7
  65. data/test/basepack_test_app/app/components/book_grid_loader.rb +28 -15
  66. data/test/basepack_test_app/app/components/book_grid_with_custom_columns.rb +45 -21
  67. data/test/basepack_test_app/app/components/book_grid_with_default_values.rb +26 -8
  68. data/test/basepack_test_app/app/components/book_grid_with_excluded_columns.rb +11 -0
  69. data/test/basepack_test_app/app/components/book_grid_with_extra_feedback.rb +2 -2
  70. data/test/basepack_test_app/app/components/book_grid_with_extra_filters.rb +7 -6
  71. data/test/basepack_test_app/app/components/book_grid_with_mass_assignment_security.rb +9 -0
  72. data/test/basepack_test_app/app/components/book_grid_with_nested_attributes.rb +9 -9
  73. data/test/basepack_test_app/app/components/book_grid_with_overridden_columns.rb +5 -3
  74. data/test/basepack_test_app/app/components/book_grid_with_paging.rb +6 -8
  75. data/test/basepack_test_app/app/components/book_grid_with_persistence.rb +6 -4
  76. data/test/basepack_test_app/app/components/book_grid_with_scope.rb +6 -0
  77. data/test/basepack_test_app/app/components/book_grid_with_scoped_authors.rb +10 -7
  78. data/test/basepack_test_app/app/components/book_grid_with_virtual_attributes.rb +21 -13
  79. data/test/basepack_test_app/app/components/book_paging_form.rb +21 -0
  80. data/test/basepack_test_app/app/components/book_query_builder.rb +7 -6
  81. data/test/basepack_test_app/app/components/book_with_custom_primary_key_grid.rb +6 -7
  82. data/test/basepack_test_app/app/components/books_bound_to_author.rb +9 -7
  83. data/test/basepack_test_app/app/components/border_layout_panel_with_persistence.rb +12 -0
  84. data/test/basepack_test_app/app/components/double_book_grid.rb +19 -14
  85. data/test/basepack_test_app/app/components/form_without_model.rb +15 -16
  86. data/test/basepack_test_app/app/components/grid_with_initial_sorting.rb +7 -0
  87. data/test/basepack_test_app/app/components/grid_with_inline_data.rb +7 -0
  88. data/test/basepack_test_app/app/components/paging_form_with_search.rb +2 -2
  89. data/test/basepack_test_app/app/components/panel_with_persistent_regions.rb +35 -0
  90. data/test/basepack_test_app/app/components/query_builder.rb +7 -0
  91. data/test/basepack_test_app/app/components/simple_panel.rb +16 -11
  92. data/test/basepack_test_app/app/components/simple_window.rb +7 -6
  93. data/test/basepack_test_app/app/components/some_accordion.rb +18 -0
  94. data/test/basepack_test_app/app/components/some_auth_app.rb +5 -5
  95. data/test/basepack_test_app/app/components/some_border_layout.rb +20 -20
  96. data/test/basepack_test_app/app/components/some_search_panel.rb +6 -0
  97. data/test/basepack_test_app/app/components/some_simple_app.rb +30 -16
  98. data/test/basepack_test_app/app/components/some_tab_panel.rb +18 -15
  99. data/test/basepack_test_app/app/components/user_form.rb +18 -16
  100. data/test/basepack_test_app/app/components/user_form_with_default_fields.rb +5 -6
  101. data/test/basepack_test_app/app/components/user_grid.rb +11 -6
  102. data/test/basepack_test_app/app/components/user_grid_with_customized_form_fields.rb +5 -3
  103. data/test/basepack_test_app/app/components/window_component_loader.rb +25 -21
  104. data/test/basepack_test_app/app/models/address.rb +0 -26
  105. data/test/basepack_test_app/app/models/author.rb +0 -31
  106. data/test/basepack_test_app/app/models/book.rb +1 -42
  107. data/test/basepack_test_app/app/models/book_with_custom_primary_key.rb +1 -23
  108. data/test/basepack_test_app/app/models/role.rb +0 -21
  109. data/test/basepack_test_app/app/models/user.rb +0 -24
  110. data/test/basepack_test_app/app/views/layouts/components.html.erb +1 -1
  111. data/test/basepack_test_app/config/application.rb +1 -1
  112. data/test/basepack_test_app/config/database.yml.travis +2 -6
  113. data/test/basepack_test_app/config/initializers/netzke.rb +1 -6
  114. data/test/basepack_test_app/db/schema.rb +14 -14
  115. data/test/basepack_test_app/features/accordion_panel.feature +2 -2
  116. data/test/basepack_test_app/features/form_panel.feature +7 -7
  117. data/test/basepack_test_app/features/grid_panel.feature +93 -39
  118. data/test/basepack_test_app/features/grid_panel_with_custom_primary_key.feature +2 -1
  119. data/test/basepack_test_app/features/grid_sorting.feature +30 -6
  120. data/test/basepack_test_app/features/paging_form_panel.feature +7 -7
  121. data/test/basepack_test_app/features/persistent_regions.feature +30 -0
  122. data/test/basepack_test_app/features/search_in_grid.feature +5 -5
  123. data/test/basepack_test_app/features/simple_app.feature +6 -7
  124. data/test/basepack_test_app/features/step_definitions/form_panel_steps.rb +1 -1
  125. data/test/basepack_test_app/features/step_definitions/generic_steps.rb +109 -4
  126. data/test/basepack_test_app/features/step_definitions/grid_panel_steps.rb +8 -10
  127. data/test/basepack_test_app/features/step_definitions/window_steps.rb +27 -0
  128. data/test/basepack_test_app/features/tab_panel.feature +1 -1
  129. data/test/basepack_test_app/features/window.feature +17 -0
  130. data/test/unit/accordion_panel_test.rb +2 -2
  131. data/test/unit/grid_panel_test.rb +4 -4
  132. metadata +57 -83
  133. data/TODO.rdoc +0 -8
  134. data/lib/generators/netzke/basepack_generator.rb +0 -10
  135. data/lib/generators/netzke/templates/assets/ts-checkbox.gif +0 -0
  136. data/lib/generators/netzke/templates/create_netzke_field_lists.rb +0 -18
  137. data/lib/netzke/active_record.rb +0 -20
  138. data/lib/netzke/active_record/attributes.rb +0 -259
  139. data/lib/netzke/active_record/combobox_options.rb +0 -16
  140. data/lib/netzke/active_record/relation_extensions.rb +0 -37
  141. data/lib/netzke/basepack/accordion_panel.rb +0 -39
  142. data/lib/netzke/basepack/action_column.rb +0 -68
  143. data/lib/netzke/basepack/action_column/javascripts/action_column.js +0 -61
  144. data/lib/netzke/basepack/auth_app.rb +0 -159
  145. data/lib/netzke/basepack/basic_app.rb +0 -7
  146. data/lib/netzke/basepack/border_layout_panel.rb +0 -53
  147. data/lib/netzke/basepack/border_layout_panel/javascripts/border_layout_panel.js +0 -40
  148. data/lib/netzke/basepack/data_adapters/data_mapper_adapter.rb +0 -264
  149. data/lib/netzke/basepack/data_adapters/sequel_adapter.rb +0 -260
  150. data/lib/netzke/basepack/form_panel.rb +0 -144
  151. data/lib/netzke/basepack/form_panel/fields.rb +0 -208
  152. data/lib/netzke/basepack/form_panel/javascripts/misc.js +0 -4
  153. data/lib/netzke/basepack/form_panel/services.rb +0 -142
  154. data/lib/netzke/basepack/grid_panel.rb +0 -441
  155. data/lib/netzke/basepack/grid_panel/columns.rb +0 -400
  156. data/lib/netzke/basepack/grid_panel/javascripts/rows-dd.js +0 -281
  157. data/lib/netzke/basepack/grid_panel/record_form_window.rb +0 -41
  158. data/lib/netzke/basepack/grid_panel/services.rb +0 -235
  159. data/lib/netzke/basepack/panel.rb +0 -11
  160. data/lib/netzke/basepack/wrapper.rb +0 -28
  161. data/lib/netzke/data_mapper.rb +0 -18
  162. data/lib/netzke/data_mapper/attributes.rb +0 -273
  163. data/lib/netzke/data_mapper/combobox_options.rb +0 -11
  164. data/lib/netzke/data_mapper/relation_extensions.rb +0 -38
  165. data/lib/netzke/sequel.rb +0 -18
  166. data/lib/netzke/sequel/attributes.rb +0 -274
  167. data/lib/netzke/sequel/combobox_options.rb +0 -10
  168. data/lib/netzke/sequel/relation_extensions.rb +0 -40
  169. data/locales/zh-cn.yml +0 -79
  170. data/test/basepack_test_app/app/components/book_form_with_custom_fields.rb +0 -21
  171. data/test/basepack_test_app/app/components/book_grid_with_column_actions.rb +0 -15
  172. data/test/basepack_test_app/app/components/book_grid_with_defaults.rb +0 -6
  173. data/test/basepack_test_app/app/components/book_paging_form_panel.rb +0 -22
  174. data/test/basepack_test_app/app/components/generic_user_form.rb +0 -12
  175. data/test/basepack_test_app/app/components/simple_accordion.rb +0 -11
  176. data/test/basepack_test_app/app/components/simple_tab_panel.rb +0 -11
  177. data/test/basepack_test_app/app/components/simple_wrapper.rb +0 -7
  178. data/test/basepack_test_app/app/components/some_accordion_panel.rb +0 -22
  179. data/test/basepack_test_app/app/presenters/forms/generic_user.rb +0 -6
  180. data/test/basepack_test_app/app/views/components/loadable_window.html.erb +0 -9
  181. data/test/basepack_test_app/app/views/components/simple_panel.html.erb +0 -1
  182. data/test/basepack_test_app/features/components_in_view.feature +0 -11
  183. data/test/basepack_test_app/features/simple_panel.feature +0 -11
  184. data/test/basepack_test_app/features/validations_in_grid.feature +0 -13
  185. data/test/basepack_test_app/features/virtual_attributes.feature +0 -16
  186. data/test/basepack_test_app/spec/components/form_panel_spec.rb +0 -53
  187. data/test/basepack_test_app/spec/components/grid_panel_spec.rb +0 -10
  188. data/test/basepack_test_app/spec/data_adapter/adapter_spec.rb +0 -68
  189. data/test/basepack_test_app/spec/data_adapter/attributes_spec.rb +0 -56
  190. data/test/basepack_test_app/spec/data_adapter/relation_extensions_spec.rb +0 -125
  191. data/test/basepack_test_app/spec/factories.rb +0 -28
  192. data/test/basepack_test_app/spec/spec_helper.rb +0 -39
@@ -0,0 +1,44 @@
1
+ module Netzke
2
+ module Basepack
3
+ # When mixed into a component with resizable layout (e.g. border layout), this module enables persistence for regions size and collapsed/expanded state.
4
+ module ItemPersistence
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # this plugins does the job of assigning resize/collapse events for the component
9
+ plugin :events_plugin do |c|
10
+ c.klass = EventsPlugin
11
+ end
12
+
13
+ # Added endpoints
14
+ endpoint :region_resized do |params, this|
15
+ state[:"#{params[:item]}_width"] = params[:width].to_i if params[:width]
16
+ state[:"#{params[:item]}_height"] = params[:height].to_i if params[:height]
17
+ end
18
+
19
+ endpoint :region_collapsed do |params, this|
20
+ state[:"#{params[:item]}_collapsed"] = true
21
+ end
22
+
23
+ endpoint :region_expanded do |params, this|
24
+ state[:"#{params[:item]}_collapsed"] = false
25
+ end
26
+ end
27
+
28
+ def extend_item(item)
29
+ item = super
30
+ item_id = item[:netzke_component] || item[:item_id] # identify regions by item_id
31
+
32
+ if item_id
33
+ item[:width] = state[:"#{item_id}_width"] if state[:"#{item_id}_width"]
34
+ item[:height] = state[:"#{item_id}_height"] if state[:"#{item_id}_height"]
35
+ if state[:"#{item_id}_collapsed"].present?
36
+ item[:collapsed] = state[:"#{item_id}_collapsed"]
37
+ end
38
+ end
39
+
40
+ item
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ module Netzke
2
+ module Basepack
3
+ module ItemPersistence
4
+ class EventsPlugin < Netzke::Plugin
5
+ js_configure do |c|
6
+ c.init = <<-JS
7
+ function(){
8
+ this.callParent(arguments);
9
+
10
+ this.cmp.on('afterlayout', function(){
11
+
12
+ // scope of the parent panel
13
+ this.items.each(function(item, index, length){
14
+ if (!item.oldSize) item.oldSize = item.getSize(); // remember initial size
15
+
16
+ item.on('resize', function(panel, w, h){
17
+ var params = {item: panel.itemId};
18
+
19
+ if ((panel.region == 'west' || panel.region == 'east') && panel.oldSize.width != w) {
20
+ params.width = w;
21
+ this.regionResized(params);
22
+ } else if (panel.region == 'north' || panel.region == 'south' && panel.oldSize.height != h){
23
+ params.height = h;
24
+ this.regionResized(params);
25
+ }
26
+
27
+ panel.oldSize = panel.getSize();
28
+ }, this);
29
+
30
+ item.on('collapse', function(panel){
31
+ this.regionCollapsed({item: panel.itemId});
32
+ }, this);
33
+
34
+ item.on('expand', function(panel){
35
+ this.regionExpanded({item: panel.itemId});
36
+ }, this);
37
+
38
+ }, this);
39
+
40
+ }, this.cmp, {single: true});
41
+ }
42
+ JS
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,9 +1,9 @@
1
1
  module Netzke
2
2
  module Basepack
3
- # A FormPanel with paging toolbar. Allows browsing and editing records one-by-one.
3
+ # A Form with paging toolbar. Allows browsing and editing records one-by-one.
4
4
  #
5
5
  # == Configuration
6
- # Besides +Netzke::Basepack::FormPanel+ config options, accepts:
6
+ # Besides +Netzke::Basepack::Form+ config options, accepts:
7
7
  # * +scope+ - specifies how the data should be filtered.
8
8
  # When it's a symbol, it's used as a scope name.
9
9
  # When it's a string, it's a SQL statement (passed directly to +ActiveRecord::Relation#where+).
@@ -18,55 +18,49 @@ module Netzke
18
18
  #
19
19
  # == ToDo
20
20
  # * Update the number of records after form submit
21
- class PagingFormPanel < FormPanel
22
- js_mixin :paging_form_panel
21
+ class PagingForm < Form
22
+ js_configure do |c|
23
+ c.mixin
24
+ end
23
25
 
24
26
  # override
25
27
  def record
26
28
  @record ||= data_adapter.first
27
29
  end
28
30
 
29
- # Pass total records amount and the first record to the JS constructor
30
- def js_config
31
- super.merge({
32
- :total_records => total_records
33
- })
31
+ def js_configure(c)
32
+ super
33
+ # Pass total records amount and the first record to the JS constructor
34
+ c.total_records = total_records
34
35
  end
35
36
 
36
- endpoint :get_data do |params|
37
+ endpoint :get_data do |params, this|
37
38
  @record = data_adapter.get_records(params).first
38
39
  record_hash = @record && js_record_data
39
- {:records => record_hash && [record_hash] || [], :total => total_records(params)}
40
+ this.merge!(:records => record_hash && [record_hash] || [], :total => total_records(params))
40
41
  end
41
42
 
42
- action :search do
43
- {
44
- :text => I18n.t('netzke.basepack.paging_form_panel.actions.search'),
45
- :tooltip => I18n.t('netzke.basepack.paging_form_panel.actions.search_tooltip'),
46
- :icon => :find,
47
- :select => true
48
- }
43
+ action :search do |a|
44
+ a.icon = :find
45
+ a.select = true
49
46
  end
50
47
 
51
48
  def configure_bbar(c)
52
49
  super
53
- c[:bbar] << :search.action
50
+ c[:bbar] << :search
54
51
  end
55
52
 
56
- component :search_form do
57
- {
58
- :lazy_loading => true,
59
- :class_name => "Netzke::Basepack::SearchWindow",
60
- :model => config[:model]
61
- }
53
+ component :search_form do |c|
54
+ c.klass = SearchWindow
55
+ c.model = config[:model]
56
+ c.fields = fields
62
57
  end
63
58
 
64
- protected
65
-
66
- def total_records(params = {})
67
- @total_records ||= data_adapter.count_records(params, [])
68
- end
59
+ protected
69
60
 
61
+ def total_records(params = {})
62
+ @total_records ||= data_adapter.count_records(params, [])
63
+ end
70
64
  end
71
65
  end
72
66
  end
@@ -3,7 +3,7 @@
3
3
  if (this.searchWindow) {
4
4
  this.searchWindow.show();
5
5
  } else {
6
- this.loadNetzkeComponent({name: 'search_form', callback: function(win){
6
+ this.netzkeLoadComponent('search_form', {callback: function(win){
7
7
  this.searchWindow = win;
8
8
  win.show();
9
9
 
@@ -30,15 +30,13 @@
30
30
  },
31
31
 
32
32
  afterRender: function() {
33
- // delete this.record so our parent FormPanel doesn't have to load it - we do it ourselves
33
+ // delete this.record so our parent Form doesn't have to load it - we do it ourselves
34
34
  var record = this.record;
35
35
  delete (this.record);
36
36
 
37
37
  this.callParent();
38
38
 
39
39
  if (record) this.store.loadRawData({records: [record], total: this.totalRecords});
40
-
41
- new Ext.LoadMask(this, Ext.apply(this.applyMask, {store: this.store}));
42
40
  },
43
41
 
44
42
  initComponent: function() {
@@ -1,87 +1,60 @@
1
1
  module Netzke
2
2
  module Basepack
3
+ # Search query builder used in Grid's advanced search
3
4
  class QueryBuilder < Netzke::Base
4
- js_base_class "Ext.tab.Panel"
5
-
6
- js_property :active_tab, 0
7
-
8
- js_translate :overwrite_confirm, :overwrite_confirm_title, :delete_confirm, :delete_confirm_title
9
-
10
- js_mixin :query_builder
5
+ js_configure do |c|
6
+ c.extend = "Ext.tab.Panel"
7
+ c.active_tab = 0
8
+ c.translate :overwrite_confirm, :overwrite_confirm_title, :delete_confirm, :delete_confirm_title
9
+ c.mixin
10
+ end
11
11
 
12
- component :search_panel do
13
- {
14
- :class_name => "Netzke::Basepack::SearchPanel",
15
- :model => config[:model],
16
- :fields => config[:fields],
17
- :preset_query => config[:query],
18
- :auto_scroll => config[:auto_scroll]
19
- }
12
+ component :search_panel do |c|
13
+ c.klass = SearchPanel
14
+ c.model = config[:model]
15
+ c.fields = config[:fields]
16
+ c.preset_query = config[:query]
17
+ c.auto_scroll = config[:auto_scroll]
18
+ c.eager_loading = true
20
19
  end
21
20
 
22
- action :clear_all do
23
- {
24
- :text => I18n.t('netzke.basepack.query_builder.actions.clear_all'),
25
- :tooltip => I18n.t('netzke.basepack.query_builder.actions.clear_all_tooltip'),
26
- :icon => :cross
27
- }
21
+ action :clear_all do |a|
22
+ a.text = I18n.t('netzke.basepack.query_builder.actions.clear_all')
23
+ a.tooltip = I18n.t('netzke.basepack.query_builder.actions.clear_all_tooltip')
24
+ a.icon = :cross
28
25
  end
29
26
 
30
- action :reset do
31
- {
32
- :text => I18n.t('netzke.basepack.query_builder.actions.reset'),
33
- :tooltip => I18n.t('netzke.basepack.query_builder.actions.reset_tooltip'),
34
- :icon => :application_form
35
- }
27
+ action :reset do |a|
28
+ a.text = I18n.t('netzke.basepack.query_builder.actions.reset')
29
+ a.tooltip = I18n.t('netzke.basepack.query_builder.actions.reset_tooltip')
30
+ a.icon = :application_form
36
31
  end
37
32
 
38
- action :save_preset do
39
- {
40
- :text => I18n.t('netzke.basepack.query_builder.actions.save_preset'),
41
- :tooltip => I18n.t('netzke.basepack.query_builder.actions.save_preset_tooltip'),
42
- :icon => :disk
43
- }
33
+ action :save_preset do |a|
34
+ a.text = I18n.t('netzke.basepack.query_builder.actions.save_preset')
35
+ a.tooltip = I18n.t('netzke.basepack.query_builder.actions.save_preset_tooltip')
36
+ a.icon = :disk
44
37
  end
45
38
 
46
- action :delete_preset do
47
- {
48
- :text => I18n.t('netzke.basepack.query_builder.actions.delete_preset'),
49
- :tooltip => I18n.t('netzke.basepack.query_builder.actions.delete_preset_tooltip'),
50
- :icon => :cross
51
- }
39
+ action :delete_preset do |a|
40
+ a.text = I18n.t('netzke.basepack.query_builder.actions.delete_preset')
41
+ a.tooltip = I18n.t('netzke.basepack.query_builder.actions.delete_preset_tooltip')
42
+ a.icon = :cross
52
43
  end
53
44
 
54
- action :apply do
55
- {
56
- :text => I18n.t('netzke.basepack.query_builder.actions.apply'),
57
- :tooltip => I18n.t('netzke.basepack.query_builder.actions.apply_tooltip'),
58
- :icon => :accept
59
- }
45
+ action :apply do |a|
46
+ a.text = I18n.t('netzke.basepack.query_builder.actions.apply')
47
+ a.tooltip = I18n.t('netzke.basepack.query_builder.actions.apply_tooltip')
48
+ a.icon = :accept
60
49
  end
61
50
 
62
- def js_config
63
- super.tap do |s|
64
- s[:bbar] = (config[:bbar] || []) + [:clear_all.action, :reset.action, "->",
65
- I18n.t('netzke.basepack.query_builder.presets'),
66
- {
67
- :itemId => "presetsCombo",
68
- :xtype => "combo",
69
- :triggerAction => "all",
70
- :value => super[:load_last_preset] && last_preset.try(:fetch, "name"),
71
- :store => state[:presets].blank? ? [[[], ""]] : state[:presets].map{ |s| [s["query"], s["name"]] },
72
- :ref => "../presetsCombo",
73
- :listeners => {:before_select => {
74
- :fn => "function(combo, record){
75
- var form = Ext.getCmp('#{global_id}');
76
- form.buildFormFromQuery(record.data.value);
77
- }".l
78
- }}
79
- }, :save_preset.action, :delete_preset.action
80
- ]
81
- end
51
+ def js_configure(c)
52
+ super
53
+ c.preset_store = state[:presets].blank? ? [[[], ""]] : state[:presets].map{ |s| [s["query"], s["name"]] }
54
+ c.bbar = (config[:bbar] || []) + [:clear_all, :reset, "->", I18n.t('netzke.basepack.query_builder.presets'), :preset_selector, :save_preset, :delete_preset ]
82
55
  end
83
56
 
84
- endpoint :save_preset do |params|
57
+ endpoint :save_preset do |params, this|
85
58
  saved_searches = state[:presets] || []
86
59
  existing = saved_searches.detect{ |s| s["name"] == params[:name] }
87
60
  query = ActiveSupport::JSON.decode(params[:query])
@@ -90,18 +63,16 @@ module Netzke
90
63
  else
91
64
  saved_searches << {"name" => params[:name], "query" => query}
92
65
  end
93
- update_state(:presets, saved_searches)
94
- {:netzke_feedback => I18n.t('netzke.basepack.query_builder.preset_saved')}
66
+ state[:presets] = saved_searches
67
+ this.netzke_feedback(I18n.t('netzke.basepack.query_builder.preset_saved'))
95
68
  end
96
69
 
97
- endpoint :delete_preset do |params|
70
+ endpoint :delete_preset do |params, this|
98
71
  saved_searches = state[:presets]
99
72
  saved_searches.delete_if{ |s| s["name"] == params[:name] }
100
- update_state(:presets, saved_searches)
101
- {:netzke_feedback => I18n.t('netzke.basepack.query_builder.preset_deleted')}
73
+ state[:presets] = saved_searches
74
+ this.netzke_feedback(I18n.t('netzke.basepack.query_builder.preset_deleted'))
102
75
  end
103
-
104
-
105
76
  end
106
77
  end
107
78
  end
@@ -2,7 +2,7 @@
2
2
  initComponent: function() {
3
3
  this.callParent();
4
4
 
5
- this.presetsCombo = this.getDockedItems()[1].getComponent('presetsCombo');
5
+ this.presetsCombo = this.down("combo[itemId='presets-combo']");
6
6
 
7
7
  this.add({title: "+"});
8
8
 
@@ -38,7 +38,7 @@
38
38
  addTab: function(activate, closable){
39
39
  var newTabConfig = Ext.apply({}, this.netzkeComponents.searchPanel);
40
40
  newTabConfig.id = Ext.id(); // We need a unique ID every time
41
- newTabConfig.preventHeader = true;
41
+ newTabConfig.header = false;
42
42
  newTabConfig.border = false;
43
43
 
44
44
  var newTab = this.insert(
@@ -149,5 +149,19 @@
149
149
  var presetsComboStore = this.presetsCombo.getStore();
150
150
  presetsComboStore.removeAt(presetsComboStore.find('text', name));
151
151
  this.presetsCombo.reset();
152
+ },
153
+
154
+ presetSelectorConfig: function(config) {
155
+ return {
156
+ itemId: 'presets-combo',
157
+ xtype: "combo",
158
+ triggerAction: "all",
159
+ store: config.presetStore,
160
+ listeners: {
161
+ beforeselect: function(self, record) {
162
+ this.netzkeParent.buildFormFromQuery(record.get('field1'));
163
+ }
164
+ },
165
+ }
152
166
  }
153
167
  }
@@ -0,0 +1,67 @@
1
+ module Netzke
2
+ module Basepack
3
+ class RecordFormWindow < Netzke::Basepack::Window
4
+
5
+ component :add_form do |c|
6
+ preconfigure_form(c)
7
+ end
8
+
9
+ component :edit_form do |c|
10
+ preconfigure_form(c)
11
+ end
12
+
13
+ component :multi_edit_form do |c|
14
+ preconfigure_form(c)
15
+ c.multi_edit = true
16
+ end
17
+
18
+ def configure(c)
19
+ super
20
+ c.fbar = [:ok, :cancel]
21
+ end
22
+
23
+ js_configure do |c|
24
+ c.button_align = :right
25
+ c.width = 400
26
+ c.auto_height = true
27
+ c.modal = true
28
+ c.init_component = <<-JS
29
+ function(params){
30
+ this.callParent();
31
+ this.items.first().on("submitsuccess", function(){ this.closeRes = "ok"; this.close(); }, this);
32
+ }
33
+ JS
34
+
35
+ c.on_ok = <<-JS
36
+ function(params){
37
+ this.items.first().onApply();
38
+ }
39
+ JS
40
+
41
+ c.on_cancel = <<-JS
42
+ function(params){
43
+ this.close();
44
+ }
45
+ JS
46
+ end
47
+
48
+ action :ok
49
+
50
+ action :cancel
51
+
52
+ protected
53
+
54
+ def self.server_side_config_options
55
+ [:form_config, *super]
56
+ end
57
+
58
+ def preconfigure_form(c)
59
+ c.klass = Form
60
+ c.border = true
61
+ c.bbar = false
62
+ c.prevent_header = true
63
+ c.merge! config.form_config
64
+ end
65
+ end
66
+ end
67
+ end