Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/admin/htmleditor2/ |
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/admin/htmleditor2/components2.js |
var components2_js = true; function BXComponents2Taskbar() { var oTaskbar = this; BXComponents2Taskbar.prototype.OnTaskbarCreate = function () { if (!this.pMainObj.arComponents) this.pMainObj.arComponents = {}; if (window.lca && !_$lca_to_output) this.pMainObj.AddEventHandler('SaveContentAfter', this.OnSaveLCA, this); this.pMainObj.C2Parser = new C2Parser(this.pMainObj, this); this.C2Parser = this.pMainObj.C2Parser; this.icon = 'components'; this.iconDiv.className = 'tb_icon bxed-taskbar-icon-' + this.icon; this.pHeaderTable.setAttribute("__bxtagname", "_taskbar_cached"); // need for correct context menu for taskbar title if (window.lca) _$LCAContentParser_execed = false; oTaskbar.pCellComp = oTaskbar.CreateScrollableArea(oTaskbar.pWnd); oTaskbar.pCellComp.style.width = "100%"; oTaskbar.pCellComp.style.height = "100%"; this.pMainObj.pComponent2Taskbar = this; this.FetchArray(); oBXEditorUtils.addPropertyBarHandler('component2', oTaskbar.ShowProps); this.pMainObj.AddEventHandler("OnDblClick", this.OnComp2DblClick, this); emptyRow = null; table = null; oTaskbar.DialogInit(); } BXComponents2Taskbar.prototype.GetParams = function(P) { if (P.id && oTaskbar.pMainObj.arComponents[P.id]) return oTaskbar.pMainObj.arComponents[P.id]; return {}; } BXComponents2Taskbar.prototype.SetParams = function(P) { if (P.params && P.id) oTaskbar.pMainObj.arComponents[P.id] = P.params; } BXComponents2Taskbar.prototype.OnElementDragEnd = function(oEl) { if (!oEl) return; var oTag = oTaskbar.pMainObj.GetBxTag(oEl); if (oTag.tag != 'component2') return; // Run it only when dropped into editor doc if (oEl.ownerDocument != oTaskbar.pMainObj.pEditorDocument) return oTaskbar.OnElementDragEnd(oTaskbar.pMainObj.pEditorDocument.body.appendChild(oEl.cloneNode(false))); oTag.id = null; delete oTag.id; oEl.id = ''; oEl.removeAttribute('id'); var draggedElId = oTaskbar.pMainObj.SetBxTag(oEl, copyObj(oTag)); oEl.style.cursor = 'default'; // Hack for safari if (BX.browser.IsSafari()) { if (oEl && oEl.parentNode) oEl.parentNode.removeChild(oEl); oTaskbar.pMainObj.insertHTML('<img src="' + oEl.src + '" id="' + draggedElId + '">'); setTimeout(function(){oTaskbar.pMainObj.SelectElement(oTaskbar.pMainObj.pEditorDocument.getElementById(draggedElId))}, 20); } if (oTaskbar.pMainObj.bRenderComponents) { var otherComp = BXFindParentByTagName(oEl, 'DIV', 'bxc2-block'); if (otherComp) // Component dragged into another otherComp.parentNode.insertBefore(oEl, otherComp); // Put element before parent component } var props = oTag.params; oTaskbar.SetParams({id: oEl.id, params: props}); if (oTaskbar.pMainObj.bRenderComponents) { oTaskbar.C2Parser.StartWaiting(oEl); // Show waiting icon instead of native component's icon oTaskbar.C2Parser.__bPreventComponentDeselect = true; oTaskbar.C2Parser.GetRenderedContent({name: props.name, pElement: oEl, bSelect: true}); // Get default html for new component } this.nLastDragNDropElement = null; this.nLastDragNDropElementFire = false; }; BXComponents2Taskbar.prototype.OnComp2DblClick = function (e) { var pEl, oTag; if (!e) e = oTaskbar.pMainObj.pEditorWindow.event; if (e.target) pEl = e.target; else if (e.srcElement) pEl = e.srcElement; if (pEl.nodeType == 3) pEl = pEl.parentNode; if (pEl && pEl.nodeName) { oTag = oTaskbar.pMainObj.GetBxTag(pEl); if (oTag.tag != 'component2') return; if (oTaskbar.pMainObj.pMainObj.bRenderComponents && oTag.tag != 'component2') pEl = BXFindParentByTagName(pEl, 'DIV', 'bxc2-block'); else if (pEl.nodeName.toLowerCase() == 'body' && pEl.lastChild && pEl.lastChild.getAttribute) pEl = pEl.lastChild; } if (!pEl || !pEl.getAttribute) return; oTag = oTaskbar.pMainObj.GetBxTag(pEl); if (oTag.tag != 'component2') return; this.pMainObj.OpenEditorDialog("component2", false, 650, {pElement: pEl}); BX.PreventDefault(e); } BXComponents2Taskbar.prototype.FetchArray = function (clear_cache) { var loadComp2 = function() { oTaskbar.BuildList(window.arComp2Elements); window.as_arComp2Elements = []; var __len = window.arComp2Elements.length; for (var i = 0; i < __len; i++) window.as_arComp2Elements[window.arComp2Elements[i].name] = window.arComp2Elements[i]; BX.closeWait(); }; CHttpRequest.Action = function(result) { try{ setTimeout(loadComp2, 10); }catch(e){ err_text = "ERROR in BXComponents2Taskbar.FetchArray(): "; if ((eind = result.indexOf('Fatal error')) != -1) err_text += "\n PHP error: \n\n....." + result.substr(eind - 10); alert(err_text); } }; if (window.arComp2Elements) loadComp2(); else CHttpRequest.Send('/bitrix/admin/fileman_load_components2.php?lang='+BXLang+'&site='+BXSite+'&load_tree=Y'+(clear_cache === true ? '&clear_comp2_cache=Y' : '')); } BXComponents2Taskbar.prototype.BuildList = function (__arElements) { var len = __arElements.length; if (len == 0) // if any allowed components in the list - close taskbar oTaskbar.Close(); for (var i = 0; i < len; i++) { __arElements[i].tagname = 'component2'; __arElements[i].childElements = []; __arElements[i].params.name = __arElements[i].name; if (__arElements[i].isGroup && !__arElements[i].path) oTaskbar.AddElement(__arElements[i], oTaskbar.pCellComp, __arElements[i].path); } this.fullyLoaded = false; } BXComponents2Taskbar.prototype.PreBuildList = function () { var __arElements = window.arComp2Elements; var len = __arElements.length; for (var i = 0; i < len; i++) { if (!__arElements[i].isGroup || __arElements[i].path) oTaskbar.AddElement(__arElements[i], oTaskbar.pCellComp, __arElements[i].path); } this.fullyLoaded = true; } BXComponents2Taskbar.prototype.ShowProps = function (_bNew, _pTaskbar, _pElement, bReloadProps) { oTaskbar.bDialogMode = _pTaskbar.bDialogMode || false; oTaskbar.dialog_suffix = (_pTaskbar.bDialogMode) ? '_d' : ''; if (bReloadProps || window._bx_reload_template_props || !_pTaskbar.bDialogMode) { oTaskbar._ShowProps(_bNew, _pTaskbar, _pElement, bReloadProps); } else { setTimeout(function() { if (!oTaskbar.bLoadProc || oTaskbar.bLoadProc != _pElement.id) oTaskbar._ShowProps(_bNew, _pTaskbar, _pElement, bReloadProps); }, 500); } } BXComponents2Taskbar.prototype._ShowProps = function (_bNew, _pTaskbar, _pElement, bReloadProps) { var arProps = this.GetParams({id: _pElement.id}); if (bReloadProps === true || (!window._bx_reload_template_props && !window.as_arComp2Params[arProps.name + arProps.__bx_id])) { var str, j; for (j in arProps.paramvals) { str = arProps.paramvals[j]; if (typeof str == 'string' && str.substr(0, 6).toLowerCase() == 'array(') arProps.paramvals[j] = str.toLowerCase() == 'array()' ? [] : eval("[" + str.substr(6, str.length - 7) + "]"); } oTaskbar.bLoadProc = _pElement.id; var postData = oBXEditorUtils.ConvertArray2Post(oTaskbar.PrepareParamvals(arProps.paramvals), 'curval'); oTaskbar.LoadComp2Params(arProps, oTaskbar.BXShowComponent2Panel, oTaskbar, [_bNew, _pTaskbar, _pElement], 'POST', postData); } else if (window._bx_reload_template_props) { oTaskbar.DelTemplateParams(_pElement.id); var postData = oBXEditorUtils.ConvertArray2Post(oTaskbar.PrepareParamvals(arProps.paramvals), 'curval'); oTaskbar.SetCompTemplate(_pElement, this); // TODO: remake this function //oTaskbar.pMainObj.GetBxTag(_pElement); arProps = this.GetParams({id: _pElement.id}); oTaskbar.loadTemplateParams(arProps.name, arProps.template, oTaskbar.ShowProps, oTaskbar, [_bNew, _pTaskbar, _pElement, false], "POST", postData); } else if (window.as_arComp2Params[arProps.name + arProps.__bx_id]) { oTaskbar.BXShowComponent2Panel(_bNew, _pTaskbar, _pElement); } } BXComponents2Taskbar.prototype.ClearCache = function () { BX.showWait(); BX.cleanNode(oTaskbar.pCellComp); window.arComp2Elements = false; oTaskbar.FetchArray(true); } BXComponents2Taskbar.prototype.GetPropFieldElements = function (_pTaskbar) { var arElements = {}; var parentNode = _pTaskbar.pCellProps; arElements = this.AddPropFieldElements(parentNode.getElementsByTagName("SELECT"), arElements); arElements = this.AddPropFieldElements(parentNode.getElementsByTagName("INPUT"), arElements); arElements = this.AddPropFieldElements(parentNode.getElementsByTagName("TEXTAREA"), arElements); this.arCachedElements = arElements; return this.arCachedElements; } BXComponents2Taskbar.prototype.AddPropFieldElements = function(arNodes, arElements) { var el, name, i, l = arNodes.length; for(i = 0; i < l; i++) { el = arNodes[i]; if(!isYes(el["__exp"])) continue; if(el.name.substr(el.name.length - 2, 2) == '[]') { name = el.name.substr(0, el.name.length - 2); if (!arElements[name]) arElements[name] = []; arElements[name].push(el); } else arElements[el.name] = el; } return arElements; } BXComponents2Taskbar.prototype.ShowComponentParam = function(P) { var _this = this, _bNew = P._bNew, _pElement = P.pElement, pPropTsb = P.pPropTaskbar, pMainObj = oTaskbar.pMainObj, arPropertyParams = P.arProp, arAllProps = P.arAllProps, propertyID = arPropertyParams.param_name, refreshedByOnclick = false, arUsedValues = [], fChange = P.fChange, tProp, pParCell; pPropTsb.arElements.push(propertyID); if (arAllProps.paramvals && arAllProps.paramvals[propertyID] != undefined) arValues = arAllProps.paramvals[propertyID]; else arValues = arPropertyParams.DEFAULT || ''; oTaskbar.curParamvals[propertyID] = arValues; //__paramvals[propertyID] = arValues; if(!isYes(arPropertyParams.MULTIPLE)) arPropertyParams.MULTIPLE = "N"; if(!arPropertyParams.TYPE) arPropertyParams.TYPE = "STRING"; if(!arPropertyParams.CNT) arPropertyParams.CNT = 0; if(!arPropertyParams.SIZE) arPropertyParams.SIZE = 0; if(!arPropertyParams.ADDITIONAL_VALUES) arPropertyParams.ADDITIONAL_VALUES = 'N'; if(!arPropertyParams.ROWS) arPropertyParams.ROWS = 0; if(!arPropertyParams.COLS || parseInt(arPropertyParams.COLS) < 1) arPropertyParams.COLS = '30'; var _arValues = []; if (typeof arValues == 'string') { var originalValue = arValues; if (isPHPBracket(arValues)) arValues = JS_stripslashes(trimPHPBracket(arValues)); if (isNum(arValues)) // If it's number - remove PHP brackets originalValue = arValues; if (arValues.substr(0, 6).toLowerCase() == 'array(') _arValues = _BXStr2Arr(arValues, true); else if (arPropertyParams.TYPE == "LIST") arValues = [originalValue]; else arValues = originalValue; } if(isYes(arPropertyParams.MULTIPLE) && typeof(arValues) != 'object' && !arValues) arValues = _arValues; if(isYes(arPropertyParams.MULTIPLE)) { arPropertyParams.CNT = parseInt(arPropertyParams.CNT); if (arPropertyParams.CNT < 1) arPropertyParams.CNT = 1; } if (isYes(arPropertyParams.HIDDEN)) return; // If SEF = ON : show SEF_URL_TEMPLATES and SEF_FOLDER // SEF = OFF: show VARIABLE_ALIASES if ((propertyID.substr(0, 17) == "SEF_URL_TEMPLATES" || propertyID == "SEF_FOLDER") && pPropTsb.__SEF_MODE === false) return; else if (propertyID.substr(0,16)=="VARIABLE_ALIASES" && pPropTsb.__SEF_MODE === true) return; if (!arPropertyParams.PARENT || !arPropertyParams.group) { arPropertyParams.PARENT = '__bx_additional_group'; arPropertyParams.group_title = BX_MESS.ADD_INSERT; } // If it's grouped property if (arPropertyParams.PARENT) { if (!oTaskbar.arGroups[arPropertyParams.PARENT]) { pParCell = oTaskbar.GetPropGroupDataCell(arPropertyParams.PARENT, arPropertyParams.group_title, P.oCont, [arAllProps.name]); oTaskbar.arGroups[arPropertyParams.PARENT] = {title: arPropertyParams.group_title, datacell: pParCell}; } else { pParCell = oTaskbar.arGroups[arPropertyParams.PARENT].datacell; } var _tbls = pParCell.getElementsByTagName("TABLE"); if (_tbls.length > 0) tProp = _tbls[0]; else tProp = pParCell.appendChild(BX.create('TABLE', {props: {className : "bxtaskbarprops"}})); } else { tProp = __tProp; oCont.appendChild(tProp); } row = tProp.insertRow(-1); row.className = "bxtaskbarpropscomp"; cell = row.insertCell(-1); cell.className = "bxtaskbarprop-label"; cell.innerHTML = "<SPAN>" + bxhtmlspecialchars(arPropertyParams.NAME) + ":</SPAN>"; cell = row.insertCell(-1); arPropertyParams.TYPE = arPropertyParams.TYPE.toUpperCase(); if (propertyID == "SEF_MODE") arPropertyParams.TYPE = "CHECKBOX"; //* * * * * * Displaying data * * * * * * switch(arPropertyParams.TYPE) { case "LIST": arPropertyParams.SIZE = (isYes(arPropertyParams.MULTIPLE) && (parseInt(arPropertyParams.SIZE)<=1 || isNaN(parseInt(arPropertyParams.SIZE))) ? '3' : arPropertyParams.SIZE); if(parseInt(arPropertyParams.SIZE)<=0 || isNaN(parseInt(arPropertyParams.SIZE))) arPropertyParams.SIZE = 1; pSelect = pMainObj.CreateElement("SELECT", {size: arPropertyParams.SIZE, name: propertyID + (isYes(arPropertyParams.MULTIPLE) ? '[]' : ''), __exp: 'Y', onchange: fChange, multiple: isYes(arPropertyParams.MULTIPLE)}); cell.appendChild(pSelect); if(!arPropertyParams.VALUES) arPropertyParams.VALUES = []; bFound = false; for(opt_val in arPropertyParams.VALUES) { if(typeof(arPropertyParams.VALUES[opt_val]) != 'string') continue; bSel = false; oOption = new Option(JS_stripslashes(arPropertyParams.VALUES[opt_val]), opt_val, false, false); pSelect.options.add(oOption); if(pSelect.options.length <= 1) setTimeout(__BXSetOptionSelected(oOption, false), 1); key = BXSearchInd(arValues, opt_val); if(key >= 0) { bFound = true; arUsedValues[key]=true; bSel = true; if (propertyID=="SEF_MODE") pPropTsb.__SEF_MODE = isYes(opt_val); setTimeout(__BXSetOptionSelected(oOption, true), 1); } else if(_arValues[opt_val]) { bFound = true; arUsedValues[opt_val]=true; bSel = true; setTimeout(__BXSetOptionSelected(oOption, true), 1); delete _arValues[opt_val]; } } if(arPropertyParams.ADDITIONAL_VALUES != 'N') { oOption = document.createElement("OPTION"); oOption.value = ''; oOption.selected = !bFound; oOption.text = (isYes(arPropertyParams.MULTIPLE) ? BX_MESS.TPropCompNS : BX_MESS.TPropCompOth)+' ->'; pSelect.options.add(oOption, 0); oOption = null; if(isYes(arPropertyParams.MULTIPLE)) { if (typeof(arValues) == 'string') arValues = _arValues; for(k in arValues) { if(typeof(arValues[k]) != 'string' || arUsedValues[k] || arValues[k] == '') continue; cell.appendChild(pMainObj.CreateElement("BR")); if(arPropertyParams.ROWS > 1) { var oTextarea = pMainObj.CreateElement("TEXTAREA", {cols: (isNaN(arPropertyParams.COLS) ? '20' : arPropertyParams.COLS), value: JS_stripslashes(arValues[k]), name: propertyID+'[]', __exp: 'Y', onchange: fChange}); cell.appendChild(oTextarea); oTextarea = null; } else { var oInput = pMainObj.CreateElement("INPUT", {type: 'text', size: (isNaN(arPropertyParams.COLS)?'20':arPropertyParams.COLS), value: JS_stripslashes(arValues[k]), name: propertyID+'[]', '__exp': 'Y', onchange: fChange}); cell.appendChild(oInput); oInput = null; } } for(k=0; k<arPropertyParams.CNT; k++) { cell.appendChild(pMainObj.CreateElement("BR")); if(arPropertyParams.ROWS>1) { var oTextarea = pMainObj.CreateElement("TEXTAREA", {'cols': (isNaN(arPropertyParams.COLS)?'20':arPropertyParams.COLS), 'value': '', 'name': propertyID+'[]', '__exp': 'Y', 'onchange': fChange}); cell.appendChild(oTextarea); oTextarea = null; } else { var oInput = pMainObj.CreateElement("INPUT", {'type': 'text', 'size': (isNaN(arPropertyParams.COLS)?'20':arPropertyParams.COLS), 'value': '', 'name': propertyID+'[]', '__exp': 'Y', 'onchange': fChange}); cell.appendChild(oInput); oInput = null; } } var oInput = pMainObj.CreateElement("INPUT", {'type': 'button', 'value': '+', 'pMainObj': pMainObj, 'arPropertyParams': arPropertyParams}); xCell = cell.appendChild(oInput); oInput = null; var oBR = pMainObj.CreateElement("BR"); cell.appendChild(oBR); oBR = null; xCell.propertyID = propertyID; xCell.fChange = fChange; xCell.onclick = function () { this.parentNode.insertBefore(this.pMainObj.CreateElement("BR"), this); if(this.arPropertyParams['ROWS'] && this.arPropertyParams['ROWS']>1) { var oTextarea = this.pMainObj.CreateElement("TEXTAREA", {'cols': (!this.arPropertyParams['COLS'] || isNaN(this.arPropertyParams['COLS'])?'20':this.arPropertyParams['COLS']), 'value': '', 'name': this.propertyID+'[]', '__exp': 'Y', 'onchange': this.fChange}); this.parentNode.insertBefore(oTextarea, this); oTextarea = null; } else { var oInput = this.pMainObj.CreateElement("INPUT", {'type': 'text', 'size': (!this.arPropertyParams['COLS'] || isNaN(this.arPropertyParams['COLS'])?'20':this.arPropertyParams['COLS']), 'value': '', 'name': this.propertyID+'[]', '__exp': 'Y', 'onchange': this.fChange}); this.parentNode.insertBefore(oInput, this); oInput = null; } } } else { val = ''; for(k=0; k<arValues.length; k++) { if(arUsedValues[k]) continue; val = arValues[k]; break; } if(arPropertyParams['ROWS'] && arPropertyParams['ROWS']>1) alt = cell.appendChild(pMainObj.CreateElement("TEXTAREA", {'cols': (!arPropertyParams['COLS'] || isNaN(arPropertyParams['COLS'])?'20':arPropertyParams['COLS']), 'value': val, 'disabled': bFound, 'name': propertyID+'_alt', '__exp': 'Y', 'onchange': fChange})); else alt = cell.appendChild(pMainObj.CreateElement("INPUT", {'type': 'text', 'size': (!arPropertyParams['COLS'] || isNaN(arPropertyParams['COLS'])?'20':arPropertyParams['COLS']), 'value': val, 'disabled': bFound, 'name': propertyID+'_alt', '__exp': 'Y', 'onchange': fChange})); pSelect.pAlt = alt; if (isYes(arPropertyParams.REFRESH)) pSelect.onchange = function (e){fChange();_this.ShowProps(_bNew, pPropTsb, _pElement, true);}; else pSelect.onchange = function (e){this.pAlt.disabled = (this.selectedIndex!=0); fChange();}; } } if(!bFound) setTimeout(fChange, 100); if (isYes(arPropertyParams.REFRESH)) pSelect.onchange = function (e){fChange();_this.ShowProps(_bNew, pPropTsb, _pElement, true);}; if (propertyID=="SEF_MODE") { pSelect.onchange = function(e) { pPropTsb.__SEF_MODE = isYes(this.value); fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, false); }; } break; case "CHECKBOX": pCheckbox = pMainObj.CreateElement("INPUT", {'type':'checkbox', 'name': propertyID, '__exp': 'Y'}); cell.appendChild(pCheckbox); if (arValues) oBXEditorUtils.setCheckbox(pCheckbox, isYes(arValues)); else if (arPropertyParams.DEFAULT != undefined) oBXEditorUtils.setCheckbox(pCheckbox, isYes(arPropertyParams.DEFAULT)); else oBXEditorUtils.setCheckbox(pCheckbox,false); if (propertyID=="SEF_MODE") { pCheckbox.onclick = function(e) { oBXEditorUtils.setCheckbox(this,this.checked); pPropTsb.__SEF_MODE = this.checked; fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, false); } pPropTsb.__SEF_MODE = pCheckbox.checked; } else if(isYes(arPropertyParams.REFRESH)) { pCheckbox.onclick = function(e) { oBXEditorUtils.setCheckbox(this,this.checked); fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, true); } refreshedByOnclick = true; } else { pCheckbox.onclick = function(e) {oBXEditorUtils.setCheckbox(this, this.checked); fChange();} } //__paramvals[propertyID] = pCheckbox.value; oTaskbar.curParamvals[propertyID] = pCheckbox.value; break; case "STYLELIST": break; default: // 'STRING' OR 'FILE' OR 'COLORPICKER' OR 'CUSTOM' if (arPropertyParams.TYPE == 'COLORPICKER' || arPropertyParams.TYPE == 'FILE') { refreshedByOnclick = true; arPropertyParams.ROWS = 1; arPropertyParams.MULTIPLE = 'N'; arPropertyParams.COLS = (arPropertyParams.TYPE == 'FILE') ? 40 : 6; } if(isYes(arPropertyParams.MULTIPLE)) { bBr = false; var obVal = (typeof arValues == 'object') ? arValues : _arValues; for(k in obVal) { if(bBr) cell.appendChild(pMainObj.CreateElement("BR")); else bBr = true; val = obVal[k].replace(/(\\)?\\n/g, "\n"); if(arPropertyParams.ROWS > 1) cell.appendChild(pMainObj.CreateElement("TEXTAREA", {cols: parseInt(arPropertyParams.COLS) || 20, value: JS_stripslashes(val), name: propertyID+'[]', __exp: 'Y', onchange: fChange})); else cell.appendChild(pMainObj.CreateElement("INPUT", {type: 'text', size: parseInt(arPropertyParams.COLS) || 20, value: JS_stripslashes(val), name: propertyID+'[]', __exp: 'Y', 'onchange': fChange})); } for(k=0; k<arPropertyParams.CNT; k++) { if(bBr) cell.appendChild(pMainObj.CreateElement("BR")); else bBr = true; if(arPropertyParams.ROWS > 1) cell.appendChild(pMainObj.CreateElement("TEXTAREA", {'cols': (isNaN(arPropertyParams['COLS'])?'20':arPropertyParams['COLS']), 'value': '', 'name': propertyID+'[]', '__exp': 'Y', 'onchange': fChange})); else cell.appendChild(pMainObj.CreateElement("INPUT", {'type': 'text', 'size': (isNaN(arPropertyParams['COLS'])?'20':arPropertyParams['COLS']), 'value': '', 'name': propertyID+'[]', '__exp': 'Y', 'onchange': fChange})); } xCell = cell.appendChild(pMainObj.CreateElement("INPUT", {'type': 'button', 'value': '+', 'pMainObj': pMainObj, 'arPropertyParams': arPropertyParams})); xCell.propertyID = propertyID; xCell.fChange = fChange; xCell.onclick = function () { this.parentNode.insertBefore(this.pMainObj.CreateElement("BR"), this); if(this.arPropertyParams.ROWS && this.arPropertyParams.ROWS > 1) this.parentNode.insertBefore(this.pMainObj.CreateElement("TEXTAREA", {cols: (!this.arPropertyParams.COLS || isNaN(this.arPropertyParams.COLS) ? '20' : this.arPropertyParams.COLS), 'value': '', 'name': this.propertyID+'[]', '__exp': 'Y', 'onchange': this.fChange}), this); else this.parentNode.insertBefore(this.pMainObj.CreateElement("INPUT", {type: 'text', size: (!this.arPropertyParams.COLS || isNaN(this.arPropertyParams['COLS'])?'20':this.arPropertyParams.COLS), 'value': '', 'name': this.propertyID+'[]', '__exp': 'Y', 'onchange': this.fChange}), this); } cell.appendChild(pMainObj.CreateElement("BR")); } else { var oInput; val = arValues.replace(/(\\)?\\n/g, "\n"); if(arPropertyParams.ROWS && arPropertyParams.ROWS > 1) cell.appendChild(pMainObj.CreateElement("TEXTAREA", {cols: (!arPropertyParams.COLS || isNaN(arPropertyParams.COLS)?'20':arPropertyParams.COLS), value: JS_stripslashes(val), name: propertyID, __exp: 'Y', onchange: fChange})); else oInput = cell.appendChild(pMainObj.CreateElement("INPUT", {type: 'text', size: (!arPropertyParams.COLS || isNaN(arPropertyParams.COLS)?'20':arPropertyParams.COLS), value: JS_stripslashes(val), name: propertyID, __exp: 'Y', onchange: fChange})) if (!oInput) break; if (arPropertyParams.TYPE == 'FILE') { oInput.className = 'fl'; if (arPropertyParams.FD_USE_MEDIALIB && parseInt(arPropertyParams.FD_USE_MEDIALIB) > 0) { // Replace id, and increase "curCount" var html = window['_bxMlBrowseButton_' + propertyID.toLowerCase()]; if(BX.browser.IsIE() && !this.bxAppendedCSSForML) { var s1 = html.indexOf('<' + 'style>'), s2 = html.indexOf('</' + 'style>'), css = html.substr(s1 + 7, s2 - s1 - 7); document.styleSheets[0].cssText += css; this.bxAppendedCSSForML = true; } var code = [], start, end, i, cnt; while((start = html.indexOf('<' + 'script>')) != -1) { var end = html.indexOf('</' + 'script>', start); if(end == -1) break; code[code.length] = html.substr(start + 8, end - start - 8); html = html.substr(0, start) + html.substr(end + 9); } for(var i = 0, cnt = code.length; i < cnt; i++) if(code[i] != '') jsUtils.EvalGlobal(code[i]); cell.appendChild(BX.create("DIV", {props: {}, html: html})); xCell = BX("bx_fd_input_" + propertyID.toLowerCase()); if (xCell) xCell.onclick = window['BX_FD_' + propertyID]; } else { xCell = cell.appendChild(pMainObj.CreateElement("INPUT", {type: 'button', value: '...'})); xCell.onclick = window['BX_FD_' + propertyID]; } // Result of selecting file if (isYes(arPropertyParams.REFRESH)) { window['BX_FD_ONRESULT_' + propertyID] = function(filename, filepath) { if (typeof filename == 'object') oInput.value = filename.src; // From medialibrary else oInput.value = (filepath + "/" + filename).replace(/\/\//ig, '/'); // From old good file dialog fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, true); } } else { window['BX_FD_ONRESULT_' + propertyID] = function(filename, filepath) { if (typeof filename == 'object') oInput.value = filename.src; // From medialibrary else oInput.value = (filepath + "/" + filename).replace(/\/\//ig, '/'); // From old good file dialog fChange(); }; } if (isYes(arPropertyParams.REFRESH)) { oInput.onblur = function() { fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, true); } } } else if(arPropertyParams.TYPE == 'COLORPICKER') { var oCP = pMainObj.CreateCustomElement('BXEdColorPicker', { id : 'BackColor', title : arPropertyParams.NAME, OnChange : isYes(arPropertyParams.REFRESH) ? function (color) {oInput.value = color; fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, true);} : function (color){oInput.value = color.replace(/^#+/g, ""); fChange();} }); xCell = cell.appendChild(oCP.pWnd); oInput.className = "compPropFloat"; oCP.pWnd.className = "compPropFloat"; } else if(arPropertyParams.TYPE == 'CUSTOM') { if (!arPropertyParams.JS_FILE || !arPropertyParams.JS_EVENT) break; var data = arPropertyParams.JS_DATA || ''; oInput.style.display = "none"; //var getComponentParamsElements = function(){return oTaskbar.GetPropFieldElements(pPropTsb);}; var getFunction = function(arParams) { return function() { if (window[arParams.propertyParams.JS_EVENT]) window[arParams.propertyParams.JS_EVENT](arParams); }; }; var oCallBack = getFunction({ propertyID : propertyID, propertyParams: arPropertyParams, //getElements : getComponentParamsElements, getElements : function(){return oTaskbar.GetPropFieldElements(pPropTsb);}, oInput : oInput, oCont : cell, data : data, fChange: fChange }); BXLoadJSFiles([arPropertyParams.JS_FILE], {func: oCallBack, obj: {}}, true); } } break; } if(isYes(arPropertyParams.REFRESH) && !refreshedByOnclick) { xCell = cell.appendChild(pMainObj.CreateElement("INPUT", {type: 'button', value: 'ok', pMainObj: pMainObj, 'arPropertyParams': arPropertyParams})); xCell.onclick = function(){fChange(); _this.ShowProps(_bNew, pPropTsb, _pElement, true);}; } // Tooltip if (oTaskbar.arCurrentTooltips[propertyID] && pMainObj.showTooltips4Components) { new BX.CHint( { hint: oTaskbar.arCurrentTooltips[propertyID], parent: cell.appendChild(BX.create("IMG", {props: {src: one_gif_src, className: "bx-comp2-hint"}})) }); } } BXComponents2Taskbar.prototype.ParamsOnChange = function(P) { var pPropTsb = P.pPropTaskbar, arAllFields = oTaskbar.GetPropFieldElements(pPropTsb), arAllProps = P.arAllProps, arProps = {}, // Component parameters arProps_temp, l = pPropTsb.arElements.length, propID, i, j, val, k; if (!window.arVA) arVA = []; for(i = 0; i < l; i++) { propID = pPropTsb.arElements[i]; val = arAllFields[propID]; if(val && val.selectedIndex == 0 && arAllFields[propID + '_alt']) val = arAllFields[propID + '_alt']; if(propID.substr(0, 18) == "SEF_URL_TEMPLATES_") { if (oTaskbar.bFChangeSEFMode !== true) continue; if (val && val.value) _val = val.value; else if(arAllProps.paramvals[propID]) _val = arAllProps.paramvals[propID]; else continue; arVA[propID.substr(18)] = catchVariableAliases(_val); } if(!val) { if (arAllProps.paramvals[propID]) arProps[propID] = arAllProps.paramvals[propID]; continue; } if(val.tagName) // one element { if (propID == "SEF_MODE") oTaskbar.bFChangeSEFMode = isYes(val.value); if(val.tagName.toUpperCase() == "SELECT") { for(j=0; j<val.length; j++) { if(val[j].selected && val[j].value!='') arProps[propID] = val[j].value; } } else { arProps[propID] = val.value; } } else { arProps_temp = []; for(k = 0; k < val.length; k++) { if(val[k].tagName.toUpperCase() == "SELECT") { for(j = 0; j < val[k].length; j++) if(val[k][j].selected && val[k][j].value != '') arProps_temp.push(val[k][j].value); } else if (val[k].value.toString().length > 0) { arProps_temp.push(val[k].value); } } arProps[propID] = _BXArr2Str(arProps_temp); } } arAllProps.paramvals = arProps; oTaskbar.SetParams({id: P.id, params: arAllProps}); // Rerender component with new params oTaskbar.C2Parser.ReRenderComponent(P.id, P.pElement); } BXComponents2Taskbar.prototype.BXShowComponent2Panel = function (_bNew, _pTaskbar, _pElement) { if (oTaskbar.bPropDialogOpened && _pTaskbar.pCellProps.className != 'c2dialog_propdiv') return; var id =_pElement.id, arAllProps = this.GetParams({id: id}), arProps = window.as_arComp2Params[arAllProps.name + arAllProps.__bx_id]; if (!arProps) return; oTaskbar.bLoadProc = false; oTaskbar.bFChangeSEFMode = false; _pTaskbar.arElements = []; oTaskbar.arGroups = []; oTaskbar.arCurrentTooltips = arComp2Tooltips[arAllProps.name]; oTaskbar.curParamvals = []; BX.cleanNode(_pTaskbar.pCellProps); var _this = this, row, cell, arPropertyParams, bSel, arValues, res, pSelect, arUsedValues, bFound, key, oOption, val, xCell, opt_val, bBr, i, k, alt, fChange = function(){_this.ParamsOnChange({id: id, pPropTaskbar: _pTaskbar, arAllProps: arAllProps, pElement: _pElement});}, fDisplay = function(arProp, tProp, oCont){_this.ShowComponentParam({arProp: arProp, pPropTbl: tProp, oCont: oCont, pPropTaskbar: _pTaskbar, arAllProps: arAllProps, fChange: fChange, _bNew: _bNew, pElement: _pElement});}; var BXCreateGroups = function(cn, oCont) { if (window.arComp2ParamsGroups[cn]) { var groups = window.arComp2ParamsGroups[cn], key; for (key in groups) { oTaskbar.arGroups[key] = { title : groups[key], datacell : oTaskbar.GetPropGroupDataCell(key, groups[key], oCont, [arAllProps.name]) }; } } }; //****** DISPLAY TITLE ******* var compTitle = window.as_arComp2Elements[arAllProps.name].title, compDesc = window.as_arComp2Elements[arAllProps.name].params.DESCRIPTION, bComplex = isYes(window.as_arComp2Elements[arAllProps.name].complex), tCompTitle = _pTaskbar.pCellProps.appendChild(BX.create('TABLE', {props: {className : "componentTitle"}})); // Component title BX.adjust(tCompTitle.insertRow(-1).insertCell(-1), {props: {className: "titlecell"}, html: "<span class='title'>" + compTitle + " (" + arAllProps.name + ")</span><br /><span class='description'>" + (bComplex ? BX_MESS.COMPLEX_COMPONENT : "") + compDesc+"</span>"}); //DISPLAY COMPONENT TEMPLATE PARAMETERS if (arAllProps.template == undefined) arAllProps.template = ""; var oOption, el, k, site_template, j, bSel, arTemplates = as_arComp2Templates[arAllProps.name], temlLen = arTemplates.length, oCont = _pTaskbar.pCellProps; if (temlLen > 0) { var pParDatacell = oTaskbar.GetPropGroupDataCell('templateParams', BX_MESS.COMPONENT_TEMPLATE, _pTaskbar.pCellProps, [arAllProps.name]); var tTProp = pParDatacell.appendChild(BX.create('TABLE', {props: {id: '__bx_tProp', className : "bxtaskbarprops"}})); var row = BX.adjust(tTProp.insertRow(-1), {props: {className: "bxtaskbarpropscomp"}}); BX.adjust(row.insertCell(-1), {props: {className: 'bxtaskbarprop-label'}, html: '<label for="__bx_comp2templ_select">' + BX_MESS.COMPONENT_TEMPLATE + ':</label>'}); var templList = row.insertCell(-1).appendChild(BX.create("SELECT", {props: {id: '__bx_comp2templ_select'}})); templList.onchange = function(e) { oTaskbar.DelTemplateParams(_pElement.id); var postData = oBXEditorUtils.ConvertArray2Post(oTaskbar.PrepareParamvals(arAllProps.paramvals), 'curval'); oTaskbar.SetCompTemplate(_pElement, this.value); arAllProps = oTaskbar.GetParams({id: id}); oTaskbar.loadTemplateParams(arAllProps.name, arAllProps.template, oTaskbar.ShowProps,oTaskbar, [_bNew, _pTaskbar, _pElement, false], "POST", postData); }; //Displaying component template list for (j = 0; j < temlLen; j++) { el = arTemplates[j]; site_template = ''; if (el.template != '') { for (k in arBXTemplates) { if (arBXTemplates[k].value == el.template) { site_template = ' (' + arBXTemplates[k].name + ')'; break; } } } else { site_template = ' ('+BX_MESS.BUILD_IN_TEMPLTE+')'; } bSel = ((arAllProps.template == undefined && (el.name == ".default" || el.name=="")) || arAllProps.template == "" && el.name==".default" || arAllProps.template == el.name); templList.options.add(new Option( ((el.title) ? el.title : el.name) + site_template, // text el.name, // value bSel, bSel) ); } // Displaying component's template parameters var arTemplParams = window.as_arComp2TemplParams[arAllProps.name + arAllProps.__bx_id], cl = arTemplParams.length; BXCreateGroups(arAllProps.name, oCont); for (j = 0; j < cl; j++) fDisplay(arTemplParams[j], tTProp, oCont); } templList = oOption = null; var i, l = window.as_arComp2Groups[arAllProps.name + arAllProps.__bx_id].length, gr; for(i = 0; i < l; i++) { gr = window.as_arComp2Groups[arAllProps.name + arAllProps.__bx_id][i]; oTaskbar.arGroups[gr.name] = { title: gr.title, datacell: oTaskbar.GetPropGroupDataCell(gr.name, gr.title, oCont, [arAllProps.name]) }; } //Displaying components params var templateID = _pTaskbar.pMainObj.templateID, oDiv = BXCreateElement('DIV', {}, {width: '100%', height: '0%'}, document), tProp = BXCreateElement('TABLE', {id: '__bx_tProp', className : 'bxtaskbarprops', cellSpacing: 0, cellPadding: 1}, {width: '100%'}, document); if (arProps && arProps.length > 0) { for(var i = 0, l = arProps.length; i < l; i++) { if (arProps[i].param_name == "SEF_FOLDER" && !arProps[i].DEFAULT) arProps[i].DEFAULT = (relPath!="/" ? relPath : "")+"/"; fDisplay(arProps[i], tProp, oCont); } } arAllProps.paramvals = oTaskbar.curParamvals; oTaskbar.SetParams({id: id, params: arAllProps}); // No params in component if (arProps.length == 0 && temlLen == 0) _pTaskbar.pCellProps.appendChild(BX.create('DIV', {style: {margin : "5px 0 0 22px"}, text: BX_MESS.CompNoParams})); } BXComponents2Taskbar.prototype.LoadComp2Params = function (arProps, calbackFunc, calbackObj, calbackParams, method, data) { this.arCachedElements = false; var elementName = arProps.name, templName = arProps.template || '', loadHelp = (this.pMainObj.showTooltips4Components) ? "Y" : "N"; arComp2Tooltips[elementName] = []; window.arComp2Props = null; window.arComp2Templates = null; window.arComp2TemplateProps = null; function OnRequest() { try{ setTimeout(function () { var arProps = oTaskbar.GetParams({id: calbackParams[2].id}); if (!arProps.__bx_id) arProps.__bx_id = push2Component2("__bx_c2_" + Math.random(), arProps.name); window.as_arComp2Params[elementName + arProps.__bx_id] = window.arComp2Props; window.as_arComp2Groups[elementName + arProps.__bx_id] = window.arComp2Groups; window.as_arComp2Templates[elementName] = window.arComp2Templates; window.as_arComp2TemplParams[elementName + arProps.__bx_id] = window.arComp2TemplateProps; if(calbackObj && calbackFunc) calbackFunc.apply(calbackObj, calbackParams ? calbackParams : []); else if(calbackFunc) calbackFunc(); }, 50 ); }catch(e) {alert('Error >> LoadComp2Params');} } var url = '/bitrix/admin/fileman_load_comp2_params.php?lang=' + BXLang + '&site=' + BXSite + '&cname=' + elementName+'&stid='+((this.pMainObj.templateID) ? this.pMainObj.templateID : '')+"&loadhelp="+loadHelp+'&tname=' + templName + '&bxsender=fileman_html_editor&bxeditor=' + this.pMainObj.name; this.pMainObj.__authFailureHandlerCallback = function(){oTaskbar.LoadComp2Params(arProps, calbackFunc, calbackObj, calbackParams, method, data);}; this.pMainObj.__authFailureHandlerCallbackClose = function(){window.oBXEditorDialog.Close();}; if (method == 'POST' && data) BX.ajax.post(url, data, OnRequest); else BX.ajax.get(url, {}, OnRequest); }; //Set template BXComponents2Taskbar.prototype.SetCompTemplate = function(pEl, value) { var id = pEl.id, arProps = oTaskbar.GetParams({id: id}); arProps.template = value || ''; oTaskbar.SetParams({id: id, params: arProps}); // Rerender component with new params oTaskbar.C2Parser.ReRenderComponent(id, pEl); } BXComponents2Taskbar.prototype.loadTemplateParams = function(componentName, templateName, calbackFunc, calbackObj, calbackParams, method, data) { var _CHttpRequest = new JCHttpRequest(); _CHttpRequest.Action = function(result) { // try { setTimeout(function () { //oTaskbar.pMainObj.GetBxTag(id); var arProps = oTaskbar.pMainObj.arComponents[calbackParams[2].id]; window.as_arComp2TemplParams[componentName + arProps.__bx_id] = window.arComp2TemplateProps; window._bx_reload_template_props = false; if(calbackObj && calbackFunc) calbackFunc.apply(calbackObj, (calbackParams) ? calbackParams : []); else if(calbackFunc) calbackFunc(); }, 10 ); // }catch(e) {alert('ERROR can\'t load template params...');} } if (method == 'POST' && data) _CHttpRequest.Post('/bitrix/admin/fileman_load_templates.php?lang='+BXLang+'&site='+BXSite + '&cname='+componentName+'&tname='+templateName+'&mode=params&stid='+((this.pMainObj.templateID) ? this.pMainObj.templateID : ''),data); else _CHttpRequest.Send('/bitrix/admin/fileman_load_templates.php?lang='+BXLang+'&site='+BXSite+'&cname='+componentName+'&tname='+templateName+'&mode=params&stid='+((this.pMainObj.templateID) ? this.pMainObj.templateID : '')); } BXComponents2Taskbar.prototype.DelTemplateParams = function(id) { var arAllProps = oTaskbar.GetParams({id: id}), arPropsVals = arAllProps.paramvals, len = window.arComp2TemplateProps.length, name, i; for (i = 0; i < len; i++) { name = window.arComp2TemplateProps[i].param_name; if (arPropsVals[name] != undefined) delete arPropsVals[name]; } arAllProps.paramvals = arPropsVals; oTaskbar.SetParams({id: id, params: arAllProps}); window.arComp2TemplateProps = []; } BXComponents2Taskbar.prototype.UnParseElement = function(node) { if (!window.arVA) window.arVA = []; var bxTag = oTaskbar.pMainObj.GetBxTag(node.arAttributes.id); if (!bxTag || bxTag.tag != 'component2') return false; var arAllProps = oTaskbar.GetParams({id: node.arAttributes["id"]}), arPropsVals = arAllProps.paramvals, res = "<?$APPLICATION->IncludeComponent(\n" + "\t\"" + arAllProps.name+"\",\n" + "\t\"" + (arAllProps.template ? arAllProps.template : "") + "\",\n"; if (arPropsVals) { res += "\tArray(\n"; var _len1 = "SEF_URL_TEMPLATES_".length; var _len2 = "VARIABLE_ALIASES_".length; var _SUT, _VA, lio, templ_key, var_fey, _count; var params_exist = false; var __val, __len; for (var i in arPropsVals) { try{ if (!params_exist) params_exist = true; if (typeof(arPropsVals[i]) == 'function') continue; else if (typeof(arPropsVals[i]) == 'string') arPropsVals[i] = JS_stripslashes(arPropsVals[i]); else if (typeof(arPropsVals[i]) == 'object') { __val = 'array('; __len = 0; for (var _i in arPropsVals[i]) { if (typeof(arPropsVals[i][_i]) == 'string') { __len++; __val += '"'+JS_stripslashes(arPropsVals[i][_i])+'",'; } } if (__len > 0) __val = __val.substr(0,__val.length-1)+')'; else __val += ')'; arPropsVals[i] = __val; } if (isYes(arPropsVals["SEF_MODE"])) { //*** Handling SEF_URL_TEMPLATES in SEF = ON*** if(i.substr(0,_len1) == "SEF_URL_TEMPLATES_") { _val = arPropsVals[i]; __k = i.substr(_len1); arVA[__k] = catchVariableAliases(_val); if (!_SUT) { res += "\t\t\""+i.substr(0,_len1-1)+"\" => Array(\n" _SUT = true; } res += "\t\t\t\"" + i.substr(_len1) + "\" => "; if (isPHPBracket(arPropsVals[i])) res += trimPHPBracket(arPropsVals[i]); else res += "\"" + JS_addslashes(arPropsVals[i])+"\""; res += ",\n"; continue; } else if (_SUT) { lio = res.lastIndexOf(","); res = res.substr(0,lio)+res.substr(lio+1); _SUT = false; res += "\t\t),\n"; } //*** Handling VARIABLE_ALIASES in SEF = ON*** if(i.substr(0,_len2)=="VARIABLE_ALIASES_") continue; } else if(arPropsVals["SEF_MODE"]=="N") { //*** Handling SEF_URL_TEMPLATES in SEF = OFF *** if (i.substr(0,_len1)=="SEF_URL_TEMPLATES_" || i=="SEF_FOLDER") continue; //*** Handling VARIABLE_ALIASES in SEF = OFF *** if(i.substr(0,_len2)=="VARIABLE_ALIASES_") { if (!_VA) { res += "\t\t\""+i.substr(0,_len2-1)+"\" => Array(\n"; _VA = true; } res += "\t\t\t\"" + i.substr(_len2) + "\" => \"" + JS_addslashes(arPropsVals[i]) + "\",\n"; continue; } else if (_VA) { lio = res.lastIndexOf(","); res = res.substr(0,lio)+res.substr(lio+1); _VA = false; res += "\t\t),\n"; } } res += "\t\t\""+i+"\" => "; if (isPHPBracket(arPropsVals[i])) res += trimPHPBracket(arPropsVals[i]); else if (arPropsVals[i].substr(0, 6).toLowerCase() == 'array(') res += arPropsVals[i]; else res += '"' + JS_addslashes(arPropsVals[i]) + '"'; res += ",\n"; }catch(e){continue;} } if (_VA || _SUT) { lio = res.lastIndexOf(","); res = res.substr(0,lio)+res.substr(lio+1); _VA = false; _SUT = false; res += "\t\t),\n"; } if (isYes(arPropsVals["SEF_MODE"])) { res += "\t\t\"VARIABLE_ALIASES\" => Array(\n"; if (arVA) { for (templ_key in arVA) { if (typeof(arVA[templ_key]) != 'object') continue; res += "\t\t\t\""+templ_key+"\" => Array("; _count = 0; for (var_key in arVA[templ_key]) { if (typeof(arVA[templ_key][var_key]) != 'string') continue; _count++; res += "\n\t\t\t\t\""+var_key+"\" => \""+arVA[templ_key][var_key]+"\","; } if (_count>0) { lio = res.lastIndexOf(","); res = res.substr(0,lio)+res.substr(lio+1); res += "\n\t\t\t),\n"; } else res += "),\n"; } } res += "\t\t),\n"; } if (params_exist) { lio = res.lastIndexOf(","); res = res.substr(0,lio) + res.substr(lio+1); } res += "\t)"; } else { res += "Array()" } if (arAllProps.parentComponent !== false || arAllProps.exParams !== false) { var pc = arAllProps.parentComponent; if (!pc || pc.toLowerCase() == '={false}') { res += ",\nfalse"; } else { if (isPHPBracket(pc)) res += ",\n" + trimPHPBracket(pc); else res += ",\n'" + pc + "'"; } if (arAllProps.exParams !== false && typeof arAllProps.exParams == 'object') { res += ",\nArray("; for (var i in arAllProps.exParams) { if (typeof(arAllProps.exParams[i]) == 'string') res += "\n\t'" + i + "' => '" + JS_stripslashes(arAllProps.exParams[i]) + "',"; } if (res.substr(res.length - 1) == ',') res = res.substr(0, res.length - 1) + "\n"; res += ")"; } } res += "\n);?>"; if (window.lca) { var key = str_pad_left(++_$compLength, 4, '0'); _$arComponents[key] = res; return '#COMPONENT'+String(key)+'#'; } else return res; } BXComponents2Taskbar.prototype.GetPropGroupDataCell = function (name, title, oCont, arParams) { var _oTable = document.createElement('TABLE'); _oTable.className = 'bxpropgroup'; var rowTitle = _oTable.insertRow(-1); var c = rowTitle.insertCell(-1); c.style.width = '11px'; c.appendChild(this.pMainObj.CreateElement("IMG", {src: one_gif_src, className: 'tskbr_common bx_btn_tabs_plus_big'})); c = rowTitle.insertCell(-1); c.style.width = '2000px'; c.innerHTML = (title) ? BXReplaceSpaceByNbsp(title) : ""; var rowData = _oTable.insertRow(-1); c = rowData.insertCell(-1); c.colSpan = 2; c.id = '__bxpropgroup_dc_' + name + oTaskbar.dialog_suffix; var compName = arParams[0]; var _this = this; rowTitle.__bxhidden = false; rowTitle.id = '__bxpropgroup_tr_' + name + oTaskbar.dialog_suffix; rowTitle.className = "bxtskbrprp_title_d"; rowTitle.onclick = function(){_this.HidePropGroup(name, !this.__bxhidden, [compName]);}; oCont.appendChild(_oTable); if (!arComp2PropGroups[compName]) { arComp2PropGroups[compName] = {}; arComp2PropGroups[compName][name] = false; oTaskbar.HidePropGroup(name, false, arParams); } else oTaskbar.HidePropGroup(name, ((arComp2PropGroups[compName][name]===false) ? true : false), arParams); return c; } BXComponents2Taskbar.prototype.HidePropGroup = function (groupName, bHide, arParams) { if (!arParams) arParams = []; var compName = arParams[0]; arComp2PropGroups[compName][groupName] = !bHide; var titleRow = BX('__bxpropgroup_tr_' + groupName + oTaskbar.dialog_suffix), dataCell = BX('__bxpropgroup_dc_' + groupName + oTaskbar.dialog_suffix); if (titleRow && dataCell) { if (bHide) { dataCell.style.display = GetDisplStr(0); titleRow.__bxhidden = true; titleRow.className = "bxtskbrprp_title_d"; titleRow.cells[0].firstChild.className = 'tskbr_common bx_btn_tabs_plus_big'; } else { dataCell.style.display = GetDisplStr(1); titleRow.__bxhidden = false; titleRow.className = "bxtskbrprp_title_a"; titleRow.cells[0].firstChild.className = 'tskbr_common bx_btn_tabs_minus_big'; } } } BXComponents2Taskbar.prototype.OnElementClick = function (oEl, arEl) { if (!this.pMainObj.oPropertiesTaskbar) return; if (!arEl.screenshots) arEl.screenshots = []; _pTaskbar = this.pMainObj.oPropertiesTaskbar; BX.cleanNode(_pTaskbar.pCellProps); //****** DISPLAY TITLE ******* var compName = arEl.name; var compTitle = arEl.title; var compDesc = arEl.params.DESCRIPTION; var bComplex = isYes(arEl.complex); var tCompTitle = document.createElement("TABLE"); tCompTitle.className = "componentTitle"; var row = tCompTitle.insertRow(-1); var cell = row.insertCell(-1); cell.innerHTML = "<SPAN class='title'>"+compTitle+" ("+compName+")</SPAN><BR /><SPAN class='description'>"+(bComplex ? BX_MESS.COMPLEX_COMPONENT : "")+compDesc+"</SPAN>"; cell.className = "titlecell"; cell.width = "100%"; var _helpCell = row.insertCell(-1); _helpCell.className = "helpicon"; _pTaskbar.pCellProps.appendChild(tCompTitle); var oDivSS; for (var i=0; i<arEl.screenshots.length; i++) { oDivSS = document.createElement("DIV"); oDivSS.className = "scrshot"; var imgSS = oTaskbar.pMainObj.CreateElement("IMG", {src: arEl.screenshots[i], title: compTitle, alt: compTitle}); oDivSS.appendChild(imgSS); _pTaskbar.pCellProps.appendChild(oDivSS); oDivSS = null; } oDivSS = null; _helpCell = null; _helpicon = null; tCompTitle = null; } BXComponents2Taskbar.prototype.OnSaveLCA = function() { var sContent = this.pMainObj.GetContent(); sContent = LCAContentParser(sContent, this.pMainObj, true); this.pMainObj.pValue.value = sContent; }; BXComponents2Taskbar.prototype.PrepareParamvals = function(arParamvals) { var key, val; for (var key in arParamvals) { val = arParamvals[key]; if (typeof val == 'function' || typeof val == 'object') continue; if (isPHPBracket(val)) { val = trimPHPBracket(val); if (val.substr(0, 6).toLowerCase() == 'array(') arParamvals[key] = _BXStr2Arr(val, true); } } return arParamvals; }; BXComponents2Taskbar.prototype.DialogInit = function() { window.arEditorFastDialogs.component2 = function(pObj) { var str = '<div id="bxc2_dialog_prop_div_' + oTaskbar.pMainObj.name + '" class="c2dialog_propdiv"></div>'; var OnSave = function(t) { oTaskbar.SetParams({id: pObj.realComponentId, params: oTaskbar.GetParams({id: 'temp_c2_dialog_id'})}); // Rerender component with new params if (pObj.pMainObj.bRenderComponents) oTaskbar.C2Parser.ReRenderComponent(pObj.realComponentId, pObj.params.pElement); else BXSelectRange(window.oPrevRange, pObj.pMainObj.pEditorDocument, pObj.pMainObj.pEditorWindow); pObj.pMainObj.OnEvent("OnSelectionChange", ['always']); }; var w = parseInt(window.comp2_dialog_size.width), h = parseInt(window.comp2_dialog_size.height); return { title: BX_MESS.Comp2Props, innerHTML : str, width: w, height: h, resizable: true, resize_id: 'bx_edc2_' + pObj.pMainObj.name, min_height: 200, min_width: 400, OnLoad: function() { var div = window.oBXEditorDialog.PARTS.CONTENT_DATA, id = pObj.params.pElement.id, pElement_temp = pObj.pMainObj.CreateElement('IMG', {id: 'temp_c2_dialog_id'}); pObj.pMainObj.SetBxTag(false, {id: 'temp_c2_dialog_id', tag: 'component2'}); pObj.pContDiv = BX('bxc2_dialog_prop_div_' + oTaskbar.pMainObj.name); BX.addClass(div, "c2dialog_cnt"); pObj.pMainObj.pC2PropsDialog = pObj; oTaskbar.bPropDialogOpened = true; pObj.realComponentId = id; pObj.params.pElement_temp = pElement_temp; // Save cur params in temp object oTaskbar.SetParams({id: 'temp_c2_dialog_id', params: oTaskbar.GetParams({id: id})}); // Build component properties oTaskbar.ShowProps(true, {pMainObj : pObj.pMainObj, pCellProps : pObj.pContDiv, bDialogMode : true}, pElement_temp, false); if (!pObj.pMainObj.bRenderComponents) window.oPrevRange = BXGetSelectionRange(pObj.pMainObj.pEditorDocument, pObj.pMainObj.pEditorWindow); window.oBXEditorDialog.SetButtons([ new BX.CWindowButton( { title: BX_MESS.TBSave, className: 'adm-btn-save', action: function() { OnSave(); window.oBXEditorDialog.Close(); } }), window.oBXEditorDialog.btnCancel ]); BX.addCustomEvent(window.oBXEditorDialog, 'onWindowUnRegister', function() { oTaskbar.bPropDialogOpened = false; if (window.oBXEditorDialog && window.oBXEditorDialog.DIV && window.oBXEditorDialog.DIV.parentNode) window.oBXEditorDialog.DIV.parentNode.removeChild(window.oBXEditorDialog.DIV); }); } }; } }; } function C2Parser(pMainObj, C2Taskbar) { this.pMainObj = pMainObj; this.C2Taskbar = C2Taskbar; this.arComponentsCSS = {}; this.arComponentsSource = {}; this.sCSS = ''; this.bInited = false; if (pMainObj.bRenderComponents) this.InitRenderingSystem(); } C2Parser.prototype = { InitRenderingSystem : function() { this.bInited = true; this.sCSS = "\n"+ ".bxc2-block{border: 1px dotted #E4E4E4 !important; margin:2px !important;}\n" + ".bxc2-block-selected{border: 1px solid #000 !important;}\n" + ".bxc2-block *{-moz-user-select:none; cursor: default !important;}\n" + ".bxc2-block-icon{padding: 0!important; margin:0!important;}\n" + ".bxc2-cont-block{padding: 4px;}\n" + ".bxc2-del{width: 21px; height: 18px; cursor: pointer !important; background: url(" + image_path + "/c2del.gif);}\n" + ".bxc2-flip{width: 18px; height: 18px; cursor: pointer !important; background: url(" + image_path + "/c2flip.gif);}\n" + ".bxc2-flop{width: 18px; height: 18px; cursor: pointer !important; background: url(" + image_path + "/c2flop.gif);}\n" + ".bxc2-move{width: 12px; height: 18px; cursor: move !important; background: url(" + image_path + "/c2move.gif) 0 1px; padding: 0!important; margin:0!important;}\n" + ".bxc2-block-tbl{width: 100%; height: 18px; background-color: #E4E4E4; border-collapse: collapse;}\n" + ".bxc2-block-tbl td{padding: 0 0 0 0px; font-size: 13px; color: #404040; border-width: 0px !important; white-space: nowrap !important;}\n" + ".bx-bogus-inp{width: 5px; position: absolute;}\n" + ".bxc2-block-selected .bxc2-block-tbl td{font-weight: bold; color: #000; background-color: #C0C0C0;}\n"; this.pMainObj.AddEventHandler("OnChangeView", this.COnChangeView, this); this.pMainObj.AddEventHandler("OnSelectionChange", this.COnSelectionChange, this); if (this.pMainObj.sEditorMode == 'html') // It's always true at the start this.COnChangeView(); }, COnChangeView : function() { if (this.pMainObj.sEditorMode == 'html' || (this.pMainObj.sEditorMode == 'split' && this.pMainObj.sEditorSplitMode != 'code')) { var _this = this; window['COnKeyDown' + this.pMainObj.name] = function(e){_this.COnKeyDown(e);}; window['COnMouseDown' + this.pMainObj.name] = function(e){_this.COnMouseDown(e);}; window['COnDragEnd' + this.pMainObj.name] = function(e){_this.COnDragEnd(e);}; if (!BX.browser.IsIE()) addAdvEvent(this.pMainObj.pEditorDocument, 'dragdrop', window['COnDragEnd' + this.pMainObj.name]); addAdvEvent(this.pMainObj.pEditorDocument, 'keydown', window['COnKeyDown' + this.pMainObj.name]); addAdvEvent(this.pMainObj.pEditorDocument, 'mousedown', window['COnMouseDown' + this.pMainObj.name]); this.GetRenderedContent({bAllContent: true}); this.pMainObj.pParser.AppendCSS(this.sCSS); } else { this.DeSelectComponent(false, false); if (this.pMainObj.oPropertiesTaskbar) { BX.cleanNode(this.pMainObj.oPropertiesTaskbar.pCellProps); this.pMainObj.oPropertiesTaskbar.OnSelectionChange('always', this.pMainObj.pEditorDocument.body); } } }, COnMouseDown : function(e) { this.__bMouseDownComp = false; this.pMainObj.__bMouseDownComp = false; var bFlip = false, bDel = false, bMove = false, pElement, pElementTemp, tagName, cn; if (!e) e = this.pMainObj.pEditorWindow.event; if (e.target) pElement = e.target; else if (e.srcElement) pElement = e.srcElement; if (pElement.nodeType == 3) // defeat Safari bug pElement = pElement.parentNode; while(pElement && (pElementTemp = pElement.parentNode) != null) { if(pElementTemp.nodeType!=1 || !pElement.tagName) { pElement = pElementTemp; continue; } tagName = pElement.tagName.toLowerCase(); cn = pElement.className; if (tagName == 'img' && cn.indexOf('bxc2-block-icon') != -1) { bDel = cn.indexOf('bxc2-del') != -1; // Delete bFlip = cn.indexOf('bxc2-flip') != -1; // Flip-flop bMove = cn.indexOf('bxc2-move') != -1; // Start drag } if(tagName == 'div' && cn.indexOf('bxc2-block') != -1) { if (bFlip) { this.FlipComponent(pElement); } if (bDel) this.DeleteComponent(pElement); if (bMove) { this.pDraggedElementId = pElement.id; break; } this.__bMouseDownComp = true; this.pMainObj.__bMouseDownComp = true; if (BX.browser.IsIE()) this._IEClearStupidSelection(pElement); // Select component; this.SelectComponent(pElement); return BX.PreventDefault(e); } pElement = pElementTemp; } return true; }, _IEClearStupidSelection : function(pEl) { try{ var _this = this, id = pEl.id, pWin = this.pMainObj.pEditorWindow, pDoc = this.pMainObj.pEditorDocument; var dd = pDoc.getElementById('dd_toggle_' + id); if (dd && dd.parentNode) { var inp = this.pMainObj.CreateEditorElement("INPUT", {className: 'bx-bogus-inp', id: id + '_bogus_input'}); dd.parentNode.insertBefore(inp, dd); setTimeout(function() { try{ if (inp && inp.parentNode) { inp.focus(); inp.parentNode.removeChild(inp); } } catch(e) { inp = _this.pMainObj.pEditorDocument.getElementById(id + '_bogus_input'); if (inp) { inp.focus(); inp.parentNode.removeChild(inp); } } }, 50); } }catch(e){}; }, COnDragEnd : function(e) { if (!this.pDraggedElementId) return; var o, par, bInside, pDel, id = this.pDraggedElementId, ddid = 'dd_toggle_' + id, _this = this; // Rerender component into the dragged toggle position setTimeout(function() { var arImgs = _this.pMainObj.pEditorDocument.getElementsByTagName('IMG'), el, i, l = arImgs.length; for (i = 0; i < l; i++) { el = arImgs[i]; if (el && el.id == ddid) { // Check parent o = el; bInside = false; while(par = o.parentNode) { if(par.tagName && par.tagName.toUpperCase() == 'DIV' && par.className && par.className.indexOf('bxc2-block') != -1) { if (par.id != id) // Element inside other component pDel = el; bInside = true; break; } o = par; } if (!bInside) _this.MoveRenderedComponent(el, id); } } if (pDel) pDel.parentNode.removeChild(pDel); }, 5); }, COnKeyDown : function(e) { var pElement, pElementTemp, tn, cn, _this = this; if (!e) e = this.pMainObj.pEditorWindow.event; if (e.target) pElement = e.target; else if (e.srcElement) pElement = e.srcElement; if (pElement.nodeType == 3) pElement = pElement.parentNode; if (this.lastSelectedComponent) { if (e.keyCode == 27) // Esc - deselect component { _this.DeSelectComponent(el); } else if (e.keyCode == 37) // left arrow { // Deselect and focus before } else if (e.keyCode == 39) // right arrow { // Deselect and focus after } else { var el = this.lastSelectedComponent; try{ this.pMainObj.SelectElement(el); }catch(e){} setTimeout(function(){ if (el && el.parentNode) { var tbl = el.getElementsByTagName('TABLE'); if (tbl.length <= 0) { var innerHTML = el.innerHTML.toString(); if (innerHTML.indexOf('>') == -1) // text content { var txt = _this.pMainObj.pEditorDocument.createTextNode(innerHTML); el.parentNode.insertBefore(txt, el); } _this.DeleteComponent(el); } } }, 1); } } while(pElement && (pElementTemp = pElement.parentNode) != null) { if(pElementTemp.nodeType!=1 || !pElement.tagName) { pElement = pElementTemp; continue; } tn = pElement.tagName.toLowerCase(); cn = pElement.className; if(tn == 'div' && cn.indexOf('bxc2-block') != -1) { return BX.PreventDefault(e); } pElement = pElementTemp; } }, COnSelectionChange : function(sReloadControl) { if (this.__bMouseDownComp || this.__bPreventComponentDeselect) return false; this.DeSelectComponent(); }, GetRenderedContent : function(P) { if (!this.pMainObj.bRenderComponents) return; var url = '/bitrix/admin/fileman_comp2_render.php?sessid=' + BX.bitrix_sessid() + '&site=' + BXSite, data = {stid: this.pMainObj.templateID || ''}, _this = this; if (!P.bReRender) P.bReRender = false; if (P.bAllContent) // send all editor content with all components { data.source = this.pMainObj.GetContent(); } else if (P.name) // get rendered content of the some component { data.name = P.name; if (P.template) data.template = P.template; // Get params if (P.paramvals) data.params = this.C2Taskbar.PrepareParamvals(P.paramvals); } var calbackFunc = function(result) { if (_this.pMainObj.IsSessionExpired(result)) { if (!P.bReqestReply) { P.bReqestReply = true; _this.GetRenderedContent(P); } else { alert('Error: Session expired'); } } var s = ''; //try{ setTimeout(function () { if (result.length <= 0) result = '#BX_RENDERED_COMPONENT##BX_RENDERED_COMPONENT#'; if (window.arUsedCSS && window.arUsedCSS.length > 0) { _this.LoadComponentCSS(window.arUsedCSS); window.arUsedCSS = null; } if(P.bAllContent) { var _arC2RenderedContent = [], c2Name, c2List, i, l, id, ind, oEl; result.replace(/(#BX_RENDERED_COMPONENT_(\d+?)#)((?:\S|\s)*?)\1/ig, function(s, b1, b2, b3){_arC2RenderedContent.push(b3); return '';}); // Rendering components in array for (c2Name in arComponents2) { c2List = arComponents2[c2Name]; l = c2List.length; if (typeof c2List != 'object' || !c2List.length) continue; for (i = 0; i < l; i++) { id = c2List[i].id; ind = c2List[i].ind; oEl = _this.pMainObj.pEditorDocument.getElementById(id); s = _arC2RenderedContent[ind]; _this.RenderComponent(id, s, false, oEl); } } } else if (P.name && P.pElement) { if (result.indexOf('#BX_RENDERED_COMPONENT#') != -1) { s = result.replace(/(#BX_RENDERED_COMPONENT#)((?:\S|\s)*?)\1/ig, "$2"); s = s.replace("#BX_RENDERED_COMPONENT#", ""); } oEl = _this.RenderComponent(P.pElement.id, s, P.bReRender, P.pElement); if (P.bSelect && oEl) { // Only for FF: Clear white markers after component's icon replacing if (!BX.browser.IsIE()) _this.pMainObj.pEditorDocument.execCommand('RemoveFormat', false, null); _this.SelectComponent(oEl); } } }, 10); //}catch(e) {alert('Error >> RenderComponents');} } BX.ajax.post(url, data, calbackFunc); }, RenderComponent : function(id, source, bReRender, repEl) { this.arComponentsSource[id] = source; if (typeof source != 'string' || source.trim().length <= 0) // Component return empty result { if (bReRender) source = BX_MESS.Comp2EmptyResult; else return this.StopWaiting(id, repEl); } var _this = this, pContentBlock = false, pHeader, title = BX_MESS.DefComp2Title, oEl = repEl || this.pMainObj.pEditorDocument.getElementById(id); if (!oEl) return false; if (bReRender) { var arDivs = oEl.getElementsByTagName('DIV'), pBlock = oEl, i, l = arDivs.length, arCh = pBlock.childNodes, node, l2 = arCh.length; pBlock.style.width = null; for (i = 0; i < l; i++) { if (arDivs[i].className == 'bxc2-cont-block') { pContentBlock = arDivs[i]; break; } } for (i = 0; i < l2; i++) { node = arCh[i]; if (node.nodeType == 1 && node.nodeName.toUpperCase() == 'TABLE' && node.className == 'bxc2-block-tbl') { pHeader = node; break; } } if (!pContentBlock) return this.RenderComponent(id, source, false); } else { if (this.pMainObj.arComponents[id] && this.pMainObj.arComponents[id].name && window.as_arComp2Elements[this.pMainObj.arComponents[id].name]) title = window.as_arComp2Elements[this.pMainObj.arComponents[id].name].title; var pBlock = this.pMainObj.CreateEditorElement("DIV", {id: id, className: 'bxc2-block'}); pHeader = this.pMainObj.CreateEditorElement("TABLE", {className: 'bxc2-block-tbl'}); var r = pHeader.insertRow(-1); var c0 = r.insertCell(-1); // move c0.style.width = '18px'; var pMoveIcon = c0.appendChild(this.pMainObj.CreateEditorElement("IMG", {id: 'dd_toggle_' + id, src: one_gif_src, className: 'bxc2-block-icon bxc2-move'})); pMoveIcon.title = BX_MESS.MoveComponent; var c1 = r.insertCell(-1); // title c1.className = 'bxc2-block-title'; c1.innerHTML = BX_MESS.Comp2Name + ': ' + title; var c2 = r.insertCell(-1); // Buttons block c2.style.textAlign = 'right'; //var pPropIcon = c2.appendChild(this.pMainObj.CreateEditorElement("IMG", {src: one_gif_src, className: 'bxc2-block-icon bxc2-prop'})); c2.appendChild(this.pMainObj.CreateEditorElement("IMG", {src: one_gif_src, className: 'bxc2-block-icon bxc2-flip', title: BX_MESS.FlipComponent})); c2.appendChild(this.pMainObj.CreateEditorElement("IMG", {src: one_gif_src, className: 'bxc2-block-icon bxc2-del', title: BX_MESS.DelComponent})); pBlock.appendChild(pHeader); pContentBlock = pBlock.appendChild(this.pMainObj.CreateEditorElement("DIV", {className: 'bxc2-cont-block'})); oEl.parentNode.insertBefore(pBlock, oEl); // Insert rendered block oEl.parentNode.removeChild(oEl); // Remove yelow pill this.pMainObj.nLastDragNDropElement = false; pBlock.style.MozUserSelect = 'none'; // For mozilla if (BX.browser.IsIE()) { pMoveIcon.ondragend = window['COnDragEnd' + this.pMainObj.name]; pBlock.ondragend = function(){_this._IEpBlockOnDragEnd(id);}; } } try { pContentBlock.innerHTML = source; } catch(e) //IE BUG WORKAROUND: "Unknown runtime error" when using innerHTML { var _p = this.pMainObj.CreateEditorElement("DIV", {className: 'bxc2-cont-block'}); _p.innerHTML = source; pContentBlock.parentNode.insertBefore(_p, pContentBlock); pContentBlock.parentNode.removeChild(pContentBlock); // pContentBlock = _p; } this.arComponentsSource[id] = source; // Set width correct width depending on content this.ResizeAfterRendering(pBlock, pContentBlock, pHeader); return pBlock; }, _IEpBlockOnDragEnd : function(id) { var _this = this; setTimeout(function() { var oEl = _this.pMainObj.pEditorDocument.getElementById(id), otherComp = BXFindParentByTagName(oEl, 'DIV', 'bxc2-block'); if (otherComp) // Component dragget into another { var tmpIcon = _this.pMainObj.CreateEditorElement("IMG", {src: one_gif_src}); // Create simple image otherComp.parentNode.insertBefore(tmpIcon, otherComp); // Put element before parent component _this.MoveRenderedComponent(tmpIcon, id); } else //Rerender content after system dragging { _this.RenderComponent(id, _this.arComponentsSource[id], oEl); } }, 100); }, StartWaiting: function(pIcon) { if (src = pIcon.getAttribute('src')) this.pMainObj.Add2BxTag(pIcon, {'_src': src}); pIcon.src = c2wait_path; }, StopWaiting : function(id, repEl) { var pEl = repEl || this.pMainObj.pEditorDocument.getElementById(id); if (pEl && pEl.nodeName.toLowerCase() == 'img') { var oTag = this.pMainObj.GetBxTag(pEl); if (oTag.params && oTag.params._src) pEl.src = oTag.params._src; } return pEl; }, ReRenderComponent : function(id, pEl) { if (this.pMainObj.bRenderComponents) { if (this.C2Taskbar.bPropDialogOpened) // We rerender component later - when close dialog return; if (!pEl) pEl = this.pMainObj.pEditorDocument.getElementById(id); var props = this.pMainObj.arComponents[id]; this.GetRenderedContent({name: props.name, pElement: pEl, template: props.template || '', paramvals: props.paramvals || false, bSelect: true, bReRender: true}); } }, ResizeAfterRendering : function(pBlock, pContentBlock, pHeader) { setTimeout(function() { var blockWidth = parseInt(pBlock.offsetWidth) - 20, arCh = pContentBlock.childNodes, maxWidth = 0, node, w, i, l = arCh.length; for (i = 0; i < l; i++) // For each child in content block { node = arCh[i]; if (node && node.nodeType == 1) // If it's html element { w = parseInt(node.offsetWidth); if (!isNaN(w) && w > maxWidth) maxWidth = w; } } if (maxWidth > 0 && (blockWidth - maxWidth) > 20) pBlock.style.width = (maxWidth + 20) + 'px'; if (maxWidth > 8) pContentBlock.style.width = (maxWidth - 8) + 'px'; setTimeout(function() { if (pHeader) { var headerWidth = parseInt(pHeader.offsetWidth); if (!isNaN(headerWidth) && headerWidth > maxWidth) pBlock.style.width = (headerWidth) + 'px'; //pBlock.style.width = (headerWidth + 20) + 'px'; if (headerWidth > 8) pContentBlock.style.width = (headerWidth - 8) + 'px'; } }, 20); }, 300); }, MoveRenderedComponent : function(el, id) { var pEl = this.pMainObj.pEditorDocument.getElementById(id); pEl.parentNode.removeChild(pEl); this.RenderComponent(id, this.arComponentsSource[id], false, el); }, SelectComponent : function(pEl) { //try{ if (this.lastSelectedComponent) { if (pEl.id == this.lastSelectedComponent.id) // already selected return; this.DeSelectComponent(false, false); } if (pEl.nodeName.toLowerCase() != 'img') pEl.className = 'bxc2-block bxc2-block-selected'; this.lastSelectedComponent = pEl; this.pMainObj.SetFocus(); var _this = this; setTimeout(function() { _this.pMainObj.oPropertiesTaskbar.OnSelectionChange('always', pEl); _this.__bPreventComponentDeselect = false; }, 250); setTimeout(function(){_this.__bMouseDownComp = false;}, 500); setTimeout(function(){_this.pMainObj.__bMouseDownComp = false;}, 500); //}catch(e){} }, DeSelectComponent : function(pEl, bCleanPropTaskbar) { try{ // For IE permission denied stupid errors if (!pEl) pEl = this.lastSelectedComponent; if (!pEl || !pEl.nodeName) return true; if (pEl.nodeName.toLowerCase() != 'img') pEl.className = 'bxc2-block'; this.lastSelectedComponent = false; SETTINGS[obj.pMainObj.name].arTaskbarSettings['BXPropertiesTaskbar'].show = true; // hack if (bCleanPropTaskbar !== false) this.pMainObj.oPropertiesTaskbar.OnSelectionChange('always'); }catch(e){} }, FlipComponent : function(pEl) { var pContentBlock = BX.findChild(pEl, {tagName: 'DIV', className: 'bxc2-cont-block'}, false); if (!pContentBlock) return; var pBut = BX.findChild(pEl, {tagName: 'IMG', className: 'bxc2-flip'}, true); if (pContentBlock.style.display == 'none') { pContentBlock.style.display = 'block'; if (pBut) { BX.removeClass(pBut, 'bxc2-flop'); pBut.title = BX_MESS.FlipComponent; } } else { pContentBlock.style.display = 'none'; if (pBut) { BX.addClass(pBut, 'bxc2-flop'); pBut.title = BX_MESS.FlopComponent; } } }, DeleteComponent : function(pEl) { // TODO: Del from array var id = pEl.id; //this.arComponents[id] = null; //this.arShadowedControls[id] = null; pEl.parentNode.removeChild(pEl); this.lastSelectedComponent = false; }, LoadComponentCSS : function(arCSS) { var i, l = arCSS.length, css, _this = this, cssReq; for (i = 0; i < l; i++) { css = arCSS[i]; if (this.arComponentsCSS[css]) continue; this.arComponentsCSS[css] = css; cssReq = new JCHttpRequest(); cssReq.Action = function(styles){ var path2css = css.substr(0, css.lastIndexOf('/')); // Replace relative urls to absolute styles = styles.replace(/url\((?:"|\'*)([^\/]{1}.*?)(?:"|\'*)\)/ig, "url(\"" + path2css + "/" + "$1" + "\")"); setTimeout(function(){_this.AddCSSToEditorFrame(styles);}, 10); }; cssReq.Send(css + '?v=s' + parseInt(Math.random() * 100000)); // Request css file } }, AddCSSToEditorFrame : function(styles) { if (styles.toLowerCase().indexOf('</html>') != -1) // Return if it's html page return false; this.sCSS += styles + "\n"; this.pMainObj.pParser.AppendCSS(styles); } } function BXCheckForComponent2(_str, pMainObj, bLCA_mode) { if (lca && _$lca_only && !bLCA_mode) // for LCA mode - components already parsed return false; _str = oBXEditorUtils.PHPParser.trimPHPTags(_str); _str = oBXEditorUtils.PHPParser.cleanCode(_str); var _oFunc = oBXEditorUtils.PHPParser.parseFunction(_str); if (!_oFunc) return false; if (_oFunc.name.toUpperCase() == '$APPLICATION->INCLUDECOMPONENT') { var arParams = oBXEditorUtils.PHPParser.parseParameters(_oFunc.params) name = arParams[0], template = arParams[1] || "", params = arParams[2] || {}, parentComponent = (arParams[3] && arParams[3] != '={false}') ? arParams[3] : false, exParams = arParams[4] || false; for (var key in params) if (typeof params[key] == 'object') params[key] = _BXArr2Str(params[key]); //try{ var comProps = window.as_arComp2Elements[name], icon = (comProps.icon) ? comProps.icon : '/bitrix/images/fileman/htmledit2/component.gif', tagname = (comProps.tagname) ? comProps.tagname : 'component2', allParams = copyObj(comProps.params); allParams.name = name; allParams.template = template; allParams.parentComponent = parentComponent; allParams.exParams = exParams; //Handling SEF_URL_TEMPLATES if (params["SEF_URL_TEMPLATES"]) { var _str = params["SEF_URL_TEMPLATES"]; var arSUT = oBXEditorUtils.PHPParser.getArray((_str.substr(0,8).toLowerCase() == "={array(") ? _str.substr(2,_str.length-3) : _str); for (var _key in arSUT) params["SEF_URL_TEMPLATES_"+_key] = arSUT[_key]; delete params["SEF_URL_TEMPLATES"]; } if (params["VARIABLE_ALIASES"]) { if (params["SEF_MODE"]=="N") { var _str = params["VARIABLE_ALIASES"]; var _arVA = oBXEditorUtils.PHPParser.getArray((_str.substr(0,8).toLowerCase() == "={array(") ? _str.substr(2,_str.length-3) : _str); for (var _key in _arVA) params["VARIABLE_ALIASES_"+_key] = _arVA[_key]; } delete params["VARIABLE_ALIASES"]; } allParams.paramvals = params; var bTagParams = {}; if (pMainObj.bRenderComponents) { bTagParams._src = icon; icon = c2wait_path; } var id = pMainObj.SetBxTag(false, {tag: tagname, params: bTagParams}); allParams.__bx_id = push2Component2(id, allParams.name); // Used to cache component-params for each component if (!pMainObj.arComponents) pMainObj.arComponents = {}; pMainObj.arComponents[id] = allParams; return '<img style="cursor: default;" id="' + id + '" src="' + icon + '" />'; //}catch(e) {} } return false; } function LCAContentParser(str, pMainObj, returnCode) { returnCode = (returnCode === true); var replaceLCA = function(str, key) { var cCode = _$arComponents[key]; // Code of component: $APLICATION->IncludeComponent( ......... if (!cCode) return ''; if (returnCode) return cCode; return BXCheckForComponent2(cCode, pMainObj, true); }; str = str.replace(/#COMPONENT(\d{4})#/ig, replaceLCA); _$LCAContentParser_execed = true; return str; } if (window.lca) //limit component access oBXEditorUtils.addContentParser(LCAContentParser); oBXEditorUtils.addPHPParser(BXCheckForComponent2, 0, true); function checkComp2Template(pMainObj) { var compList, len, i, compName, arCompNames = []; for (compName in arComponents2) arCompNames.push(compName); var postData = oBXEditorUtils.ConvertArray2Post(arCompNames, 'complist'); var params = []; loadComp2TemplateLists(pMainObj.templateID, __checkComp2Template, [pMainObj], "POST",postData); } function __checkComp2Template(params) { var pMainObj = params[0]; var template, oEl, allParams, name; for (compName in arComponents2) { compList = arComponents2[compName]; len = compList.length; for (i =0; i < len; i++) { id = compList[i].id; oEl = pMainObj.pEditorDocument.getElementById(id); if (!oEl) continue; allParams = pMainObj.pComponent2Taskbar.GetParams({id: id}); template = allParams.template; name = allParams.name; if (!arComp2TemplateLists[name][template] || ((template=="" || template==".default") && !(arComp2TemplateLists[name][''] || arComp2TemplateLists[name]['.default']))) { allParams.template = arComp2TemplateLists[name][''] ? "" : ".default"; pMainObj.SetBxTag(oEl, {id: oEl.id, params: allParams}); } as_arComp2Templates[name] = []; for (__i in arComp2TemplateLists[name]) as_arComp2Templates[name].push(arComp2TemplateLists[name][__i]); window._bx_reload_template_props = true; } } setTimeout(function (){pMainObj.OnEvent("OnSelectionChange");}, 5); } function loadComp2TemplateLists(siteTemplate,calbackFunc, calbackParams,method,data) { var _CHttpRequest = new JCHttpRequest(); _CHttpRequest.Action = function(result) { try { setTimeout(function () { if(calbackFunc) calbackFunc(calbackParams); }, 5 ); } catch(e) { alert('ERROR can\'t load template params...'); } } if (method == 'POST' && data) _CHttpRequest.Post('/bitrix/admin/fileman_load_templates.php?lang='+BXLang+'&site='+BXSite+'&mode=list&stid='+siteTemplate,data); else _CHttpRequest.Send('/bitrix/admin/fileman_load_templates.php?lang='+BXLang+'&site='+BXSite+'&mode=list&stid='+siteTemplate); } function push2Component2(id, name) { if (!arComponents2[name]) arComponents2[name] = []; arComponents2[name].push({'id':id, ind: arComponents2Length}); arComponents2Length++; return arComponents2[name].length; } function _BXArr2Str(arObj) { try { var _arObj = []; var str = 'array('; for (var _key in arObj) { if (typeof(arObj[_key]) == 'function') continue; if (parseInt(_key).toString()=='NaN') _arObj.push('"'+_key+'" => "'+arObj[_key]+'"'); else _arObj[_key] = '"'+arObj[_key]+'"'; } str += _arObj.join(", "); str += ')'; } catch(e) { str = 'array()'; } return str; } function _BXStr2Arr(str, bSkipEmpty) { var arObj = oBXEditorUtils.PHPParser.getArray(str), res = {}, i; for (i in arObj) { if (i !== "" && typeof arObj[i] != 'function' && (arObj[i] !== '' || !bSkipEmpty)) res[i] = arObj[i]; } return res; } function catchVariableAliases(str) { var arRes = []; var res = str.match(/(\?|&)(.+?)=#([^#]+?)#/ig); if (!res) return arRes; for (var l=0;l<res.length; l++) { var _res = res[l].match(/(\?|&)(.+?)=#([^#]+?)#/i); arRes[_res[3]] = _res[2]; } return arRes; } oBXEditorUtils.addTaskBar('BXComponents2Taskbar', 2, BX_MESS.CompTBTitle, [], 10);