Я искал ту же функциональность (чтобы рычание зависло от конкретной серьезности сообщения).PrimeFaces (6.1) не предлагает эту функциональность, но взломать рычаг JavaScript довольно просто.Более конкретно, в функции bindEvents
они проверяют, был ли настроен sticky
и на основании этого:
//hide the message after given time if not sticky
if(!sticky) {
this.setRemovalTimeout(message);
}
Таким образом, вы можете создать прототип (переопределить) функцию bindEvents
и установить на основе sticky
на серьезность сообщения.
PrimeFaces.widget.Growl.prototype.bindEvents = function(message) {
var _self = this,
sticky = this.cfg.sticky;
// Start hack
if (!sticky) {
// Your rule
}
...
Вы также можете создать прототип renderMessage
и добавить серьезность в качестве параметра к bindEvents
.Я выбрал быстрый взлом и прочитал его из className
.
Я добавил следующие служебные функции:
var SEVERITIES = [ "info", "warn", "error", "fatal" ];
function getSeverity(domNode) {
// HACK Severity can be found in the className after the last - character.
var severity = domNode.className;
return severity.substring(severity.lastIndexOf("-") + 1);
}
function getSeverityIndex(severityString) {
return SEVERITIES.indexOf(severityString);
}
Теперь вы можете использовать следующую проверку:
if (!sticky) {
sticky = getSeverityIndex(getSeverity(message[0])) >= getSeverityIndex("error");
}
Я мог бы создать запрос на извлечение в GitHub, где вы можете установить минимальную серьезность для прикрепления сообщений, используя атрибут stickSeverity
для компонента p:growl
.
Вот полный взлом JavaScript (PrimeFaces 6.1):
var SEVERITIES = [ "info", "warn", "error", "fatal" ];
function getSeverity(domNode) {
// HACK Severity can be found in the className after the last - character.
var severity = domNode.className;
return severity.substring(severity.lastIndexOf("-") + 1);
}
function getSeverityIndex(severityString) {
return SEVERITIES.indexOf(severityString);
}
PrimeFaces.widget.Growl.prototype.bindEvents = function(message) {
var _self = this,
sticky = this.cfg.sticky;
// Start customization
if (!sticky) {
sticky = getSeverityIndex(getSeverity(message[0])) >= getSeverityIndex("error");
}
// End customization
message.mouseover(function() {
var msg = $(this);
//visuals
if(!msg.is(':animated')) {
msg.find('div.ui-growl-icon-close:first').show();
}
})
.mouseout(function() {
//visuals
$(this).find('div.ui-growl-icon-close:first').hide();
});
//remove message on click of close icon
message.find('div.ui-growl-icon-close').click(function() {
_self.removeMessage(message);
//clear timeout if removed manually
if(!sticky) {
clearTimeout(message.data('timeout'));
}
});
//hide the message after given time if not sticky
if(!sticky) {
this.setRemovalTimeout(message);
}
}