Este plugin agora está incluído no core do Discourse como parte de Bundling more popular plugins with Discourse core. Se você auto-hospeda e usa o plugin, precisa removê-lo do seu app.yml antes da sua próxima atualização.
Com certeza – aqui está a versão revisada, um pouco mais amigável e aberta para sua postagem em inglês:
Precisamos muito da capacidade de limitar o número de participantes para eventos, pois muitos dos nossos eventos têm capacidade limitada.
Atualmente, o sistema de eventos não nos permite:
- definir um número máximo de participantes,
- ver quem se inscreveu primeiro (sem carimbos de data/hora de registro),
- gerenciar uma lista de espera ou notificar as pessoas quando uma vaga se abre.
Acharíamos os seguintes recursos muito úteis:
- Um limite de participantes (teto) que impeça que mais usuários se inscrevam quando estiver lotado.
- Uma lista de espera para aqueles que ainda desejam participar após o evento estar lotado.
- Notificações automáticas quando uma vaga se torna disponível.
- Carimbos de data/hora opcionais para ver a ordem das inscrições (útil para priorização justa).
Isso seria incrivelmente útil para comunidades que realizam eventos presenciais ou com capacidade limitada.
Algo assim já está planejado ou em desenvolvimento?
Ou existem soluções alternativas conhecidas para este caso de uso?
Muito obrigado desde já!
Obrigado, Aurora — muito animado para saber que o trabalho nativo de calendário está ativo novamente!
Também gostaríamos de apresentar mais um pedido de alto impacto que surgiu em várias discussões da comunidade: sincronização de feed iCal.
Isso foi detalhado em um tópico dedicado aqui:
A capacidade de assinar feeds externos de .ics (como horários escolares, calendários cívicos ou eventos organizacionais) e tê-los refletidos em um calendário de tópicos do Discourse tornaria esse recurso muito mais útil para muitas implantações no mundo real. Sem isso, somos forçados a copiar manualmente os eventos, o que é propenso a erros e difícil de manter.
Agradeceríamos muito qualquer comentário da equipe do Discourse sobre se partes dessa proposta — como sincronização iCal unidirecional, configurações de intervalo de atualização de feed ou marcação opcional de eventos — estão no escopo para a implementação futura.
De qualquer forma, obrigado novamente por dar nova vida ao Discourse Calendar — estamos ansiosos pelo que está por vir!
Se você deseja exibir o botão “Criar evento” diretamente do composer, como abaixo, use o código a seguir no cabeçalho do seu tema. admin > aparência > tema > editar > editar código > head (certifique-se de que esteja entre as tags <head>)
Testado no discourse 3.5.0.beta9-dev no desktop no Firefox
<!-- Botão de Criar Evento Personalizado (Baseado em Ícone, à Prova de Idiomas) -->
<script>
(() => {
const composerSelector = ".d-editor-button-bar";
const menuTriggerSelector = ".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options";
const menuContentSelector = ".fk-d-menu__inner-content";
const modalSelector = ".d-modal.fk-d-menu-modal";
const getCalendarButton = (container) => {
const svg = container.querySelector('svg use[href="#calendar-day"]');
return svg ? svg.closest("button") : null;
};
const waitForElement = (selector, findFn, timeout = 4000) =>
new Promise((resolve, reject) => {
const element = findFn(selector);
if (element) return resolve(element);
const observer = new MutationObserver(() => {
const foundElement = findFn(selector);
if (foundElement) {
observer.disconnect();
resolve(foundElement);
}
});
observer.observe(document.body, { childList: true, subtree: true });
setTimeout(() => {
observer.disconnect();
reject();
}, timeout);
});
const waitForModal = (timeout = 4000) => {
const observer = new MutationObserver(() => {
if (document.querySelector(modalSelector)) {
observer.disconnect();
}
});
observer.observe(document.body, { childList: true, subtree: true });
setTimeout(() => observer.disconnect(), timeout);
};
const addCustomCreateEventButton = (container) => {
if (container.querySelector(".custom-create-event-btn")) return;
const button = document.createElement("button");
button.className = "btn no-text btn-icon toolbar__button link custom-create-event-btn";
button.title = "Create event";
button.innerHTML = `<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>`;
container.appendChild(button);
button.addEventListener("click", async () => {
const trigger = document.querySelector(menuTriggerSelector);
if (!trigger) return;
trigger.click();
let menuContent = document.querySelector(menuContentSelector);
if (!menuContent) {
await new Promise((resolve, reject) => {
const c = new MutationObserver(() => {
menuContent = document.querySelector(menuContentSelector);
if (menuContent) {
c.disconnect();
resolve();
}
});
c.observe(document.body, { childList: true, subtree: true });
setTimeout(() => {
c.disconnect();
reject();
}, 2000);
});
}
try {
(await waitForElement(menuContent, getCalendarButton)).click();
waitForModal();
} catch {}
});
};
const observer = new MutationObserver(() => {
const composer = document.querySelector(composerSelector);
if (composer) {
addCustomCreateEventButton(composer);
}
});
observer.observe(document.body, { childList: true, subtree: true });
const initialComposer = document.querySelector(composerSelector);
if (initialComposer) {
addCustomCreateEventButton(initialComposer);
}
})();
</script>
Tentei o script, o botão de criação de evento é bem criado, mas quando clico nele, tenho o mesmo menu de contexto que o botão mais. Talvez eu tenha feito uma manipulação incorreta
Após a atualização, melhorou, pelo menos aparece apenas “Criar evento”
Captura de tela está em alemão, desculpe.
Olá,
Isso funciona na versão mais recente com 3.5.0.beta9-dev, não sei qual é a sua versão?
E isso é javascript, então você deve fornecer o erro de JS do console quando pressionar F12 no seu navegador.
Eu tenho a mesma versão 3.5.0.beta9-dev
Aqui está a mensagem do console
Eu devo estar fazendo algo errado
Eu não uso o Edge, você pode tentar novamente com o script que acabei de atualizar na postagem original, pois encontrei erros que corrigi. Se não funcionar, atualizarei mais tarde depois de instalar o Edge.
Eu acabei de atualizar o script para ser mais compatível com dispositivos móveis, ele deve funcionar agora, por favor, copie e cole o script da postagem original
Confirmo que o código atualizado funciona bem no edge. Se você tiver algo como ublock, sempre poderá desativá-lo para sua página do discourse, mas não acho que esteja relacionado.
Desculpe, o mesmo problema continua para mim, devo estar fazendo algo errado
No entanto, eu colo seu script aqui
Tudo bem, graças à situação do Gilles, pude configurar um seletor baseado na classe .svg do ícone que é única em vez de um atributo de título que variaria de acordo com o idioma, o script agora também está minificado e envolvido em IIFE.
Você pode encontrar o script atualizado aqui Discourse Calendar (and Event) - #535 by opcourdis
Obrigado pela sua ajuda ![]()
Seria muito útil ter seu script encapsulado como um Theme component, e que as categorias onde ele se aplica pudessem ser selecionáveis.
O caso de uso que tenho em mente é uma categoria ‘Eventos’, onde quero tornar a postagem de eventos super óbvia.
Você pode usar o que está abaixo e modificar as primeiras condições para especificar suas categorias, e para tornar o botão mais visível, o CSS fará isso: .btn.no-text.btn-icon.toolbar__button.link.custom-create-event-btn {
order: -1;
}
<script>(() => {
if (!(document.body.classList.contains("category-events") || document.body.classList.contains("category-event2") || document.body.classList.contains("category-event3"))) return;
const e = ".d-editor-button-bar",
t = ".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options",
n = ".fk-d-menu__inner-content",
o = ".d-modal.fk-d-menu-modal";
const c = (e) => {
const t = e.querySelector('svg use[href="#calendar-day"]');
return t ? t.closest("button") : null;
};
const r = (e, t, n = 4000) => new Promise((o, c) => {
const r = t(e);
if (r) return o(r);
const l = new MutationObserver(() => {
const n = t(e);
n && (l.disconnect(), o(n));
});
l.observe(e, {
childList: !0,
subtree: !0
});
setTimeout(() => {
l.disconnect();
c();
}, n);
});
const l = (e = 4000) => {
const t = new MutationObserver(() => {
document.querySelector(o) && t.disconnect();
});
t.observe(document.body, {
childList: !0,
subtree: !0
});
setTimeout(() => {
t.disconnect();
}, e);
};
const s = (e) => {
if (e.querySelector(".custom-create-event-btn")) return;
const o = document.createElement("button");
o.className = "btn no-text btn-icon toolbar__button link custom-create-event-btn";
o.title = "Create event";
o.innerHTML = '<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>';
e.appendChild(o);
o.addEventListener("click", async () => {
const e = document.querySelector(t);
if (!e) return;
e.click();
let o = document.querySelector(n);
o || (await new Promise((e, t) => {
const c = new MutationObserver(() => {
(o = document.querySelector(n)) && (c.disconnect(), e());
});
c.observe(document.body, {
childList: !0,
subtree: !0
});
setTimeout(() => {
c.disconnect();
t();
}, 2000);
}));
try {
(await r(o, c)).click();
l();
} catch {}
});
};
const u = new MutationObserver(() => {
const t = document.querySelector(e);
t && s(t);
});
u.observe(document.body, {
childList: !0,
subtree: !0
});
const d = document.querySelector(e);
d && s(d);
})();</script>
Obrigado pela sugestão, ainda sou um pouco novo no Discourse e vou verificar o componente de tema, a colocação do botão é realmente melhor, mas meu outro script para o limite de participantes de eventos pode em breve não ser necessário por causa disso FEATURE: introduce max attendees for events by SamSaffron · Pull Request #34313 · discourse/discourse · GitHub
Após a atualização para a versão mais recente do Discourse e do plugin discourse-calendar, estou vendo o seguinte aviso como administrador:
⚠️ As postagens podem não ser exibidas corretamente porque um dos decoradores de conteúdo de postagem em seu site gerou um erro.
Causado pelo plugin 'discourse-calendar'
(esta mensagem é exibida apenas para administradores do site)
- O plugin do calendário não está mais funcionando: o conteúdo do calendário e os eventos não são exibidos nos tópicos.
- O plugin estava funcionando corretamente antes da atualização recente.
- Meu site Discourse e todos os plugins oficiais estão agora atualizados.
Estamos usando o plugin Discourse Post Event em nosso fórum.
Atualmente, quando um usuário entra (RSVP) em um evento, o tópico é automaticamente definido como “Observando”, o que significa que cada nova resposta ao tópico do evento dispara uma notificação para todos os participantes.
Gostaríamos de manter o nível de notificação como “Normal” por padrão, mesmo depois que alguém entra em um evento.
Verifiquei as configurações do site, mas não encontrei uma opção que funcione.
Existe alguma maneira de desativar ou alterar esse comportamento automático de “Observando” quando os usuários confirmam presença em um evento?
Eu não acho. Mas este seria um pedido de recurso útil.
Uma solução alternativa útil pode ser fechar o tópico para impedir respostas, mas ter um canal de chat associado a ele (estes não notificam por padrão).
O rótulo do botão “Today” pode ser enganoso.
O botão, na verdade, não navega para o dia atual, ele navega para a visualização atual da aba de período ativo (Dia/Semana/Mês/Ano). Em Dia, Semana e Mês, isso traz o dia atual para a visualização. Mas em Ano, ele apenas navega para o ano atual (que sempre começa em janeiro).
Provavelmente deveria ser
- renomeado para descrever com mais precisão sua funcionalidade, como “Atual”
- ou, talvez melhor, não apenas navegar para o ano atual, mas rolar para o dia atual na lista de Anos.








