1116 lines
26 KiB
JavaScript
1116 lines
26 KiB
JavaScript
BX.namespace('BX.IBlock');
|
|
|
|
/*
|
|
* arParams
|
|
* PREFIX - prefix for vars
|
|
* FORM_ID - id form
|
|
* TABLE_PROP_ID - id table with properties
|
|
* PROP_COUNT_ID - id field with count properties
|
|
* IBLOCK_ID - id iblock
|
|
* LANG - lang id
|
|
* TITLE - window title
|
|
* OBJ - object var name
|
|
* Variables
|
|
* this.PREFIX
|
|
* this.PREFIX_TR
|
|
* this.FORM_ID
|
|
* this.FORM_DATA
|
|
* this.TABLE_PROP_ID
|
|
* this.PROP_TBL
|
|
* this.PROP_COUNT_ID
|
|
* this.PROP_COUNT
|
|
* this.PROP_COUNT_VALUE
|
|
* this.IBLOCK_ID
|
|
* this.LANG
|
|
* this.TITLE
|
|
* this.CELLS
|
|
* this.CELL_IND
|
|
* this.CELL_CENT
|
|
* this.OBJNAME
|
|
*/
|
|
function JCIBlockProperty(arParams)
|
|
{
|
|
if (!arParams)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.intERROR = 0;
|
|
this.PREFIX = arParams.PREFIX;
|
|
this.PREFIX_TR = this.PREFIX+'ROW_';
|
|
this.FORM_ID = arParams.FORM_ID;
|
|
this.TABLE_PROP_ID = arParams.TABLE_PROP_ID;
|
|
this.PROP_COUNT_ID = arParams.PROP_COUNT_ID;
|
|
this.IBLOCK_ID = arParams.IBLOCK_ID;
|
|
this.LANG = arParams.LANG;
|
|
this.TITLE = arParams.TITLE;
|
|
this.CELLS = [];
|
|
this.CELL_IND = -1;
|
|
this.CELL_CENT = [];
|
|
this.OBJNAME = arParams.OBJ;
|
|
|
|
BX.ready(BX.delegate(this.Init,this));
|
|
}
|
|
|
|
JCIBlockProperty.prototype.Init = function()
|
|
{
|
|
var clButtons = null,
|
|
i = 0;
|
|
|
|
this.FORM_DATA = BX(this.FORM_ID);
|
|
if (!this.FORM_DATA)
|
|
{
|
|
this.intERROR = -1;
|
|
return;
|
|
}
|
|
this.PROP_TBL = BX(this.TABLE_PROP_ID);
|
|
if (!this.PROP_TBL)
|
|
{
|
|
this.intERROR = -1;
|
|
return;
|
|
}
|
|
this.PROP_COUNT = BX(this.PROP_COUNT_ID);
|
|
if (!this.PROP_COUNT)
|
|
{
|
|
this.intERROR = -1;
|
|
return;
|
|
}
|
|
clButtons = BX.findChildren(this.PROP_TBL, {'tag': 'input','attribute': { 'type':'button'}}, true);
|
|
if (!!clButtons)
|
|
{
|
|
for (i = 0; i < clButtons.length; i++)
|
|
{
|
|
BX.bind(clButtons[i], 'click', BX.proxy(this.ShowPropertyDialog, this));
|
|
}
|
|
}
|
|
|
|
BX.addCustomEvent(this.FORM_DATA, 'onAutoSaveRestore', BX.delegate(this.onAutoSaveRestore, this));
|
|
};
|
|
|
|
JCIBlockProperty.prototype.GetPropInfo = function(ID)
|
|
{
|
|
if (0 > this.intERROR)
|
|
return {};
|
|
|
|
ID = this.PREFIX + ID;
|
|
|
|
return {
|
|
'PROPERTY_TYPE' : this.FORM_DATA[ID+'_PROPERTY_TYPE'].value,
|
|
'NAME' : this.FORM_DATA[ID+'_NAME'].value,
|
|
'ACTIVE' : (this.FORM_DATA[ID+'_ACTIVE_Y'].checked ? this.FORM_DATA[ID+'_ACTIVE_Y'].value : this.FORM_DATA[ID+'_ACTIVE_N'].value),
|
|
'MULTIPLE' : (this.FORM_DATA[ID+'_MULTIPLE_Y'].checked ? this.FORM_DATA[ID+'_MULTIPLE_Y'].value : this.FORM_DATA[ID+'_MULTIPLE_N'].value),
|
|
'IS_REQUIRED' : (this.FORM_DATA[ID+'_IS_REQUIRED_Y'].checked ? this.FORM_DATA[ID+'_IS_REQUIRED_Y'].value : this.FORM_DATA[ID+'_IS_REQUIRED_N'].value),
|
|
'SORT' : this.FORM_DATA[ID+'_SORT'].value,
|
|
'CODE' : this.FORM_DATA[ID+'_CODE'].value,
|
|
'PROPINFO': this.FORM_DATA[ID+'_PROPINFO'].value
|
|
};
|
|
};
|
|
|
|
JCIBlockProperty.prototype.SetPropInfo = function(ID,arProp,formsess)
|
|
{
|
|
var i = 0,
|
|
PropActive = null,
|
|
PropMulti = null,
|
|
PropReq = null;
|
|
|
|
if (0 > this.intERROR)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!formsess)
|
|
{
|
|
return;
|
|
}
|
|
if (BX.bitrix_sessid() !== formsess)
|
|
{
|
|
return;
|
|
}
|
|
|
|
ID = this.PREFIX+ID;
|
|
|
|
this.FORM_DATA[ID+'_NAME'].value = arProp.NAME;
|
|
this.FORM_DATA[ID+'_SORT'].value = arProp.SORT;
|
|
this.FORM_DATA[ID+'_CODE'].value = arProp.CODE;
|
|
PropActive = BX(ID+'_ACTIVE_Y');
|
|
PropActive.checked = ('Y' === arProp.ACTIVE);
|
|
PropMulti = BX(ID+'_MULTIPLE_Y');
|
|
PropMulti.checked = ('Y' === arProp.MULTIPLE);
|
|
PropReq = BX(ID+'_IS_REQUIRED_Y');
|
|
PropReq.checked = ('Y' === arProp.IS_REQUIRED);
|
|
this.FORM_DATA[ID+'_PROPINFO'].value = arProp.PROPINFO;
|
|
for (i = 0; i < this.FORM_DATA[ID+'_PROPERTY_TYPE'].length; i++)
|
|
{
|
|
if (arProp.PROPERTY_TYPE === this.FORM_DATA[ID+'_PROPERTY_TYPE'].options[i].value)
|
|
{
|
|
this.FORM_DATA[ID+'_PROPERTY_TYPE'].options[i].selected = true;
|
|
}
|
|
}
|
|
|
|
BX.fireEvent(this.FORM_DATA[ID+'_NAME'], 'change');
|
|
};
|
|
|
|
JCIBlockProperty.prototype.GetProperty = function(strName)
|
|
{
|
|
if (0 > this.intERROR)
|
|
return '';
|
|
|
|
if (!strName || !this[strName])
|
|
return '';
|
|
|
|
return this[strName];
|
|
};
|
|
|
|
JCIBlockProperty.prototype.SetProperty = function(strName,value)
|
|
{
|
|
if (0 > this.intERROR)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (strName)
|
|
{
|
|
this[strName] = value;
|
|
}
|
|
};
|
|
|
|
JCIBlockProperty.prototype.ShowPropertyDialog = function ()
|
|
{
|
|
if (0 > this.intERROR)
|
|
{
|
|
return;
|
|
}
|
|
var target = BX.proxy_context,
|
|
ID = '',
|
|
arResult = {};
|
|
|
|
if (!!target && target.hasAttribute('data-propid'))
|
|
{
|
|
ID = target.getAttribute('data-propid');
|
|
|
|
arResult = {
|
|
'PARAMS': {
|
|
'PREFIX': this.PREFIX,
|
|
'ID': ID,
|
|
'IBLOCK_ID': this.IBLOCK_ID,
|
|
'TITLE': this.TITLE,
|
|
'RECEIVER': this.OBJNAME
|
|
},
|
|
'PROP': this.GetPropInfo(ID),
|
|
'sessid': BX.bitrix_sessid()
|
|
};
|
|
(new BX.CAdminDialog({
|
|
'title': this.TITLE,
|
|
'content_url': '/bitrix/admin/iblock_edit_property.php?lang='+this.LANG+'&propedit='+ID+'&bxpublic=Y&receiver='+this.OBJNAME,
|
|
'content_post': arResult,
|
|
'draggable': true,
|
|
'resizable': true,
|
|
'buttons': [BX.CAdminDialog.btnSave, BX.CAdminDialog.btnCancel]
|
|
})).Show();
|
|
}
|
|
};
|
|
|
|
JCIBlockProperty.prototype.SetCells = function(arCells,intIndex,arCenter)
|
|
{
|
|
var i = 0;
|
|
|
|
if (0 > this.intERROR)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (arCells)
|
|
{
|
|
this.CELLS = BX.clone(arCells,true);
|
|
}
|
|
for (i = 0; i < this.CELLS.length; i++)
|
|
{
|
|
this.CELLS[i] = this.CELLS[i].replace(/PREFIX/ig, this.PREFIX);
|
|
}
|
|
if (intIndex)
|
|
{
|
|
this.CELL_IND = intIndex;
|
|
}
|
|
if (arCenter)
|
|
{
|
|
this.CELL_CENT = BX.clone(arCenter,true);
|
|
}
|
|
};
|
|
|
|
JCIBlockProperty.prototype.addPropRow = function()
|
|
{
|
|
if (0 > this.intERROR)
|
|
{
|
|
return;
|
|
}
|
|
var i = 0,
|
|
id = parseInt(this.PROP_COUNT.value, 10),
|
|
needCell = '',
|
|
newRow = null,
|
|
oCell = null,
|
|
typeHtml = '',
|
|
clButtons = null;
|
|
|
|
newRow = this.PROP_TBL.insertRow(this.PROP_TBL.rows.length);
|
|
newRow.id = this.PREFIX_TR+'n'+id;
|
|
for (i = 0; i < this.CELLS.length; i++)
|
|
{
|
|
oCell = newRow.insertCell(-1);
|
|
typeHtml = this.CELLS[i];
|
|
typeHtml = typeHtml.replace(/tmp_xxx/ig, 'n'+id);
|
|
oCell.innerHTML = typeHtml;
|
|
}
|
|
for (i = 0; i < this.CELL_CENT.length; i++)
|
|
{
|
|
needCell = newRow.cells[this.CELL_CENT[i]-1];
|
|
if (!!needCell)
|
|
{
|
|
BX.adjust(needCell, { style: {'textAlign': 'center', 'verticalAlign' : 'middle'} });
|
|
}
|
|
}
|
|
|
|
needCell = newRow.cells[0];
|
|
if (!!needCell)
|
|
{
|
|
BX.adjust(needCell, { style: {'verticalAlign' : 'middle'} });
|
|
}
|
|
|
|
if (newRow.cells[this.CELL_IND])
|
|
{
|
|
needCell = newRow.cells[this.CELL_IND];
|
|
clButtons = BX.findChildren(needCell, {'tag': 'input','attribute': { 'type':'button'}}, true);
|
|
if (!!clButtons)
|
|
{
|
|
for (i = 0; i < clButtons.length; i++)
|
|
{
|
|
BX.bind(clButtons[i], 'click', BX.proxy(this.ShowPropertyDialog, this));
|
|
}
|
|
}
|
|
}
|
|
|
|
BX.adminFormTools.modifyFormElements(this.FORM_ID);
|
|
|
|
setTimeout(function() {
|
|
var i = 0,
|
|
l = 0,
|
|
r = BX.findChildren(newRow.parentNode, {tag: /^(input|select|textarea)$/i}, true);
|
|
if (r && r.length > 0)
|
|
{
|
|
for (i=0, l = r.length;i<l;i++)
|
|
{
|
|
if (r[i].form && r[i].form.BXAUTOSAVE)
|
|
{
|
|
r[i].form.BXAUTOSAVE.RegisterInput(r[i]);
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}, 10);
|
|
|
|
this.PROP_COUNT.value = id + 1;
|
|
};
|
|
|
|
JCIBlockProperty.prototype.onAutoSaveRestore = function(ob, data)
|
|
{
|
|
while (data['IB_PROPERTY_n' + this.PROP_COUNT.value + '_NAME'])
|
|
{
|
|
this.addPropRow();
|
|
}
|
|
};
|
|
|
|
function JCIBlockAccess(entity_type, iblock_id, id, arSelected, variable_name, table_id, href_id, sSelect, arHighLight)
|
|
{
|
|
this.entity_type = entity_type;
|
|
this.iblock_id = iblock_id;
|
|
this.id = id;
|
|
this.arSelected = arSelected;
|
|
this.variable_name = variable_name;
|
|
this.table_id = table_id;
|
|
this.href_id = href_id;
|
|
this.sSelect = sSelect;
|
|
this.arHighLight = arHighLight;
|
|
|
|
BX.ready(BX.delegate(this.Init, this));
|
|
}
|
|
|
|
JCIBlockAccess.prototype.Init = function()
|
|
{
|
|
BX.bind(BX(this.href_id), 'click', BX.delegate(this.Add, this));
|
|
var heading = BX(this.variable_name + '_heading');
|
|
if(heading)
|
|
{
|
|
BX.bind(heading, 'dblclick', BX.delegate(this.ShowInfo, this));
|
|
}
|
|
BX.Access.Init(this.arHighLight);
|
|
BX.Access.SetSelected(this.arSelected, this.variable_name);
|
|
};
|
|
|
|
JCIBlockAccess.prototype.Add = function()
|
|
{
|
|
BX.Access.ShowForm({callback: BX.delegate(this.InsertRights, this), bind: this.variable_name})
|
|
};
|
|
|
|
JCIBlockAccess.prototype.InsertRights = function(obSelected)
|
|
{
|
|
var tbl = BX(this.table_id);
|
|
for(var provider in obSelected)
|
|
{
|
|
if (obSelected.hasOwnProperty(provider))
|
|
{
|
|
for(var id in obSelected[provider])
|
|
{
|
|
if (obSelected[provider].hasOwnProperty(id))
|
|
{
|
|
var cnt = tbl.rows.length;
|
|
var row = tbl.insertRow(cnt-1);
|
|
row.vAlign = 'top';
|
|
row.insertCell(-1);
|
|
row.insertCell(-1);
|
|
row.cells[0].align = 'right';
|
|
row.cells[0].style.textAlign = 'right';
|
|
row.cells[0].style.verticalAlign = 'middle';
|
|
row.cells[0].innerHTML = BX.Access.GetProviderName(provider)+' '+BX.Text.encode(obSelected[provider][id].name)+':'+'<input type="hidden" name="'+this.variable_name+'[][RIGHT_ID]" value=""><input type="hidden" name="'+this.variable_name+'[][GROUP_CODE]" value="'+id+'">';
|
|
row.cells[1].align = 'left';
|
|
row.cells[1].innerHTML = this.sSelect + ' ' + '<a href="javascript:void(0);" onclick="JCIBlockAccess.DeleteRow(this, \''+id+'\', \''+this.variable_name+'\')" class="access-delete"></a><span title="'+BX.message('langApplyTitle')+'" id="overwrite_'+id+'"></span>';
|
|
|
|
var parents = BX.findChildren(tbl, {'class' : this.variable_name + '_row_for_' + id}, true);
|
|
if(parents)
|
|
for(var i = 0; i < parents.length; i++)
|
|
parents[i].className += ' iblock-strike-out';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(parseInt(this.id) > 0)
|
|
{
|
|
BX.ajax.loadJSON(
|
|
'/bitrix/admin/iblock_edit.php'+
|
|
'?ajax=y'+
|
|
'&sessid='+BX.bitrix_sessid()+
|
|
'&entity_type='+this.entity_type+
|
|
'&iblock_id='+this.iblock_id+
|
|
'&id='+this.id,
|
|
{added: obSelected},
|
|
function(result)
|
|
{
|
|
if(result)
|
|
{
|
|
for(var id in result)
|
|
{
|
|
var s = parseInt(result[id][0]);
|
|
var e = parseInt(result[id][1]);
|
|
var mess = '';
|
|
if(s > 0 && e > 0)
|
|
mess = BX.message('langApply1Title');
|
|
else if (s > 0)
|
|
mess = BX.message('langApply2Title');
|
|
else if (e > 0)
|
|
mess = BX.message('langApply3Title');
|
|
|
|
if(mess)
|
|
BX('overwrite_'+id).innerHTML = '<br><input type="checkbox" name="'+this.variable_name+'[][DO_CLEAN]" value="Y" checked="checked" disabled="disabled">'+mess+' ('+(s+e)+')';
|
|
}
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
BX.onCustomEvent('onAdminTabsChange');
|
|
};
|
|
|
|
JCIBlockAccess.prototype.ShowInfo = function()
|
|
{
|
|
var entity_type = this.entity_type;
|
|
var iblock_id = this.iblock_id;
|
|
var id = this.id;
|
|
|
|
var btnOK = new BX.CWindowButton({
|
|
'title': 'Query',
|
|
'action': function()
|
|
{
|
|
var _user_id = BX('prompt_user_id');
|
|
BX('info_result').innerHTML = '';
|
|
BX.showWait();
|
|
BX.ajax.loadJSON(
|
|
'/bitrix/admin/iblock_edit.php'+
|
|
'?ajax=y'+
|
|
'&sessid='+BX.bitrix_sessid()+
|
|
'&entity_type='+entity_type+
|
|
'&iblock_id='+iblock_id+
|
|
'&id='+id,
|
|
{info: _user_id.value},
|
|
function(result)
|
|
{
|
|
if(result)
|
|
{
|
|
for(var id in result)
|
|
{
|
|
BX('info_result').innerHTML += '<span style="display:inline-block;width:200px;height:15px;">' + id + '</span>';
|
|
}
|
|
}
|
|
BX.closeWait();
|
|
}
|
|
);
|
|
}
|
|
})
|
|
|
|
if (null == this.iblock_info_obDialog)
|
|
{
|
|
this.iblock_info_obDialog = new BX.CDialog({
|
|
content: '<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td width="50%" align="right">User ID:</td><td width="50%" align="left"><input type="text" size="6" id="prompt_user_id" value=""></td></tr><tr><td colspan="2" id="info_result"></td></tr></table>',
|
|
buttons: [btnOK, BX.CDialog.btnCancel],
|
|
width: 420,
|
|
height: 200
|
|
});
|
|
}
|
|
|
|
this.iblock_info_obDialog.Show();
|
|
|
|
var inp = BX('prompt_user_id');
|
|
inp.focus();
|
|
inp.select();
|
|
};
|
|
|
|
JCIBlockAccess.DeleteRow = function(ob, id, variable_name)
|
|
{
|
|
var row = BX.findParent(ob, {'tag':'tr'});
|
|
var tbl = BX.findParent(row, {'tag':'table'});
|
|
var parents = BX.findChildren(tbl, {'class' : variable_name + '_row_for_' + id + ' iblock-strike-out'}, true);
|
|
if(parents)
|
|
for(var i = 0; i < parents.length; i++)
|
|
parents[i].className = variable_name + '_row_for_' + id;
|
|
row.parentNode.removeChild(row);
|
|
BX.onCustomEvent('onAdminTabsChange');
|
|
BX.Access.DeleteSelected(id, variable_name);
|
|
};
|
|
|
|
BX.IBlock.Tools = function()
|
|
{
|
|
|
|
};
|
|
|
|
BX.IBlock.Tools.addNewRow = function(tableID, row_to_clone)
|
|
{
|
|
var tbl = document.getElementById(tableID);
|
|
var cnt = tbl.rows.length;
|
|
if(row_to_clone == null)
|
|
row_to_clone = -2;
|
|
var sHTML = tbl.rows[cnt+row_to_clone].cells[0].innerHTML;
|
|
var oRow = tbl.insertRow(cnt+row_to_clone+1);
|
|
var oCell = oRow.insertCell(0);
|
|
|
|
var s, e, n, p;
|
|
p = 0;
|
|
while(true)
|
|
{
|
|
s = sHTML.indexOf('[n',p);
|
|
if(s<0)break;
|
|
e = sHTML.indexOf(']',s);
|
|
if(e<0)break;
|
|
n = parseInt(sHTML.substr(s+2,e-s));
|
|
if (isFinite(n))
|
|
{
|
|
sHTML = sHTML.substr(0, s) + '[n' + (++n) + ']' + sHTML.substr(e + 1);
|
|
}
|
|
p=s+1;
|
|
}
|
|
p = 0;
|
|
while(true)
|
|
{
|
|
s = sHTML.indexOf('__n',p);
|
|
if(s<0)break;
|
|
e = sHTML.indexOf('_',s+2);
|
|
if(e<0)break;
|
|
n = parseInt(sHTML.substr(s+3,e-s));
|
|
if (isFinite(n))
|
|
{
|
|
sHTML = sHTML.substr(0, s) + '__n' + (++n) + '_' + sHTML.substr(e + 1);
|
|
}
|
|
p=e+1;
|
|
}
|
|
p = 0;
|
|
while(true)
|
|
{
|
|
s = sHTML.indexOf('__N',p);
|
|
if(s<0)break;
|
|
e = sHTML.indexOf('__',s+2);
|
|
if(e<0)break;
|
|
n = parseInt(sHTML.substr(s+3,e-s));
|
|
if (isFinite(n))
|
|
{
|
|
sHTML = sHTML.substr(0, s) + '__N' + (++n) + '__' + sHTML.substr(e + 2);
|
|
}
|
|
p=e+2;
|
|
}
|
|
p = 0;
|
|
while(true)
|
|
{
|
|
s = sHTML.indexOf('xxn',p);
|
|
if(s<0)break;
|
|
e = sHTML.indexOf('xx',s+2);
|
|
if(e<0)break;
|
|
n = parseInt(sHTML.substr(s+3,e-s));
|
|
if (isFinite(n))
|
|
{
|
|
sHTML = sHTML.substr(0, s) + 'xxn' + (++n) + 'xx' + sHTML.substr(e + 2);
|
|
}
|
|
p=e+2;
|
|
}
|
|
p = 0;
|
|
while(true)
|
|
{
|
|
s = sHTML.indexOf('%5Bn',p);
|
|
if(s<0)break;
|
|
e = sHTML.indexOf('%5D',s+3);
|
|
if(e<0)break;
|
|
n = parseInt(sHTML.substr(s+4,e-s));
|
|
if (isFinite(n))
|
|
{
|
|
sHTML = sHTML.substr(0, s) + '%5Bn' + (++n) + '%5D' + sHTML.substr(e + 3);
|
|
}
|
|
p=e+3;
|
|
}
|
|
|
|
var htmlObject = {'html': sHTML};
|
|
BX.onCustomEvent(window, 'onAddNewRowBeforeInner', [htmlObject]);
|
|
sHTML = htmlObject.html;
|
|
|
|
oCell.innerHTML = sHTML;
|
|
|
|
var patt = new RegExp ("<"+"script"+">[^\000]*?<"+"\/"+"script"+">", "ig");
|
|
var code = sHTML.match(patt);
|
|
if(code)
|
|
{
|
|
for(var i = 0; i < code.length; i++)
|
|
{
|
|
if(code[i] !== '')
|
|
{
|
|
s = code[i].substring(8, code[i].length-9);
|
|
jsUtils.EvalGlobal(s);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (BX && BX.adminPanel)
|
|
{
|
|
BX.adminPanel.modifyFormElements(oRow);
|
|
BX.onCustomEvent('onAdminTabsChange');
|
|
}
|
|
|
|
setTimeout(function() {
|
|
var r = BX.findChildren(oCell, {tag: /^(input|select|textarea)$/i});
|
|
if (r && r.length > 0)
|
|
{
|
|
for (var i=0,l=r.length;i<l;i++)
|
|
{
|
|
if (r[i].form && r[i].form.BXAUTOSAVE)
|
|
r[i].form.BXAUTOSAVE.RegisterInput(r[i]);
|
|
else
|
|
break;
|
|
}
|
|
}
|
|
}, 10);
|
|
}
|
|
|
|
function JCIBlockGroupField(form, groupSection_id, ajaxURL)
|
|
{
|
|
this.form = form;
|
|
this.groupSection = BX(groupSection_id);
|
|
this.ajaxURL = ajaxURL;
|
|
}
|
|
|
|
JCIBlockGroupField.prototype.reload = function()
|
|
{
|
|
if (!window.JCIBlockGroupFieldIsRunning)
|
|
{
|
|
window.JCIBlockGroupFieldIsRunning = true;
|
|
this.preparePost();
|
|
}
|
|
else
|
|
{
|
|
if (window.JCIBlockGroupFieldTimer)
|
|
clearTimeout(window.JCIBlockGroupFieldTimer);
|
|
window.JCIBlockGroupFieldTimer = setTimeout(BX.proxy(this.reload, this), 500);
|
|
}
|
|
};
|
|
|
|
JCIBlockGroupField.prototype.preparePost = function()
|
|
{
|
|
var i;
|
|
var values = [];
|
|
values[values.length] = {name : 'ajax_action', value : 'section_property'};
|
|
values[values.length] = {name : 'sessid', value : BX.bitrix_sessid()};
|
|
this.gatherInputsValues(values, document.getElementsByName('IBLOCK_SECTION[]'));
|
|
|
|
var toReload = BX.findChildren(this.form, {'tag' : 'tr', 'class' : 'bx-in-group'}, true);
|
|
if(toReload)
|
|
{
|
|
for(i = 0; i < toReload.length; i++)
|
|
this.gatherInputsValues(values, BX.findChildren(toReload[i], null, true));
|
|
}
|
|
|
|
var formHiddens = BX.findChildren(this.form, {'tag' : 'span', 'class' : 'bx-fields-hidden'}, true);
|
|
if(formHiddens)
|
|
{
|
|
for(i = 0; i < formHiddens.length; i++)
|
|
this.gatherInputsValues(values, BX.findChildren(formHiddens[i], null, true));
|
|
}
|
|
|
|
BX.ajax.post(
|
|
this.ajaxURL,
|
|
this.values2post(values),
|
|
BX.delegate(this.postHandler, this)
|
|
);
|
|
};
|
|
|
|
JCIBlockGroupField.prototype.postHandler = function (result)
|
|
{
|
|
var i;
|
|
if(this.form)
|
|
{
|
|
var toDelete = BX.findChildren(this.form, {'tag' : 'tr', 'class' : 'bx-in-group'}, true);
|
|
if(toDelete)
|
|
{
|
|
for(i = 0; i < toDelete.length; i++)
|
|
this.groupSection.parentNode.removeChild(toDelete[i]);
|
|
}
|
|
|
|
var responseDOM = document.createElement('DIV');
|
|
responseDOM.innerHTML = result;
|
|
|
|
var toInsert = BX.findChildren(responseDOM, {'tag' : 'tr', 'class' : 'bx-in-group'}, true);
|
|
if(toInsert)
|
|
{
|
|
var sibling = this.groupSection.nextSibling;
|
|
for(i = 0; i < toInsert.length; i++)
|
|
{
|
|
var toMove = toInsert[i];
|
|
toMove.parentNode.removeChild(toMove);
|
|
this.groupSection.parentNode.insertBefore(toMove, sibling);
|
|
}
|
|
}
|
|
|
|
var formHiddens;
|
|
formHiddens = BX.findChildren(this.form, {'tag' : 'span', 'class' : 'bx-fields-hidden'}, true);
|
|
if(formHiddens)
|
|
for(i = 0; i < formHiddens.length; i++)
|
|
formHiddens[i].parentNode.removeChild(formHiddens[i]);
|
|
|
|
formHiddens = BX.findChildren(responseDOM, {'tag' : 'span', 'class' : 'bx-fields-hidden'}, true);
|
|
if(formHiddens)
|
|
{
|
|
for(i = 0; i < formHiddens.length; i++)
|
|
{
|
|
var span = formHiddens[i];
|
|
span.parentNode.removeChild(span);
|
|
this.form.appendChild(span);
|
|
}
|
|
}
|
|
|
|
BX.onCustomEvent('onAdminTabsChange');
|
|
BX.adminPanel.modifyFormElements(this.form);
|
|
}
|
|
window.JCIBlockGroupFieldIsRunning = false;
|
|
};
|
|
|
|
JCIBlockGroupField.prototype.gatherInputsValues = function (values, elements)
|
|
{
|
|
if(elements)
|
|
{
|
|
for(var i = 0; i < elements.length; i++)
|
|
{
|
|
var el = elements[i];
|
|
if (el.disabled || !el.type)
|
|
continue;
|
|
|
|
switch(el.type.toLowerCase())
|
|
{
|
|
case 'text':
|
|
case 'textarea':
|
|
case 'password':
|
|
case 'hidden':
|
|
case 'select-one':
|
|
values[values.length] = {name : el.name, value : el.value};
|
|
break;
|
|
case 'radio':
|
|
case 'checkbox':
|
|
if(el.checked)
|
|
values[values.length] = {name : el.name, value : el.value};
|
|
break;
|
|
case 'select-multiple':
|
|
for (var j = 0; j < el.options.length; j++)
|
|
{
|
|
if (el.options[j].selected)
|
|
values[values.length] = {name : el.name, value : el.options[j].value};
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
JCIBlockGroupField.prototype.values2post = function (values)
|
|
{
|
|
var post = [];
|
|
var current = post;
|
|
var i = 0;
|
|
while(i < values.length)
|
|
{
|
|
var p = values[i].name.indexOf('[');
|
|
if(p == -1)
|
|
{
|
|
current[values[i].name] = values[i].value;
|
|
current = post;
|
|
i++;
|
|
}
|
|
else
|
|
{
|
|
var name = values[i].name.substring(0, p);
|
|
var rest = values[i].name.substring(p+1);
|
|
if(!current[name])
|
|
current[name] = [];
|
|
|
|
var pp = rest.indexOf(']');
|
|
if(pp == -1)
|
|
{
|
|
//Error - not balanced brackets
|
|
current = post;
|
|
i++;
|
|
}
|
|
else if(pp == 0)
|
|
{
|
|
//No index specified - so take the next integer
|
|
current = current[name];
|
|
values[i].name = '' + current.length;
|
|
}
|
|
else
|
|
{
|
|
//Now index name becomes and name and we go deeper into the array
|
|
current = current[name];
|
|
values[i].name = rest.substring(0, pp) + rest.substring(pp+1);
|
|
}
|
|
}
|
|
}
|
|
return post;
|
|
};
|
|
|
|
window.ipropTemplates = [];
|
|
|
|
function JCInheritedPropertiesTemplates(form, ajaxURL)
|
|
{
|
|
this.form = form;
|
|
this.ajaxURL = ajaxURL;
|
|
}
|
|
|
|
JCInheritedPropertiesTemplates.prototype.updateInheritedPropertiesTemplates = function(start)
|
|
{
|
|
for (var i = 0; i < ipropTemplates.length; i++)
|
|
{
|
|
var obj_ta = BX(ipropTemplates[i].INPUT_ID);
|
|
if (obj_ta && obj_ta.type.toLowerCase() == "textarea")
|
|
{
|
|
if (obj_ta.scrollHeight > obj_ta.clientHeight)
|
|
{
|
|
var dy = obj_ta.offsetHeight - obj_ta.clientHeight;
|
|
var newHeight = obj_ta.scrollHeight + dy;
|
|
obj_ta.style.height = newHeight + 'px';
|
|
}
|
|
|
|
var ck = BX('ck_' + ipropTemplates[i].INPUT_ID);
|
|
if (ck)
|
|
{
|
|
if (ck.checked)
|
|
{
|
|
obj_ta.readOnly = false;
|
|
BX('mnu_' + ipropTemplates[i].INPUT_ID).disabled = false;
|
|
}
|
|
else
|
|
{
|
|
obj_ta.readOnly = true;
|
|
BX('mnu_' + ipropTemplates[i].INPUT_ID).disabled = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (start)
|
|
setTimeout(function(){InheritedPropertiesTemplates.updateInheritedPropertiesValues(true)}, 100);
|
|
};
|
|
|
|
JCInheritedPropertiesTemplates.prototype.updateInheritedPropertiesValues = function(startup, force)
|
|
{
|
|
var i, space, input, values, f, k, obj_ta, clearValues;
|
|
|
|
if (startup)
|
|
{
|
|
for (i = 0; i < ipropTemplates.length; i++)
|
|
{
|
|
space = BX('space_' + ipropTemplates[i].ID);
|
|
if (space)
|
|
ipropTemplates[i].SPACE = space.value;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < ipropTemplates.length; i++)
|
|
{
|
|
input = BX(ipropTemplates[i].INPUT_ID);
|
|
if (!input)
|
|
return;
|
|
|
|
space = BX('space_' + ipropTemplates[i].ID);
|
|
if (space)
|
|
this.asciiOnly(space);
|
|
|
|
if (
|
|
force
|
|
|| ipropTemplates[i].TEMPLATE != BX(ipropTemplates[i].INPUT_ID).value
|
|
|| (
|
|
space
|
|
&& ipropTemplates[i].SPACE != space.value
|
|
)
|
|
)
|
|
{
|
|
values = [];
|
|
f = new JCIBlockGroupField(BX(this.form));
|
|
f.gatherInputsValues(values, BX.findChildren(BX(this.form), null, true));
|
|
for (k = 0; k < ipropTemplates.length; k++)
|
|
{
|
|
obj_ta = BX(ipropTemplates[k].INPUT_ID);
|
|
if (obj_ta && obj_ta.readOnly)
|
|
{
|
|
values[values.length] = {name : obj_ta.name, value : obj_ta.value}
|
|
}
|
|
}
|
|
//p = f.values2post(values);
|
|
BX.ajax.post(
|
|
this.ajaxURL,
|
|
f.values2post(values),
|
|
function(data)
|
|
{
|
|
var DATA = [], data_test, j, k, div;
|
|
if (BX.type.isNotEmptyString(data))
|
|
{
|
|
data_test = BX.parseJSON(data);
|
|
if (data_test)
|
|
{
|
|
eval('DATA = ' + data);
|
|
}
|
|
}
|
|
for (j = 0; j < DATA.length; j++)
|
|
{
|
|
if (DATA[j].htmlId)
|
|
{
|
|
if (BX(DATA[j].htmlId))
|
|
BX(DATA[j].htmlId).innerHTML = DATA[j].value;
|
|
else if (typeof DATA[j].hiddenId != "undefined" && BX(DATA[j].hiddenId))
|
|
BX(DATA[j].hiddenId).value = DATA[j].hiddenValue;
|
|
}
|
|
else
|
|
{
|
|
for (k = 0; k < ipropTemplates.length; k++)
|
|
{
|
|
if (ipropTemplates[k].ID == DATA[j].id)
|
|
{
|
|
div = BX(ipropTemplates[k].RESULT_ID);
|
|
if (div)
|
|
div.innerHTML = DATA[j].value;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
);
|
|
if (!startup)
|
|
{
|
|
clearValues = BX('IPROPERTY_CLEAR_VALUES');
|
|
if (clearValues)
|
|
{
|
|
clearValues.value = "Y";
|
|
if (clearValues.type.toLowerCase() == 'checkbox')
|
|
clearValues.checked = true;
|
|
}
|
|
}
|
|
this.updateInheritedPropertiesTemplates();
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < ipropTemplates.length; i++)
|
|
{
|
|
obj_ta = BX(ipropTemplates[i].INPUT_ID);
|
|
if (obj_ta)
|
|
{
|
|
ipropTemplates[i].TEMPLATE = obj_ta.value;
|
|
|
|
space = BX('space_' + ipropTemplates[i].ID);
|
|
if (space)
|
|
{
|
|
ipropTemplates[i].SPACE = space.value;
|
|
}
|
|
}
|
|
}
|
|
|
|
setTimeout(function(){InheritedPropertiesTemplates.updateInheritedPropertiesValues()}, 1000);
|
|
};
|
|
|
|
JCInheritedPropertiesTemplates.prototype.insertIntoInheritedPropertiesTemplate = function(text, mnu_id, el_id)
|
|
{
|
|
var el = BX(el_id);
|
|
el.focus();
|
|
|
|
var val = el.value, endIndex, range;
|
|
if (typeof el.selectionStart != "undefined" && typeof el.selectionEnd != "undefined") {
|
|
endIndex = el.selectionEnd;
|
|
el.value = val.slice(0, el.selectionStart) + text + val.slice(endIndex);
|
|
el.selectionStart = el.selectionEnd = endIndex + text.length;
|
|
} else if (typeof document.selection != "undefined" && typeof document.selection.createRange != "undefined") {
|
|
el.focus();
|
|
range = document.selection.createRange();
|
|
range.collapse(false);
|
|
range.text = text;
|
|
range.select();
|
|
}
|
|
|
|
this.updateInheritedPropertiesTemplates();
|
|
BX.fireEvent(el, 'change');
|
|
el.focus();
|
|
};
|
|
|
|
JCInheritedPropertiesTemplates.prototype.onTabSelect = function()
|
|
{
|
|
this.updateInheritedPropertiesValues();
|
|
this.updateInheritedPropertiesTemplates();
|
|
};
|
|
|
|
JCInheritedPropertiesTemplates.prototype.enableTextArea = function(el_id)
|
|
{
|
|
var el = BX(el_id);
|
|
var ck = BX('ck_' + el_id);
|
|
if (el && el.readOnly)
|
|
{
|
|
el.readOnly = false;
|
|
if (ck && !ck.checked)
|
|
{
|
|
ck.checked = true;
|
|
this.updateInheritedPropertiesTemplates();
|
|
}
|
|
}
|
|
};
|
|
|
|
JCInheritedPropertiesTemplates.prototype.asciiOnly = function(el)
|
|
{
|
|
if (el.value.length > 0)
|
|
{
|
|
if (el.value.length > 1)
|
|
{
|
|
el.value = el.value.charAt(0);
|
|
}
|
|
if (el.value.charCodeAt(0) > 127)
|
|
{
|
|
el.value = '';
|
|
}
|
|
}
|
|
};
|
|
|
|
function JCPopupEditor(width, height)
|
|
{
|
|
this.width = width;
|
|
this.height = height;
|
|
this.popup_editor_dialog = null;
|
|
this.input = null;
|
|
}
|
|
|
|
JCPopupEditor.prototype.openEditor = function (hiddenId, maxLength)
|
|
{
|
|
if (!this.popup_editor_dialog)
|
|
{
|
|
this.popup_editor_dialog = new BX.CDialog({
|
|
content: '<div width="100%" id="popup_editor_container"></div>',
|
|
buttons: this.getButtons(),
|
|
width: this.width,
|
|
height: this.height
|
|
});
|
|
var popup_editor_container = BX('popup_editor_container');
|
|
var popup_editor_start = BX('popup_editor_start');
|
|
popup_editor_container.parentNode.appendChild(popup_editor_start);
|
|
popup_editor_container.parentNode.removeChild(popup_editor_container);
|
|
popup_editor_start.style.display = '';
|
|
LoadLHE_popup_editor_id();
|
|
}
|
|
this.popup_editor_dialog.Show();
|
|
this.input = BX(hiddenId);
|
|
popup_editor.SetEditorContent(this.input.value);
|
|
popup_editor.SetFocus();
|
|
this.startCharCounter();
|
|
}
|
|
|
|
JCPopupEditor.prototype.getButtons = function ()
|
|
{
|
|
var _this = this;
|
|
var btnOK = new BX.CWindowButton({
|
|
title: BX.message('JS_CORE_WINDOW_SAVE'),
|
|
id: 'savebtn',
|
|
name: 'savebtn',
|
|
className: BX.browser.IsIE() && BX.browser.IsDoctype() && !BX.browser.IsIE10() ? '' : 'adm-btn-save',
|
|
action: function()
|
|
{
|
|
_this.stopCharCounter();
|
|
this.parentWindow.Hide();
|
|
popup_editor.SetView('html');
|
|
_this.input.value = popup_editor.GetEditorContent();
|
|
_this.input.onchange();
|
|
}
|
|
});
|
|
var btnClose = new BX.CWindowButton({
|
|
title: BX.message('JS_CORE_WINDOW_CLOSE'),
|
|
id: 'closebtn',
|
|
name: 'closebtn',
|
|
action: function () {
|
|
_this.stopCharCounter();
|
|
//this.parentWindow.Close();
|
|
this.parentWindow.Hide();
|
|
}
|
|
});
|
|
return [btnOK, btnClose];
|
|
}
|
|
|
|
JCPopupEditor.prototype.startCharCounter = function()
|
|
{
|
|
if (!this.charCounterContainer)
|
|
{
|
|
this.charCounterContainer = BX.create('SPAN');
|
|
this.charCounterContainer.style.display = 'inline';
|
|
this.popup_editor_dialog.PARTS.BUTTONS_CONTAINER.appendChild(this.charCounterContainer);
|
|
}
|
|
|
|
if (!this.charCounterTimer)
|
|
{
|
|
this.charCounterTimer = setInterval(BX.delegate(function(){
|
|
this.updateCharCounter();
|
|
}, this), 500);
|
|
}
|
|
};
|
|
|
|
JCPopupEditor.prototype.updateCharCounter = function()
|
|
{
|
|
var len = popup_editor.GetEditorContent().length;
|
|
this.charCounterContainer.innerHTML = len;
|
|
if (len > 255 && !this.charCounterContainer.style.color)
|
|
this.charCounterContainer.style.color = 'red';
|
|
if (len <= 255 && this.charCounterContainer.style.color)
|
|
this.charCounterContainer.style.color = '';
|
|
};
|
|
|
|
JCPopupEditor.prototype.stopCharCounter = function()
|
|
{
|
|
if (this.charCounterTimer)
|
|
clearInterval(this.charCounterTimer);
|
|
this.charCounterTimer = null;
|
|
};
|