%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/main.interface.grid/templates/.default/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/main.interface.grid/templates/.default/script.js |
function BxInterfaceGrid(table_id)
{
this.oActions = {};
this.oColsMeta = {};
this.oColsNames = {};
this.customNames = {};
this.oEditData = {};
this.oSaveData = {};
this.oOptions = {};
this.oVisibleCols = null;
this.vars = {};
this.menu = null;
this.settingsMenu = [];
this.filterMenu = [];
this.checkBoxCount = 0;
this.bColsChanged = false;
this.bViewsChanged = false;
this.oFilterRows = {};
this.activeRow = null;
var _this = this;
this.table_id = table_id;
this.InitTable = function()
{
var tbl = document.getElementById(this.table_id);
if(!tbl || tbl.rows.length<1 || tbl.rows[0].cells.length<1)
return;
var i;
var nCols = tbl.rows[0].cells.length;
/*head row actions*/
for(i=0; i<nCols; i++)
{
var j;
for(j=0; j<2; j++)
{
var cell = tbl.rows[j].cells[i];
cell.onmouseover = function(){_this.HighlightGutter(this, true)};
cell.onmouseout = function(){_this.HighlightGutter(this, false)};
if(j==1)
{
if(cell.className && (cell.className == 'bx-actions-col' || cell.className == 'bx-checkbox-col'))
continue;
//DD handlers
if(this.vars.user_authorized)
{
cell.onbxdragstart = _this.DragStart;
cell.onbxdragstop = _this.DragStop;
cell.onbxdrag = _this.Drag;
cell.onbxdraghout = function(){_this.HighlightGutter(this, false)};
jsDD.registerObject(cell);
cell.onbxdestdraghover = _this.DragHover;
cell.onbxdestdraghout = _this.DragOut;
cell.onbxdestdragfinish = _this.DragFinish;
jsDD.registerDest(cell);
}
}
}
}
var n = tbl.rows.length;
for(i=0; i<n; i++)
{
var row = tbl.rows[i];
if(row.className && row.className == 'bx-grid-footer')
continue;
/*first and last columns style classes*/
row.cells[0].className += ' bx-left';
row.cells[row.cells.length-1].className += ' bx-right';
if(i>=2)
{
/*first column checkbox action*/
var checkbox = row.cells[0].childNodes[0];
if(checkbox && checkbox.tagName && checkbox.tagName.toUpperCase() == "INPUT" && checkbox.type.toUpperCase() == "CHECKBOX")
{
checkbox.onclick = function(){_this.SelectRow(this); _this.EnableActions()};
jsUtils.addEvent(row, "click", _this.OnClickRow);
this.checkBoxCount++;
}
/*rows mousover action*/
row.onmouseover = function(){_this.HighlightRow(this, true)};
row.onmouseout = function(){_this.HighlightRow(this, false)};
if(i%2 == 0)
row.className += ' bx-odd';
else
row.className += ' bx-even';
}
if(row.oncontextmenu)
jsUtils.addEvent(row, "contextmenu", this.OnRowContext);
}
if(tbl.rows.length > 2)
{
tbl.rows[2].className += ' bx-top';
var r = tbl.rows[tbl.rows.length-1];
if(r.className && r.className == 'bx-grid-footer')
r = tbl.rows[tbl.rows.length-2];
r.className += ' bx-bottom';
}
};
this.OnRowContext = function(e)
{
if(!_this.menu)
return;
if(!e)
e = window.event;
if(!phpVars.opt_context_ctrl && e.ctrlKey || phpVars.opt_context_ctrl && !e.ctrlKey)
return;
var targetElement;
if(e.target)
targetElement = e.target;
else if(e.srcElement)
targetElement = e.srcElement;
//column context menu
var el = targetElement;
while(el && !(el.tagName && el.tagName.toUpperCase() == 'TD' && el.oncontextmenu))
el = jsUtils.FindParentObject(el, "td");
var col_menu = null;
if(el && el.oncontextmenu)
{
col_menu = el.oncontextmenu();
col_menu[col_menu.length] = {'SEPARATOR':true};
}
//row context menu
el = targetElement;
while(el && !(el.tagName && el.tagName.toUpperCase() == 'TR' && el.oncontextmenu))
el = jsUtils.FindParentObject(el, "tr");
var menu = _this.menu;
menu.PopupHide();
_this.activeRow = el;
if(_this.activeRow && !BX.hasClass(el, 'bx-grid-gutter') && !BX.hasClass(el, 'bx-grid-head'))
_this.activeRow.className += ' bx-active';
menu.OnClose = function()
{
if(_this.activeRow)
{
_this.activeRow.className = _this.activeRow.className.replace(/\s*bx-active/i, '');
_this.activeRow = null;
}
_this.SaveColumns();
};
//combined menu
var menuItems = BX.util.array_merge(col_menu, el.oncontextmenu());
if(menuItems.length == 0)
return;
menu.SetItems(menuItems);
menu.BuildItems();
var arScroll = jsUtils.GetWindowScrollPos();
var x = e.clientX + arScroll.scrollLeft;
var y = e.clientY + arScroll.scrollTop;
var pos = {};
pos['left'] = pos['right'] = x;
pos['top'] = pos['bottom'] = y;
menu.PopupShow(pos);
e.returnValue = false;
if(e.preventDefault)
e.preventDefault();
};
this.ShowActionMenu = function(el, index)
{
_this.menu.PopupHide();
_this.activeRow = jsUtils.FindParentObject(el, "tr");
if(_this.activeRow)
_this.activeRow.className += ' bx-active';
_this.menu.ShowMenu(el, _this.oActions[index], false, false,
function()
{
if(_this.activeRow)
{
_this.activeRow.className = _this.activeRow.className.replace(/\s*bx-active/i, '');
_this.activeRow = null;
}
}
);
};
this.HighlightGutter = function(cell, on)
{
var table = cell.parentNode.parentNode.parentNode;
var gutter = table.rows[0].cells[cell.cellIndex];
var bSorted = (gutter.className.indexOf('bx-sorted') != -1);
if(on)
{
if(bSorted)
{
gutter.className += ' bx-over-sorted';
cell.className += ' bx-over-sorted';
}
else
{
gutter.className += ' bx-over';
cell.className += ' bx-over';
}
}
else
{
if(bSorted)
{
gutter.className = gutter.className.replace(/\s*bx-over-sorted/i, '');
cell.className = cell.className.replace(/\s*bx-over-sorted/i, '');
}
else
{
gutter.className = gutter.className.replace(/\s*bx-over/i, '');
cell.className = cell.className.replace(/\s*bx-over/i, '');
}
}
};
this.HighlightRow = function(row, on)
{
if(on)
row.className += ' bx-over';
else
row.className = row.className.replace(/\s*bx-over/i, '');
};
this.SelectRow = function(checkbox)
{
var row = checkbox.parentNode.parentNode;
var tbl = row.parentNode.parentNode;
var span = document.getElementById(tbl.id+'_selected_span');
var selCount = parseInt(span.innerHTML);
if(checkbox.checked)
{
row.className += ' bx-selected';
selCount++;
}
else
{
row.className = row.className.replace(/\s*bx-selected/ig, '');
selCount--;
}
span.innerHTML = selCount.toString();
var checkAll = document.getElementById(tbl.id+'_check_all');
if(selCount == this.checkBoxCount)
checkAll.checked = true;
else
checkAll.checked = false;
};
this.OnClickRow = function(e)
{
if(!e)
e = window.event;
if(!e.ctrlKey)
return;
var obj = (e.target? e.target : (e.srcElement? e.srcElement : null));
if(!obj)
return;
if(!obj.parentNode.cells)
return;
var checkbox = obj.parentNode.cells[0].childNodes[0];
if(checkbox && checkbox.tagName && checkbox.tagName.toUpperCase() == "INPUT" && checkbox.type.toUpperCase() == "CHECKBOX" && !checkbox.disabled)
{
checkbox.checked = !checkbox.checked;
_this.SelectRow(checkbox);
}
_this.EnableActions();
};
this.SelectAllRows = function(checkbox)
{
var tbl = document.getElementById(this.table_id);
var bChecked = checkbox.checked;
var i;
var n = tbl.rows.length;
for(i=2; i<n; i++)
{
var box = tbl.rows[i].cells[0].childNodes[0];
if(box && box.tagName && box.tagName.toUpperCase() == 'INPUT' && box.type.toUpperCase() == "CHECKBOX")
{
if(box.checked != bChecked && !box.disabled)
{
box.checked = bChecked;
this.SelectRow(box);
}
}
}
this.EnableActions();
};
this.EnableActions = function()
{
var form = document.forms['form_'+this.table_id];
if(!form) return;
var bEnabled = this.IsActionEnabled();
var bEnabledEdit = this.IsActionEnabled('edit');
if(form.apply) form.apply.disabled = !bEnabled;
var b = document.getElementById('edit_button_'+this.table_id);
if(b) b.className = 'context-button icon action-edit-button'+(bEnabledEdit? '':'-dis');
b = document.getElementById('delete_button_'+this.table_id);
if(b) b.className = 'context-button icon action-delete-button'+(bEnabled? '':'-dis');
};
this.IsActionEnabled = function(action)
{
var form = document.forms['form_'+this.table_id];
if(!form) return;
var bChecked = false;
var span = document.getElementById(this.table_id+'_selected_span');
if(span && parseInt(span.innerHTML)>0)
bChecked = true;
var elAll = form['action_all_rows_'+this.table_id];
if(action == 'edit')
return !(elAll && elAll.checked) && bChecked;
else
return (elAll && elAll.checked) || bChecked;
};
this.SwitchActionButtons = function(bShow)
{
var buttonsTd = document.getElementById("bx_grid_"+this.table_id+"_action_buttons");
var td = buttonsTd;
while(td = jsUtils.FindNextSibling(td, 'td'))
td.style.display = (bShow? 'none':'');
buttonsTd.style.display = (bShow? '':'none');
};
this.ActionEdit = function(a)
{
if(this.IsActionEnabled('edit'))
{
var form = document.forms['form_'+this.table_id];
if(!form)
return;
//show form buttons
this.SwitchActionButtons(true);
//go through rows and show inputs
var ids = form['ID[]'];
if(!ids.length)
ids = new Array(ids);
for(var i=0; i<ids.length; i++)
{
var el = ids[i];
if(el.checked)
{
var tr = jsUtils.FindParentObject(el, "tr");
BX.denyEvent(tr, 'dblclick');
//go through columns
var td = jsUtils.FindParentObject(el, "td");
td = jsUtils.FindNextSibling(td, "td");
if(td.className == 'bx-actions-col')
td = jsUtils.FindNextSibling(td, "td");
var row_id = el.value;
this.oSaveData[row_id] = {};
for(var col_id in this.oColsMeta)
{
if(this.oColsMeta[col_id].editable == true && this.oEditData[row_id][col_id] !== false)
{
this.oSaveData[row_id][col_id] = td.innerHTML;
td.innerHTML = '';
//insert controls
var data = this.oEditData[row_id][col_id];
var name = 'FIELDS['+row_id+']['+col_id+']';
switch(this.oColsMeta[col_id].type)
{
case 'checkbox':
td.appendChild(BX.create('INPUT', {'props': {
'type':'hidden',
'name':name,
'value':'N'
}}));
td.appendChild(BX.create('INPUT', {'props': {
'type':'checkbox',
'name':name,
'value':'Y',
'checked':(data == 'Y'),
'defaultChecked':(data == 'Y')
}}));
break;
case 'list':
var options = [];
for(var list_val in this.oColsMeta[col_id].items)
{
options[options.length] = BX.create('OPTION', {
'props': {'value':list_val, 'selected':(list_val == data)},
'text': this.oColsMeta[col_id].items[list_val]}
);
}
td.appendChild(BX.create('SELECT', {
'props': {'name':name},
'children': options
}));
break;
case 'date':
var span = BX.create('SPAN', {'style':{'whiteSpace':'nowrap'}});
span.appendChild(BX.create('INPUT', {'props': {
'type':'text',
'name':name,
'value':data,
'size':(this.oColsMeta[col_id].size? this.oColsMeta[col_id].size : 10)
}}));
span.appendChild(BX.create('A', {
'props': {
'href':'javascript:void(0);',
'title': this.vars.mess.calend_title
},
'html':'<img src="'+this.vars.calendar_image+'" alt="'+this.vars.mess.calend_title+'" class="calendar-icon" onclick="BX.calendar({node:this, field:\''+name+'\', bTime: true, currentTime: \''+this.vars.server_time+'\'});" onmouseover="this.className+=\' calendar-icon-hover\';" onmouseout="this.className = this.className.replace(/\s*calendar-icon-hover/ig, \'\');" border="0"/>'}));
td.appendChild(span);
break;
default:
var props = {
'type':'text',
'name':name,
'value':data,
'size':(this.oColsMeta[col_id].size? this.oColsMeta[col_id].size : 15)
};
if(this.oColsMeta[col_id].maxlength)
props.maxLength = this.oColsMeta[col_id].maxlength;
td.appendChild(BX.create('INPUT', {'props': props}));
break;
}
}
td = jsUtils.FindNextSibling(td, "td");
}
}
el.disabled = true;
}
form.elements['action_button_'+this.table_id].value = 'edit';
}
};
this.ActionCancel = function()
{
var form = document.forms['form_'+this.table_id];
if(!form)
return;
//hide form buttons
this.SwitchActionButtons(false);
//go through rows and restore values
var ids = form['ID[]'];
if(!ids.length)
ids = new Array(ids);
for(var i=0; i<ids.length; i++)
{
var el = ids[i];
if(el.checked)
{
var tr = jsUtils.FindParentObject(el, "tr");
BX.allowEvent(tr, 'dblclick');
//go through columns
var td = jsUtils.FindParentObject(el, "td");
td = jsUtils.FindNextSibling(td, "td");
if(td.className == 'bx-actions-col')
td = jsUtils.FindNextSibling(td, "td");
var row_id = el.value;
for(var col_id in this.oColsMeta)
{
if(this.oColsMeta[col_id].editable == true && this.oEditData[row_id][col_id] !== false)
td.innerHTML = this.oSaveData[row_id][col_id];
td = jsUtils.FindNextSibling(td, "td");
}
}
el.disabled = false;
}
form.elements['action_button_'+this.table_id].value = '';
};
this.ActionDelete = function()
{
var form = document.forms['form_'+this.table_id];
if(!form)
return;
form.elements['action_button_'+this.table_id].value = 'delete';
BX.submit(form);
};
this.DeleteItem = function(field_id, message)
{
var checkbox = document.getElementById('ID_' + field_id);
if(checkbox)
{
if(confirm(message))
{
var form = document.forms['form_'+this.table_id];
if(!form)
return;
//go through rows and restore values
var ids = form['ID[]'];
if(!ids.length)
ids = new Array(ids);
for(var i=0; i<ids.length; i++)
{
ids[i].checked = false;
}
checkbox.checked = true;
this.ActionDelete();
}
}
};
this.ForAllClick = function(el)
{
if(el.checked && !confirm(this.vars.mess.for_all_confirm))
{
el.checked=false;
return;
}
//go through rows
var ids = el.form['ID[]'];
if(ids)
{
if(!ids.length)
ids = new Array(ids);
for(var i=0; i<ids.length; i++)
ids[i].disabled = el.checked;
}
this.EnableActions();
};
this.Sort = function(url, by, sort_state, def_order, args)
{
var order;
if(sort_state == '')
{
var e = null, bControl = false;
if(args.length > 0)
e = args[0];
if(!e)
e = window.event;
if(e)
bControl = e.ctrlKey;
order = (bControl? (def_order == 'acs'? 'desc':'asc') : def_order);
}
else if(sort_state == 'asc')
order = 'desc';
else
order = 'asc';
url += order;
BX.ajax.get('/bitrix/components'+_this.vars.component_path+'/settings.php?GRID_ID='+_this.table_id+'&action=savesort&by='+by+'&order='+order+'&sessid='+_this.vars.sessid, function(){_this.Reload(url)});
};
this.InitVisCols = function()
{
if(this.oVisibleCols == null)
{
this.oVisibleCols = {};
for(var id in this.oColsMeta)
this.oVisibleCols[id] = true;
}
};
this.CheckColumn = function(column, menuItem)
{
var colMenu = this.menu.GetMenuByItemId(menuItem.id);
var bShow = !(colMenu.GetItemInfo(menuItem).ICON == 'checked');
colMenu.SetItemIcon(menuItem, (bShow? 'checked':''));
this.InitVisCols();
this.oVisibleCols[column] = bShow;
this.bColsChanged = true;
};
this.HideColumn = function(column)
{
this.InitVisCols();
this.oVisibleCols[column] = false;
this.bColsChanged = true;
this.SaveColumns();
};
this.ApplySaveColumns = function()
{
this.menu.PopupHide();
this.SaveColumns();
};
this.SaveColumns = function(columns)
{
var sCols = '';
if(columns)
{
sCols = columns
}
else
{
if(!_this.bColsChanged)
return;
for(var id in _this.oVisibleCols)
if(_this.oVisibleCols[id])
sCols += (sCols!=''? ',':'')+id;
}
BX.ajax.get('/bitrix/components'+_this.vars.component_path+'/settings.php?GRID_ID='+_this.table_id+'&action=showcolumns&columns='+sCols+'&sessid='+_this.vars.sessid, function(){_this.Reload()});
};
this.Reload = function(url)
{
jsDD.Disable();
if(!url)
{
url = this.vars.current_url;
}
if(this.vars.ajax.AJAX_ID != '')
{
BX.ajax.insertToNode(url+(url.indexOf('?') == -1? '?':'&')+'bxajaxid='+this.vars.ajax.AJAX_ID, 'comp_'+this.vars.ajax.AJAX_ID);
}
else
{
window.location = url;
}
};
this.SetTheme = function(menuItem, theme)
{
BX.loadCSS(this.vars.template_path+'/themes/'+theme+'/style.css');
BX(_this.table_id).className = 'bx-interface-grid bx-interface-grid-theme-'+theme;
var themeMenu = this.menu.GetMenuByItemId(menuItem.id);
themeMenu.SetAllItemsIcon('');
themeMenu.SetItemIcon(menuItem, 'checked');
BX.ajax.get('/bitrix/components'+_this.vars.component_path+'/settings.php?GRID_ID='+_this.table_id+'&action=settheme&theme='+theme+'&sessid='+_this.vars.sessid);
};
this.SetView = function(view_id)
{
var filter_id = _this.oOptions.views[view_id].saved_filter;
var func = (filter_id && _this.oOptions.filters[filter_id]?
function(){_this.ApplyFilter(filter_id)} :
function(){_this.Reload()});
BX.ajax.get('/bitrix/components'+_this.vars.component_path+'/settings.php?GRID_ID='+_this.table_id+'&action=setview&view_id='+view_id+'&sessid='+_this.vars.sessid, func);
};
this.EditCurrentView = function()
{
this.ShowSettings(this.oOptions.views[this.oOptions.current_view],
function()
{
_this.SaveSettings(_this.oOptions.current_view, true);
}
);
};
this.AddView = function()
{
var view_id = 'view_'+Math.round(Math.random()*1000000);
var view = {};
for(var i in this.oOptions.views[this.oOptions.current_view])
view[i] = this.oOptions.views[this.oOptions.current_view][i];
view.name = this.vars.mess.viewsNewView;
this.ShowSettings(view,
function()
{
var data = _this.SaveSettings(view_id);
_this.oOptions.views[view_id] = {
'name':data.name,
'columns':data.columns,
'sort_by':data.sort_by,
'sort_order':data.sort_order,
'page_size':data.page_size,
'saved_filter':data.saved_filter,
'custom_names': data.custom_names
};
_this.bViewsChanged = true;
var form = document['views_'+_this.table_id];
form.views_list.options[form.views_list.length] = new Option((data.name != ''? data.name:_this.vars.mess.viewsNoName), view_id, true, true);
}
);
};
this.EditView = function(view_id)
{
this.ShowSettings(this.oOptions.views[view_id],
function()
{
var data = _this.SaveSettings(view_id);
_this.oOptions.views[view_id] = {
'name':data.name,
'columns':data.columns,
'sort_by':data.sort_by,
'sort_order':data.sort_order,
'page_size':data.page_size,
'saved_filter':data.saved_filter,
'custom_names': data.custom_names
};
_this.bViewsChanged = true;
var form = document['views_'+_this.table_id];
form.views_list.options[form.views_list.selectedIndex].text = (data.name != ''? data.name:_this.vars.mess.viewsNoName);
}
);
};
this.DeleteView = function(view_id)
{
if(!confirm(this.vars.mess.viewsDelete))
return;
var form = document['views_'+this.table_id];
var index = form.views_list.selectedIndex;
form.views_list.remove(index);
form.views_list.selectedIndex = (index < form.views_list.length? index : form.views_list.length-1);
this.bViewsChanged = true;
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?GRID_ID='+this.table_id+'&action=delview&view_id='+view_id+'&sessid='+_this.vars.sessid);
};
this.ShowSettings = function(view, action)
{
var bCreated = false;
if(!window['settingsDialog'+this.table_id])
{
window['settingsDialog'+this.table_id] = new BX.CDialog({
'content':'<form name="settings_'+this.table_id+'"></form>',
'title': this.vars.mess.settingsTitle,
'width': this.vars.settingWndSize.width,
'height': this.vars.settingWndSize.height,
'resize_id': 'InterfaceGridSettingWnd'
});
bCreated = true;
}
window['settingsDialog'+this.table_id].ClearButtons();
window['settingsDialog'+this.table_id].SetButtons([
{
'title': this.vars.mess.settingsSave,
'action': function(){
action();
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]);
window['settingsDialog'+this.table_id].Show();
var form = document['settings_'+this.table_id];
if(bCreated)
form.appendChild(BX('view_settings_'+this.table_id));
this.customNames = (view.custom_names? view.custom_names : {});
//name
form.view_name.focus();
form.view_name.value = view.name;
//get visible columns
var aVisCols = [];
if(view.columns != '')
{
aVisCols = view.columns.split(',');
}
else
{
for(var i in this.oColsMeta)
aVisCols[aVisCols.length] = i;
}
var oVisCols = {}, n;
for(i=0, n=aVisCols.length; i<n; i++)
oVisCols[aVisCols[i]] = true;
//invisible cols
jsSelectUtils.deleteAllOptions(form.view_all_cols);
for(i in this.oColsNames)
{
if(!oVisCols[i])
{
var colName = (this.customNames[i]? this.customNames[i] : this.oColsNames[i]);
form.view_all_cols.options[form.view_all_cols.length] = new Option(colName, i, false, false);
}
}
//visible cols
jsSelectUtils.deleteAllOptions(form.view_cols);
for(i in oVisCols)
{
colName = (this.customNames[i]? this.customNames[i] : this.oColsNames[i]);
form.view_cols.options[form.view_cols.length] = new Option(colName, i, false, false);
}
//sorting
jsSelectUtils.selectOption(form.view_sort_by, view.sort_by);
jsSelectUtils.selectOption(form.view_sort_order, view.sort_order);
//page size
jsSelectUtils.selectOption(form.view_page_size, view.page_size);
//saved filter
jsSelectUtils.deleteAllOptions(form.view_filters);
form.view_filters.options[0] = new Option(this.vars.mess.viewsFilter, '');
for(i in this.oOptions.filters)
form.view_filters.options[form.view_filters.length] = new Option(this.oOptions.filters[i].name, i, (i == view.saved_filter), (i == view.saved_filter));
//common options
if(form.set_default_settings)
{
form.set_default_settings.checked = false;
form.delete_users_settings.checked = false;
form.delete_users_settings.disabled = true;
}
//init controls
form.up_btn.disabled = form.down_btn.disabled = form.rename_btn.disabled = form.add_btn.disabled = form.del_btn.disabled = true;
};
this.RenameColumn = function()
{
var bCreated = false;
if(!window['renameDialog'+this.table_id])
{
window['renameDialog'+this.table_id] = new BX.CDialog({
'content':'<form name="rename_'+this.table_id+'"></form>',
'title': this.vars.mess.renameTitle,
'width': this.vars.renameWndSize.width,
'height': this.vars.renameWndSize.height,
'resize_id': 'InterfaceGridRenameWnd',
'buttons': [
{
'title': this.vars.mess.settingsSave,
'action': function()
{
var selectedCol = settingsForm.view_cols.value;
var value = form.col_name.value;
if(value.length > 0)
{
_this.customNames[selectedCol] = value;
}
else
{
value = _this.oColsNames[selectedCol];
delete _this.customNames[selectedCol];
}
settingsForm.view_cols.options[settingsForm.view_cols.selectedIndex].text = value;
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]
});
bCreated = true;
}
window['renameDialog'+this.table_id].Show();
var form = document['rename_'+this.table_id];
var settingsForm = document['settings_'+this.table_id];
if(bCreated)
form.appendChild(BX('rename_column_'+this.table_id));
var selectedCol = settingsForm.view_cols.value;
form.col_name.focus();
form.col_name_def.value = this.oColsNames[selectedCol];
form.col_name.value = (this.customNames[selectedCol]? this.customNames[selectedCol] : this.oColsNames[selectedCol]);
};
this.SaveSettings = function(view_id, doReload)
{
var form = document['settings_'+this.table_id];
var sCols = '';
var n = form.view_cols.length;
for(var i=0; i<n; i++)
sCols += (sCols!=''? ',':'')+form.view_cols[i].value;
var data = {
'GRID_ID': this.table_id,
'view_id': view_id,
'action': 'savesettings',
'sessid': this.vars.sessid,
'name': form.view_name.value,
'columns': sCols,
'sort_by': form.view_sort_by.value,
'sort_order': form.view_sort_order.value,
'page_size': form.view_page_size.value,
'saved_filter': form.view_filters.value,
'custom_names': this.customNames
};
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');
}
var handler = null;
if(doReload === true)
{
handler = function()
{
if(data.saved_filter && _this.oOptions.filters[data.saved_filter])
{
_this.ApplyFilter(data.saved_filter);
}
else
{
_this.Reload();
}
};
}
BX.ajax.post('/bitrix/components'+_this.vars.component_path+'/settings.php', data, handler);
return data;
};
this.ReloadViews = function()
{
if(_this.bViewsChanged)
_this.Reload();
};
this.ShowViews = function()
{
this.bViewsChanged = false;
var bCreated = false;
if(!window['viewsDialog'+this.table_id])
{
var applyBtn = new BX.CWindowButton({
'title': this.vars.mess.viewsApply,
'hint': this.vars.mess.viewsApplyTitle,
'action': function(){
var form = document['views_'+_this.table_id];
if(form.views_list.selectedIndex != -1)
_this.SetView(form.views_list.value);
window['bxGrid_'+_this.table_id].bViewsChanged = false;
this.parentWindow.Close();
}
});
window['viewsDialog'+this.table_id] = new BX.CDialog({
'content':'<form name="views_'+this.table_id+'"></form>',
'title': this.vars.mess.viewsTitle,
'buttons': [applyBtn, BX.CDialog.prototype.btnClose],
'width': this.vars.viewsWndSize.width,
'height': this.vars.viewsWndSize.height,
'resize_id': 'InterfaceGridViewsWnd'
});
BX.addCustomEvent(window['viewsDialog'+this.table_id], 'onWindowUnRegister', this.ReloadViews);
bCreated = true;
}
window['viewsDialog'+this.table_id].Show();
var form = document['views_'+this.table_id];
if(bCreated)
form.appendChild(BX('views_list_'+this.table_id));
};
/* DD handlers */
this.DragStart = function()
{
var div = document.body.appendChild(document.createElement("DIV"));
div.style.position = 'absolute';
div.style.zIndex = 10;
div.className = 'bx-drag-object';
div.innerHTML = this.innerHTML;
div.style.width = this.clientWidth+'px';
this.__dragCopyDiv = div;
this.className += ' bx-drag-source';
var arrowDiv = document.body.appendChild(document.createElement("DIV"));
arrowDiv.style.position = 'absolute';
arrowDiv.style.zIndex = 20;
arrowDiv.className = 'bx-drag-arrow';
this.__dragArrowDiv = arrowDiv;
return true;
};
this.Drag = function(x, y)
{
var div = this.__dragCopyDiv;
div.style.left = x+'px';
div.style.top = y+'px';
return true;
};
this.DragStop = function()
{
this.className = this.className.replace(/\s*bx-grid-drag-source/ig, "");
this.__dragCopyDiv.parentNode.removeChild(this.__dragCopyDiv);
this.__dragCopyDiv = null;
this.__dragArrowDiv.parentNode.removeChild(this.__dragArrowDiv);
this.__dragArrowDiv = null;
return true;
};
this.DragHover = function(obDrag, x, y)
{
_this.HighlightGutter(this, true);
this.className += ' bx-drag-over';
var div = obDrag.__dragArrowDiv;
var pos = jsUtils.GetRealPos(this);
if(this.cellIndex <= obDrag.cellIndex)
div.style.left = (pos['left']-6)+'px';
else
div.style.left = (pos['right']-6)+'px';
div.style.top = (pos['top']-12)+'px';
return true;
};
this.DragOut = function(obDrag, x, y)
{
_this.HighlightGutter(this, false);
this.className = this.className.replace(/\s*bx-drag-over/ig, "");
var div = obDrag.__dragArrowDiv;
div.style.left = '-1000px';
return true;
};
this.DragFinish = function(obDrag, x, y, e)
{
_this.HighlightGutter(this, false);
this.className = this.className.replace(/\s*bx-drag-over/ig, "");
//can't move to itself
if(this == obDrag)
return true;
var tbl = BX(_this.table_id);
var delta = 0;
for(var i=0; i < 2; i++)
{
var cell = tbl.rows[1].cells[i];
if(cell.className && (cell.className.indexOf('bx-actions-col') != -1 || cell.className.indexOf('bx-checkbox-col') != -1))
delta ++;
}
var cols = [];
for(var id in _this.oColsMeta)
cols[cols.length] = id;
var index_from = obDrag.cellIndex-delta;
var index_to = this.cellIndex-delta;
var tmp = cols[index_from];
if(index_to < index_from)
{
for(i = index_from; i > index_to; i--)
cols[i] = cols[i-1];
}
else
{
for(i = index_from; i < index_to; i++)
cols[i] = cols[i+1];
}
cols[index_to] = tmp;
var sCols = '';
for(i=0; i<cols.length; i++)
sCols += (sCols != ''? ',':'')+cols[i];
_this.SaveColumns(sCols);
return true;
};
/* Filter */
this.InitFilter = function()
{
var row = BX('flt_header_'+this.table_id);
if(row)
jsUtils.addEvent(row, "contextmenu", this.OnRowContext);
};
this.SwitchFilterRow = function(row_id, menuItem)
{
if(menuItem)
{
var colMenu = this.menu.GetMenuByItemId(menuItem.id);
colMenu.SetItemIcon(menuItem, (this.oFilterRows[row_id]? '':'checked'));
}
else
{
var mnu = this.filterMenu[0].MENU;
for(var i=0; i<mnu.length; i++)
{
if(mnu[i].ID == 'flt_'+this.table_id+'_'+row_id)
{
mnu[i].ICONCLASS = (this.oFilterRows[row_id]? '':'checked');
break;
}
}
}
var row = BX('flt_row_'+this.table_id+'_'+row_id);
row.style.display = (this.oFilterRows[row_id]? 'none':'');
this.oFilterRows[row_id] = (this.oFilterRows[row_id]? false:true);
var a = BX('a_minmax_'+this.table_id);
if(a && a.className.indexOf('bx-filter-max') != -1)
this.SwitchFilter(a);
this.SaveFilterRows();
};
this.SwitchFilterRows = function(on)
{
this.menu.PopupHide();
var i=0;
for(var id in this.oFilterRows)
{
i++;
if(i == 1 && on == false)
continue;
this.oFilterRows[id] = on;
var row = BX('flt_row_'+this.table_id+'_'+id);
row.style.display = (on? '':'none');
}
var mnu = this.filterMenu[0].MENU;
for(i=0; i<mnu.length; i++)
{
if(i == 0 && on == false)
continue;
if(mnu[i].SEPARATOR == true)
break;
mnu[i].ICONCLASS = (on? 'checked':'');
}
var a = BX('a_minmax_'+this.table_id);
if(a && a.className.indexOf('bx-filter-max') != -1)
this.SwitchFilter(a);
this.SaveFilterRows();
};
this.SaveFilterRows = function()
{
var sRows = '';
for(var id in this.oFilterRows)
if(this.oFilterRows[id])
sRows += (sRows!=''? ',':'')+id;
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?GRID_ID='+this.table_id+'&action=filterrows&rows='+sRows+'&sessid='+this.vars.sessid);
};
this.SwitchFilter = function(a)
{
var on = (a.className.indexOf('bx-filter-min') != -1);
a.className = (on? 'bx-filter-btn bx-filter-max' : 'bx-filter-btn bx-filter-min');
a.title = (on? this.vars.mess.filterShow : this.vars.mess.filterHide);
var row = BX('flt_content_'+this.table_id);
row.style.display = (on? 'none':'');
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?GRID_ID='+this.table_id+'&action=filterswitch&show='+(on? 'N':'Y')+'&sessid='+this.vars.sessid);
};
this.ClearFilter = function(form)
{
for(var i=0, n=form.elements.length; i<n; i++)
{
var el = form.elements[i];
switch(el.type.toLowerCase())
{
case 'text':
case 'textarea':
el.value = '';
break;
case 'select-one':
el.selectedIndex = 0;
break;
case 'select-multiple':
for(var j=0, l=el.options.length; j<l; j++)
el.options[j].selected = false;
break;
case 'checkbox':
el.checked = false;
break;
default:
break;
}
if(el.onchange)
el.onchange();
}
BX.onCustomEvent(form, "onGridClearFilter", []);
form.clear_filter.value = "Y";
BX.submit(form);
};
this.ShowFilters = function()
{
var bCreated = false;
if(!window['filtersDialog'+this.table_id])
{
var applyBtn = new BX.CWindowButton({
'title': this.vars.mess.filtersApply,
'hint': this.vars.mess.filtersApplyTitle,
'action': function(){
var form = document['filters_'+_this.table_id];
if(form.filters_list.value)
_this.ApplyFilter(form.filters_list.value);
this.parentWindow.Close();
}
});
window['filtersDialog'+this.table_id] = new BX.CDialog({
'content':'<form name="filters_'+this.table_id+'"></form>',
'title': this.vars.mess.filtersTitle,
'buttons': [applyBtn, BX.CDialog.prototype.btnClose],
'width': this.vars.filtersWndSize.width,
'height': this.vars.filtersWndSize.height,
'resize_id': 'InterfaceGridFiltersWnd'
});
bCreated = true;
}
window['filtersDialog'+this.table_id].Show();
var form = document['filters_'+this.table_id];
if(bCreated)
form.appendChild(BX('filters_list_'+this.table_id));
};
this.AddFilter = function(fields)
{
if(!fields)
fields = {};
var filter_id = 'filter_'+Math.round(Math.random()*1000000);
var filter = {'name':this.vars.mess.filtersNew, 'fields':fields};
this.ShowFilterSettings(filter,
function()
{
var data = _this.SaveFilter(filter_id);
_this.oOptions.filters[filter_id] = {
'name':data.name,
'fields':data.fields
};
var form = document['filters_'+_this.table_id];
form.filters_list.options[form.filters_list.length] = new Option((data.name != ''? data.name:_this.vars.mess.viewsNoName), filter_id, true, true);
if(_this.filterMenu.length == 4) //no saved filters
_this.filterMenu = BX.util.insertIntoArray(_this.filterMenu, 1, {'SEPARATOR':true});
var mnuItem = {'ID': 'mnu_'+_this.table_id+'_'+filter_id, 'TEXT': BX.util.htmlspecialchars(data.name), 'TITLE': _this.vars.mess.ApplyTitle, 'ONCLICK':'bxGrid_'+_this.table_id+'.ApplyFilter(\''+filter_id+'\')'};
_this.filterMenu = BX.util.insertIntoArray(_this.filterMenu, 2, mnuItem);
}
);
};
this.AddFilterAs = function()
{
var form = document.forms['filter_'+this.table_id];
var fields = this.GetFilterFields(form);
this.ShowFilters();
this.AddFilter(fields);
};
this.EditFilter = function(filter_id)
{
this.ShowFilterSettings(this.oOptions.filters[filter_id],
function()
{
var data = _this.SaveFilter(filter_id);
_this.oOptions.filters[filter_id] = {
'name':data.name,
'fields':data.fields
};
var form = document['filters_'+_this.table_id];
form.filters_list.options[form.filters_list.selectedIndex].text = (data.name != ''? data.name:_this.vars.mess.viewsNoName);
for(var i=0, n=_this.filterMenu.length; i<n; i++)
{
if(_this.filterMenu[i].ID && _this.filterMenu[i].ID == 'mnu_'+_this.table_id+'_'+filter_id)
{
_this.filterMenu[i].TEXT = BX.util.htmlspecialchars(data.name);
break;
}
}
}
);
};
this.DeleteFilter = function(filter_id)
{
if(!confirm(this.vars.mess.filtersDelete))
return;
var form = document['filters_'+this.table_id];
var index = form.filters_list.selectedIndex;
form.filters_list.remove(index);
form.filters_list.selectedIndex = (index < form.filters_list.length? index : form.filters_list.length-1);
for(var i=0, n=this.filterMenu.length; i<n; i++)
{
if(_this.filterMenu[i].ID && _this.filterMenu[i].ID == 'mnu_'+_this.table_id+'_'+filter_id)
{
this.filterMenu = BX.util.deleteFromArray(this.filterMenu, i);
if(this.filterMenu.length == 5)
this.filterMenu = BX.util.deleteFromArray(this.filterMenu, 1);
break;
}
}
delete this.oOptions.filters[filter_id];
BX.ajax.get('/bitrix/components'+this.vars.component_path+'/settings.php?GRID_ID='+this.table_id+'&action=delfilter&filter_id='+filter_id+'&sessid='+_this.vars.sessid);
};
this.ShowFilterSettings = function(filter, action)
{
var bCreated = false;
if(!window['filterSettingsDialog'+this.table_id])
{
window['filterSettingsDialog'+this.table_id] = new BX.CDialog({
'content':'<form name="flt_settings_'+this.table_id+'"></form>',
'title': this.vars.mess.filterSettingsTitle,
'width': this.vars.filterSettingWndSize.width,
'height': this.vars.filterSettingWndSize.height,
'resize_id': 'InterfaceGridFilterSettingWnd'
});
bCreated = true;
}
window['filterSettingsDialog'+this.table_id].ClearButtons();
window['filterSettingsDialog'+this.table_id].SetButtons([
{
'title': this.vars.mess.settingsSave,
'action': function(){
action();
this.parentWindow.Close();
}
},
BX.CDialog.prototype.btnCancel
]);
window['filterSettingsDialog'+this.table_id].Show();
var form = document['flt_settings_'+this.table_id];
if(bCreated)
form.appendChild(BX('filter_settings_'+this.table_id));
form.filter_name.focus();
form.filter_name.value = filter.name;
this.SetFilterFields(form, filter.fields);
};
this.SetFilterFields = function(form, fields)
{
for(var i=0, n = form.elements.length; i<n; i++)
{
var el = form.elements[i];
if(el.name == 'filter_name')
continue;
var val = fields[el.name] || '';
switch(el.type.toLowerCase())
{
case 'select-one':
case 'text':
case 'textarea':
el.value = val;
break;
case 'radio':
case 'checkbox':
el.checked = (el.value == val);
break;
case 'select-multiple':
var name = el.name.substr(0, el.name.length - 2);
var bWasSelected = false;
for(var j=0, l = el.options.length; j<l; j++)
{
var sel = (fields[name]? fields[name]['sel'+el.options[j].value] : null);
el.options[j].selected = (el.options[j].value == sel);
if(el.options[j].value == sel)
bWasSelected = true;
}
if(!bWasSelected && el.options.length > 0 && el.options[0].value == '')
el.options[0].selected = true;
break;
default:
break;
}
if(el.onchange)
el.onchange();
}
};
this.GetFilterFields = function(form)
{
var fields = {};
for(var i=0, n = form.elements.length; i<n; i++)
{
var el = form.elements[i];
if(el.name == 'filter_name')
continue;
switch(el.type.toLowerCase())
{
case 'select-one':
case 'text':
case 'textarea':
fields[el.name] = el.value;
break;
case 'radio':
case 'checkbox':
if(el.checked)
fields[el.name] = el.value;
break;
case 'select-multiple':
var name = el.name.substr(0, el.name.length - 2);
fields[name] = {};
for(var j=0, l = el.options.length; j<l; j++)
if(el.options[j].selected)
fields[name]['sel'+el.options[j].value] = el.options[j].value;
break;
default:
break;
}
}
return fields;
};
this.SaveFilter = function(filter_id)
{
var form = document['flt_settings_'+this.table_id];
var data = {
'GRID_ID': this.table_id,
'filter_id': filter_id,
'action': 'savefilter',
'sessid': this.vars.sessid,
'name': form.filter_name.value,
'fields': this.GetFilterFields(form)
};
BX.ajax.post('/bitrix/components'+_this.vars.component_path+'/settings.php', data);
return data;
};
this.ApplyFilter = function(filter_id)
{
var form = document.forms['filter_'+this.table_id];
this.SetFilterFields(form, this.oOptions.filters[filter_id].fields);
BX.submit(form);
};
this.OnDateChange = function(sel)
{
var bShowFrom=false, bShowTo=false, bShowHellip=false, bShowDays=false, bShowBr=false;
if(sel.value == 'interval')
bShowBr = bShowFrom = bShowTo = bShowHellip = true;
else if(sel.value == 'before')
bShowTo = true;
else if(sel.value == 'after' || sel.value == 'exact')
bShowFrom = true;
else if(sel.value == 'days')
bShowDays = true;
BX.findNextSibling(sel, {'tag':'span', 'class':'bx-filter-from'}).style.display = (bShowFrom? '':'none');
BX.findNextSibling(sel, {'tag':'span', 'class':'bx-filter-to'}).style.display = (bShowTo? '':'none');
BX.findNextSibling(sel, {'tag':'span', 'class':'bx-filter-hellip'}).style.display = (bShowHellip? '':'none');
BX.findNextSibling(sel, {'tag':'span', 'class':'bx-filter-days'}).style.display = (bShowDays? '':'none');
var span = BX.findNextSibling(sel, {'tag':'span', 'class':'bx-filter-br'});
if(span)
span.style.display = (bShowBr? '':'none');
};
}