Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
Botões em Determinados Tópicos
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
Botões em Determinados Tópicos
Detalhes da questão
Endereço do fórum: http://www.brasilplayultimate.com.br
Versão do fórum: ModernBB
Descrição
Como já havia pedido antes desta vez vou querer mesmo sendo propensos a causar erros :/
Devido a esta bagunça: http://prntscr.com/gwj417
Pois coloco um moderador na área de Designer e ele tem acesso a todos esses botões e tem botões ai que não quero nem pra um nem pra outro e fica difícil discernir qual é qual ...
Código utilizado:
- Código:
/**
* Código jQuery que permite adiconar múltiplos botões ao SCEditor;
* Autores: Luiz~ e Kyo Panda (ajuda.forumeiros.com);
* Plataforma: Forumeiros;
* Versão: Todas;
* Investimento: Todas as páginas;
* Licence MIT;
*/
(function ($) {
'use strict';
var forumAdd = 6;
var botoes = [
{
'somenteModVer': true,
'name': 'Tópico Bloqueado',
'text': 'Olá! \nO seu tópico encontra-se bloqueado. \nQueira ler nossas [i]regras[/i] para saber mais.',
'id': 'tpc-lock',
'imgUrl': 'http://i.imgur.com/z5lPhgz.png'
}, {
'somenteModVer': true,
'name': 'Tópico Desbloqueado',
'text': 'Olá! \nEsta é uma mensagem de status: \nSeu tópico foi desbloqueado. \nQueira ler nossas [i]regras[/i] para saber mais.',
'id': 'tpc-unlock',
'imgUrl': 'http://i.imgur.com/hsBvMRG.png'
}, {
'somenteModVer': true,
'name': 'Mensagens de Denúncias',
'id': 'mensagens-de-denuncias',
'imgUrl': 'http://i.imgur.com/oAGWDdG.png',
'filhos': [
{
'somenteModVer': true,
'name': 'Denúncia UP',
'text': '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/W5mUMil.png'
}, {
'somenteModVer': true,
'name': 'Denúncia FAIL',
'text': '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/E3r9Hh1.png'
}, {
'somenteModVer': true,
'name': 'Denúncia Em Curso',
'text': '[table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/l7KlLp6.png'
}
]
}
];
// Begin CSS:
$(function () {
$([
/**
* Você pode customizar o CSS, mas lembre-se de incluir as linhas entre aspas simples,
* E sempre usar aspas compostas dentro de cada linha.
* Lembre-se também de sempre incluir vírgula após cada linha. Exceto na última linha.
*/
'<style>',
' #main .sceditor-toolbar,',
' #main .sceditor-group {',
' overflow: initial;',
' }',
' .sceditor-group {',
' position: relative;',
' }',
' .fa-dropdown1 {',
' position: absolute;',
' padding: 0px!important;',
' top: 27px;',
' background-color: #fff;',
' border: 1px #ccc solid;',
' display: none;',
' }',
' .fa-dropdown1 a {',
' display: block;',
' line-height: 1.5em;',
' padding: 7px 15px 7px 30px;',
' white-space: nowrap;',
' border-bottom: 1px #ccc solid;',
' cursor: pointer;',
' font-size: 12px;',
' }',
' .fa-dropdown1 a:last-child {',
' border-bottom: none;',
' }',
' .fa-dropdown1-open {',
' display: block;',
' }',
'.naoaparecer{display:none!important;}',
'</style>'
].join('\n'))
.appendTo('head');
});
// Begin 'code':
$(window).on('load', function () {
// Variáveis Importantes:
var $ultimoGrupo = $('.sceditor-group:last');
var $sceditor = $('#text_editor_textarea').sceditor('instance');
var bgStyles1 = 'background-position: center!important; background-repeat: no-repeat!important;';
var bgStyles2 = 'background-position: 8px 9px!important; background-repeat: no-repeat!important;';
$.each(botoes, function (index, botoes) {
if (botoes.somenteModVer && _userdata.user_level <= 0) {
return;
}
if(botoes.id=='mensagens-de-denuncias'&&jQuery('p.crumbs a.nav[href^="/f'+forumAdd+'-"]').length==0){
return false;
}
else {
if ($(botoes.filhos).length) {
// Caso seja um dropdown (TENHA UM FILHO):
var $parent = $('<a>', {
class: 'sceditor-button ' + botoes.id,
title: ' ' + botoes.name,
style: 'background-image: url(' + botoes.imgUrl + ')!important; ' + bgStyles1,
unselectable: 'on'
})
.appendTo($ultimoGrupo)
.on('click', function () {
$ultimoGrupo
.find('.fa-dropdown1-' + botoes.id)
.css('left', $parent.position().left + 'px')
.toggleClass('fa-dropdown1-open');
});
var $dropdown = $('<div>', {
class: 'sceditor-dropdown fa-dropdown1 fa-dropdown1-' + botoes.id
})
.appendTo($ultimoGrupo);
// Dropdown children:
$.each(botoes.filhos, function (index, filhos) {
$('<a>', {
html: filhos.name,
class: filhos.id + 'fa-dropdown1-item',
style: 'background-image: url(' + filhos.imgUrl + ')!important; ' + bgStyles2,
})
.appendTo($dropdown)
.on('click', function () {
$sceditor.insertText(filhos.text);
$('.fa-dropdown1')
.toggleClass('fa-dropdown1-open');
});
});
return;
}
}
});
});
}(jQuery));
Se apresentarem outra solução além desta que não cause falhas ficarei feliz, caso contrário desejo prosseguir com isso pois funcionava perfeitamente sem dor de cabeça no PuNBB.
Re: Botões em Determinados Tópicos
Mova os botões para esse código antes para que possamos continuar:
Creio que seja melhor para trabalhar. Na verdade, eu não creio... Realmente é melhor para trabalhar.
- Código:
/*globals jQuery, FA, _userdata*/
/**
* Botões de moderação para o SCEditor.
*
* @author lffg <https://github.com/lffg>
* @version 1.0
*/
(function ($) {
'use strict';
var buttons = [
{
name : 'Tópico Bloqueado',
id : 'topic-block-button',
text : 'Olá, o tópico foi bloqueado... [...]',
topics : [6],
img : 'https://i.imgur.com/z5lPhgz.png',
onlyForMod: true
}, {
name : 'Lista de Ações',
id : 'topic-actions-list',
topics : [6],
img : 'https://i.imgur.com/oAGWDdG.png',
inGroup : false,
onlyForAdmin: true,
children : [
{ name: 'Ação 1', text: 'Texto da ação 1.', icon: 'fa fa-cog' },
{ name: 'Ação 2', text: 'Texto da ação 2.', icon: 'fa fa-cog' },
{ name: 'Ação 3', text: 'Texto da ação 3.', icon: 'fa fa-cog' }
]
}
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var ModButtons;
FA.Topic.ModButtons = ModButtons = function (userConfig) {
var self = this;
self.userConfig = userConfig;
self.defaults = {
name : undefined,
id : '',
inGroup : true,
topics : ['6'],
text : '',
children : false,
img : 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 de moderação.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões de moderação.');
}
});
self.createStyles();
};
ModButtons.prototype.init = function () {
var self = this;
if (self.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (self.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
if (self.config.topics.indexOf('*') === -1) {
var topicId = parseInt(location.href.replace(/.*\/t(\d+).*|.*\/post\?t=(\d+)&.*/gi, function (string, match1, match2) {
if (match1 === undefined) {
return match2;
}
return match1;
}));
if (self.config.topics.indexOf(topicId) === -1) {
return false;
}
}
if (Array.isArray(self.config.children) && self.config.children.length >= 1) {
self.createButton(true);
} else {
self.createButton(false);
}
};
/**
* @param {boolean} isDrop Se for true, significa que o botão tem filhos.
* Caso contrário, o botão não tem filhos.
*/
ModButtons.prototype.createButton = function (isDrop) {
var self = this;
if (!$.sceditor) {
return false;
}
self.$group = $('.sceditor-group:last');
self.$element = $('<a>', {
'class' : 'sceditor-button',
'unselectable': 'on',
'title' : self.config.name,
'data-id' : self.config.id,
'html' : $('<div>', { 'unselectable': 'on' }).css('background-image', 'url(' + self.config.img + ')').prop('outerHTML')
});
switch (isDrop) {
case true:
self.$element.attr('data-dropdown', 'true');
self.createChildren();
self.documentListen();
self.$element.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
var $this = $(this);
var offset = $this.offset();
var height = $this.height();
self.$dropdown
.css('position', 'absolute')
.css('top', offset.top + height)
.css('left', offset.left)
.toggle()
;
});
break;
case false:
self.$element
.attr('data-dropdown', 'false')
.attr('data-text', self.config.text)
.on('click', function (event) {
self.insertText($(this), event);
})
;
break;
}
if (self.config.inGroup) {
self.$group.append(self.$element);
return;
}
$('<div>', { 'class': 'sceditor-group' })
.insertBefore(self.$group)
.append(self.$element)
;
};
ModButtons.prototype.createChildren = function () {
var self = this;
self.$dropdown = $('<div>', { 'class': 'sceditor-dropdown fa-mod-buttons-prototype-dropdown' });
$.each(self.config.children, function (index, child) {
$('<a>', {
'data-text': child.text,
'title' : child.name,
'html' : [
$('<i>', { 'class': child.icon }).prop('outerHTML'),
$('<span>', { 'text': child.name }).prop('outerHTML')
].join('\n')
})
.appendTo(self.$dropdown)
.on('click', function (event) {
self.insertText($(this), event);
self.$dropdown.hide();
})
;
});
self.$dropdown
.hide()
.appendTo('body')
;
};
/**
* @param {string} text - Corresponde ao texto que será inserido no editor.
*/
ModButtons.prototype.insertText = function (context, contextEvent) {
contextEvent.preventDefault();
contextEvent.stopPropagation();
var $this = $(context);
var $textarea = $('#text_editor_textarea');
var $sceditor = $textarea.sceditor('instance');
$sceditor.insertText($this.attr('data-text'));
};
ModButtons.prototype.documentListen = function () {
var self = this;
self.$dropdown.on('click', function (event) {
event.stopPropagation();
});
$(document).on('click', function (event) {
self.$dropdown.hide();
});
};
ModButtons.prototype.createStyles = function () {
$('<style>', {
'text': [
'.fa-mod-buttons-prototype-dropdown {',
' padding: 0px !important;',
' margin-top: 5px !important;',
' min-width: 120px;',
' max-height: 200px;',
' overflow-y: auto;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a {',
' display: block;',
' padding: 8px 10px;',
' border-bottom: solid 1px #ddd;',
' font-size: 10px;',
' cursor: pointer;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a:last-child {',
' border-bottom: none;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a > i {',
' font-size: 12px;',
' vertical-align: middle;',
'}'
].join('\n')
}).appendTo('head');
};
$(window).on('load', function () {
$.each(buttons, function () {
var self = this;
(new FA.Topic.ModButtons(self)).init();
});
});
}(jQuery));
Creio que seja melhor para trabalhar. Na verdade, eu não creio... Realmente é melhor para trabalhar.
Re: Botões em Determinados Tópicos
Como seria a personalização dele com base no que eu passe a cima? Poderia dar uma ideia?
Re: Botões em Determinados Tópicos
Assim?
- Código:
/*globals jQuery, FA, _userdata*/
/**
* Botões de moderação para o SCEditor.
*
* @author lffg <https://github.com/lffg>
* @version 1.0
*/
(function ($) {
'use strict';
var buttons = [
{
name : 'Tópico Bloqueado',
id : 'topic-block-button',
text : 'Olá, o tópico foi bloqueado... [...]',
topics : [6],
img : 'https://i.imgur.com/z5lPhgz.png',
onlyForMod: true
}, {
name : 'Lista de Ações',
id : 'topic-actions-list',
topics : [6],
img : 'https://i.imgur.com/oAGWDdG.png',
inGroup : false,
onlyForAdmin: true,
children : [
{ name: 'Em Curso', text: ' [table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Resolvido', text: '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Recusado', text: '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' }
]
}
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var ModButtons;
FA.Topic.ModButtons = ModButtons = function (userConfig) {
var self = this;
self.userConfig = userConfig;
self.defaults = {
name : undefined,
id : '',
inGroup : true,
topics : ['6'],
text : '',
children : false,
img : 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 de moderação.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões de moderação.');
}
});
self.createStyles();
};
ModButtons.prototype.init = function () {
var self = this;
if (self.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (self.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
if (self.config.topics.indexOf('*') === -1) {
var topicId = parseInt(location.href.replace(/.*\/t(\d+).*|.*\/post\?t=(\d+)&.*/gi, function (string, match1, match2) {
if (match1 === undefined) {
return match2;
}
return match1;
}));
if (self.config.topics.indexOf(topicId) === -1) {
return false;
}
}
if (Array.isArray(self.config.children) && self.config.children.length >= 1) {
self.createButton(true);
} else {
self.createButton(false);
}
};
/**
* @param {boolean} isDrop Se for true, significa que o botão tem filhos.
* Caso contrário, o botão não tem filhos.
*/
ModButtons.prototype.createButton = function (isDrop) {
var self = this;
if (!$.sceditor) {
return false;
}
self.$group = $('.sceditor-group:last');
self.$element = $('<a>', {
'class' : 'sceditor-button',
'unselectable': 'on',
'title' : self.config.name,
'data-id' : self.config.id,
'html' : $('<div>', { 'unselectable': 'on' }).css('background-image', 'url(' + self.config.img + ')').prop('outerHTML')
});
switch (isDrop) {
case true:
self.$element.attr('data-dropdown', 'true');
self.createChildren();
self.documentListen();
self.$element.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
var $this = $(this);
var offset = $this.offset();
var height = $this.height();
self.$dropdown
.css('position', 'absolute')
.css('top', offset.top + height)
.css('left', offset.left)
.toggle()
;
});
break;
case false:
self.$element
.attr('data-dropdown', 'false')
.attr('data-text', self.config.text)
.on('click', function (event) {
self.insertText($(this), event);
})
;
break;
}
if (self.config.inGroup) {
self.$group.append(self.$element);
return;
}
$('<div>', { 'class': 'sceditor-group' })
.insertBefore(self.$group)
.append(self.$element)
;
};
ModButtons.prototype.createChildren = function () {
var self = this;
self.$dropdown = $('<div>', { 'class': 'sceditor-dropdown fa-mod-buttons-prototype-dropdown' });
$.each(self.config.children, function (index, child) {
$('<a>', {
'data-text': child.text,
'title' : child.name,
'html' : [
$('<i>', { 'class': child.icon }).prop('outerHTML'),
$('<span>', { 'text': child.name }).prop('outerHTML')
].join('\n')
})
.appendTo(self.$dropdown)
.on('click', function (event) {
self.insertText($(this), event);
self.$dropdown.hide();
})
;
});
self.$dropdown
.hide()
.appendTo('body')
;
};
/**
* @param {string} text - Corresponde ao texto que será inserido no editor.
*/
ModButtons.prototype.insertText = function (context, contextEvent) {
contextEvent.preventDefault();
contextEvent.stopPropagation();
var $this = $(context);
var $textarea = $('#text_editor_textarea');
var $sceditor = $textarea.sceditor('instance');
$sceditor.insertText($this.attr('data-text'));
};
ModButtons.prototype.documentListen = function () {
var self = this;
self.$dropdown.on('click', function (event) {
event.stopPropagation();
});
$(document).on('click', function (event) {
self.$dropdown.hide();
});
};
ModButtons.prototype.createStyles = function () {
$('<style>', {
'text': [
'.fa-mod-buttons-prototype-dropdown {',
' padding: 0px !important;',
' margin-top: 5px !important;',
' min-width: 120px;',
' max-height: 200px;',
' overflow-y: auto;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a {',
' display: block;',
' padding: 8px 10px;',
' border-bottom: solid 1px #ddd;',
' font-size: 10px;',
' cursor: pointer;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a:last-child {',
' border-bottom: none;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a > i {',
' font-size: 12px;',
' vertical-align: middle;',
'}'
].join('\n')
}).appendTo('head');
};
$(window).on('load', function () {
$.each(buttons, function () {
var self = this;
(new FA.Topic.ModButtons(self)).init();
});
});
}(jQuery));
Re: Botões em Determinados Tópicos
Devo prosseguir ou errei em algo ?
- Código:
/*globals jQuery, FA, _userdata*/
/**
* Botões de moderação para o SCEditor.
*
* @author lffg <https://github.com/lffg>
* @version 1.0
*/
(function ($) {
'use strict';
var buttons = [
{
name : 'Tópico Bloqueado',
id : 'topic-block-button',
text : 'Olá, o tópico foi bloqueado... [...]',
topics : [6],
img : 'https://i.imgur.com/z5lPhgz.png',
onlyForMod: true
}, {
name : 'Mensagens de Denúncias',
id : 'topic-actions-list',
topics : [6],
img : 'https://i.imgur.com/oAGWDdG.png',
inGroup : false,
onlyForAdmin: true,
children : [
{ name: 'Em Curso', text: ' [table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Resolvido', text: '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Recusado', text: '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' }
}, {
name : 'Mensagens de Dúvidas',
id : 'topic-actions-list',
topics : [6],
img : 'http://i.imgur.com/blJDYza.png',
inGroup : false,
onlyForAdmin: true,
children : [
{ name: 'Em Curso', text: ' [table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Resolvido', text: '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Recusado', text: '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' }
]
}
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var ModButtons;
FA.Topic.ModButtons = ModButtons = function (userConfig) {
var self = this;
self.userConfig = userConfig;
self.defaults = {
name : undefined,
id : '',
inGroup : true,
topics : ['6'],
text : '',
children : false,
img : 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 de moderação.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões de moderação.');
}
});
self.createStyles();
};
ModButtons.prototype.init = function () {
var self = this;
if (self.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (self.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
if (self.config.topics.indexOf('*') === -1) {
var topicId = parseInt(location.href.replace(/.*\/t(\d+).*|.*\/post\?t=(\d+)&.*/gi, function (string, match1, match2) {
if (match1 === undefined) {
return match2;
}
return match1;
}));
if (self.config.topics.indexOf(topicId) === -1) {
return false;
}
}
if (Array.isArray(self.config.children) && self.config.children.length >= 1) {
self.createButton(true);
} else {
self.createButton(false);
}
};
/**
* @param {boolean} isDrop Se for true, significa que o botão tem filhos.
* Caso contrário, o botão não tem filhos.
*/
ModButtons.prototype.createButton = function (isDrop) {
var self = this;
if (!$.sceditor) {
return false;
}
self.$group = $('.sceditor-group:last');
self.$element = $('<a>', {
'class' : 'sceditor-button',
'unselectable': 'on',
'title' : self.config.name,
'data-id' : self.config.id,
'html' : $('<div>', { 'unselectable': 'on' }).css('background-image', 'url(' + self.config.img + ')').prop('outerHTML')
});
switch (isDrop) {
case true:
self.$element.attr('data-dropdown', 'true');
self.createChildren();
self.documentListen();
self.$element.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
var $this = $(this);
var offset = $this.offset();
var height = $this.height();
self.$dropdown
.css('position', 'absolute')
.css('top', offset.top + height)
.css('left', offset.left)
.toggle()
;
});
break;
case false:
self.$element
.attr('data-dropdown', 'false')
.attr('data-text', self.config.text)
.on('click', function (event) {
self.insertText($(this), event);
})
;
break;
}
if (self.config.inGroup) {
self.$group.append(self.$element);
return;
}
$('<div>', { 'class': 'sceditor-group' })
.insertBefore(self.$group)
.append(self.$element)
;
};
ModButtons.prototype.createChildren = function () {
var self = this;
self.$dropdown = $('<div>', { 'class': 'sceditor-dropdown fa-mod-buttons-prototype-dropdown' });
$.each(self.config.children, function (index, child) {
$('<a>', {
'data-text': child.text,
'title' : child.name,
'html' : [
$('<i>', { 'class': child.icon }).prop('outerHTML'),
$('<span>', { 'text': child.name }).prop('outerHTML')
].join('\n')
})
.appendTo(self.$dropdown)
.on('click', function (event) {
self.insertText($(this), event);
self.$dropdown.hide();
})
;
});
self.$dropdown
.hide()
.appendTo('body')
;
};
/**
* @param {string} text - Corresponde ao texto que será inserido no editor.
*/
ModButtons.prototype.insertText = function (context, contextEvent) {
contextEvent.preventDefault();
contextEvent.stopPropagation();
var $this = $(context);
var $textarea = $('#text_editor_textarea');
var $sceditor = $textarea.sceditor('instance');
$sceditor.insertText($this.attr('data-text'));
};
ModButtons.prototype.documentListen = function () {
var self = this;
self.$dropdown.on('click', function (event) {
event.stopPropagation();
});
$(document).on('click', function (event) {
self.$dropdown.hide();
});
};
ModButtons.prototype.createStyles = function () {
$('<style>', {
'text': [
'.fa-mod-buttons-prototype-dropdown {',
' padding: 0px !important;',
' margin-top: 5px !important;',
' min-width: 120px;',
' max-height: 200px;',
' overflow-y: auto;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a {',
' display: block;',
' padding: 8px 10px;',
' border-bottom: solid 1px #ddd;',
' font-size: 10px;',
' cursor: pointer;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a:last-child {',
' border-bottom: none;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a > i {',
' font-size: 12px;',
' vertical-align: middle;',
'}'
].join('\n')
}).appendTo('head');
};
$(window).on('load', function () {
$.each(buttons, function () {
var self = this;
(new FA.Topic.ModButtons(self)).init();
});
});
}(jQuery));
Re: Botões em Determinados Tópicos
Está funcionando normal? Se sim, podemos prosseguir.
Isso é só o senhor que pode dizer.
Isso é só o senhor que pode dizer.
Re: Botões em Determinados Tópicos
Não está nem aparecendo nada caro amigo...Luiz escreveu:Está funcionando normal? Se sim, podemos prosseguir.
Isso é só o senhor que pode dizer.
Re: Botões em Determinados Tópicos
Troque por este que deve funcionar, certo?
- Código:
/*globals jQuery, FA, _userdata*/
/**
* Botões de moderação para o SCEditor.
*
* @author lffg <https://github.com/lffg>
* @version 1.0
*/
(function ($) {
'use strict';
var buttons = [
{
name : 'Tópico Bloqueado',
id : 'topic-block-button',
text : 'Olá, o tópico foi bloqueado... [...]',
img : 'https://i.imgur.com/z5lPhgz.png',
onlyForMod: true
}, {
name : 'Mensagens de Denúncias',
id : 'topic-denuncias-item',
img : 'https://i.imgur.com/oAGWDdG.png',
inGroup : false,
onlyForAdmin: false,
children : [
{ name: 'Em Curso', text: '[table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Resolvido', text: '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' },
{ name: 'Recusado', text: '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]', icon: 'fa fa-cog' }
]
}
];
window.FA = window.FA || {};
FA.Topic = FA.Topic || {};
var ModButtons;
FA.Topic.ModButtons = ModButtons = function (userConfig) {
var self = this;
self.userConfig = userConfig;
self.defaults = {
name : undefined,
id : '',
inGroup : true,
topics : ['*'],
text : '',
children : false,
img : 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 de moderação.');
}
if (value === undefined) {
throw new Error ('Não foi especificado um valor: ' + value + ' para o script de botões de moderação.');
}
});
self.createStyles();
};
ModButtons.prototype.init = function () {
var self = this;
if (self.config.onlyForMod && (_userdata.user_level !== 1 && _userdata.user_level !== 2)) {
return false;
}
if (self.config.onlyForAdmin && _userdata.user_level !== 1) {
return false;
}
if (self.config.topics.indexOf('*') === -1) {
var topicId = parseInt(location.href.replace(/.*\/t(\d+).*|.*\/post\?t=(\d+)&.*/gi, function (string, match1, match2) {
if (match1 === undefined) {
return match2;
}
return match1;
}));
if (self.config.topics.indexOf(topicId) === -1) {
return false;
}
}
if (Array.isArray(self.config.children) && self.config.children.length >= 1) {
self.createButton(true);
} else {
self.createButton(false);
}
};
/**
* @param {boolean} isDrop Se for true, significa que o botão tem filhos.
* Caso contrário, o botão não tem filhos.
*/
ModButtons.prototype.createButton = function (isDrop) {
var self = this;
if (!$.sceditor) {
return false;
}
self.$group = $('.sceditor-group:last');
self.$element = $('<a>', {
'class' : 'sceditor-button',
'unselectable': 'on',
'title' : self.config.name,
'data-id' : self.config.id,
'html' : $('<div>', { 'unselectable': 'on' }).css('background-image', 'url(' + self.config.img + ')').prop('outerHTML')
});
switch (isDrop) {
case true:
self.$element.attr('data-dropdown', 'true');
self.createChildren();
self.documentListen();
self.$element.on('click', function (event) {
event.preventDefault();
event.stopPropagation();
var $this = $(this);
var offset = $this.offset();
var height = $this.height();
self.$dropdown
.css('position', 'absolute')
.css('top', offset.top + height)
.css('left', offset.left)
.toggle()
;
});
break;
case false:
self.$element
.attr('data-dropdown', 'false')
.attr('data-text', self.config.text)
.on('click', function (event) {
self.insertText($(this), event);
})
;
break;
}
if (self.config.inGroup) {
self.$group.append(self.$element);
return;
}
$('<div>', { 'class': 'sceditor-group' })
.insertBefore(self.$group)
.append(self.$element)
;
};
ModButtons.prototype.createChildren = function () {
var self = this;
self.$dropdown = $('<div>', { 'class': 'sceditor-dropdown fa-mod-buttons-prototype-dropdown' });
$.each(self.config.children, function (index, child) {
$('<a>', {
'data-text': child.text,
'title' : child.name,
'html' : [
$('<i>', { 'class': child.icon }).prop('outerHTML'),
$('<span>', { 'text': child.name }).prop('outerHTML')
].join('\n')
})
.appendTo(self.$dropdown)
.on('click', function (event) {
self.insertText($(this), event);
self.$dropdown.hide();
})
;
});
self.$dropdown
.hide()
.appendTo('body')
;
};
/**
* @param {string} text - Corresponde ao texto que será inserido no editor.
*/
ModButtons.prototype.insertText = function (context, contextEvent) {
contextEvent.preventDefault();
contextEvent.stopPropagation();
var $this = $(context);
var $textarea = $('#text_editor_textarea');
var $sceditor = $textarea.sceditor('instance');
$sceditor.insertText($this.attr('data-text'));
};
ModButtons.prototype.documentListen = function () {
var self = this;
self.$dropdown.on('click', function (event) {
event.stopPropagation();
});
$(document).on('click', function (event) {
self.$dropdown.hide();
});
};
ModButtons.prototype.createStyles = function () {
$('<style>', {
'text': [
'.fa-mod-buttons-prototype-dropdown {',
' padding: 0px !important;',
' margin-top: 5px !important;',
' min-width: 120px;',
' max-height: 200px;',
' overflow-y: auto;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a {',
' display: block;',
' padding: 8px 10px;',
' border-bottom: solid 1px #ddd;',
' font-size: 10px;',
' cursor: pointer;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a:last-child {',
' border-bottom: none;',
'}',
'',
'.fa-mod-buttons-prototype-dropdown > a > i {',
' font-size: 12px;',
' vertical-align: middle;',
'}'
].join('\n')
}).appendTo('head');
};
$(function () {
$.each(buttons, function () {
var self = this;
(new FA.Topic.ModButtons(self)).init();
});
});
}(jQuery));
Re: Botões em Determinados Tópicos
Não aparece nada, gostaria que eu lhe setasse rank de moderador para efetuar testes ?
Lembrando, esses botões de denúncias irão aparecer em tópicos desta área : http://www.brasilplayultimate.com.br/f6-denuncias
Lembrando, esses botões de denúncias irão aparecer em tópicos desta área : http://www.brasilplayultimate.com.br/f6-denuncias
Re: Botões em Determinados Tópicos
Tente este:
Só deverá aparecer — em tese — em tópicos do subfórum 3.
- Código:
/**
* Código jQuery que permite adiconar múltiplos botões ao SCEditor;
* Autores: Luiz~ e Kyo Panda (ajuda.forumeiros.com);
* Plataforma: Forumeiros;
* Versão: Todas;
* Investimento: Todas as páginas;
* Licence MIT;
*/
(function ($) {
'use strict';
var f = 3;
var botoes = [
{
'somenteModVer': true,
'name': 'Tópico Bloqueado',
'text': 'Olá! \nO seu tópico encontra-se bloqueado. \nQueira ler nossas [i]regras[/i] para saber mais.',
'id': 'tpc-lock',
'imgUrl': 'http://i.imgur.com/z5lPhgz.png'
}, {
'somenteModVer': true,
'name': 'Tópico Desbloqueado',
'text': 'Olá! \nEsta é uma mensagem de status: \nSeu tópico foi desbloqueado. \nQueira ler nossas [i]regras[/i] para saber mais.',
'id': 'tpc-unlock',
'imgUrl': 'http://i.imgur.com/hsBvMRG.png'
}, {
'somenteModVer': true,
'name': 'Mensagens de Denúncias',
'id': 'mensagens-de-denuncias',
'imgUrl': 'http://i.imgur.com/oAGWDdG.png',
'filhos': [
{
'somenteModVer': true,
'name': 'Denúncia UP',
'text': '[table class=sucesso][tr][td][b]Denúncia UP[/b] \n\[b]Motivo:[/b] Motivo Aqui \n\[b]Punição:[/b] Punição Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n \n[b]Tópico Marcado como Resolvido e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/W5mUMil.png'
}, {
'somenteModVer': true,
'name': 'Denúncia FAIL',
'text': '[table class=alerta][tr][td][b]Denúncia FAIL[/b]\n\[b]Motivo:[/b] Motivo Aqui \n \n[b]Achou injusto? Peça revisão nessa área: http://www.brasilplayultimate.com.br/f130-revisao-de-punicao[/b]\n\ \n\[b]Tópico Marcado como Recusado e movido para "Arquivos - Denúncias".[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/E3r9Hh1.png'
}, {
'somenteModVer': true,
'name': 'Denúncia Em Curso',
'text': '[table class=aviso][tr][td][b]Denúncia Em Curso[/b] \n \n[b]Tópico Marcado como Em Curso. Denúncias são fechadas no prazo de 24H caso o acusado responda, caso contrário, terá o fechamento no tempo de 48H.[/b][/td][/tr][/table]',
'id': 'msm-denuncia',
'imgUrl': 'http://i.imgur.com/l7KlLp6.png'
}
]
}
];
// Begin CSS:
$(function () {
$([
/**
* Você pode customizar o CSS, mas lembre-se de incluir as linhas entre aspas simples,
* E sempre usar aspas compostas dentro de cada linha.
* Lembre-se também de sempre incluir vírgula após cada linha. Exceto na última linha.
*/
'<style>',
' #main .sceditor-toolbar,',
' #main .sceditor-group {',
' overflow: initial;',
' }',
' .sceditor-group {',
' position: relative;',
' }',
' .fa-dropdown1 {',
' position: absolute;',
' padding: 0px!important;',
' top: 27px;',
' background-color: #fff;',
' border: 1px #ccc solid;',
' display: none;',
' }',
' .fa-dropdown1 a {',
' display: block;',
' line-height: 1.5em;',
' padding: 7px 15px 7px 30px;',
' white-space: nowrap;',
' border-bottom: 1px #ccc solid;',
' cursor: pointer;',
' font-size: 12px;',
' }',
' .fa-dropdown1 a:last-child {',
' border-bottom: none;',
' }',
' .fa-dropdown1-open {',
' display: block;',
' }',
'.naoaparecer{display:none!important;}',
'</style>'
].join('\n'))
.appendTo('head');
});
// Begin 'code':
$(window).on('load', function () {
if ($('.sub-header-path').html().indexOf('/f' + f) === - 1) {
return false;
}
// Variáveis Importantes:
var $ultimoGrupo = $('.sceditor-group:last');
var $sceditor = $('#text_editor_textarea').sceditor('instance');
var bgStyles1 = 'background-position: center!important; background-repeat: no-repeat!important;';
var bgStyles2 = 'background-position: 8px 9px!important; background-repeat: no-repeat!important;';
$.each(botoes, function (index, botoes) {
if (botoes.somenteModVer && _userdata.user_level <= 0) {
return;
}
if ($(botoes.filhos).length) {
// Caso seja um dropdown (TENHA UM FILHO):
var $parent = $('<a>', {
class: 'sceditor-button ' + botoes.id,
title: ' ' + botoes.name,
style: 'background-image: url(' + botoes.imgUrl + ')!important; ' + bgStyles1,
unselectable: 'on'
})
.appendTo($ultimoGrupo)
.on('click', function () {
$ultimoGrupo
.find('.fa-dropdown1-' + botoes.id)
.css('left', $parent.position().left + 'px')
.toggleClass('fa-dropdown1-open');
});
var $dropdown = $('<div>', {
class: 'sceditor-dropdown fa-dropdown1 fa-dropdown1-' + botoes.id
})
.appendTo($ultimoGrupo);
// Dropdown children:
$.each(botoes.filhos, function (index, filhos) {
$('<a>', {
html: filhos.name,
class: filhos.id + 'fa-dropdown1-item',
style: 'background-image: url(' + filhos.imgUrl + ')!important; ' + bgStyles2,
})
.appendTo($dropdown)
.on('click', function () {
$sceditor.insertText(filhos.text);
$('.fa-dropdown1')
.toggleClass('fa-dropdown1-open');
});
});
return;
}
});
});
}(jQuery));
Só deverá aparecer — em tese — em tópicos do subfórum 3.
Re: Botões em Determinados Tópicos
Resultou perfeitamente, mas uma dúvida.
Mensagens de denúncias ficou:
Aí por ser : /f62-arquivos-designer
Aparece os de denúncias também.
Há como limitar somente para /f6- ?
Mensagens de denúncias ficou:
- Código:
var f = 6;
- Código:
var f = 22;
Aí por ser : /f62-arquivos-designer
Aparece os de denúncias também.
Há como limitar somente para /f6- ?
Re: Botões em Determinados Tópicos
A forma como foi feita é a única possível que consegui pensar (utilizando os crumbs). o/
Re: Botões em Determinados Tópicos
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