Your IP : 18.225.92.23
;(function() {
var BX = window.BX;
if (BX.file_input)
return;
BX.file_input = function(arConfig)
{
this.arConfig = arConfig;
BX.ready(BX.proxy(this.Init, this));
};
BX.file_input.prototype.Init = function()
{
this.id = this.arConfig.id;
this.multiple = this.arConfig.multiple;
this.maxCount = parseInt(this.arConfig.maxCount) || 0;
this.inputSize = this.arConfig.inputSize || 50;
this.fileCount = 0; // Count of all files (existant and new)
this.newFileCount = 0; // Count of new files
this.pCont = BX(this.id + '_cont');
if (!this.pCont)
{
setTimeout(BX.proxy(this.Init, this), 100);
return;
}
if (this.arConfig.useMedialib || this.arConfig.useFileDialog)
{
this.arConfig.menuExist.push({TEXT: BX.message('ADM_FILE_INSERT_PATH'), ONCLICK: BX.proxy(this.ShowPath, this)});
this.arConfig.menuNew.push({TEXT: BX.message('ADM_FILE_INSERT_PATH'), ONCLICK: BX.proxy(this.ShowPath, this)});
}
if (this.multiple)
this.pCont.style.marginBottom = '14px';
this.pNewMenu = BX(this.id + '_menu_new');
if (this.pNewMenu)
this.SetOpenerMenu(this.pNewMenu, this.arConfig.menuNew);
// We have already saved files and we have to append for each file the menu
if (this.arConfig.fileExists && this.arConfig.files)
{
for (var i = 0; i < this.arConfig.files.length; i++)
this.DisplayExistFile(i);
}
this.fileCount = this.arConfig.files.length;
this.oFiles = [];
this.oNewFile = this.DisplayFileBlock();
this.oNewFile.pTextInput.id = this.id + '_text_input';
if (!this.arConfig.useUpload)
{
if (this.multiple)
{
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('file_dialog'));
this.ShowFileDescription(this.oNewFile);
this.PushToFiles(this.oNewFile);
}
else
{
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('first_input'));
this.ShowFileDescription(this.oNewFile);
}
}
else if(!this.arConfig.fileExists && this.arConfig.useUpload)
{
this.oNewFile.pFileCont.appendChild(BX.create('INPUT', {props: {type: "file", name: this.GetInputName('first_input'), className: 'adm-designed-file adm-input-file-none', id: this.id + '_file_hidden_value_' + 0}}));
}
this.pCont.appendChild(this.oNewFile.pFileCont);
if (this.arConfig.viewMode || (this.arConfig.fileExists && !this.CheckNewFileState()))
this.HideNewFileState();
// Hack for correct displaying in admin forms
if (!this.arConfig.fileExists)
BX.addClass(this.pCont, 'adm-input-file-top-shift');
var _this = this;
if (this.arConfig.useMedialib)
window['SetValueFromMedialib' + this.id] = function(oFile){_this.OnSelectFromMedialib(oFile);};
if (this.arConfig.useFileDialog)
window['SetValueFromFileDialog' + this.id] = function(filename, path, site, title, menu)
{
_this.OnSelectFromFileDialog(path + (path == '/'? '': '/') + filename);
};
if (this.arConfig.useCloud)
window['OpenCloudDialog' + this.id] = function()
{
_this.oNewFile.pTextInput.onchange = BX.proxy(_this.OnCloudInputChange, _this);
BX.util.popup(_this.arConfig.cloudDialogPath + _this.oNewFile.pTextInput.id, 710, 600);
}
};
BX.file_input.prototype.DisplayExistFile = function(i)
{
var file = this.arConfig.files[i];
if (file.FILE_NOT_FOUND)
{
var pMenu = BX(this.id + '_menu_' + i);
if (pMenu && this.arConfig.showDel)
{
this.SetOpenerMenu(pMenu, [{TEXT: BX.message('ADM_FILE_DELETE'), ONCLICK: BX.proxy(this.DeleteFile, this), GLOBAL_ICON: 'adm-menu-delete'}]);
}
}
else
{
if (!this.arConfig.viewMode)
{
var pMenu = BX(this.id + '_menu_' + i);
if (pMenu)
{
//var arMenu = this.multiple ? [] : BX.clone(this.arConfig.menuExist);
var arMenu = BX.clone(this.arConfig.menuExist);
if(this.arConfig.showDel || this.arConfig.showDesc)
arMenu.push({SEPARATOR: true});
if(this.arConfig.showDel)
arMenu.push({TEXT: BX.message('ADM_FILE_DELETE'), ONCLICK: BX.proxy(this.DeleteFile, this), GLOBAL_ICON: 'adm-menu-delete'});
if (this.arConfig.showDesc && file.DESCRIPTION == "")
arMenu.push({TEXT: BX.message('ADM_FILE_ADD_DESC'), ONCLICK: BX.proxy(this.AddDescription, this), GLOBAL_ICON: 'adm-menu-add-desc'});
this.SetOpenerMenu(pMenu, arMenu);
if (!file.IS_IMAGE)
pMenu.style.top = '-6px';
}
var fileContainer = BX(this.id + '_file_cont_' + i);
if (fileContainer)
{
var
inpName = file.INPUT_NAME || this.GetInputName('first_input'),
inp;
if (this.arConfig.useUpload) // hack for iblock forms (for editing description)
inp = BX.create('INPUT', {props: {type: "file", name: inpName, className: 'adm-designed-file adm-input-file-none'}});
else
inp = BX.create('INPUT', {props: {type: "hidden", value: file.PATH || file.SRC, name: inpName}});
inp.id = this.id + '_file_hidden_value_' + i;
fileContainer.appendChild(inp);
}
}
if (file.IS_IMAGE)
{
var
pSpan = BX(this.id + '_file_disp_' + i),
pImg = BX.findChild(pSpan, {tag: "IMG"}, true);
if (pImg)
{
var
pNode = pImg,
h = parseInt(pImg.getAttribute('height') || pImg.offsetHeight),
w = parseInt(pImg.getAttribute('width') || pImg.offsetWidth);
if (this.arConfig.minPreviewHeight > h || this.arConfig.minPreviewWidth > w)
{
if (this.arConfig.minPreviewHeight < h)
pSpan.style.height = (h + 4) + 'px';
if (this.arConfig.minPreviewWidth < w)
pSpan.style.width = (w + 4) + 'px';
if (pNode.parentNode.tagName.toLowerCase() == 'a')
pNode = pNode.parentNode;
BX.addClass(pSpan, 'adm-input-file-bordered');
pNode.style.position = 'absolute';
pNode.style.top = '50%';
pNode.style.left = '50%';
pNode.style.marginTop = Math.round(- h / 2) + 'px';
pNode.style.marginLeft = Math.round(- w / 2) + 'px';
}
}
}
}
};
BX.file_input.prototype.SetOpenerMenu = function(pMenu, arMenu)
{
var _this = this;
if (!!pMenu.OPENER)
return true;
pMenu.OPENER = new BX.COpener({
//CLOSE_ON_CLICK: false,
DIV: pMenu,
TYPE: 'click',
MENU: arMenu,
ACTIVE_CLASS: 'adm-btn-active'
});
BX.addCustomEvent(pMenu.OPENER, 'onOpenerMenuOpen', function()
{
_this.SetCurrentFile(pMenu.getAttribute("data-bx-meta"));
var i, items = pMenu.OPENER.GetMenu().ITEMS;
for (i in items)
{
if (items[i] && items[i].ID == "upload" && BX.isNodeInDom(items[i].NODE))
{
_this.oNewFile.pUploadInput.setAttribute("data-bx-moved", true);
items[i].NODE.appendChild(_this.oNewFile.pUploadInput);
BX.addClass(items[i].NODE, "adm-input-file-ext-class");
break;
}
}
});
BX.addCustomEvent(pMenu.OPENER, 'onOpenerMenuClose', function()
{
var i, items = pMenu.OPENER.GetMenu().ITEMS;
for (i in items)
{
if (items[i].ID == "upload" && BX.isNodeInDom(items[i].NODE))
{
BX.removeClass(items[i].NODE, "adm-input-file-ext-class");
BX.defer(function(){
if (_this.oNewFile.pUploadInput.getAttribute("data-bx-moved"))
{
_this.oNewFile.pUploadInput.removeAttribute("data-bx-moved");
_this.oNewFile.pUploadCont.appendChild(_this.oNewFile.pUploadInput);
}
})();
break;
}
}
});
};
BX.file_input.prototype.AddNewFileBlock = function()
{
var arMenu = [];
if (!this.multiple)
{
arMenu = BX.clone(this.arConfig.menuNew);
arMenu.push({SEPARATOR: true});
}
arMenu.push({TEXT: BX.message('ADM_FILE_CLEAR'), ONCLICK: BX.proxy(this.ClearNewFile, this), GLOBAL_ICON: 'adm-menu-delete'});
var oFile = this.DisplayFileBlock(arMenu);
this.pCont.appendChild(oFile.pFileCont);
if (this.multiple)
BX.addClass(oFile.pFileCont, 'adm-input-cont-bordered');
return oFile;
};
BX.file_input.prototype.OnUploadInputChange = function(e)
{
var
p, name,
curFile,
inp = e.target || e.srcElement,
description = '',
value = inp.files || [inp.value];
value = value[0];
name = value.name || value;
p = Math.max(name.lastIndexOf('/'), name.lastIndexOf('\\'));
if (p > 0)
name = name.substring(p + 1, name.length);
this.curFileIndex = false;
if (this.arConfig.fileExists && this.arConfig.files && !this.multiple) // Works only for one file
{
this.DeleteFile(false);
this.oNewFile.pTextInput.style.display = "none"; // Hide text input if it was displayed
this.oNewFile.pUploadLabel.innerHTML = BX.util.htmlspecialchars(name); // Set correct file name
this.oNewFile.pUploadCont.style.display = ""; // Show file control
this.SetInputName(this.oNewFile.pUploadInput, this.GetInputName('upload'));
this.SetHiddenInputName(0, '');
var pDelInput = BX.findChild(BX(this.id + '_file_cont_0'), {tagName: 'input', attr: {name: this.GetInputName('del')}});
if (pDelInput)
BX.cleanNode(pDelInput, true);
// Show description
curFile = this.arConfig.files && this.arConfig.files[0] ? this.arConfig.files[0] : false;
if (curFile && curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.ShowFileDescription(this.oNewFile, description);
}
else
{
var oFile;
if (!this.multiple && this.newFileCount > 0)
{
oFile = this.ClearNames(this.oFiles[0]);
}
else
{
if (this.multiple)
this.ClearNewFile();
oFile = this.AddNewFileBlock();
// Swap inputs
var _inp = oFile.pUploadInput;
oFile.pUploadInput = this.oNewFile.pUploadInput;
this.oNewFile.pUploadInput = _inp;
// Set inputs to it corresponding containers
this.oNewFile.pUploadCont.appendChild(this.oNewFile.pUploadInput);
oFile.pUploadCont.appendChild(oFile.pUploadInput);
}
oFile.pTextInput.style.display = "none"; // Hide text input if it was displayed
oFile.pUploadLabel.innerHTML = BX.util.htmlspecialchars(name); // Set correct file name
oFile.pUploadCont.style.display = ""; // Show file control
this.SetInputName(oFile.pUploadInput, this.GetInputName('upload'));
if (this.multiple)
this.curFileIndex = this.newFileCount;
if (this.multiple || !this.newFileCount)
this.PushToFiles(oFile);
var fileIndex = parseInt(this.GetCurrentFile(), 10);
this.SetHiddenInputName(fileIndex, '');
if (!isNaN(fileIndex) && this.multiple)
{
this.DeleteFile(false);
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "none";
oFile.pMenu.style.display = "inline-block";
oFile.pMenu.setAttribute('data-bx-meta', fileIndex);
curFile = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false;
var fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (curFile)
{
if (curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.SetInputName(oFile.pUploadInput, curFile.INPUT_NAME);
this.SetInputName(oFile.pTextInput, '');
this.SetInputName(oFile.pDescInput, curFile.DESC_NAME);
}
fileContainer.appendChild(oFile.pFileCont);
}
// Show description
this.ShowFileDescription(oFile, description);
if (this.multiple)
this.pCont.appendChild(this.oNewFile.pFileCont);
if (!this.CheckNewFileState())
this.HideNewFileState();
}
// Close all menu
BX.onCustomEvent("onMenuItemSelected");
// Used to refresh form content - workaround for IE bug (mantis:37969)
if (BX.browser.IsIE())
BX(this.id + '_ie_bogus_container').innerHTML = BX(this.id + '_ie_bogus_container').innerHTML;
// mantis: 78822
if (BX.browser.IsIE() || BX.browser.IsIE11())
{
var fakeInp = this.oNewFile.pFileCont.parentNode.appendChild(BX.create('INPUT', {
props: {
type: 'text',
className: 'adm-input-fake-inp'
}
}));
fakeInp.focus();
fakeInp.select();
}
};
BX.file_input.prototype.OnSelectFromMedialib = function(file)
{
var description = '';
this.curFileIndex = false;
if (this.arConfig.fileExists && this.arConfig.files && !this.multiple)
{
this.DeleteFile(false);
this.oNewFile.pTextInput.value = file.src || '';
this.oNewFile.pTextInput.style.display = "";
this.oNewFile.pUploadCont.style.display = "none";
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('medialib'));
this.FocusInput(this.oNewFile.pTextInput);
this.oNewFile.pDescInput.value = file.description || ''; // set description from medialibrary
this.SetHiddenInputName(0, '');
var pDelInput = BX.findChild(BX(this.id + '_file_cont_0'), {tagName: 'input', attr: {name: this.GetInputName('del')}});
if (pDelInput)
BX.cleanNode(pDelInput, true);
// Desc
description = file.description || '';
var curFile = this.arConfig.files && this.arConfig.files[0] ? this.arConfig.files[0] : false;
if (curFile && curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
// Show description
this.ShowFileDescription(this.oNewFile, description);
}
else
{
var oFile;
if (!this.multiple && this.newFileCount > 0)
oFile = this.ClearNames(this.oFiles[0]);
else
oFile = this.AddNewFileBlock();
oFile.pTextInput.value = file.src || '';
oFile.pTextInput.style.display = "";
oFile.pUploadCont.style.display = "none";
this.SetInputName(oFile.pTextInput, this.GetInputName('medialib'));
this.FocusInput(oFile.pTextInput);
description = file.description || '';
if (this.multiple)
this.curFileIndex = this.newFileCount;
if (this.multiple || !this.newFileCount)
this.PushToFiles(oFile);
var fileIndex = parseInt(this.GetCurrentFile(), 10);
if (isNaN(fileIndex) && !this.multiple)
this.SetHiddenInputName(0, '');
else
this.SetHiddenInputName(fileIndex, '');
if (!isNaN(fileIndex) && this.multiple)
{
this.DeleteFile(false);
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "none";
oFile.pMenu.style.display = "inline-block";
oFile.pMenu.setAttribute('data-bx-meta', fileIndex);
var
curFile = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false,
fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (curFile)
{
if (curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.SetInputName(oFile.pTextInput, curFile.INPUT_NAME);
this.SetInputName(oFile.pDescInput, curFile.DESC_NAME);
}
fileContainer.appendChild(oFile.pFileCont);
}
// Show description
this.ShowFileDescription(oFile, description);
if (this.multiple)
this.pCont.appendChild(this.oNewFile.pFileCont);
if (!this.CheckNewFileState())
this.HideNewFileState();
}
};
BX.file_input.prototype.OnSelectFromFileDialog = function(path)
{
var description = '', curFile;
this.curFileIndex = false;
if (this.arConfig.fileExists && this.arConfig.files && !this.multiple)
{
this.DeleteFile(false);
this.oNewFile.pTextInput.value = path || '';
this.oNewFile.pTextInput.style.display = "";
this.oNewFile.pUploadCont.style.display = "none";
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('file_dialog'));
this.FocusInput(this.oNewFile.pTextInput);
this.SetHiddenInputName(0, '');
var pDelInput = BX.findChild(BX(this.id + '_file_cont_0'), {tagName: 'input', attr: {name: this.GetInputName('del')}});
if (pDelInput)
BX.cleanNode(pDelInput, true);
// Show description
curFile = this.arConfig.files && this.arConfig.files[0] ? this.arConfig.files[0] : false;
if (curFile && curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.ShowFileDescription(this.oNewFile, description);
}
else
{
var oFile;
if (!this.multiple && this.newFileCount > 0)
oFile = this.ClearNames(this.oFiles[0]);
else
oFile = this.AddNewFileBlock();
oFile.pTextInput.value = path || '';
oFile.pTextInput.style.display = "";
oFile.pUploadCont.style.display = "none";
this.SetInputName(oFile.pTextInput, this.GetInputName('file_dialog'));
this.FocusInput(oFile.pTextInput);
if (this.multiple)
this.curFileIndex = this.newFileCount;
if (this.multiple || !this.newFileCount)
this.PushToFiles(oFile);
var fileIndex = parseInt(this.GetCurrentFile(), 10);
if (isNaN(fileIndex) && !this.multiple)
this.SetHiddenInputName(0, '');
else
this.SetHiddenInputName(fileIndex, '');
// Show description
curFile = false;
if (!isNaN(fileIndex) && this.multiple)
{
this.DeleteFile(false);
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "none";
oFile.pMenu.style.display = "inline-block";
oFile.pMenu.setAttribute('data-bx-meta', fileIndex);
curFile = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false;
var fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (curFile)
{
this.ShowFileDescription(oFile, curFile.DESCRIPTION || '');
this.SetInputName(oFile.pTextInput, curFile.INPUT_NAME);
this.SetInputName(oFile.pDescInput, curFile.DESC_NAME);
oFile.pDescInput.value = curFile.DESCRIPTION || '';
}
fileContainer.appendChild(oFile.pFileCont);
}
if (!curFile)
{
this.ShowFileDescription(oFile, '');
}
if (this.multiple)
this.pCont.appendChild(this.oNewFile.pFileCont);
if (!this.CheckNewFileState())
this.HideNewFileState();
}
};
BX.file_input.prototype.OnCloudInputChange = function()
{
var path = this.oNewFile.pTextInput.value;
var description = '';
this.curFileIndex = false;
if (this.arConfig.fileExists && this.arConfig.files && !this.multiple)
{
this.DeleteFile(false);
this.oNewFile.pTextInput.value = path || '';
this.oNewFile.pTextInput.style.display = "";
this.oNewFile.pUploadCont.style.display = "none";
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('cloud'));
this.SetHiddenInputName(0, '');
var pDelInput = BX.findChild(BX(this.id + '_file_cont_0'), {tagName: 'input', attr: {name: this.GetInputName('del')}});
if (pDelInput)
BX.cleanNode(pDelInput, true);
// Show description
var curFile = this.arConfig.files && this.arConfig.files[0] ? this.arConfig.files[0] : false;
if (curFile && curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.ShowFileDescription(this.oNewFile, description);
}
else
{
this.oNewFile.pTextInput.value = '';
var oFile;
if (!this.multiple && this.newFileCount > 0)
oFile = this.ClearNames(this.oFiles[0]);
else
oFile = this.AddNewFileBlock();
oFile.pTextInput.value = path || '';
oFile.pTextInput.style.display = "";
oFile.pUploadCont.style.display = "none";
this.SetInputName(oFile.pTextInput, this.GetInputName('cloud'));
if (this.multiple)
this.curFileIndex = this.newFileCount;
if (this.multiple || !this.newFileCount)
this.PushToFiles(oFile);
var fileIndex = parseInt(this.GetCurrentFile(), 10);
if (isNaN(fileIndex) && !this.multiple)
this.SetHiddenInputName(0, '');
else
this.SetHiddenInputName(fileIndex, '');
if (!isNaN(fileIndex) && this.multiple)
{
this.DeleteFile(false);
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "none";
oFile.pMenu.style.display = "inline-block";
oFile.pMenu.setAttribute('data-bx-meta', fileIndex);
var
curFile = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false,
fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (curFile)
{
if (curFile.DESCRIPTION !== '')
description = curFile.DESCRIPTION;
this.SetInputName(oFile.pTextInput, curFile.INPUT_NAME);
this.SetInputName(oFile.pDescInput, curFile.DESC_NAME);
}
fileContainer.appendChild(oFile.pFileCont);
}
// Show description
this.ShowFileDescription(oFile, description);
if (this.multiple)
this.pCont.appendChild(this.oNewFile.pFileCont);
if (!this.CheckNewFileState())
this.HideNewFileState();
}
this.oNewFile.pTextInput.onchange = null;
};
BX.file_input.prototype.ShowFileDescription = function(oFile, value)
{
if (this.arConfig.showDesc)
{
oFile.pDesc.style.display = "";
//oFile.pDescInput.value = '';
this.SetInputName(oFile.pDescInput, this.GetInputName('desc'));
BX.removeClass(oFile.pDesc, "adm-input-file-show-desc"); // hide input
oFile.pDescInput.value = value || '';
// Show or hide input with description
if (value)
BX.addClass(oFile.pDesc, "adm-input-file-show-desc");
else
BX.removeClass(oFile.pDesc, "adm-input-file-show-desc");
}
};
BX.file_input.prototype.DisplayFileBlock = function(menu)
{
var
pFileCont = BX.create("DIV", {props: {className: "adm-input-file-new"}}),
pUploadCont = pFileCont.appendChild(BX.create("SPAN", {props: {className: "adm-input-file"}})),
pUploadLabel = pUploadCont.appendChild(BX.create("SPAN", {text: BX.message('ADM_FILE_ADD')})),
pUploadInput = pUploadCont.appendChild(BX.create("INPUT", {props: {type: 'file', className: 'adm-designed-file'}}));
pFileCont.appendChild(document.createTextNode(' '));
BX.bind(pUploadInput, 'change', BX.proxy(this.OnUploadInputChange, this));
var _this = this;
BX.bind(pUploadInput, 'mousedown', function(){
var par = BX.findParent(this, {className: 'adm-input-file-new'}, function(el){return (BX.hasClass(el, 'adm-input-file-ext-class') || BX.hasClass(el, 'adm-input-file-control'));});
if (par)
{
var pMenu = BX.findChild(par, {className: 'add-file-popup-btn'});
if (pMenu && pMenu.getAttribute("data-bx-meta") !== null)
_this.SetCurrentFile(pMenu.getAttribute("data-bx-meta"));
}
});
var pTextInput = pFileCont.appendChild(BX.create("INPUT", {props: {type: 'text', className: 'adm-input', size: this.inputSize}, style: {display: 'none'}}));
var pMenu = pFileCont.appendChild(BX.create("SPAN", {props: {className: "adm-btn add-file-popup-btn"}}));
pMenu.setAttribute('data-bx-meta', 'new');
this.SetOpenerMenu(pMenu, menu || this.arConfig.menuNew);
var
pDesc = pFileCont.appendChild(BX.create("SPAN", {props: {className: "adm-input-file-desc"}, style:{display: 'none'}})),
pDescLink = pDesc.appendChild(BX.create("SPAN", {props: {className: "adm-input-file-desc-link"}, text: BX.message('ADM_FILE_ADD_DESC')})),
pDescInput = pDesc.appendChild(BX.create("INPUT", {props: {type: 'text', className: "adm-input", size: this.inputSize, placeholder: BX.message('ADM_FILE_DESC')}}));
pDescLink.onclick = function(){
BX.addClass(pDesc, 'adm-input-file-show-desc');
BX.defer(function(){BX.focus(pDescInput);})();
};
if (!this.arConfig.useUpload)
{
pUploadCont.style.display = 'none';
pTextInput.style.display = '';
}
return {
pFileCont: pFileCont,
pUploadCont: pUploadCont,
pUploadLabel: pUploadLabel,
pUploadInput: pUploadInput,
pTextInput: pTextInput,
pDesc: pDesc,
pDescInput: pDescInput,
pMenu: pMenu
};
};
BX.file_input.prototype.DeleteFile = function(bAddCancelMenu)
{
var
fileIndex = parseInt(this.GetCurrentFile(), 10),
file = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false,
fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (!this.arConfig.useUpload) // Only for files on server props
this.SetHiddenInputName(fileIndex, '');
if (fileContainer)
{
if (bAddCancelMenu)
fileContainer.appendChild(BX.create('INPUT', {props: {id: this.id + '_file_del_' + fileIndex, type: "hidden", value: "Y", name: this.GetInputName('del', file)}}));
BX.addClass(fileContainer, 'adm-input-file-deleted');
}
if (this.multiple)
{
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "inline-block";
pMenu.OPENER.SetMenu([{TEXT: BX.message('ADM_FILE_CANCEL_DEL'), ONCLICK: BX.proxy(this.CancelDelete, this)}]);
}
var delLabel = BX(this.id + '_file_del_lbl_' + fileIndex);
if (delLabel)
{
delLabel.style.marginLeft = (-parseInt(delLabel.offsetWidth / 2)) + 'px';
delLabel.style.marginTop = (-parseInt(delLabel.offsetHeight / 2)) + 'px';
}
if (this.oNewFile)
{
this.oNewFile.pFileCont.style.display = "";
if (!this.arConfig.useUpload)
this.SetInputName(this.oNewFile.pTextInput, this.GetInputName('first_input'));
if (bAddCancelMenu !== false && !this.multiple)
{
var arMenu = BX.clone(this.arConfig.menuNew);
arMenu.push({SEPARATOR: true});
arMenu.push({TEXT: BX.message('ADM_FILE_CANCEL_DEL'), ONCLICK: BX.proxy(this.CancelDelete, this)});
this.oNewFile.pMenu.OPENER.SetMenu(arMenu);
}
}
};
BX.file_input.prototype.CancelDelete = function()
{
var fileIndex = parseInt(this.GetCurrentFile(), 10)
if (isNaN(fileIndex) && !this.multiple)
fileIndex = 0;
var
file = this.arConfig.files && this.arConfig.files[fileIndex] ? this.arConfig.files[fileIndex] : false,
fileContainer = BX(this.id + '_file_cont_' + fileIndex),
hiddenInput = BX(this.id + '_file_hidden_value_' + fileIndex);
if (hiddenInput)
this.SetInputName(hiddenInput, file.INPUT_NAME || this.GetInputName('first_input'));
if (fileContainer)
{
BX.removeClass(fileContainer, 'adm-input-file-deleted');
var pDelInput = BX.findChild(fileContainer, {tagName: 'input', attr: {name: this.GetInputName('del', file)}});
if (pDelInput)
BX.cleanNode(pDelInput, true);
if (file.FILE_NOT_FOUND)
{
var pMenu = BX(this.id + '_menu_' + fileIndex);
if (pMenu && this.arConfig.showDel)
{
pMenu.OPENER.SetMenu([{TEXT: BX.message('ADM_FILE_DELETE'), ONCLICK: BX.proxy(this.DeleteFile, this), GLOBAL_ICON: 'adm-menu-delete'}]);
}
}
else if (this.multiple)
{
var pMenu = BX(this.id + '_menu_' + fileIndex);
//pMenu.OPENER.SetMenu([{TEXT: BX.message('ADM_FILE_DELETE'), ONCLICK: BX.proxy(this.DeleteFile, this), GLOBAL_ICON: 'adm-menu-delete'}]);
var arMenu = BX.clone(this.arConfig.menuExist);
if(this.arConfig.showDel || this.arConfig.showDesc)
arMenu.push({SEPARATOR: true});
if(this.arConfig.showDel)
arMenu.push({TEXT: BX.message('ADM_FILE_DELETE'), ONCLICK: BX.proxy(this.DeleteFile, this), GLOBAL_ICON: 'adm-menu-delete'});
if (this.arConfig.showDesc && file.DESCRIPTION == "")
arMenu.push({TEXT: BX.message('ADM_FILE_ADD_DESC'), ONCLICK: BX.proxy(this.AddDescription, this), GLOBAL_ICON: 'adm-menu-add-desc'});
pMenu.OPENER.SetMenu(arMenu);
}
if (this.oNewFile && !this.multiple)
{
this.oNewFile.pFileCont.style.display = "none";
this.SetInputName(this.oNewFile.pUploadInput, "");
this.SetInputName(this.oNewFile.pTextInput, "");
}
}
};
BX.file_input.prototype.AddDescription = function()
{
var
fileIndex = parseInt(this.GetCurrentFile(), 10),
fileDesc = BX(this.id + '_file_desc_' + fileIndex);
if (fileDesc)
{
fileDesc.style.display = "";
var pInp = BX.findChild(fileDesc, {tag: 'input'});
if (pInp)
BX.focus(pInp);
}
};
BX.file_input.prototype.GetCurrentFile = function()
{
return this.currentFileId;
};
BX.file_input.prototype.SetCurrentFile = function(ind)
{
this.currentFileId = ind;
};
BX.file_input.prototype.CheckNewFileState = function()
{
if (!this.multiple || (this.maxCount > 0 && this.fileCount >= this.maxCount))
return false;
return true;
};
BX.file_input.prototype.HideNewFileState = function()
{
this.oNewFile.pFileCont.style.display = 'none';
this.ClearNames(this.oNewFile);
};
BX.file_input.prototype.ClearNames = function(oFile)
{
oFile.pUploadInput.name = '';
oFile.pTextInput.name = '';
oFile.pDescInput.name = '';
oFile.pUploadInput.removeAttribute('name');
oFile.pTextInput.removeAttribute('name');
oFile.pDescInput.removeAttribute('name');
return oFile;
};
BX.file_input.prototype.GetInputName = function(type, file)
{
var name = '';
if (this.multiple)
{
if (type == 'del' || type == 'desc')
{
if (type == 'del')
name = (file && file.DEL_NAME) ? file.DEL_NAME : this.arConfig.delName;
else if (type == 'desc')
name = (file && file.DESC_NAME) ? file.DESC_NAME : this.arConfig.descName;
}
else
{
name = this.arConfig.inputNameTemplate;
}
if (this.curFileIndex === false)
name = name.replace('#IND#', this.newFileCount);
else if(this.curFileIndex === undefined)
name = name.replace('#IND#', 'new');
else
name = name.replace('#IND#', this.curFileIndex);
}
else
{
if (type == 'first_input')
{
if (this.arConfig.useUpload)
type = 'upload';
if (this.arConfig.useMedialib)
type = 'medialib';
else if (this.arConfig.useFileDialog)
type = 'file_dialog';
else if (this.arConfig.useCloud)
type = 'cloud';
}
if (this.arConfig.inputs && this.arConfig.inputs[type])
name = this.arConfig.inputs[type].NAME;
}
if (type == 'del' && !name)
name = this.arConfig.delName;
if (type == 'desc' && !name)
name = this.arConfig.descName;
return name;
};
BX.file_input.prototype.ClearNewFile = function()
{
var meta = this.GetCurrentFile();
if (this.multiple)
{
this.CancelDelete();
var
fileIndex = parseInt(this.GetCurrentFile(), 10),
fileContainer = BX(this.id + '_file_cont_' + fileIndex);
if (fileContainer)
{
var pNewCont = BX.findChild(fileContainer, {className: 'adm-input-file-new'});
if (pNewCont)
BX.cleanNode(pNewCont, true);
var pMenu = BX(this.id + '_menu_' + fileIndex);
pMenu.style.display = "inline-block";
}
}
if (!meta || meta.substr(0, 4) != 'new_')
return;
var ind = parseInt(meta.substr(4), 10);
if (isNaN(ind) || !this.oFiles[ind])
return;
this.newFileCount--;
this.fileCount = this.arConfig.files.length + this.newFileCount - 1;
this.oNewFile.pFileCont.style.display = "";
this.oFiles[ind].pFileCont.parentNode.removeChild(this.oFiles[ind].pFileCont);
};
BX.file_input.prototype.PushToFiles = function(oFile)
{
this.oFiles.push(oFile);
this.newFileCount++;
this.fileCount = this.arConfig.files.length + this.newFileCount - 1;
oFile.pMenu.setAttribute('data-bx-meta', 'new_' + (this.oFiles.length - 1));
};
BX.file_input.prototype.SetInputName = function(inp, name)
{
inp.name = name;
inp.setAttribute('name', name);
};
BX.file_input.prototype.ShowPath = function()
{
this.OnSelectFromFileDialog('');
};
BX.file_input.prototype.FocusInput = function(input)
{
if (input)
BX.defer(function(){if(input){BX.focus(input);}})();
};
BX.file_input.prototype.SetHiddenInputName = function(ind, value)
{
if (!isNaN(ind))
{
var hiddenInput = BX(this.id + '_file_hidden_value_' + (ind || 0));
if (hiddenInput)
this.SetInputName(hiddenInput, value || '');
}
};
})();