%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/ui.sidepanel.wrapper/templates/.default/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/ui.sidepanel.wrapper/templates/.default/template.js |
;(function ()
{
BX.namespace('BX.UI');
if (BX.UI.SidePanelWrapper)
{
return;
}
function Wrapper (parameters)
{
}
Wrapper.prototype.init = function (parameters)
{
this.container = BX(parameters.containerId);
this.isCloseAfterSave = parameters.isCloseAfterSave || false;
this.isReloadGridAfterSave = parameters.isReloadGridAfterSave || false;
this.isReloadPageAfterSave = parameters.isReloadPageAfterSave || false;
this.useLinkTargetsReplacing = parameters.useLinkTargetsReplacing || false;
this.notification = parameters.notification || {};
this.initEditableTitle(parameters);
if (this.hasSidePanel())
{
parent.BX.addCustomEvent(
parent.BX.SidePanel.Instance.getTopSlider(),
"SidePanel.Slider:onReload",
this.onSidePanelReload.bind(this)
);
}
if (this.useLinkTargetsReplacing)
{
this.initLinkTargetsReplacing();
}
this.isNotificationWillShowed();
};
Wrapper.prototype.initEditableTitle = function (parameters)
{
if (!parameters.title || !parameters.title.selector || !parameters.title.defaultTitle)
{
return;
}
var dataContainer = this.container.querySelector(parameters.title.selector);
if (!dataContainer)
{
return;
}
var titleDataNode = dataContainer.querySelector('input[type="text"]');
if (!titleDataNode)
{
return;
}
dataContainer.style.display = 'none';
TitleEditor.init({
dataContainer: dataContainer,
dataNode: titleDataNode,
defaultTitle: parameters.title.defaultTitle
});
};
Wrapper.prototype.initLinkTargetsReplacing = function ()
{
this.replaceLinkTargets();
if (!window.MutationObserver)
{
return;
}
var observer = new MutationObserver(this.domMutationHandler.bind(this));
observer.observe(this.container, {childList: true, subtree: true});
};
Wrapper.prototype.domMutationHandler = function (mutations)
{
mutations.forEach(function (mutation) {
for (var i = 0; i < mutation.addedNodes.length; ++i)
{
var node = mutation.addedNodes.item(i);
if (!node)
{
continue;
}
this.replaceLinkTargets(node);
}
}, this);
};
Wrapper.prototype.replaceLinkTargets = function (context)
{
if (!context)
{
context = document.body;
}
var list = [];
if (context.tagName === 'A')
{
list = [context];
}
else if (context.nodeName !== '#text')
{
list = BX.convert.nodeListToArray(context.querySelectorAll('a'))
}
if (list.length === 0)
{
return;
}
BX.convert.nodeListToArray(list).filter(function (a) {
return !a.target;
}).forEach(function (a) {
a.target = '_top';
});
};
Wrapper.prototype.hasSidePanel = function ()
{
return parent && parent.BX && parent.BX.SidePanel;
};
Wrapper.prototype.onSidePanelReload = function ()
{
if (!this.hasSidePanel())
{
return;
}
if (this.isReloadGridAfterSave)
{
this.reloadGridOnParentPage();
}
if (this.isCloseAfterSave)
{
var handler;
if (this.isNotificationWillShowed())
{
handler = this.showNotification.bind(this);
}
else if (this.isReloadPageAfterSave)
{
handler = function () {
parent.window.location.reload();
};
}
parent.BX.SidePanel.Instance.close(false, handler);
}
};
Wrapper.prototype.isNotificationWillShowed = function ()
{
if (!this.notification.content || !parent.BX)
{
return false;
}
if (!this.hasSidePanel())
{
return false;
}
if (this.sidePanelParam() === true)
{
return true;
}
var isShow = window.location.search.substr(1)
.split('&')
.filter(function(item) {
return item === 'notifyAfterSave=N';
})
.length === 0;
this.sidePanelParam(isShow);
return isShow;
};
Wrapper.prototype.sidePanelParam = function (val)
{
var slider = parent.BX.SidePanel.Instance.getTopSlider();
if (!slider)
{
return null;
}
var dictionary = slider.getData();
if (typeof (val) === "undefined")
{
return dictionary.get('isNotificationWillShowed');
}
else
{
return dictionary.set('isNotificationWillShowed', val);
}
};
Wrapper.prototype.showNotification = function ()
{
if (!parent.BX.UI || !parent.BX.UI.Notification)
{
return;
}
parent.BX.UI.Notification.Center.notify(this.notification);
this.sidePanelParam(null);
};
Wrapper.prototype.reloadGridOnParentPage = function ()
{
var id = BX.type.isString(this.isReloadGridAfterSave) ? this.isReloadGridAfterSave : null;
if (!parent.BX.Main || !parent.BX.Main.gridManager)
{
return;
}
if (!id && parent.BX.Main.gridManager.data)
{
var grids = parent.BX.Main.gridManager.data;
id = grids.length > 0 ? grids[0].id : null;
}
if(!id)
{
return;
}
var grid = parent.BX.Main.gridManager.getById(id);
if (!grid)
{
return;
}
grid.instance.reload();
};
var TitleEditor = {
isInit: false,
init: function (params)
{
// init nodes
this.dataNode = params.dataNode;
this.titleNode = BX('pagetitle');
this.inputNode = BX('pagetitle_input');
this.buttonNode = BX('pagetitle_edit');
this.initialTitle = this.titleNode.textContent;
this.defaultTitle = params.defaultTitle;
// init bindings
BX.bind(this.dataNode, 'bxchange', this.onDataNodeChange.bind(this));
BX.bind(this.buttonNode, 'click', this.startEdit.bind(this));
BX.bind(this.inputNode, 'keyup', this.onKeyUp.bind(this));
BX.bind(this.inputNode, 'blur', this.endEdit.bind(this));
this.isInit = true;
// init state
if (!params.disabled)
{
this.enable();
}
if (!this.dataNode.value)
{
this.dataNode.value = this.defaultTitle;
}
},
enable: function (isDisable)
{
isDisable = isDisable || false;
if (!this.isInit)
{
return;
}
this.changeDisplay(this.buttonNode, !isDisable);
this.titleNode.textContent = !isDisable
?
this.dataNode.value ? this.dataNode.value : this.defaultTitle
:
this.initialTitle;
},
disable: function ()
{
this.enable(true);
},
onDataNodeChange: function ()
{
this.titleNode.textContent = this.dataNode.value;
},
onKeyUp: function (event)
{
event = event || window.event;
if ((event.keyCode === 0xA)||(event.keyCode === 0xD))
{
this.endEdit();
event.preventDefault();
return false;
}
},
getTitle: function ()
{
var title = this.dataNode.value;
if (!title)
{
title = this.titleNode.textContent;
}
return title;
},
startEdit: function ()
{
this.inputNode.value = this.getTitle();
this.changeDisplay(this.titleNode, false);
this.changeDisplay(this.buttonNode, false);
this.changeDisplay(this.inputNode, true);
this.inputNode.focus();
},
endEdit: function ()
{
this.dataNode.value = this.inputNode.value;
this.titleNode.textContent = this.inputNode.value;
this.changeDisplay(this.inputNode, false);
this.changeDisplay(this.buttonNode, true);
this.changeDisplay(this.titleNode, true);
},
changeDisplay: function (node, isShow)
{
return node.style.display = isShow ? '' : 'none';
}
};
BX.UI.SidePanelWrapper = new Wrapper;
})();