* Injects subview's root element into own DOM structure. * @protected * @param {View} view * @return {View} Fluent interface
(view)
| 23 | * @return {View} Fluent interface |
| 24 | */ |
| 25 | appendSubviewElement (view) { |
| 26 | if (view instanceof FieldView) { |
| 27 | this.getElement() |
| 28 | |
| 29 | // Get field subviews |
| 30 | const fieldViews = this.getSubviews() |
| 31 | .filter(view => view instanceof FieldView) |
| 32 | |
| 33 | // Integrate new setting view |
| 34 | fieldViews.push(view) |
| 35 | |
| 36 | // Maintain the order of fields set in the form model |
| 37 | const fields = this.getModel().getFields() |
| 38 | fieldViews.sort((a, b) => |
| 39 | fields.indexOf(a.getModel()) - fields.indexOf(b.getModel())) |
| 40 | |
| 41 | // Retrieve position of setting view we are integrating |
| 42 | const index = fieldViews.indexOf(view) |
| 43 | const $referenceNode = index < fieldViews.length - 1 |
| 44 | ? fieldViews[index + 1].getElement() |
| 45 | : null |
| 46 | |
| 47 | this.getElement().insertBefore(view.getElement(), $referenceNode) |
| 48 | |
| 49 | // Determine for each setting view wether it appears first in a row |
| 50 | let columns = 0 |
| 51 | fieldViews.forEach(settingView => { |
| 52 | const width = settingView.getModel().getWidth() |
| 53 | columns += width |
| 54 | if (columns === width || columns > 12) { |
| 55 | columns = width |
| 56 | settingView.setFirst(true) |
| 57 | } else { |
| 58 | settingView.setFirst(false) |
| 59 | } |
| 60 | }) |
| 61 | return this |
| 62 | } |
| 63 | return super.appendSubviewElement(view) |
| 64 | } |
| 65 | } |
nothing calls this directly
no test coverage detected