Restringindo botões
2 participantes
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1 • Compartilhe
Restringindo botões
Detalhes da questão
Endereço do fórum: http://darkstreetrpg.forumeiros.com
Versão do fórum: phpBB3
Descrição
Olá!
Tenho um script que habilita o uso de botões personalizados nos tópicos(Em curso, Resolvido, Recusado, etc).
Está funcionando normalmente: Quem criou o tópico e os moderadores conseguem ver os botões.
Mas o problema é que num tópico que somente um moderador pode decidir se foi resolvido ou não, isso dá conflito.
Meu pedido: Configurar para cada botão aparecer somente nos tópicos que eu selecionar e somente para os grupos que eu selecionar.
Dede já agradeço!
Código do script:
- Código:
/*globals jQuery, FA*/
/**
* Alterar o ícone do tópico com AJAX.
*
* @author Luiz
* @version {alpha} 1.0
* @licence MIT
*/
(function ($) {
'use strict';
var config = [
{ name: 'Resolvido', id : 1, background: '#8b5' },
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var MarkIcon;
FA.Topic.MarkIcon = MarkIcon = function (config) {
var self = this;
self.userConfig = config;
self.defaults = { name: undefined, id: undefined, background: undefined };
self.config = $.extend({}, self.defaults, self.userConfig);
$.each(self.config, function (key, value) {
if (key === undefined) {
throw new Error ('Não foi especificado um: ' key ' para o script de botões.');
}
});
};
MarkIcon.prototype.init = function () {
var self = this;
var $post = $('.post:first');
var $link = $post.find('a[href$="mode=editpost"]');
if (!$link.length) {
return;
}
self.messageLink = $link.attr('href');
self.$button = $('<button>', {
'class' : 'fa-mark-icon-button',
'data-id': self.config.id,
'text' : self.config.name
});
self.$button
.css('background-color', self.config.background)
.on('click', function (event) {
event.preventDefault();
self.runAjax();
})
.insertBefore($post)
;
self.appendStyles();
};
MarkIcon.prototype.runAjax = function () {
var self = this;
self.changeText('<i class="fa fa-refresh fa-spin"></i> Marcando...');
$.get(self.messageLink)
.done(function (context) {
var $form = $('form[action="/post"]', context);
$form.find('input[name="post_icon"]').val(self.config.id);
$form.find('input[name="edit_reason"]').remove();
var encode = document.charset.toLowerCase() === 'utf-8' ? window.encodeURIComponent : window.escape;
var data = $form.serializeArray().reduce(function (object, pair) {
object[pair.name] = pair.value;
return object;
}, {
post_icon: self.config.id,
post: 1
});
var encoded = $.map(data, function (value, key) {
return key '=' encode(value);
}).join('&');
$.post(self.messageLink, encoded)
.done(self.changeText('<i class="fa fa-check"></i> Marcado!'))
.fail(self.error)
;
})
.fail(self.error)
;
};
MarkIcon.prototype.changeText = function (text) {
var self = this;
self.runAjax = function () {
return false;
};
self.$button
.html(text)
.prop('disabled', true)
;
};
MarkIcon.prototype.error = function () {
var self = this;
alert([
'Houve um erro ao marcar o tópico como "' self.config.name '".',
'Por favor, contate o suporte técnico.'
].join('\n'));
};
MarkIcon.prototype.appendStyles = function () {
$('<style>', {
'text': [
'.fa-mark-icon-button {',
' padding: 8px 8px 8px 8px;',
' border: none;',
' color: #fff;',
' margin: 10px 0;',
' box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.08);',
' border-radius: 3px;',
'}'
].join('\n')
}).appendTo('head');
};
$(function () {
$.each(config, function () {
var self = this;
(new FA.Topic.MarkIcon(self)).init();
});
});
}(jQuery));
Re: Restringindo botões
Troque por este:
Como o senhor pode ver no array de configuração:
Há um botão com uma configuração "onlyForMod". Se estiver marcada como true, somente moderadores e administradores poderão ver o botão daquele objeto.
Há um outro botão, também, configurado como "onlyForAdmin". Se essa configuração estiver marcada como true, somente administradores poderão ver o botão.
É importante frisar que essas configurações como false é como se elas não existissem, logo, só as mantenha no objeto caso elas estiverem como true.
Note que para ambos os casos, a edição daquela postagem ainda deve estar ativa!
o/
- Código:
/*globals jQuery, FA*/
/**
* Alterar o ícone do tópico com AJAX.
*
* @author Luiz
* @version 1.2
* @licence MIT
*/
(function ($) {
'use strict';
var config = [
{ name: 'Resolvido', id : 4, background: '#8b5', onlyForMod: true },
{ name: 'Em Curso', id : 1, background: '#ebb537' },
{ name: 'Importante', id: 5, background: '#e3493b', onlyForAdmin: true }
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var MarkIcon;
FA.Topic.MarkIcon = MarkIcon = function (config) {
var self = this;
self.userConfig = config;
self.defaults = {
name: undefined,
id: undefined,
background: undefined,
onlyForMod: false,
onlyForAdmin: false
};
self.config = $.extend({}, self.defaults, self.userConfig);
$.each(self.config, function (key, value) {
if (key === undefined) {
throw new Error ('Não foi especificado um: ' + key + ' para o script de botões.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões.');
}
});
};
MarkIcon.prototype.init = function () {
var self = this;
var $post = $('.post:first');
var $link = $post.find('a[href$="mode=editpost"]');
if (!$link.length) {
return false;
}
if (this.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (this.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
self.messageLink = $link.attr('href');
self.$button = $('<button>', {
'class' : 'fa-mark-icon-button',
'data-id': self.config.id,
'text' : self.config.name
});
self.$button
.css('background-color', self.config.background)
.on('click', function (event) {
event.preventDefault();
self.runAjax();
})
.insertBefore($post)
;
self.appendStyles();
};
MarkIcon.prototype.runAjax = function () {
var self = this;
self.changeText('<i class="fa fa-refresh fa-spin"></i> Marcando...');
$.get(self.messageLink)
.done(function (context) {
var $form = $('form[action="/post"]', context);
var encode = document.charset.toLowerCase() === 'utf-8' ? window.encodeURIComponent : window.escape;
var formData = $form.serializeArray();
var data = {};
$.each(formData, function () {
var obj = this;
data[obj.name] = obj.value;
});
data.post_icon = self.config.id;
data.post = 1;
var encoded = $.map(data, function (value, key) {
return key + '=' + encode(value);
}).join('&');
$.post(self.messageLink, encoded)
.done(self.changeText('<i class="fa fa-check"></i> Marcado!'))
.fail(self.error)
;
})
.fail(self.error)
;
};
MarkIcon.prototype.changeText = function (text) {
var self = this;
self.runAjax = function () {
return false;
};
self.$button
.html(text)
.prop('disabled', true)
;
};
MarkIcon.prototype.error = function () {
var self = this;
alert([
'Houve um erro ao marcar o tópico como "' + self.config.name + '".',
'Por favor, contate o suporte técnico.'
].join('\n'));
};
MarkIcon.prototype.appendStyles = function () {
$('<style>', {
'text': [
'.fa-mark-icon-button {',
' padding: 8px 8px 8px 8px;',
' border: none;',
' color: #fff;',
' margin: 10px 0 10px 6px;',
' box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.08);',
' border-radius: 3px;',
'}'
].join('\n')
}).appendTo('head');
};
$(function () {
$.each(config, function () {
var self = this;
(new FA.Topic.MarkIcon(self)).init();
});
});
}(jQuery));
Como o senhor pode ver no array de configuração:
- Código:
var config = [
{ name: 'Resolvido', id : 4, background: '#8b5', onlyForMod: true },
{ name: 'Em Curso', id : 1, background: '#ebb537' },
{ name: 'Importante', id: 5, background: '#e3493b', onlyForAdmin: true }
];
Há um botão com uma configuração "onlyForMod". Se estiver marcada como true, somente moderadores e administradores poderão ver o botão daquele objeto.
Há um outro botão, também, configurado como "onlyForAdmin". Se essa configuração estiver marcada como true, somente administradores poderão ver o botão.
É importante frisar que essas configurações como false é como se elas não existissem, logo, só as mantenha no objeto caso elas estiverem como true.
Note que para ambos os casos, a edição daquela postagem ainda deve estar ativa!
o/
Re: Restringindo botões
Luiz escreveu:Troque por este:
- Código:
/*globals jQuery, FA*/
/**
* Alterar o ícone do tópico com AJAX.
*
* @author Luiz
* @version 1.2
* @licence MIT
*/
(function ($) {
'use strict';
var config = [
{ name: 'Resolvido', id : 4, background: '#8b5', onlyForMod: true },
{ name: 'Em Curso', id : 1, background: '#ebb537' },
{ name: 'Importante', id: 5, background: '#e3493b', onlyForAdmin: true }
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var MarkIcon;
FA.Topic.MarkIcon = MarkIcon = function (config) {
var self = this;
self.userConfig = config;
self.defaults = {
name: undefined,
id: undefined,
background: undefined,
onlyForMod: false,
onlyForAdmin: false
};
self.config = $.extend({}, self.defaults, self.userConfig);
$.each(self.config, function (key, value) {
if (key === undefined) {
throw new Error ('Não foi especificado um: ' + key + ' para o script de botões.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões.');
}
});
};
MarkIcon.prototype.init = function () {
var self = this;
var $post = $('.post:first');
var $link = $post.find('a[href$="mode=editpost"]');
if (!$link.length) {
return false;
}
if (this.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (this.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
self.messageLink = $link.attr('href');
self.$button = $('<button>', {
'class' : 'fa-mark-icon-button',
'data-id': self.config.id,
'text' : self.config.name
});
self.$button
.css('background-color', self.config.background)
.on('click', function (event) {
event.preventDefault();
self.runAjax();
})
.insertBefore($post)
;
self.appendStyles();
};
MarkIcon.prototype.runAjax = function () {
var self = this;
self.changeText('<i class="fa fa-refresh fa-spin"></i> Marcando...');
$.get(self.messageLink)
.done(function (context) {
var $form = $('form[action="/post"]', context);
var encode = document.charset.toLowerCase() === 'utf-8' ? window.encodeURIComponent : window.escape;
var formData = $form.serializeArray();
var data = {};
$.each(formData, function () {
var obj = this;
data[obj.name] = obj.value;
});
data.post_icon = self.config.id;
data.post = 1;
var encoded = $.map(data, function (value, key) {
return key + '=' + encode(value);
}).join('&');
$.post(self.messageLink, encoded)
.done(self.changeText('<i class="fa fa-check"></i> Marcado!'))
.fail(self.error)
;
})
.fail(self.error)
;
};
MarkIcon.prototype.changeText = function (text) {
var self = this;
self.runAjax = function () {
return false;
};
self.$button
.html(text)
.prop('disabled', true)
;
};
MarkIcon.prototype.error = function () {
var self = this;
alert([
'Houve um erro ao marcar o tópico como "' + self.config.name + '".',
'Por favor, contate o suporte técnico.'
].join('\n'));
};
MarkIcon.prototype.appendStyles = function () {
$('<style>', {
'text': [
'.fa-mark-icon-button {',
' padding: 8px 8px 8px 8px;',
' border: none;',
' color: #fff;',
' margin: 10px 0 10px 6px;',
' box-shadow: inset 0 0 0 3px rgba(0, 0, 0, 0.08);',
' border-radius: 3px;',
'}'
].join('\n')
}).appendTo('head');
};
$(function () {
$.each(config, function () {
var self = this;
(new FA.Topic.MarkIcon(self)).init();
});
});
}(jQuery));
Como o senhor pode ver no array de configuração:
- Código:
var config = [
{ name: 'Resolvido', id : 4, background: '#8b5', onlyForMod: true },
{ name: 'Em Curso', id : 1, background: '#ebb537' },
{ name: 'Importante', id: 5, background: '#e3493b', onlyForAdmin: true }
];
Há um botão com uma configuração "onlyForMod". Se estiver marcada como true, somente moderadores e administradores poderão ver o botão daquele objeto.
Há um outro botão, também, configurado como "onlyForAdmin". Se essa configuração estiver marcada como true, somente administradores poderão ver o botão.
É importante frisar que essas configurações como false é como se elas não existissem, logo, só as mantenha no objeto caso elas estiverem como true.
Note que para ambos os casos, a edição daquela postagem ainda deve estar ativa!
o/
Perfeito! Mas eu queria restringir os sub-foruns também, seria possível?
Tipo, determinar os sub-foruns que cada botão vai aparecer.
Obrigado!
Re: Restringindo botões
Não é possível fazer por subfóruns. Na verdade é, mas não é muito performático.
É possível selecionar por tópicos, mas creio que isso não seja muito viável.
É possível selecionar por tópicos, mas creio que isso não seja muito viável.
Re: Restringindo botões
Luiz escreveu:Não é possível fazer por subfóruns. Na verdade é, mas não é muito performático.
É possível selecionar por tópicos, mas creio que isso não seja muito viável.
Uma pena, mas limitando por moderador e admin já está ótimo! Brigadão!
Re: Restringindo botões
Questão marcada como Resolvida ou o Autor solicitou que ela fosse arquivada. Tópico marcado como Resolvido e movido para Questões resolvidas. |
Fórum dos Fóruns :: Ajuda e atendimento ao utilizador :: Questões sobre códigos :: Questões resolvidas sobre códigos Javascript e jQuery
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos