binda 0.0.6 → 0.0.7

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/Rakefile +2 -1
  4. data/app/assets/javascripts/binda/dist/binda.bundle.js +75 -75
  5. data/app/assets/stylesheets/binda/settings/common.scss +4 -0
  6. data/app/controllers/binda/application_controller.rb +1 -1
  7. data/app/controllers/binda/boards_controller.rb +73 -0
  8. data/app/controllers/binda/components_controller.rb +18 -44
  9. data/app/controllers/binda/field_groups_controller.rb +36 -24
  10. data/app/controllers/binda/field_settings_controller.rb +5 -5
  11. data/app/controllers/binda/manage/users_controller.rb +2 -9
  12. data/app/controllers/binda/structures_controller.rb +6 -13
  13. data/app/controllers/concerns/binda/default_helpers.rb +226 -0
  14. data/app/controllers/concerns/binda/fieldable_helpers.rb +44 -0
  15. data/app/helpers/binda/boards_helper.rb +13 -0
  16. data/app/helpers/binda/components_helper.rb +0 -5
  17. data/app/helpers/binda/field_settings_helper.rb +1 -1
  18. data/app/models/binda/asset.rb +0 -8
  19. data/app/models/binda/binda.rb +7 -0
  20. data/app/models/binda/binding.rb +4 -4
  21. data/app/models/binda/board.rb +41 -0
  22. data/app/models/binda/category.rb +7 -3
  23. data/app/models/binda/checkbox.rb +1 -3
  24. data/app/models/binda/choice.rb +31 -1
  25. data/app/models/binda/component.rb +7 -22
  26. data/app/models/binda/field_group.rb +13 -7
  27. data/app/models/binda/field_setting.rb +40 -29
  28. data/app/models/binda/gallery.rb +0 -7
  29. data/app/models/binda/radio.rb +1 -1
  30. data/app/models/binda/repeater.rb +13 -20
  31. data/app/models/binda/selection.rb +17 -0
  32. data/app/models/binda/string.rb +4 -0
  33. data/app/models/binda/structure.rb +65 -7
  34. data/app/models/concerns/binda/{component_model_helper.rb → fieldable_associations.rb} +102 -31
  35. data/app/views/binda/boards/edit.html.erb +7 -0
  36. data/app/views/binda/components/edit.html.erb +4 -1
  37. data/app/views/binda/components/index.html.erb +2 -0
  38. data/app/views/binda/components/new.html.erb +1 -1
  39. data/app/views/binda/field_groups/_form_body.html.erb +8 -8
  40. data/app/views/binda/field_groups/_form_item.html.erb +3 -3
  41. data/app/views/binda/field_groups/_form_item_choice.erb +11 -8
  42. data/app/views/binda/field_groups/_form_section.html.erb +5 -5
  43. data/app/views/binda/field_groups/_form_section_repeater.html.erb +3 -3
  44. data/app/views/binda/field_groups/edit.html.erb +1 -1
  45. data/app/views/binda/field_groups/new.html.erb +1 -1
  46. data/app/views/binda/{components → fieldable}/_form_body.html.erb +9 -9
  47. data/app/views/binda/{components → fieldable}/_form_item_asset.html.erb +0 -0
  48. data/app/views/binda/{components → fieldable}/_form_item_date.html.erb +0 -0
  49. data/app/views/binda/{components → fieldable}/_form_item_gallery.html.erb +0 -0
  50. data/app/views/binda/{components → fieldable}/_form_item_new_repeater.html.erb +5 -5
  51. data/app/views/binda/{components → fieldable}/_form_item_repeater.html.erb +8 -9
  52. data/app/views/binda/fieldable/_form_item_selections.html.erb +99 -0
  53. data/app/views/binda/fieldable/_form_item_string.html.erb +19 -0
  54. data/app/views/binda/{components → fieldable}/_form_item_text.html.erb +2 -11
  55. data/app/views/binda/fieldable/_form_section.html.erb +52 -0
  56. data/app/views/binda/fieldable/_form_section_repeater.html.erb +48 -0
  57. data/app/views/binda/fieldable/_form_sidebar.html.erb +35 -0
  58. data/app/views/binda/structures/_form_body.html.erb +6 -0
  59. data/app/views/binda/structures/_form_section.html.erb +1 -1
  60. data/app/views/binda/structures/edit.html.erb +3 -0
  61. data/app/views/binda/structures/index.html.erb +2 -0
  62. data/app/views/layouts/binda/_flash.html.erb +3 -3
  63. data/app/views/layouts/binda/_sidebar.html.erb +20 -15
  64. data/config/locales/en.yml +4 -0
  65. data/config/routes.rb +18 -21
  66. data/db/migrate/1_create_binda_tables.rb +12 -6
  67. data/lib/binda/engine.rb +5 -1
  68. data/lib/binda/version.rb +1 -1
  69. data/lib/generators/binda/install/install_generator.rb +9 -0
  70. data/lib/generators/binda/setup/setup_generator.rb +50 -7
  71. data/lib/tasks/binda.rake +78 -24
  72. metadata +100 -31
  73. data/app/controllers/binda/settings_controller.rb +0 -75
  74. data/app/controllers/concerns/binda/component_controller_helper.rb +0 -16
  75. data/app/helpers/binda/settings_helper.rb +0 -13
  76. data/app/models/binda/select.rb +0 -7
  77. data/app/models/binda/setting.rb +0 -42
  78. data/app/views/binda/components/_form_item_selectable.html.erb +0 -72
  79. data/app/views/binda/components/_form_section.html.erb +0 -42
  80. data/app/views/binda/components/_form_section_repeater.html.erb +0 -41
  81. data/app/views/binda/components/_form_sidebar.html.erb +0 -34
  82. data/app/views/binda/settings/_dashboard_form.html.erb +0 -51
  83. data/app/views/binda/settings/_form.html.erb +0 -52
  84. data/app/views/binda/settings/dashboard.html.erb +0 -9
  85. data/app/views/binda/settings/edit.html.erb +0 -8
  86. data/app/views/binda/settings/index.html.erb +0 -34
  87. data/app/views/binda/settings/new.html.erb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a0ed652cd145d7bd16c1e6488c5fdd9a3177018
4
- data.tar.gz: ae29ad9b71bd43ba1a40eeb67b69ab9c919fe847
3
+ metadata.gz: 6690ffecf6e02f102a52ba0adb48e57914e6daa3
4
+ data.tar.gz: 3a29b2ed21beea482e4d4f069ee882595ab321b9
5
5
  SHA512:
6
- metadata.gz: 00f4c1845cfeb066332494f6213d92abccdc41f5d6f8be0a7d2901b9b06f7d47a3a61a1ef324a08665db8d0f998f71bca1868a149ed3e33bbca002e72bb2285f
7
- data.tar.gz: 738f6490b90e4efd030938c372f70ba1fb8e65150571e02204a11e3221a1b051c07ad18785cd80bedbc72074953221461a7f081a716f2c2eb2d1aa2b690a5975
6
+ metadata.gz: 084e2b3bb8e2e52676cc381e8eb6daaceb15a2127da3fe78889bcf3d36054b2adfcb2948fd042afa12e6446f45a6709722b702eb97dbb5419e4ae06b937b599f
7
+ data.tar.gz: 29cd68ff87c402662711569bfdef44c4951e39f36a112f900ced53a5c325bbc8a2819818a27292a40212c4dcfe665b980f1ebaf9015d29d2b6db343ba2b2b50e
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Binda
2
- A modular CMS for Ruby on Rails 5.
2
+ A modular CMS for Ruby on Rails 5.1.
3
3
 
4
4
  [![Code Climate](https://codeclimate.com/github/lacolonia/binda/badges/gpa.svg)](https://codeclimate.com/github/lacolonia/binda)
5
5
  [![Issue Count](https://codeclimate.com/github/lacolonia/binda/badges/issue_count.svg)](https://codeclimate.com/github/lacolonia/binda)
@@ -10,15 +10,17 @@ A modular CMS for Ruby on Rails 5.
10
10
  Add this line to your application's Gemfile:
11
11
 
12
12
  ```ruby
13
- gem 'binda', '~> 0.0.6'
13
+ gem 'binda', '~> 0.0.7'
14
14
  ```
15
15
 
16
16
  Then execute:
17
+
17
18
  ```bash
18
19
  $ bundle
19
20
  ```
20
21
 
21
22
  To install Binda run the installer from terminal.
23
+
22
24
  ``` bash
23
25
  $ rails g binda:install
24
26
  ```
data/Rakefile CHANGED
@@ -32,6 +32,7 @@ require 'bundler/gem_tasks'
32
32
  # t.libs << 'test'
33
33
  # t.pattern = 'test/**/*_test.rb'
34
34
  # t.verbose = false
35
+ # t.warning = false
35
36
  # end
36
37
  # task default: :test
37
38
 
@@ -40,4 +41,4 @@ require 'bundler/gem_tasks'
40
41
  require 'rspec/core/rake_task'
41
42
  RSpec::Core::RakeTask.new('spec')
42
43
  # If you want to make this the default task
43
- task :default => :spec
44
+ task default: :spec
@@ -63,7 +63,7 @@
63
63
  /******/ __webpack_require__.p = "";
64
64
  /******/
65
65
  /******/ // Load entry module and return exports
66
- /******/ return __webpack_require__(__webpack_require__.s = 5);
66
+ /******/ return __webpack_require__(__webpack_require__.s = 6);
67
67
  /******/ })
68
68
  /************************************************************************/
69
69
  /******/ ([
@@ -71,7 +71,67 @@
71
71
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
72
72
 
73
73
  "use strict";
74
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(6);
74
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _FormItemEditor; });
75
+ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
76
+
77
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
78
+
79
+ ///- - - - - - - - - - - - - - - - - - - -
80
+ /// FORM ITEM
81
+ ///- - - - - - - - - - - - - - - - - - - -
82
+
83
+ var FormItemEditor = function () {
84
+ function FormItemEditor() {
85
+ _classCallCheck(this, FormItemEditor);
86
+
87
+ this.target = '.form-item--editor';
88
+ }
89
+
90
+ _createClass(FormItemEditor, [{
91
+ key: 'isSet',
92
+ value: function isSet() {
93
+ if ($(this.target).length > 0) {
94
+ return true;
95
+ } else {
96
+ return false;
97
+ }
98
+ }
99
+ }, {
100
+ key: 'setEvents',
101
+ value: function setEvents() {
102
+ var _this = this;
103
+
104
+ // run resize to set initial size
105
+ this.resize();
106
+ // run resize on each of these events
107
+ $(window).resize(function () {
108
+ _this.resize();
109
+ });
110
+ }
111
+ }, {
112
+ key: 'resize',
113
+ value: function resize() {
114
+ $(this.target).each(function () {
115
+ // If the form item edito is closed don't go any further
116
+ if ($(this).height() === 0) return;
117
+ // otherwise update the max-height which is needed for the CSS transition
118
+ // NOTE you need to remove the max-height (inside 'style' attribute) to get the real height
119
+ $(this).css("max-height", $(this).removeAttr('style').height());
120
+ });
121
+ }
122
+ }]);
123
+
124
+ return FormItemEditor;
125
+ }();
126
+
127
+ var _FormItemEditor = new FormItemEditor();
128
+
129
+ /***/ }),
130
+ /* 1 */
131
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
132
+
133
+ "use strict";
134
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(0);
75
135
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _FormItem; });
76
136
  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
77
137
 
@@ -148,7 +208,7 @@ function addNewItem(event) {
148
208
  }
149
209
 
150
210
  /***/ }),
151
- /* 1 */
211
+ /* 2 */
152
212
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
153
213
 
154
214
  "use strict";
@@ -191,11 +251,11 @@ var FormItemAsset = function () {
191
251
  var _FormItemAsset = new FormItemAsset();
192
252
 
193
253
  /***/ }),
194
- /* 2 */
254
+ /* 3 */
195
255
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
196
256
 
197
257
  "use strict";
198
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(6);
258
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(0);
199
259
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _FormItemChoice; });
200
260
  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
201
261
 
@@ -266,11 +326,11 @@ var FormItemChoice = function () {
266
326
  var _FormItemChoice = new FormItemChoice();
267
327
 
268
328
  /***/ }),
269
- /* 3 */
329
+ /* 4 */
270
330
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
271
331
 
272
332
  "use strict";
273
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(6);
333
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__form_item_editor__ = __webpack_require__(0);
274
334
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _FormItemRepeater; });
275
335
  var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
276
336
 
@@ -355,7 +415,7 @@ function addNewItem(event) {
355
415
  }
356
416
 
357
417
  /***/ }),
358
- /* 4 */
418
+ /* 5 */
359
419
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
360
420
 
361
421
  "use strict";
@@ -398,17 +458,17 @@ function addNewItem(event) {
398
458
  };
399
459
 
400
460
  /***/ }),
401
- /* 5 */
461
+ /* 6 */
402
462
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
403
463
 
404
464
  "use strict";
405
465
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
406
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_form_item__ = __webpack_require__(0);
407
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_form_item_repeater__ = __webpack_require__(3);
408
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_form_item_asset__ = __webpack_require__(1);
409
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_form_item_choice__ = __webpack_require__(2);
410
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_form_item_editor__ = __webpack_require__(6);
411
- /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_sortable__ = __webpack_require__(4);
466
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_form_item__ = __webpack_require__(1);
467
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_form_item_repeater__ = __webpack_require__(4);
468
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_form_item_asset__ = __webpack_require__(2);
469
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_form_item_choice__ = __webpack_require__(3);
470
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__components_form_item_editor__ = __webpack_require__(0);
471
+ /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_sortable__ = __webpack_require__(5);
412
472
  ///- - - - - - - - - - - - - - - - - - - -
413
473
  /// INDEX OF BINDA'S SCRIPTS
414
474
  ///- - - - - - - - - - - - - - - - - - - -
@@ -439,65 +499,5 @@ $(document).ready(function () {
439
499
  __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__components_sortable__["a" /* default */])();
440
500
  });
441
501
 
442
- /***/ }),
443
- /* 6 */
444
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
445
-
446
- "use strict";
447
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _FormItemEditor; });
448
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
449
-
450
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
451
-
452
- ///- - - - - - - - - - - - - - - - - - - -
453
- /// FORM ITEM
454
- ///- - - - - - - - - - - - - - - - - - - -
455
-
456
- var FormItemEditor = function () {
457
- function FormItemEditor() {
458
- _classCallCheck(this, FormItemEditor);
459
-
460
- this.target = '.form-item--editor';
461
- }
462
-
463
- _createClass(FormItemEditor, [{
464
- key: 'isSet',
465
- value: function isSet() {
466
- if ($(this.target).length > 0) {
467
- return true;
468
- } else {
469
- return false;
470
- }
471
- }
472
- }, {
473
- key: 'setEvents',
474
- value: function setEvents() {
475
- var _this = this;
476
-
477
- // run resize to set initial size
478
- this.resize();
479
- // run resize on each of these events
480
- $(window).resize(function () {
481
- _this.resize();
482
- });
483
- }
484
- }, {
485
- key: 'resize',
486
- value: function resize() {
487
- $(this.target).each(function () {
488
- // If the form item edito is closed don't go any further
489
- if ($(this).height() === 0) return;
490
- // otherwise update the max-height which is needed for the CSS transition
491
- // NOTE you need to remove the max-height (inside 'style' attribute) to get the real height
492
- $(this).css("max-height", $(this).removeAttr('style').height());
493
- });
494
- }
495
- }]);
496
-
497
- return FormItemEditor;
498
- }();
499
-
500
- var _FormItemEditor = new FormItemEditor();
501
-
502
502
  /***/ })
503
503
  /******/ ]);
@@ -90,4 +90,8 @@ body#tinymce {
90
90
  &:first-child {
91
91
  margin-top: 0 !important;
92
92
  }
93
+ }
94
+
95
+ .pagination {
96
+ width: 100%;
93
97
  }
@@ -5,7 +5,7 @@ module Binda
5
5
 
6
6
  before_action :authenticate_user!
7
7
 
8
- include ComponentControllerHelper
8
+ include DefaultHelpers
9
9
 
10
10
  # _ indicates that we are not using the argument in the method
11
11
  def after_sign_in_path_for(_)
@@ -0,0 +1,73 @@
1
+ require_dependency "binda/application_controller"
2
+
3
+ module Binda
4
+ class BoardsController < ApplicationController
5
+ before_action :set_board, only: [:edit, :update, :destroy, :new_repeater ]
6
+ before_action :set_structure, only: [:edit, :update, :destroy, :new_repeater ]
7
+
8
+ include FieldableHelpers
9
+
10
+ def show
11
+ redirect_to action: :edit
12
+ end
13
+
14
+ def edit
15
+ end
16
+
17
+ def update
18
+ if @board.update(board_params)
19
+ redirect_to structure_board_path( @structure.slug, @board.slug ), notice: 'Setting was successfully updated.'
20
+ else
21
+ redirect_to edit_structure_board_path( @structure.slug, @board.slug ), flash: { alert: @board.errors }
22
+ end
23
+ end
24
+
25
+ def destroy
26
+ @board.destroy
27
+ redirect_to root_url, notice: 'Setting was successfully destroyed.'
28
+ end
29
+
30
+ def new_repeater
31
+ @repeater_setting = FieldSetting.find( params[:repeater_setting_id] )
32
+ position = @instance.repeaters.find_all{|r| r.field_setting_id = @repeater_setting.id }.length + 1
33
+ @repeater = @instance.repeaters.create( field_setting: @repeater_setting, position: position )
34
+ render 'binda/fieldable/_form_item_new_repeater', layout: false
35
+ end
36
+
37
+ def sort_repeaters
38
+ params[:repeater].each_with_index do |id, i|
39
+ Repeater.find( id ).update({ position: i + 1 })
40
+ end
41
+ head :ok
42
+ end
43
+
44
+ def dashboard
45
+ @structure = Structure.friendly.find('dashboard')
46
+ @board = Board.friendly.find('dashboard')
47
+ @instance = @board
48
+ render action: :edit
49
+ end
50
+
51
+ private
52
+ # Use callbacks to share common setup or constraints between actions.
53
+ def set_board
54
+ id ||= params[:id]
55
+ id ||= params[:board_id]
56
+ @board = Board.friendly.find(id)
57
+ # The following variable will be used as wildcard by fieldable views
58
+ @instance = @board
59
+ end
60
+
61
+ def set_structure
62
+ @structure = Structure.friendly.find(params[:structure_id])
63
+ end
64
+
65
+ # Only allow a trusted parameter "white list" through.
66
+ def board_params
67
+ default_params = params.require(:board).permit(
68
+ :name, :slug, :position, :structure_id,
69
+ { structure_attributes: [ :id ] },
70
+ *fieldable_params )
71
+ end
72
+ end
73
+ end
@@ -6,8 +6,10 @@ module Binda
6
6
  before_action :set_component, only: [:show, :edit, :update, :destroy, :new_repeater]
7
7
  before_action :set_position, only: [:create]
8
8
 
9
+ include FieldableHelpers
10
+
9
11
  def index
10
- @components = @structure.components.order('position').all
12
+ @components = @structure.components.order('position').all.page params[:page]
11
13
  end
12
14
 
13
15
  def show
@@ -16,6 +18,8 @@ module Binda
16
18
 
17
19
  def new
18
20
  @component = @structure.components.build()
21
+ # The following variable will be used as wildcard by fieldable views
22
+ @instance = @component
19
23
  end
20
24
 
21
25
  def edit
@@ -33,7 +37,7 @@ module Binda
33
37
 
34
38
  def update
35
39
  if @component.update(component_params)
36
- redirect_to structure_component_path( @structure.slug, @component.slug ), notice: "A #{ @component.name } was successfully updated."
40
+ redirect_to structure_component_path( @structure.slug, @component.slug ), notice: "#{ @component.name.capitalize } was successfully updated."
37
41
  else
38
42
  redirect_to edit_structure_component_path( @structure.slug, @component.slug ), flash: { alert: @component.errors }
39
43
  end
@@ -41,14 +45,14 @@ module Binda
41
45
 
42
46
  def destroy
43
47
  @component.destroy
44
- redirect_to structure_components_url( @structure.slug ), notice: "A #{ @component.name } was successfully destroyed."
48
+ redirect_to structure_components_url( @structure.slug ), notice: "#{ @component.name.capitalize } was successfully destroyed."
45
49
  end
46
50
 
47
51
  def new_repeater
48
52
  @repeater_setting = FieldSetting.find( params[:repeater_setting_id] )
49
- position = @component.repeaters.find_all{|r| r.field_setting_id=@repeater_setting.id }.length + 1
50
- @repeater = @component.repeaters.create( field_setting: @repeater_setting, position: position )
51
- render 'binda/components/_form_item_new_repeater', layout: false
53
+ position = @instance.repeaters.find_all{|r| r.field_setting_id=@repeater_setting.id }.length + 1
54
+ @repeater = @instance.repeaters.create( field_setting: @repeater_setting, position: position )
55
+ render 'binda/fieldable/_form_item_new_repeater', layout: false
52
56
  end
53
57
 
54
58
  def sort_repeaters
@@ -57,6 +61,7 @@ module Binda
57
61
  end
58
62
  head :ok
59
63
  end
64
+
60
65
 
61
66
  def sort
62
67
  params[:component].each_with_index do |id, i|
@@ -72,50 +77,19 @@ module Binda
72
77
  end
73
78
 
74
79
  def set_component
75
- if params[:component_id].nil?
76
- return @component = Component.friendly.find(params[:id])
77
- else
78
- return @component = Component.friendly.find(params[:component_id])
79
- end
80
+ id ||= params[:id]
81
+ id ||= params[:component_id]
82
+ @component = Component.friendly.find(id)
83
+ # The following variable will be used as wildcard by fieldable views
84
+ @instance = @component
80
85
  end
81
86
 
82
87
  # Only allow a trusted parameter "white list" through.
83
88
  def component_params
84
89
  params.require(:component).permit(
85
90
  :name, :slug, :position, :publish_state, :structure_id, :category_ids,
86
- structure_attributes: [ :id ],
87
- categories_attributes: [ :id, :category_id ],
88
- texts_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :content ],
89
- assets_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :image ],
90
- dates_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :date ],
91
- galleries_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id ],
92
- radios_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :choice_ids ],
93
- selects_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
94
- checkboxes_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
95
- repeaters_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :field_group_id,
96
- texts_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
97
- assets_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
98
- dates_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
99
- galleries_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id ],
100
- repeaters_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :field_group_id ],
101
- radios_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :choice_ids ],
102
- selects_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
103
- checkboxes_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ]
104
- ])
105
- end
106
-
107
- def repeater_params
108
- params.require(:repeater).permit(
109
- new_repeaters_attributes: [ :id, :field_setting_id, :field_group_id, :fieldable_type, :fieldable_id,
110
- texts_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :content ],
111
- assets_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :image ],
112
- dates_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :date ],
113
- galleries_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id ],
114
- repeaters_attributes: [ :id, :field_setting_id, :field_group_id, :fieldable_type, :fieldable_id ],
115
- radios_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, :choice_ids ],
116
- selects_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ],
117
- checkboxes_attributes: [ :id, :field_setting_id, :fieldable_type, :fieldable_id, choice_ids: [] ]
118
- ])
91
+ {structure_attributes: [ :id ]},
92
+ {categories_attributes: [ :id, :category_id ]}, *fieldable_params )
119
93
  end
120
94
 
121
95
  def set_position