%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/js/landing/ui/form/ |
Current File : /home/bitrix/www/bitrix/js/landing/ui/form/base_form.js |
;(function() { "use strict"; BX.namespace("BX.Landing.UI.Form"); var append = BX.Landing.Utils.append; var clone = BX.Landing.Utils.clone; /** * Implements base interface for works with forms * * @param {{ * [title]: ?string, * [description]: string, * [type]: string, * [label]: string * }} [data] * * @constructor */ BX.Landing.UI.Form.BaseForm = function(data) { this.data = BX.type.isPlainObject(data) ? data : {}; this.id = "id" in this.data ? this.data.id : ""; this.selector = "selector" in this.data ? this.data.selector : ""; this.title = "title" in this.data ? this.data.title : ""; this.label = "label" in this.data ? this.data.label : ""; this.type = "type" in this.data ? this.data.type : "content"; this.descriptionText = "description" in this.data ? this.data.description : ""; this.layout = BX.Landing.UI.Form.BaseForm.createLayout(); this.fields = new BX.Landing.Collection.BaseCollection(); this.description = BX.Landing.UI.Form.BaseForm.createDescription(); this.header = BX.Landing.UI.Form.BaseForm.createHeader(); this.body = BX.Landing.UI.Form.BaseForm.createBody(); this.footer = BX.Landing.UI.Form.BaseForm.createFooter(); this.header.innerHTML = this.title; this.layout.appendChild(this.header); if (this.descriptionText) { this.description.innerHTML = this.descriptionText; this.layout.appendChild(this.description); } this.layout.appendChild(this.body); this.layout.appendChild(this.footer); }; /** * Creates form layout * @return {HTMLElement} */ BX.Landing.UI.Form.BaseForm.createLayout = function() { return BX.create("div", {props: {className: "landing-ui-form"}}); }; /** * Creates form header layout * @return {HTMLElement} */ BX.Landing.UI.Form.BaseForm.createHeader = function() { return BX.create("div", {props: {className: "landing-ui-form-header"}}); }; /** * Creates form description layout * @return {HTMLElement} */ BX.Landing.UI.Form.BaseForm.createDescription = function() { return BX.create("div", {props: {className: "landing-ui-form-description"}}); }; /** * Creates form body layout * @return {HTMLElement} */ BX.Landing.UI.Form.BaseForm.createBody = function() { return BX.create("div", {props: {className: "landing-ui-form-body"}}); }; /** * Creates form footer layout * @return {HTMLElement} */ BX.Landing.UI.Form.BaseForm.createFooter = function() { return BX.create("div", {props: {className: "landing-ui-form-footer"}}); }; BX.Landing.UI.Form.BaseForm.prototype = { addField: function(field) { this.fields.add(field); this.body.appendChild(field.getNode()); }, getNode: function() { return this.layout; }, addCard: function(card) { append(card.layout, this.body); card.fields.forEach(function(field) { this.fields.add(field); }, this) }, clone: function(data) { var instance = new this.constructor(clone(data || this.data)); this.fields.forEach(function(field) { var newFieldData = clone(field.data); delete newFieldData.content; newFieldData.selector = instance.selector; instance.addField(field.clone()); }); return instance; }, serialize: function() { var result = {}; this.fields.forEach(function(field) { result[field.selector] = field.getValue(); }); return result; } }; })();