Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/js/ui/feedback/form-old/ |
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/js/ui/feedback/form-old/ui.feedback.form.js |
;(function() { var namespace = BX.namespace('BX.UI.Feedback'); var list = []; var loadedList = {}; var opened = false; namespace.Form = function(options) { this.init(options); list.push(this); }; namespace.Form.getList = function () { return list; }; namespace.Form.getById = function (id) { return list.filter(function (item) { return item.id === id; })[0] || null; }; namespace.Form.open = function (map) { if (opened) { return; } if (typeof loadedList[map.id] !== 'undefined') { loadedList[map.id].openPanel(); return; } loadedList[map.id] = new namespace.Form({map: map}); loadedList[map.id].openPanel(); }; namespace.Form.prototype = { init: function(options) { if (typeof options.map !== 'undefined') { this.map = options.map; return } this.id = options.id; this.portal = options.portal; this.presets = options.presets || {}; this.form = options.form || {}; this.title = options.title || ''; if (options.button) { this.button = BX(options.button); BX.bind(this.button, 'click', this.openPanel.bind(this)); } }, appendPresets: function(presets) { for (var key in presets) { if (!presets.hasOwnProperty(key)) { continue; } this.presets[key] = presets[key]; } }, openPanel: function() { opened = true; BX.SidePanel.Instance.open("ui:feedback-form-" + this.id, { cacheable: false, contentCallback: function() { var promise = new BX.Promise(); promise.fulfill(); return promise; }, animationDuration: 200, events: { onLoad: this.checkSidePanelLoad.bind(this), onBeforeCloseComplete: this.checkSidePanelClosed.bind(this) }, width: 600 }); }, checkSidePanelClosed: function(event) { opened = false; }, checkSidePanelLoad: function(event) { if (typeof this.map !== 'undefined' && typeof this.cached === 'undefined') { BX.ajax.runAction("ui.feedback.loadData" , { json: { title: this.map.title || null, id: this.map.id || null, presets: this.map.presets || null, portalUri: this.map.portalUri || null, forms: this.map.forms || null, defaultForm: this.map.defaultForm || null, }, }).then( function(response) { var params = response.data.params; this.id = params.id; this.title = params.title; this.form = params.form; this.presets = params.presets; this.portal = params.portal; this.cached = true; this.onSidePanelLoad(event); }.bind(this) ); return; } this.onSidePanelLoad(event); }, onSidePanelLoad: function(event) { this.formNode = document.createElement('div'); var titleNode = document.createElement('div'); titleNode.style = ` margin-bottom: 25px; font: 26px/26px var(--ui-font-family-primary, var(--ui-font-family-helvetica)); color: var(--ui-color-text-primary); `; titleNode.textContent = this.title; var slider = event.getSlider(); var containerNode = document.createElement('div'); containerNode.style = 'padding: 20px; overflow-y: auto;'; containerNode.appendChild(titleNode); containerNode.appendChild(this.formNode); if (!slider) { return; } slider.layout.content.appendChild(containerNode); setTimeout(function () { slider.showLoader(); }, 0); this.loadForm(this.checkLoader.bind(this, slider)); }, checkLoader: function (slider) { setTimeout(function () { slider.closeLoader(); },100); }, loadForm: function(callback) { var form = this.form; if (!form || !form.id || !form.lang || !form.sec) { return; } if (form.presets) { this.appendPresets(form.presets); } const objectId = 'b24form' + this.id; (function(w,d,u,b){ w['Bitrix24FormObject']=b;w[b] = w[b] || function(){arguments[0].ref=u; (w[b].forms=w[b].forms||[]).push(arguments[0])}; if(w[b]['forms']) return; var s=d.createElement('script'); var r=1*new Date(); s.async=1;s.src=u+'?'+r; var h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h); })(top,top.document, this.portal + '/bitrix/js/crm/form_loader.js', objectId); top.addEventListener('b24:form:init', (event) => { const form = event.detail.object; form.design.setFont('var(--ui-font-family-primary),var(--ui-font-family-helvetica)'); }); top[objectId]({ "id": form.id, "lang": form.lang, "sec": form.sec, "type": "inline", "node": this.formNode, "presets": this.presets, "handlers": { "load": callback } }); } }; })();