%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/main.interface.form/templates/.default/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/main.interface.form/templates/.default/script.js |
function BxInterfaceForm(name, aTabs)
{
var _this = this;
this.name = name;
this.aTabs = aTabs;
this.bExpandTabs = false;
this.vars = {};
this.oTabsMeta = {};
this.aTabsEdit = [];
this.oFields = {};
this.menu = new PopupMenu('bxFormMenu_'+this.name, 1010);
this.settingsMenu = [];
this.tabSettingsWnd = null;
this.fieldSettingsWnd = null;
this.SelectTab = function(tab_id)
{
var div = document.getElementById('inner_tab_'+tab_id);
if(div.style.display != 'none')
return;
for (var i = 0, cnt = this.aTabs.length; i < cnt; i++)
{
var tab = document.getElementById('inner_tab_'+this.aTabs[i]);
if(tab.style.display != 'none')
{
this.ShowTab(this.aTabs[i], false);
tab.style.display = 'none';
break;
}
}
this.ShowTab(tab_id, true);
div.style.display = 'block';
var hidden = document.getElementById(this.name+'_active_tab');
if(hidden)
hidden.value = tab_id;
};
this.ShowTab = function(tab_id, on)
{
var sel = (on? '-selected':'');
document.getElementById('tab_cont_'+tab_id).className = 'bx-tab-container'+sel;
document.getElementById('tab_left_'+tab_id).className = 'bx-tab-left'+sel;
document.getElementById('tab_'+tab_id).className = 'bx-tab'+sel;
document.getElementById('tab_right_'+tab_id).className = 'bx-tab-right'+sel;
};
this.HoverTab = function(tab_id, on)
{
var tab = document.getElementById('tab_'+tab_id);
if(tab.className == 'bx-tab-selected')
return;
document.getElementById('tab_left_'+tab_id).className = (on? 'bx-tab-left-hover':'bx-tab-left');
tab.className = (on? 'bx-tab-hover':'bx-tab');
var tab_right = document.getElementById('tab_right_'+tab_id);
tab_right.className = (on? 'bx-tab-right-hover':'bx-tab-right');
};
this.ShowDisabledTab = function(tab_id, disabled)
{
var tab = document.getElementById('tab_cont_'+tab_id);
if(disabled)
{
tab.className = 'bx-tab-container-disabled';
tab.onclick = null;
tab.onmouseover = null;
tab.onmouseout = null;
}
else
{
tab.className = 'bx-tab-container';
tab.onclick = function(){_this.SelectTab(tab_id);};
tab.onmouseover = function(){_this.HoverTab(tab_id, true);};
tab.onmouseout = function(){_this.HoverTab(tab_id, false);};
}
};
this.ToggleTabs = function(bSkipSave)
{
this.bExpandTabs = !this.bExpandTabs;
var a = document.getElementById('bxForm_'+this.name+'_expand_link');
if (!a)
{
return;
}
a.title = (this.bExpandTabs? this.vars.mess.collapseTabs : this.vars.mess.expandTabs);
a.className = (this.bExpandTabs? a.className.replace(/\s*bx-down/ig, ' bx-up') : a.className.replace(/\s*bx-up/ig, ' bx-down'));
var div;
for(var i in this.aTabs)
{
var tab_id = this.aTabs[i];
this.ShowTab(tab_id, false);
this.ShowDisabledTab(tab_id, this.bExpandTabs);
div = document.getElementById('inner_tab_'+tab_id);
div.style.display = (this.bExpandTabs? 'block':'none');
}
if(!this.bExpandTabs)
{
this.ShowTab(this.aTabs[0], true);
div = document.getElementById('inner_tab_'+this.aTabs[0]);
div.style.display = 'block';
}
if(bSkipSave !== true)
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?FORM_ID='+this.name+'&action=expand&expand='+(this.bExpandTabs? 'Y':'N')+'&sessid='+this.vars.sessid);
};
this.SetTheme = function(menuItem, theme)
{
BX.loadCSS(this.vars.template_path+'/themes/'+theme+'/style.css');
var themeMenu = this.menu.GetMenuByItemId(menuItem.id);
themeMenu.SetAllItemsIcon('');
themeMenu.SetItemIcon(menuItem, 'checked');
BX.ajax.get('/bitrix/components'+_this.vars.component_path+'/settings.php?FORM_ID='+this.name+'&GRID_ID='+this.vars.GRID_ID+'&action=settheme&theme='+theme+'&sessid='+this.vars.sessid);
};
this.ShowSettings = function()
{
var bCreated = false;
if(!window['formSettingsDialog'+this.name])
{
window['formSettingsDialog'+this.name] = new BX.CDialog({
'content':'<form name="form_settings_'+this.name+'"></form>',
'title': this.vars.mess.settingsTitle,
'width': this.vars.settingWndSize.width,
'height': this.vars.settingWndSize.height,
'resize_id': 'InterfaceFormSettingWnd'
});
bCreated = true;
}
window['formSettingsDialog'+this.name].ClearButtons();
window['formSettingsDialog'+this.name].SetButtons([
{
'title': this.vars.mess.settingsSave,
'action': function()
{
_this.SaveSettings();
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]);
window['formSettingsDialog'+this.name].Show();
var form = document['form_settings_'+this.name];
if(bCreated)
form.appendChild(BX('form_settings_'+this.name));
//editable data
var i;
this.aTabsEdit = [];
for(i in this.oTabsMeta)
{
var fields = [];
for(var j in this.oTabsMeta[i].fields)
fields[fields.length] = BX.clone(this.oTabsMeta[i].fields[j]);
this.aTabsEdit[this.aTabsEdit.length] = BX.clone(this.oTabsMeta[i]);
this.aTabsEdit[this.aTabsEdit.length-1].fields = fields;
}
//tabs
jsSelectUtils.deleteAllOptions(form.tabs);
for(i in this.aTabsEdit)
form.tabs.options[form.tabs.length] = new Option(this.aTabsEdit[i].name, this.aTabsEdit[i].id, false, false);
//fields
form.tabs.selectedIndex = 0;
this.OnSettingsChangeTab();
//available fields
this.aAvailableFields = BX.clone(this.oFields);
jsSelectUtils.deleteAllOptions(form.all_fields);
for(i in this.aAvailableFields)
form.all_fields.options[form.all_fields.length] = new Option(this.aAvailableFields[i].name, this.aAvailableFields[i].id, false, false);
jsSelectUtils.sortSelect(form.all_fields);
this.HighlightSections(form.all_fields);
this.ProcessButtons();
form.tabs.focus();
};
this.OnSettingsChangeTab = function()
{
var form = document['form_settings_'+this.name];
var index = form.tabs.selectedIndex;
jsSelectUtils.deleteAllOptions(form.fields);
for(var i in this.aTabsEdit[index].fields)
{
var opt = new Option(this.aTabsEdit[index].fields[i].name, this.aTabsEdit[index].fields[i].id, false, false);
if(this.aTabsEdit[index].fields[i].type == 'section')
opt.className = 'bx-section';
form.fields.options[form.fields.length] = opt;
}
this.ProcessButtons();
};
this.TabMoveUp = function()
{
var form = document['form_settings_'+this.name];
var index = form.tabs.selectedIndex;
if(index > 0)
{
var tab1 = BX.clone(this.aTabsEdit[index]);
this.aTabsEdit[index] = BX.clone(this.aTabsEdit[index-1]);
this.aTabsEdit[index-1] = tab1;
}
jsSelectUtils.moveOptionsUp(form.tabs);
};
this.TabMoveDown = function()
{
var form = document['form_settings_'+this.name];
var index = form.tabs.selectedIndex;
if(index < form.tabs.length-1)
{
var tab1 = BX.clone(this.aTabsEdit[index]);
this.aTabsEdit[index] = BX.clone(this.aTabsEdit[index+1]);
this.aTabsEdit[index+1] = tab1;
}
jsSelectUtils.moveOptionsDown(form.tabs);
};
this.TabEdit = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
if(tabIndex < 0)
return;
this.ShowTabSettings(this.aTabsEdit[tabIndex],
function()
{
var frm = document['tab_settings_'+_this.name];
_this.aTabsEdit[tabIndex].name = frm.tab_name.value;
_this.aTabsEdit[tabIndex].title = frm.tab_title.value;
form.tabs[tabIndex].text = frm.tab_name.value;
}
);
};
this.TabAdd = function()
{
this.ShowTabSettings({'name':'', 'title':''},
function()
{
var tab_id = 'tab_'+Math.round(Math.random()*1000000);
var frm = document['tab_settings_'+_this.name];
_this.aTabsEdit[_this.aTabsEdit.length] = {
'id': tab_id,
'name': frm.tab_name.value,
'title': frm.tab_title.value,
'fields': []
};
var form = document['form_settings_'+_this.name];
form.tabs[form.tabs.length] = new Option(frm.tab_name.value, tab_id, true, true);
_this.OnSettingsChangeTab();
}
);
};
this.TabDelete = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
if(tabIndex < 0)
return;
//place to available fields before delete
var i;
for(i in this.aTabsEdit[tabIndex].fields)
{
this.aAvailableFields[this.aTabsEdit[tabIndex].fields[i].id] = this.aTabsEdit[tabIndex].fields[i];
jsSelectUtils.addNewOption(form.all_fields, this.aTabsEdit[tabIndex].fields[i].id, this.aTabsEdit[tabIndex].fields[i].name, true, false);
}
this.HighlightSections(form.all_fields);
this.aTabsEdit = BX.util.deleteFromArray(this.aTabsEdit, tabIndex);
form.tabs.remove(tabIndex);
if(form.tabs.length > 0)
{
i = (tabIndex < form.tabs.length? tabIndex : form.tabs.length-1);
form.tabs[i].selected = true;
this.OnSettingsChangeTab();
}
else
{
jsSelectUtils.deleteAllOptions(form.fields);
this.ProcessButtons();
}
};
this.ShowTabSettings = function(data, action)
{
var wnd = this.tabSettingsWnd;
if(!wnd)
{
this.tabSettingsWnd = wnd = new BX.CDialog({
'content':'<form name="tab_settings_'+this.name+'">'+
'<table width="100%">'+
'<tr>'+
'<td width="50%" align="right">'+this.vars.mess.tabSettingsName+'</td>'+
'<td><input type="text" name="tab_name" size="30" value="" style="width:90%"></td>'+
'</tr>'+
'<tr>'+
'<td align="right">'+this.vars.mess.tabSettingsCaption+'</td>'+
'<td><input type="text" name="tab_title" size="30" value="" style="width:90%"></td>'+
'</tr>'+
'</table>'+
'</form>',
'title': this.vars.mess.tabSettingsTitle,
'width': this.vars.tabSettingWndSize.width,
'height': this.vars.tabSettingWndSize.height,
'resize_id': 'InterfaceFormTabSettingWnd'
});
}
wnd.ClearButtons();
wnd.SetButtons([
{
'title': this.vars.mess.tabSettingsSave,
'action': function(){
action();
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]);
wnd.Show();
var form = document['tab_settings_'+this.name];
form.tab_name.value = data.name;
form.tab_title.value = data.title;
form.tab_name.focus();
};
this.ShowFieldSettings = function(data, action)
{
var wnd = this.fieldSettingsWnd;
if(!wnd)
{
this.fieldSettingsWnd = wnd = new BX.CDialog({
'content':'<form name="field_settings_'+this.name+'">'+
'<table width="100%">'+
'<tr>'+
'<td width="50%" align="right" id="field_name_'+this.name+'"></td>'+
'<td><input type="text" name="field_name" size="30" value="" style="width:90%"></td>'+
'</tr>'+
'</table>'+
'</form>',
'width': this.vars.fieldSettingWndSize.width,
'height': this.vars.fieldSettingWndSize.height,
'resize_id': 'InterfaceFormFieldSettingWnd'
});
}
wnd.SetTitle(data.type && data.type == 'section'? this.vars.mess.sectSettingsTitle : this.vars.mess.fieldSettingsTitle);
BX('field_name_'+this.name).innerHTML = (data.type && data.type == 'section'? this.vars.mess.sectSettingsName : this.vars.mess.fieldSettingsName);
wnd.ClearButtons();
wnd.SetButtons([
{
'title': this.vars.mess.tabSettingsSave,
'action': function(){
action();
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]);
wnd.Show();
var form = document['field_settings_'+this.name];
form.field_name.value = data.name;
form.field_name.focus();
};
this.FieldEdit = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
var fieldIndex = form.fields.selectedIndex;
if(tabIndex < 0 || fieldIndex < 0)
return;
this.ShowFieldSettings(this.aTabsEdit[tabIndex].fields[fieldIndex],
function()
{
var frm = document['field_settings_'+_this.name];
_this.aTabsEdit[tabIndex].fields[fieldIndex].name = frm.field_name.value;
form.fields[fieldIndex].text = frm.field_name.value;
}
);
};
this.FieldAdd = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
if(tabIndex < 0)
return;
this.ShowFieldSettings({'name':'', 'type':'section'},
function()
{
var field_id = 'field_'+Math.round(Math.random()*1000000);
var frm = document['field_settings_'+_this.name];
_this.aTabsEdit[tabIndex].fields[_this.aTabsEdit[tabIndex].fields.length] = {
'id': field_id,
'name': frm.field_name.value,
'type': 'section'
};
var opt = new Option(frm.field_name.value, field_id, true, true);
opt.className = 'bx-section';
form.fields[form.fields.length] = opt;
_this.ProcessButtons();
}
);
};
this.FieldsMoveUp = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
var n = form.fields.length;
for(var i=0; i<n; i++)
{
if(form.fields[i].selected && i>0 && form.fields[i-1].selected == false)
{
var field1 = BX.clone(this.aTabsEdit[tabIndex].fields[i]);
this.aTabsEdit[tabIndex].fields[i] = BX.clone(this.aTabsEdit[tabIndex].fields[i-1]);
this.aTabsEdit[tabIndex].fields[i-1] = field1;
var option1 = new Option(form.fields[i].text, form.fields[i].value);
var option2 = new Option(form.fields[i-1].text, form.fields[i-1].value);
option1.className = form.fields[i].className;
option2.className = form.fields[i-1].className;
form.fields[i] = option2;
form.fields[i].selected = false;
form.fields[i-1] = option1;
form.fields[i-1].selected = true;
}
}
};
this.FieldsMoveDown = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
var n = form.fields.length;
for(var i=n-1; i>=0; i--)
{
if(form.fields[i].selected && i<n-1 && form.fields[i+1].selected == false)
{
var field1 = BX.clone(this.aTabsEdit[tabIndex].fields[i]);
this.aTabsEdit[tabIndex].fields[i] = BX.clone(this.aTabsEdit[tabIndex].fields[i+1]);
this.aTabsEdit[tabIndex].fields[i+1] = field1;
var option1 = new Option(form.fields[i].text, form.fields[i].value);
var option2 = new Option(form.fields[i+1].text, form.fields[i+1].value);
option1.className = form.fields[i].className;
option2.className = form.fields[i+1].className;
form.fields[i] = option2;
form.fields[i].selected = false;
form.fields[i+1] = option1;
form.fields[i+1].selected = true;
}
}
};
this.FieldsAdd = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
if(tabIndex == -1)
return;
var fields = this.aTabsEdit[tabIndex].fields;
var n = form.all_fields.length, i;
for(i=0; i<n; i++)
if(form.all_fields[i].selected)
fields[fields.length] = {
'id': form.all_fields[i].value,
'name': form.all_fields[i].text,
'type': this.aAvailableFields[form.all_fields[i].value].type
};
jsSelectUtils.addSelectedOptions(form.all_fields, form.fields, false, false);
jsSelectUtils.deleteSelectedOptions(form.all_fields);
for(i=0, n=form.fields.length; i<n; i++)
if(fields[i].type == 'section')
form.fields[i].className = 'bx-section';
this.ProcessButtons();
};
this.FieldsDelete = function()
{
var form = document['form_settings_'+this.name];
var tabIndex = form.tabs.selectedIndex;
if(tabIndex == -1)
return;
var n = form.fields.length;
var delta = 0;
for(var i=0; i<n; i++)
{
if(form.fields[i].selected)
{
this.aAvailableFields[form.fields[i].value] = this.aTabsEdit[tabIndex].fields[i-delta];
this.aTabsEdit[tabIndex].fields = BX.util.deleteFromArray(this.aTabsEdit[tabIndex].fields, i-delta);
delta++;
}
}
jsSelectUtils.addSelectedOptions(form.fields, form.all_fields, false, true);
jsSelectUtils.deleteSelectedOptions(form.fields);
this.HighlightSections(form.all_fields);
this.ProcessButtons();
};
this.ProcessButtons = function()
{
var form = document['form_settings_'+this.name];
form.add_btn.disabled = (form.all_fields.selectedIndex == -1 || form.tabs.selectedIndex == -1);
form.del_btn.disabled = form.up_btn.disabled = form.down_btn.disabled = form.field_edit_btn.disabled = (form.fields.selectedIndex == -1);
form.tab_up_btn.disabled = form.tab_down_btn.disabled = form.tab_edit_btn.disabled = form.tab_del_btn.disabled = form.field_add_btn.disabled = (form.tabs.selectedIndex == -1);
};
this.HighlightSections = function(el)
{
for(var i=0, n=el.length; i<n; i++)
if(this.aAvailableFields[el[i].value].type == 'section')
el[i].className = 'bx-section';
};
this.SaveSettings = function()
{
var data = {
'FORM_ID': this.name,
'action': 'savesettings',
'sessid': this.vars.sessid,
'tabs': this.aTabsEdit
};
var form = document['form_settings_'+this.name];
if(form['set_default_settings'])
{
data.set_default_settings = (form.set_default_settings.checked? 'Y':'N');
data.delete_users_settings = (form.delete_users_settings.checked? 'Y':'N');
}
BX.ajax.post('/bitrix/components'+_this.vars.component_path+'/settings.php', data, function(){_this.Reload()});
};
this.EnableSettings = function(enabled)
{
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?FORM_ID='+this.name+'&action=enable&enabled='+(enabled? 'Y':'N')+'&sessid='+this.vars.sessid, function(){_this.Reload()});
};
this.Reload = function()
{
if(this.vars.ajax.AJAX_ID != '')
BX.ajax.insertToNode(this.vars.current_url+(this.vars.current_url.indexOf('?') == -1? '?':'&')+'bxajaxid='+this.vars.ajax.AJAX_ID, 'comp_'+this.vars.ajax.AJAX_ID);
else
window.location = window.location.href;
};
}