mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-23 02:36:21 +00:00
Merge branch 'issue-14966' into issue-15109-1
This commit is contained in:
commit
bdd8c1ba26
49 changed files with 1276 additions and 10 deletions
|
@ -85,7 +85,7 @@ rubocop:
|
|||
- *apk-add
|
||||
- *disable-hainish
|
||||
script:
|
||||
- "./bin/modified_files | ./bin/with_extension rb | xargs -r go-task bundle -- exec rubocop"
|
||||
- "go-task rubocop"
|
||||
haml:
|
||||
stage: "test"
|
||||
cache:
|
||||
|
@ -96,4 +96,4 @@ haml:
|
|||
- *apk-add
|
||||
- *disable-hainish
|
||||
script:
|
||||
- "./bin/modified_files | ./bin/with_extension haml | xargs -r go-task bundle -- exec haml-lint"
|
||||
- "go-task haml-lint"
|
||||
|
|
|
@ -183,3 +183,11 @@ tasks:
|
|||
- "{{.HAINISH}} gem install bundler-audit"
|
||||
status:
|
||||
- "test -f ../hain/usr/bin/bundler-audit"
|
||||
rubocop:
|
||||
desc: "Ruby linting"
|
||||
cmds:
|
||||
- "./bin/modified_files | ./bin/with_extension rb | xargs -r {{.HAINISH}} bundle exec rubocop {{.CLI_ARGS}}"
|
||||
haml-lint:
|
||||
desc: "HAML linting"
|
||||
cmds:
|
||||
- "./bin/modified_files | ./bin/with_extension haml | xargs -r {{.HAINISH}} bundle exec haml-lint {{.CLI_ARGS}}"
|
||||
|
|
|
@ -558,3 +558,32 @@ $bezier: cubic-bezier(0.75, 0, 0.25, 1);
|
|||
}
|
||||
}
|
||||
}
|
||||
// details styles
|
||||
|
||||
.details {
|
||||
summary {
|
||||
list-style: none;
|
||||
cursor: default;
|
||||
position: relative;
|
||||
}
|
||||
summary::after {
|
||||
content: '▶';
|
||||
font-size: 1.8rem;
|
||||
position: absolute;
|
||||
left: 97%;
|
||||
bottom: 3%;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
&[open] {
|
||||
& > summary {
|
||||
&::after {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
hr {
|
||||
border-bottom: 1px solid #dee2e6;
|
||||
}
|
|
@ -8,6 +8,10 @@ $cyan: #13fefe;
|
|||
--color: #{$cyan};
|
||||
}
|
||||
|
||||
.btn {
|
||||
background-color: $white;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
background-color: $white;
|
||||
color: $black;
|
||||
|
@ -26,3 +30,5 @@ $cyan: #13fefe;
|
|||
box-shadow: 0 0 0 0.2rem $cyan;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -27,7 +27,17 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
|
||||
private
|
||||
|
||||
# Traer datos de muestra de la cola de moderación
|
||||
def dummy_data
|
||||
@moderation_queue = YAML.safe_load(File.read(Rails.root.join('db', 'seeds', 'moderation_queue.yaml')))
|
||||
@remote_profile = YAML.safe_load(File.read(Rails.root.join('db', 'seeds', 'remote_profile.yaml')))
|
||||
@instances = YAML.safe_load(File.read(Rails.root.join('db', 'seeds', 'instances.yaml')))
|
||||
@blocklists= YAML.safe_load(File.read(Rails.root.join('db', 'seeds', 'blocklists.yml')))
|
||||
@moderation_queue.each do |activity|
|
||||
activity['attributedTo'] = @remote_profile
|
||||
end
|
||||
end
|
||||
|
||||
def notify_unconfirmed_email
|
||||
return unless current_usuarie
|
||||
return if current_usuarie.confirmed?
|
||||
|
@ -117,4 +127,5 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
sites_path
|
||||
end
|
||||
|
||||
end
|
||||
|
|
20
app/controllers/moderation_queue_controller.rb
Normal file
20
app/controllers/moderation_queue_controller.rb
Normal file
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Cola de moderación de ActivityPub
|
||||
class ModerationQueueController < ApplicationController
|
||||
# Cola de moderación viendo todo el sitio
|
||||
def index
|
||||
dummy_data
|
||||
end
|
||||
|
||||
# Perfil remoto de usuarie
|
||||
def remote_profile
|
||||
dummy_data
|
||||
end
|
||||
|
||||
# todon.nl está usando /api/v2/instance
|
||||
# mauve.moe usa /api/v1/instance
|
||||
def instances
|
||||
dummy_data
|
||||
end
|
||||
end
|
|
@ -38,6 +38,7 @@ class PostsController < ApplicationController
|
|||
@usuarie = site.usuarie? current_usuarie
|
||||
|
||||
@site_stat = SiteStat.new(site)
|
||||
dummy_data
|
||||
end
|
||||
|
||||
def show
|
||||
|
@ -81,6 +82,7 @@ class PostsController < ApplicationController
|
|||
authorize post
|
||||
breadcrumb post.title.value, site_post_path(site, post, locale: locale), match: :exact
|
||||
breadcrumb 'posts.edit', ''
|
||||
dummy_data
|
||||
end
|
||||
|
||||
def update
|
||||
|
|
106
app/javascript/controllers/dropdown_controller.js
Normal file
106
app/javascript/controllers/dropdown_controller.js
Normal file
|
@ -0,0 +1,106 @@
|
|||
import { Controller } from "stimulus";
|
||||
|
||||
// https://getbootstrap.com/docs/4.6/components/dropdowns/#single-button
|
||||
export default class extends Controller {
|
||||
static targets = ["dropdown", "button", "item"];
|
||||
|
||||
// Al iniciar el controlador
|
||||
connect() {
|
||||
// Llevar la cuenta del item con foco
|
||||
this.data.set("item", -1);
|
||||
|
||||
// Gestionar las teclas
|
||||
this.keydownEvent = this.keydown.bind(this);
|
||||
this.element.addEventListener("keydown", this.keydownEvent);
|
||||
|
||||
// Gestionar el foco
|
||||
this.focusinEvent = this.focusin.bind(this);
|
||||
}
|
||||
|
||||
// Al eliminar el controlador (al pasar a otra página)
|
||||
disconnect() {
|
||||
// Eliminar la gestión de teclas
|
||||
this.element.removeEventListener("keydown", this.keydownEvent);
|
||||
// Eliminar la gestión del foco
|
||||
document.removeEventListener("focusin", this.focusinEvent);
|
||||
}
|
||||
|
||||
// Mostrar u ocultar
|
||||
toggle(event) {
|
||||
(this.buttonTarget.ariaExpanded === "false") ? this.show() : this.hide();
|
||||
}
|
||||
|
||||
// Mostrar
|
||||
show() {
|
||||
this.buttonTarget.ariaExpanded = "true";
|
||||
this.element.classList.add("show");
|
||||
this.dropdownTarget.classList.add("show");
|
||||
|
||||
// Activar la gestión del foco
|
||||
document.addEventListener("focusin", this.focusinEvent);
|
||||
}
|
||||
|
||||
// Ocultar
|
||||
hide() {
|
||||
this.buttonTarget.ariaExpanded = "false";
|
||||
this.element.classList.remove("show");
|
||||
this.dropdownTarget.classList.remove("show");
|
||||
// Volver al inicio el foco de items
|
||||
this.data.set("item", -1);
|
||||
|
||||
// Desactivar la gestión del foco
|
||||
document.removeEventListener("focusin", this.focusinEvent);
|
||||
}
|
||||
|
||||
// Gestionar el foco
|
||||
focusin(event) {
|
||||
const item = this.itemTargets.find(x => x === event.target);
|
||||
|
||||
// Si el foco se coloca sobre elementos del controlador, no hacer
|
||||
// nada
|
||||
if (event.target === this.buttonTarget || item) {
|
||||
// Si es un item, el comportamiento de las flechas verticales y el
|
||||
// Tab tiene que ser igual
|
||||
if (item) this.data.set("item", this.itemTargets.indexOf(item));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// De lo contrario, ocultar
|
||||
this.hide();
|
||||
}
|
||||
|
||||
// Gestionar las teclas
|
||||
keydown(event) {
|
||||
const initial = parseInt(this.data.get("item"));
|
||||
let item = initial;
|
||||
|
||||
switch (event.keyCode) {
|
||||
case 27:
|
||||
// Esc cierra el menú y devuelve el foco
|
||||
this.hide();
|
||||
this.buttonTarget.focus();
|
||||
break;
|
||||
case 38:
|
||||
// Moverse hacia arriba con tope en el primer item
|
||||
if (item > -1) item--;
|
||||
|
||||
break;
|
||||
case 40:
|
||||
// Moverse hacia abajo con tope en el último ítem, si el
|
||||
// dropdown estaba cerrado, abrirlo.
|
||||
if (item === -1) this.show();
|
||||
if (item <= this.itemTargets.length) item++;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Si cambió la posición del ítem, darle foco y actualizar el
|
||||
// contador.
|
||||
if (initial !== item) {
|
||||
this.itemTargets[item]?.focus();
|
||||
|
||||
this.data.set("item", item);
|
||||
}
|
||||
}
|
||||
}
|
6
app/views/components/_block_list.haml
Normal file
6
app/views/components/_block_list.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
-# Componente Listas de bloqueo de Instancias
|
||||
.card.mt-3.mb-3
|
||||
.card-body
|
||||
.d-flex.flex-row
|
||||
= render 'components/checkbox', id: blocklist["id"] do
|
||||
%span.h4= blocklist["title"]
|
2
app/views/components/_block_lists.haml
Normal file
2
app/views/components/_block_lists.haml
Normal file
|
@ -0,0 +1,2 @@
|
|||
- @blocklists.each do |blocklist|
|
||||
= render 'components/block_list', blocklist: blocklist
|
3
app/views/components/_btn_base.haml
Normal file
3
app/views/components/_btn_base.haml
Normal file
|
@ -0,0 +1,3 @@
|
|||
-# Componente Botón general Moderación
|
||||
|
||||
%button.btn{ href: href, class: local_assigns[:class] }= text
|
4
app/views/components/_checkbox.haml
Normal file
4
app/views/components/_checkbox.haml
Normal file
|
@ -0,0 +1,4 @@
|
|||
-# Componente Checkbox
|
||||
.custom-control.custom-checkbox
|
||||
%input.custom-control-input{ type: 'checkbox', id: id, name: id, class: local_assigns[:class] }
|
||||
%label.custom-control-label{ for: id }= yield
|
8
app/views/components/_comments_btn_box.haml
Normal file
8
app/views/components/_comments_btn_box.haml
Normal file
|
@ -0,0 +1,8 @@
|
|||
-# Componente Botonera de Comentarios
|
||||
|
||||
- btn_class = 'btn-secondary py-1 px-2'
|
||||
= render 'components/btn_base', text: t('.text_pause'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_reject'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_accept'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_reply'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_report'), class: btn_class, href: ''
|
3
app/views/components/_comments_checked_submenu.haml
Normal file
3
app/views/components/_comments_checked_submenu.haml
Normal file
|
@ -0,0 +1,3 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_pause'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_accept'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
6
app/views/components/_comments_filters.haml
Normal file
6
app/views/components/_comments_filters.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
.d-flex.py-2
|
||||
= render 'components/dropdown', text: t('.text_checked') do
|
||||
= render 'components/comments_checked_submenu'
|
||||
|
||||
= render 'components/dropdown', text: t('.text_show') do
|
||||
= render 'components/comments_show_submenu'
|
4
app/views/components/_comments_show_submenu.haml
Normal file
4
app/views/components/_comments_show_submenu.haml
Normal file
|
@ -0,0 +1,4 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_pause'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_accept'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_report'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
34
app/views/components/_dropdown.haml
Normal file
34
app/views/components/_dropdown.haml
Normal file
|
@ -0,0 +1,34 @@
|
|||
-#
|
||||
@param :text [String] Contenido del botón
|
||||
@param :button_classes [Array] Clases para el botón
|
||||
@param :dropdown_classes [Array] Clases para el listado
|
||||
@yield Un bloque que renderiza components/dropdown_item
|
||||
- button_classes = local_assigns[:button_classes]&.join(' ')
|
||||
- dropdown_classes = local_assigns[:dropdown_classes]&.join(' ')
|
||||
|
||||
.btn-group{
|
||||
data: {
|
||||
controller: 'dropdown'
|
||||
}
|
||||
}
|
||||
%button.btn.dropdown-toggle{
|
||||
type: 'button',
|
||||
class: button_classes,
|
||||
data: {
|
||||
toggle: 'true',
|
||||
display: 'static',
|
||||
action: 'dropdown#toggle',
|
||||
target: 'dropdown.button'
|
||||
},
|
||||
aria: {
|
||||
expanded: 'false'
|
||||
}
|
||||
}
|
||||
= text
|
||||
.dropdown-menu{
|
||||
class: dropdown_classes,
|
||||
data: {
|
||||
target: 'dropdown.dropdown'
|
||||
}
|
||||
}
|
||||
= yield
|
4
app/views/components/_dropdown_item.haml
Normal file
4
app/views/components/_dropdown_item.haml
Normal file
|
@ -0,0 +1,4 @@
|
|||
-#
|
||||
@param :text [String] Contenido del link
|
||||
@param :path [String] Link
|
||||
= link_to text, path, class: 'dropdown-item', data: { target: 'dropdown.item' }
|
6
app/views/components/_instances_btn_box.haml
Normal file
6
app/views/components/_instances_btn_box.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
-# Componente botonera de moderación de Instancias
|
||||
|
||||
- btn_class = 'btn btn-secondary'
|
||||
= render 'components/btn_base', text: t('.text_check'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_allow'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_deny'), class: btn_class, href: ''
|
3
app/views/components/_instances_checked_submenu.haml
Normal file
3
app/views/components/_instances_checked_submenu.haml
Normal file
|
@ -0,0 +1,3 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_case'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_allow'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
6
app/views/components/_instances_filters.haml
Normal file
6
app/views/components/_instances_filters.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
.d-flex.py-2
|
||||
= render 'components/dropdown', text: t('.text_checked') do
|
||||
= render 'components/instances_checked_submenu'
|
||||
|
||||
= render 'components/dropdown', text: t('.text_show') do
|
||||
= render 'components/comments_show_submenu'
|
2
app/views/components/_instances_show_submenu.haml
Normal file
2
app/views/components/_instances_show_submenu.haml
Normal file
|
@ -0,0 +1,2 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_allow'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
7
app/views/components/_profiles_btn_box.haml
Normal file
7
app/views/components/_profiles_btn_box.haml
Normal file
|
@ -0,0 +1,7 @@
|
|||
-# Componente Botonera de Moderación de Cuentas (Remote_profile)
|
||||
|
||||
- btn_class = 'btn-secondary'
|
||||
= render 'components/btn_base', text: t('.text_approve'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_check'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_deny'), class: btn_class, href: ''
|
||||
= render 'components/btn_base', text: t('.text_report'), class: btn_class, href: ''
|
4
app/views/components/_profiles_checked_submenu.haml
Normal file
4
app/views/components/_profiles_checked_submenu.haml
Normal file
|
@ -0,0 +1,4 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_pause'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_accept'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_block'), path: '/'
|
6
app/views/components/_profiles_filters.haml
Normal file
6
app/views/components/_profiles_filters.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
.d-flex.py-2
|
||||
= render 'components/dropdown', text: t('.text_checked') do
|
||||
= render 'components/profiles_checked_submenu'
|
||||
|
||||
= render 'components/dropdown', text: t('.text_show') do
|
||||
= render 'components/profiles_show_submenu'
|
3
app/views/components/_profiles_show_submenu.haml
Normal file
3
app/views/components/_profiles_show_submenu.haml
Normal file
|
@ -0,0 +1,3 @@
|
|||
= render 'components/dropdown_item', text: t('.submenu_accept'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_reject'), path: '/'
|
||||
= render 'components/dropdown_item', text: t('.submenu_block'), path: '/'
|
6
app/views/layouts/_details.haml
Normal file
6
app/views/layouts/_details.haml
Normal file
|
@ -0,0 +1,6 @@
|
|||
-# Detail Cola de Moderación
|
||||
|
||||
%details.details.py-2
|
||||
%summary
|
||||
%h3.py-2= summary
|
||||
= yield
|
7
app/views/moderation_queue/_account.haml
Normal file
7
app/views/moderation_queue/_account.haml
Normal file
|
@ -0,0 +1,7 @@
|
|||
.row.no-gutters.pt-2
|
||||
.col-1
|
||||
= render 'components/checkbox', id: profile['id']
|
||||
.col-11
|
||||
%h4
|
||||
%a{href: profile['id']}= profile['preferredUsername']
|
||||
=profile['summary'].html_safe
|
11
app/views/moderation_queue/_accounts.haml
Normal file
11
app/views/moderation_queue/_accounts.haml
Normal file
|
@ -0,0 +1,11 @@
|
|||
-# Filtros
|
||||
= render 'components/profiles_filters'
|
||||
|
||||
- @moderation_queue.map{ |c| c['attributedTo'] }.uniq.each do |remote_profile|
|
||||
%hr
|
||||
= render 'account', profile: remote_profile
|
||||
|
||||
-# Botones de Moderación
|
||||
.d-flex.pb-4
|
||||
= render 'components/profiles_btn_box'
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
.form-group
|
||||
= label_tag "custom_blocklist", t('moderation_queue.instances.custom_block')
|
||||
= text_area_tag "custom_blocklist", nil, class: 'form-control'
|
||||
%button.btn.btn-secondary.mt-3{ type: 'submit' }= t('moderation_queue.instances.submit')
|
||||
|
32
app/views/moderation_queue/_comment.haml
Normal file
32
app/views/moderation_queue/_comment.haml
Normal file
|
@ -0,0 +1,32 @@
|
|||
-# Componente Comentario
|
||||
.flex.mx-4.my-4
|
||||
.row.no-gutters
|
||||
.col-1
|
||||
= render 'components/checkbox', id: comment['id']
|
||||
.col-11
|
||||
.row.no-gutters
|
||||
.col-5.col-sm-3.col-lg-4
|
||||
%p
|
||||
%span= comment['published'].to_datetime.strftime(t('date.format'))
|
||||
%span= comment['published'].to_datetime.strftime(t('time.format'))
|
||||
.col-7.col-sm-9.col-lg-8
|
||||
%dl
|
||||
%dt.d-inline.mr-2= t('.source_profile')
|
||||
%dd.d-inline
|
||||
%a{ href: comment['attributedTo'] }= profile['preferredUsername']
|
||||
|
||||
- if comment['inReplyTo']
|
||||
.row.no-gutters
|
||||
.col.p-0
|
||||
%p
|
||||
%span= t('.reply_to')
|
||||
%span
|
||||
%a{ href: comment['inReplyTo'] }= comment['inReplyTo']
|
||||
.row.no-gutters
|
||||
.col.p-0
|
||||
- if comment['summary']
|
||||
- summary = comment['summary']
|
||||
= render 'layouts/details', summary: summary do
|
||||
%p= comment['content'].html_safe
|
||||
- else
|
||||
%p= comment['content'].html_safe
|
14
app/views/moderation_queue/_comments.haml
Normal file
14
app/views/moderation_queue/_comments.haml
Normal file
|
@ -0,0 +1,14 @@
|
|||
.row.no-gutters.pt-2
|
||||
.col-1
|
||||
= render 'components/checkbox', id: moderation_queue.first['id']
|
||||
.col-11
|
||||
-# Filtros
|
||||
= render 'components/comments_filters'
|
||||
|
||||
- moderation_queue.each do |comment|
|
||||
%hr
|
||||
= render 'comment', comment: comment, profile: comment['attributedTo']
|
||||
|
||||
-# Botones moderación
|
||||
.d-flex.justify-content-center
|
||||
= render 'components/comments_btn_box', comment: comment
|
16
app/views/moderation_queue/_instance.haml
Normal file
16
app/views/moderation_queue/_instance.haml
Normal file
|
@ -0,0 +1,16 @@
|
|||
- host = instance['domain']
|
||||
- host ||= instance['uri']
|
||||
- hosthttps = "https://#{host}"
|
||||
|
||||
.row.no-gutters.pt-2
|
||||
.col-1
|
||||
= render 'components/checkbox', id: host
|
||||
.col-11
|
||||
%h4
|
||||
%a{ href: hosthttps }= instance['title']
|
||||
%p= instance['description'].html_safe
|
||||
%p
|
||||
%span= t('.users')
|
||||
%span
|
||||
= instance.dig('usage', 'users', 'active_month')
|
||||
= instance.dig('stats', 'user_count')
|
16
app/views/moderation_queue/_instances.haml
Normal file
16
app/views/moderation_queue/_instances.haml
Normal file
|
@ -0,0 +1,16 @@
|
|||
-# Filtros
|
||||
= render 'components/instances_filters'
|
||||
|
||||
- @instances.each do |instance|
|
||||
%hr
|
||||
= render 'moderation_queue/instance', instance: instance
|
||||
|
||||
-# Botones moderación
|
||||
.d-flex.pb-4
|
||||
= render 'components/instances_btn_box'
|
||||
|
||||
%hr
|
||||
%h3.mt-5= t('moderation_queue.instances.title')
|
||||
%lead= t('moderation_queue.instances.description')
|
||||
= render 'components/block_lists', blocklists: @blocklists
|
||||
= render 'moderation_queue/block_instances_textarea'
|
24
app/views/moderation_queue/_remote_profile.haml
Normal file
24
app/views/moderation_queue/_remote_profile.haml
Normal file
|
@ -0,0 +1,24 @@
|
|||
-# Componente Remote_Profile
|
||||
|
||||
.flex.py-2.mx-2
|
||||
%dl
|
||||
%dt= t('.profile_name')
|
||||
%dd= remote_profile['name']
|
||||
|
||||
%dt= t('.profile_id')
|
||||
%dd= remote_profile['id']
|
||||
|
||||
%dt= t('.profile_published')
|
||||
%dd= remote_profile['published'].to_datetime.strftime('%m/%d/%Y')
|
||||
|
||||
%dt= t('.profile_summary')
|
||||
%dd= remote_profile['summary'].html_safe
|
||||
|
||||
= render 'moderation_queue/comments', moderation_queue: @moderation_queue
|
||||
|
||||
%dl.mt-5
|
||||
%dt= t('.profile_name')
|
||||
%dd= remote_profile['name']
|
||||
|
||||
-# Botones de Moderación
|
||||
= render 'components/profiles_btn_box'
|
16
app/views/moderation_queue/index.haml
Normal file
16
app/views/moderation_queue/index.haml
Normal file
|
@ -0,0 +1,16 @@
|
|||
.row.justify-content-center
|
||||
.col-md-8
|
||||
%h1= t('.title')
|
||||
.row
|
||||
.col
|
||||
- summary = t('.instances')
|
||||
= render 'layouts/details', summary: summary do
|
||||
= render 'moderation_queue/instances', site: @site, post: @post, moderation_queue: @moderation_queue
|
||||
%hr
|
||||
- summary = t('.accounts')
|
||||
= render 'layouts/details', summary: summary do
|
||||
= render 'moderation_queue/accounts', site: @site, post: @post, moderation_queue: @moderation_queue
|
||||
%hr
|
||||
- summary = t('.comments')
|
||||
= render 'layouts/details', summary: summary do
|
||||
= render 'moderation_queue/comments', site: @site, post: @post, moderation_queue: @moderation_queue
|
4
app/views/moderation_queue/remote_profile.haml
Normal file
4
app/views/moderation_queue/remote_profile.haml
Normal file
|
@ -0,0 +1,4 @@
|
|||
.row.justify-content-center
|
||||
.col-md-8
|
||||
%h1= t('.profile')
|
||||
= render 'moderation_queue/remote_profile', remote_profile: @remote_profile
|
13
app/views/posts/_moderation_queue.haml
Normal file
13
app/views/posts/_moderation_queue.haml
Normal file
|
@ -0,0 +1,13 @@
|
|||
.row.no-gutters.pt-2
|
||||
.col-1
|
||||
= render 'components/checkbox', id: moderation_queue.first['id']
|
||||
.col-11
|
||||
-# Filtros
|
||||
= render 'components/comments_filters'
|
||||
|
||||
- moderation_queue.each do |comment|
|
||||
= render 'moderation_queue/comment', comment: comment, profile: comment['attributedTo']
|
||||
|
||||
-# Botones moderación
|
||||
.d-flex
|
||||
= render 'components/comments_btn_box'
|
|
@ -1,6 +1,8 @@
|
|||
.row.justify-content-center
|
||||
.col-md-8
|
||||
= render 'layouts/details', summary: "Post" do
|
||||
- summary = t('posts.edit.post')
|
||||
= render 'layouts/details', summary: summary do
|
||||
= render 'posts/form', site: @site, post: @post
|
||||
= render 'layouts/details', summary: t('.moderation_queue') do
|
||||
- summary = t('posts.edit.moderation_queue')
|
||||
= render 'layouts/details', summary: summary do
|
||||
= render 'posts/moderation_queue', site: @site, post: @post, moderation_queue: @moderation_queue
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
= post.order
|
||||
%td.text-nowrap
|
||||
- if @usuarie || policy(post).edit?
|
||||
= link_to t('posts.edit'), edit_site_post_path(@site, post.path), class: 'btn btn-secondary btn-block'
|
||||
= link_to t('posts.edit_post'), edit_site_post_path(@site, post.path), class: 'btn btn-secondary btn-block'
|
||||
- if @usuarie || policy(post).destroy?
|
||||
= link_to t('posts.destroy'), site_post_path(@site, post.path), class: 'btn btn-secondary btn-block', method: :delete, data: { confirm: t('posts.confirm_destroy') }
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
.row.justify-content-center
|
||||
.col-md-8
|
||||
%article.content.table-responsive-md
|
||||
= link_to t('posts.edit'),
|
||||
= link_to t('posts.edit_post'),
|
||||
edit_site_post_path(@site, @post.id),
|
||||
class: 'btn btn-secondary btn-block'
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
test -n "${CI_MERGE_REQUEST_DIFF_BASE_SHA}"
|
||||
CI_MERGE_REQUEST_DIFF_BASE_SHA="${CI_MERGE_REQUEST_DIFF_BASE_SHA:-origin/rails}"
|
||||
|
||||
git diff --name-status ${CI_MERGE_REQUEST_DIFF_BASE_SHA} \
|
||||
| grep -v "^D" \
|
||||
|
|
|
@ -1,4 +1,128 @@
|
|||
en:
|
||||
date:
|
||||
format: '%m/%d/%Y'
|
||||
published_at: "Published at"
|
||||
last_modified_at: "Last modification"
|
||||
abbr_day_names:
|
||||
- Mon
|
||||
- Tue
|
||||
- Wed
|
||||
- Thu
|
||||
- Fri
|
||||
- Sat
|
||||
- Sun
|
||||
day_names:
|
||||
- Monday
|
||||
- Tuesday
|
||||
- Wednesday
|
||||
- Thursday
|
||||
- Friday
|
||||
- Saturday
|
||||
- Sunday
|
||||
abbr_month_names:
|
||||
- Jan
|
||||
- Feb
|
||||
- Mar
|
||||
- Apr
|
||||
- May
|
||||
- Jun
|
||||
- Jul
|
||||
- Aug
|
||||
- Sep
|
||||
- Oct
|
||||
- Nov
|
||||
- Dec
|
||||
month_names:
|
||||
- January
|
||||
- February
|
||||
- March
|
||||
- April
|
||||
- May
|
||||
- June
|
||||
- July
|
||||
- August
|
||||
- September
|
||||
- October
|
||||
- November
|
||||
- December
|
||||
time:
|
||||
am: am
|
||||
pm: pm
|
||||
format: '%-I:%M %p'
|
||||
components:
|
||||
instances_filters:
|
||||
text_show: Show
|
||||
text_checked: With selected
|
||||
instances_checked_submenu:
|
||||
submenu_case: Check case by case
|
||||
submenu_allow: Allow everything
|
||||
submenu_reject: Reject
|
||||
instances_show_submenu:
|
||||
submenu_allow: Allow
|
||||
submenu_reject: Reject
|
||||
comments_filters:
|
||||
text_show: Show
|
||||
text_checked: With selected
|
||||
comments_checked_submenu:
|
||||
submenu_pause: Pause
|
||||
submenu_accept: Accept
|
||||
submenu_reject: Reject
|
||||
comments_show_submenu:
|
||||
submenu_pause: Pause
|
||||
submenu_accept: Accept
|
||||
submenu_report: Report
|
||||
submenu_reject: Reject
|
||||
profiles_filters:
|
||||
text_show: Show
|
||||
text_checked: With selected
|
||||
profiles_checked_submenu:
|
||||
submenu_pause: Pause
|
||||
submenu_accept: Accept
|
||||
submenu_reject: Reject
|
||||
submenu_block: Block
|
||||
profiles_show_submenu:
|
||||
submenu_accept: Accept
|
||||
submenu_block: Block
|
||||
submenu_reject: Reject
|
||||
block_lists:
|
||||
title: Block lists
|
||||
comments_btn_box:
|
||||
text_pause: Pause
|
||||
text_reject: Reject
|
||||
text_accept: Accept
|
||||
text_reply: Reply
|
||||
text_report: Report
|
||||
instances_btn_box:
|
||||
text_check: Check case by case
|
||||
text_allow: Allow everything
|
||||
text_deny: Block instance
|
||||
profiles_btn_box:
|
||||
text_approve: Always approve
|
||||
text_check: Always check
|
||||
text_deny: Block
|
||||
text_report: Report
|
||||
moderation_queue:
|
||||
index:
|
||||
title: Moderation
|
||||
instances: Instances
|
||||
accounts: Accounts
|
||||
comments: Comments
|
||||
comment:
|
||||
source_profile: Source Profile
|
||||
reply_to: Reply to
|
||||
remote_profile:
|
||||
user: Username
|
||||
profile: Profile
|
||||
profile_name: Profile name
|
||||
profile_id: ID
|
||||
profile_published: Published
|
||||
profile_summary: Summary
|
||||
instances:
|
||||
title: My block lists
|
||||
description: Description
|
||||
custom_block: Custom block lists
|
||||
submit: Save block lists
|
||||
users: "Users:"
|
||||
dark: Dark
|
||||
dir: ltr
|
||||
en: English
|
||||
|
@ -578,7 +702,10 @@ en:
|
|||
categories: 'Everything'
|
||||
index:
|
||||
search: 'Search'
|
||||
edit: 'Edit'
|
||||
edit_post: 'Edit'
|
||||
edit:
|
||||
moderation_queue: Moderation Queue
|
||||
post: Post
|
||||
preview:
|
||||
btn: 'Preliminary version'
|
||||
alert: 'Not every article type has a preliminary version'
|
||||
|
|
|
@ -1,4 +1,128 @@
|
|||
es:
|
||||
date:
|
||||
format: '%d/%m/%Y'
|
||||
published_at: "Publicado en"
|
||||
last_modified_at: "Última modificación"
|
||||
abbr_day_names:
|
||||
- Lun
|
||||
- Mar
|
||||
- Mié
|
||||
- Jue
|
||||
- Vie
|
||||
- Sáb
|
||||
- Dom
|
||||
day_names:
|
||||
- Lunes
|
||||
- Martes
|
||||
- Miércoles
|
||||
- Jueves
|
||||
- Viernes
|
||||
- Sábado
|
||||
- Domingo
|
||||
abbr_month_names:
|
||||
- Ene
|
||||
- Feb
|
||||
- Mar
|
||||
- Abr
|
||||
- May
|
||||
- Jun
|
||||
- Jul
|
||||
- Ago
|
||||
- Sep
|
||||
- Oct
|
||||
- Nov
|
||||
- Dic
|
||||
month_names:
|
||||
- Enero
|
||||
- Febrero
|
||||
- Marzo
|
||||
- Abril
|
||||
- Mayo
|
||||
- Junio
|
||||
- Julio
|
||||
- Agosto
|
||||
- Septiembre
|
||||
- Octubre
|
||||
- Noviembre
|
||||
- Diciembre
|
||||
time:
|
||||
am: am
|
||||
pm: pm
|
||||
format: '%-H:%M'
|
||||
components:
|
||||
instances_filters:
|
||||
text_show: Ver
|
||||
text_checked: Con los marcados
|
||||
instances_checked_submenu:
|
||||
submenu_case: Moderar caso por caso
|
||||
submenu_allow: Permitir todo
|
||||
submenu_reject: Rechazado
|
||||
instances_show_submenu:
|
||||
submenu_allow: Permitido
|
||||
submenu_reject: Rechazado
|
||||
comments_filters:
|
||||
text_show: Ver
|
||||
text_checked: Con los marcados
|
||||
comments_checked_submenu:
|
||||
submenu_pause: Pausado
|
||||
submenu_accept: Aceptado
|
||||
submenu_reject: Rechazado
|
||||
comments_show_submenu:
|
||||
submenu_pause: Pausado
|
||||
submenu_accept: Aceptado
|
||||
submenu_report: Reportado
|
||||
submenu_reject: Rechazado
|
||||
profiles_filters:
|
||||
text_show: Ver
|
||||
text_checked: Con los marcados
|
||||
profiles_checked_submenu:
|
||||
submenu_pause: Pausado
|
||||
submenu_accept: Aceptado
|
||||
submenu_reject: Rechazado
|
||||
submenu_block: Bloqueado
|
||||
profiles_show_submenu:
|
||||
submenu_accept: Aceptado
|
||||
submenu_block: Bloqueado
|
||||
submenu_reject: Rechazado
|
||||
block_lists:
|
||||
title: Listas de bloqueo
|
||||
comments_btn_box:
|
||||
text_pause: Pausa
|
||||
text_reject: Rechazar
|
||||
text_accept: Aceptar Publicación
|
||||
text_reply: Responder
|
||||
text_report: Reportar
|
||||
instances_btn_box:
|
||||
text_check: Moderar caso por caso
|
||||
text_allow: Permitir todo
|
||||
text_deny: Bloquear instancia
|
||||
profiles_btn_box:
|
||||
text_approve: Aprobar siempre
|
||||
text_check: Revisar siempre
|
||||
text_deny: Bloquear
|
||||
text_report: Reportar
|
||||
moderation_queue:
|
||||
index:
|
||||
title: Actividades de moderación
|
||||
instances: Instancias
|
||||
accounts: Cuentas
|
||||
comments: Comentarios
|
||||
comment:
|
||||
source_profile: Cuenta de Origen
|
||||
reply_to: En respuesta a
|
||||
remote_profile:
|
||||
user: Nombre de usuario
|
||||
profile: Cuenta de Origen
|
||||
profile_name: Nombre de la Cuenta
|
||||
profile_id: ID
|
||||
profile_published: Publicada
|
||||
profile_summary: Resumen
|
||||
instances:
|
||||
title: Mis listas de bloqueo
|
||||
description: Descripción de listas de bloqueo
|
||||
custom_block: Lista personalizada de bloqueo
|
||||
submit: Guardar lista de bloqueo
|
||||
users: "Usuaries:"
|
||||
dark: Oscuro
|
||||
es: Castellano
|
||||
en: English
|
||||
|
@ -520,6 +644,9 @@ es:
|
|||
en: 'inglés'
|
||||
ar: 'árabe'
|
||||
posts:
|
||||
edit:
|
||||
moderation_queue: Comentarios
|
||||
post: Contenido
|
||||
prev: Página anterior
|
||||
next: Página siguiente
|
||||
empty: No hay artículos con estos parámetros de búsqueda.
|
||||
|
@ -586,7 +713,7 @@ es:
|
|||
remove_filter_help: 'Quitar este filtro: %{filter}'
|
||||
index:
|
||||
search: 'Buscar'
|
||||
edit: 'Editar'
|
||||
edit_post: 'Editar'
|
||||
preview:
|
||||
btn: 'Versión preliminar'
|
||||
alert: 'No todos los tipos de artículos poseen vista preliminar :)'
|
||||
|
|
|
@ -58,6 +58,10 @@ Rails.application.routes.draw do
|
|||
get 'collaborate', to: 'collaborations#collaborate'
|
||||
post 'collaborate', to: 'collaborations#accept_collaboration'
|
||||
|
||||
get 'moderation_queue', to: 'moderation_queue#index'
|
||||
get 'remote_profile', to: 'moderation_queue#remote_profile'
|
||||
get 'instances', to: 'moderation_queue#instances'
|
||||
|
||||
# Gestionar artículos según idioma
|
||||
nested do
|
||||
scope '/(:locale)', constraint: /[a-z]{2}(-[A-Z]{2})?/ do
|
||||
|
|
5
db/seeds/blocklists.yml
Normal file
5
db/seeds/blocklists.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
- id: gardenfence
|
||||
title: Gardenfence
|
||||
- id: lista
|
||||
title: Lista
|
285
db/seeds/instances.yaml
Normal file
285
db/seeds/instances.yaml
Normal file
|
@ -0,0 +1,285 @@
|
|||
---
|
||||
- domain: todon.nl
|
||||
title: Todon.nl
|
||||
version: 4.2.3
|
||||
source_url: https://github.com/mastodon/mastodon
|
||||
description: Radicaal linkse anti-autoritaire server. Voor anarchisten, socialisten,
|
||||
(klimaat)activisten, LHBTQIA+, antiracisten, antifascisten, antikapitalisten,
|
||||
intersectionelen, veganisten, mensenrechten, enz.
|
||||
usage:
|
||||
users:
|
||||
active_month: 372
|
||||
thumbnail:
|
||||
url: https://todon.nl/system/site_uploads/files/000/000/004/@1x/297e509bc8a81f62.png
|
||||
blurhash: UXAw3zN4M|xsoga#WBay9DxntQRmITocofWE
|
||||
versions:
|
||||
"@1x": https://todon.nl/system/site_uploads/files/000/000/004/@1x/297e509bc8a81f62.png
|
||||
"@2x": https://todon.nl/system/site_uploads/files/000/000/004/@2x/297e509bc8a81f62.png
|
||||
languages:
|
||||
- en
|
||||
configuration:
|
||||
urls:
|
||||
streaming: wss://todon.nl
|
||||
status: https://status.todon.eu
|
||||
accounts:
|
||||
max_featured_tags: 10
|
||||
statuses:
|
||||
max_characters: 1312
|
||||
max_media_attachments: 4
|
||||
characters_reserved_per_url: 23
|
||||
media_attachments:
|
||||
supported_mime_types:
|
||||
- image/jpeg
|
||||
- image/png
|
||||
- image/gif
|
||||
- image/heic
|
||||
- image/heif
|
||||
- image/webp
|
||||
- image/avif
|
||||
- video/webm
|
||||
- video/mp4
|
||||
- video/quicktime
|
||||
- video/ogg
|
||||
- audio/wave
|
||||
- audio/wav
|
||||
- audio/x-wav
|
||||
- audio/x-pn-wave
|
||||
- audio/vnd.wave
|
||||
- audio/ogg
|
||||
- audio/vorbis
|
||||
- audio/mpeg
|
||||
- audio/mp3
|
||||
- audio/webm
|
||||
- audio/flac
|
||||
- audio/aac
|
||||
- audio/m4a
|
||||
- audio/x-m4a
|
||||
- audio/mp4
|
||||
- audio/3gpp
|
||||
- video/x-ms-asf
|
||||
image_size_limit: 16777216
|
||||
image_matrix_limit: 33177600
|
||||
video_size_limit: 103809024
|
||||
video_frame_rate_limit: 120
|
||||
video_matrix_limit: 8294400
|
||||
polls:
|
||||
max_options: 4
|
||||
max_characters_per_option: 50
|
||||
min_expiration: 300
|
||||
max_expiration: 2629746
|
||||
translation:
|
||||
enabled: true
|
||||
registrations:
|
||||
enabled: false
|
||||
approval_required: false
|
||||
message: |
|
||||
<p style="text-align: center"><strong>¡No pasarán!</strong></p>
|
||||
|
||||
<p>Je kunt tijdelijk geen nieuw account op Todon.nl aanvragen.</p>
|
||||
|
||||
<!--<p>Je kunt tussen 9u00 en 23u00 Midden-Europese tijd (UTC+1) een account op Todon.nl aanvragen. Geef ons ajb voldoende tijd om je accountaanvraag te beoordelen.</p>-->
|
||||
|
||||
<p>Ga naar <a href="https://joinmastodon.org/servers">joinmastodon.org</a> of <a href="https://fedidb.org/network?s=mastodon">FediDB Network</a> om een andere server te vinden.</p>
|
||||
|
||||
<p>It is temporary not possible to request on account on Todon.nl.</p>
|
||||
|
||||
<!--<p>You can request an account on Todon.nl between 9h00 and 23h00 Central European Time (UTC+1). Please give us enough time to review your account request.</p>-->
|
||||
|
||||
<p>Go to <a href="https://joinmastodon.org/servers">joinmastodon.org</a> or <a href="https://fedidb.org/network?s=mastodon">FediDB Network</a> to find another server.</p>
|
||||
url:
|
||||
max_toot_chars: 1312
|
||||
contact:
|
||||
email: todon@posteo.eu
|
||||
account:
|
||||
id: '1'
|
||||
username: admin
|
||||
acct: admin
|
||||
display_name: "Admin \U0001F913 Todon.nl (mod)"
|
||||
locked: false
|
||||
bot: false
|
||||
discoverable: false
|
||||
group: false
|
||||
created_at: '2017-04-28T00:00:00.000Z'
|
||||
note: "<p>This account is used for \U0001F399 Todon.nl announcements and ⚖️
|
||||
moderation.</p><p>\U0001F6AB Don't follow this account when you are not
|
||||
on Todon.nl.</p><p>New? First read our \U0001F469\U0001F3EB Todon 101 \U0001F469\U0001F393
|
||||
at <a href=\"https://wiki.todon.eu/todon/101\" target=\"_blank\" rel=\"nofollow
|
||||
noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span
|
||||
class=\"\">wiki.todon.eu/todon/101</span><span class=\"invisible\"></span></a></p><p>⚖️
|
||||
For all our moderators go to <a href=\"https://wiki.todon.nl/todon/moderators\"
|
||||
target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span
|
||||
class=\"invisible\">https://</span><span class=\"\">wiki.todon.nl/todon/moderators</span><span
|
||||
class=\"invisible\"></span></a></p><p>\U0001F4DD Public toots from this account
|
||||
are in English.</p><p>\U0001F515 Criticism is fine, but people who do false
|
||||
accusations are muted. </p><p>✉ todon@posteo.eu</p><p><a href=\"https://todon.nl/tags/nobot\"
|
||||
class=\"mention hashtag\" rel=\"tag\">#<span>nobot</span></a></p>"
|
||||
url: https://todon.nl/@admin
|
||||
uri: https://todon.nl/users/admin
|
||||
avatar: https://todon.nl/system/accounts/avatars/000/000/001/original/2db61726225ed3e6.png
|
||||
avatar_static: https://todon.nl/system/accounts/avatars/000/000/001/original/2db61726225ed3e6.png
|
||||
header: https://todon.nl/system/accounts/headers/000/000/001/original/fb3a846cbc20aa09.png
|
||||
header_static: https://todon.nl/system/accounts/headers/000/000/001/original/fb3a846cbc20aa09.png
|
||||
followers_count: 3164
|
||||
following_count: 8
|
||||
statuses_count: 724
|
||||
last_status_at: '2024-01-12'
|
||||
noindex: true
|
||||
emojis: []
|
||||
roles:
|
||||
- id: '3'
|
||||
name: Admin
|
||||
color: "#595aff"
|
||||
fields:
|
||||
- name: "\U0001F4DC Terms of Service"
|
||||
value: <a href="https://wiki.todon.nl/todon/terms_en" target="_blank" rel="nofollow
|
||||
noopener noreferrer me" translate="no"><span class="invisible">https://</span><span
|
||||
class="">wiki.todon.nl/todon/terms_en</span><span class="invisible"></span></a>
|
||||
verified_at: '2018-11-01T14:39:45.465+00:00'
|
||||
- name: ℹ️ Wiki
|
||||
value: <a href="https://wiki.todon.nl/todon/information" target="_blank" rel="nofollow
|
||||
noopener noreferrer me" translate="no"><span class="invisible">https://</span><span
|
||||
class="ellipsis">wiki.todon.nl/todon/informatio</span><span class="invisible">n</span></a>
|
||||
verified_at: '2018-11-01T14:40:54.679+00:00'
|
||||
- name: "\U0001F4CA Status"
|
||||
value: <a href="https://status.todon.eu" target="_blank" rel="nofollow noopener
|
||||
noreferrer me" translate="no"><span class="invisible">https://</span><span
|
||||
class="">status.todon.eu</span><span class="invisible"></span></a>
|
||||
verified_at: '2023-10-26T20:38:30.185+00:00'
|
||||
- name: "\U0001F4B3️ Donations"
|
||||
value: <a href="https://wiki.todon.eu/todon/donations" target="_blank" rel="nofollow
|
||||
noopener noreferrer me" translate="no"><span class="invisible">https://</span><span
|
||||
class="">wiki.todon.eu/todon/donations</span><span class="invisible"></span></a>
|
||||
verified_at: '2022-11-02T00:06:31.865+00:00'
|
||||
rules:
|
||||
- id: '1'
|
||||
text: We do not accept racism (in all its forms, incl. hate against Muslims, antisemitism,
|
||||
apartheid and casteism - see our Terms of Service for our complete definition).
|
||||
- id: '2'
|
||||
text: We do not accept hate against lesbians, gays, bisexuals, pansexuals, transgenders,
|
||||
non-binary people, intersexual people, queer people in general, etc.
|
||||
- id: '4'
|
||||
text: Sexism, misogyny and hate against black women (misogynoir).
|
||||
- id: '6'
|
||||
text: We do not accept ableism (incl. COVID-19 denial/downplaying and anti-vax)
|
||||
and body-shaming.
|
||||
- id: '8'
|
||||
text: We do not accept harassment and trolling.
|
||||
- id: '10'
|
||||
text: We also do not accept other forms of hate speech.
|
||||
- id: '11'
|
||||
text: We do not accept (sexual) abuse of minors, adults and animals (also not
|
||||
virtual).
|
||||
- id: '13'
|
||||
text: We do not accept glorification of violence, calls for murder, death threats,
|
||||
terrorism and militarism.
|
||||
- id: '15'
|
||||
text: We do not accept (neo)colonialism (incl. Zionism), imperialism in all forms
|
||||
and nationalism (above all nationalism of nation states, incl. flags/symbols
|
||||
of those on Todon.*, see our Terms of Service).
|
||||
- id: '16'
|
||||
text: We do not accept fascism, right-wing populism, and right-wing and religious
|
||||
extremism.
|
||||
- id: '17'
|
||||
text: We do not accept evangelisation and other forms of religious propaganda
|
||||
[local only], and extreme sects and cults.
|
||||
- id: '19'
|
||||
text: We do not accept Marxist-Leninists, Stalinists, Maoists or other followers
|
||||
of extreme authoritarian (so called) communist/socialist ideologies/regimes
|
||||
(aka tankies).
|
||||
- id: '20'
|
||||
text: We do not accept capitalists, including so called 'anarcho-capitalists'
|
||||
(aka ancaps) and neoliberals.
|
||||
- id: '21'
|
||||
text: We do not accept anthropogenic climate change denial, downplaying the climate
|
||||
crisis, greenwashing and deceptive climate solutions (like nuclear energy).
|
||||
- id: '27'
|
||||
text: We do not accept (right-wing) conspiracy 'theories', hoaxes, fake news and
|
||||
other forms of disinformation.
|
||||
- id: '28'
|
||||
text: Another rule in our terms of service at wiki.todon.eu/todon/terms_en. Explain
|
||||
in the final step.
|
||||
- uri: mastodon.mauve.moe
|
||||
title: Mauvestodon
|
||||
short_description: Escape ship from centralized social media run by Mauve.
|
||||
description: Chat about random techie and anarchist stuff.
|
||||
email: contact@mauve.moe
|
||||
version: 3.5.10
|
||||
urls:
|
||||
streaming_api: wss://mastodon.mauve.moe
|
||||
stats:
|
||||
user_count: 12
|
||||
status_count: 3287
|
||||
domain_count: 11625
|
||||
thumbnail: https://mastodon.mauve.moe/system/site_uploads/files/000/000/001/original/mauvesoftwareinc.png
|
||||
languages:
|
||||
- en
|
||||
registrations: false
|
||||
approval_required: false
|
||||
invites_enabled: true
|
||||
configuration:
|
||||
statuses:
|
||||
max_characters: 500
|
||||
max_media_attachments: 4
|
||||
characters_reserved_per_url: 23
|
||||
media_attachments:
|
||||
supported_mime_types:
|
||||
- image/jpeg
|
||||
- image/png
|
||||
- image/gif
|
||||
- video/webm
|
||||
- video/mp4
|
||||
- video/quicktime
|
||||
- video/ogg
|
||||
- audio/wave
|
||||
- audio/wav
|
||||
- audio/x-wav
|
||||
- audio/x-pn-wave
|
||||
- audio/ogg
|
||||
- audio/vorbis
|
||||
- audio/mpeg
|
||||
- audio/mp3
|
||||
- audio/webm
|
||||
- audio/flac
|
||||
- audio/aac
|
||||
- audio/m4a
|
||||
- audio/x-m4a
|
||||
- audio/mp4
|
||||
- audio/3gpp
|
||||
- video/x-ms-asf
|
||||
image_size_limit: 10485760
|
||||
image_matrix_limit: 16777216
|
||||
video_size_limit: 41943040
|
||||
video_frame_rate_limit: 60
|
||||
video_matrix_limit: 2304000
|
||||
polls:
|
||||
max_options: 4
|
||||
max_characters_per_option: 50
|
||||
min_expiration: 300
|
||||
max_expiration: 2629746
|
||||
contact_account:
|
||||
id: '1'
|
||||
username: admin
|
||||
acct: admin
|
||||
display_name: ''
|
||||
locked: false
|
||||
bot: false
|
||||
discoverable: true
|
||||
group: false
|
||||
created_at: '2022-04-25T00:00:00.000Z'
|
||||
note: ''
|
||||
url: https://mastodon.mauve.moe/@admin
|
||||
avatar: https://mastodon.mauve.moe/system/accounts/avatars/000/000/001/original/8c21e71667b48a95.png
|
||||
avatar_static: https://mastodon.mauve.moe/system/accounts/avatars/000/000/001/original/8c21e71667b48a95.png
|
||||
header: https://mastodon.mauve.moe/headers/original/missing.png
|
||||
header_static: https://mastodon.mauve.moe/headers/original/missing.png
|
||||
followers_count: 0
|
||||
following_count: 0
|
||||
statuses_count: 0
|
||||
last_status_at: '2023-01-30'
|
||||
emojis: []
|
||||
fields:
|
||||
- name: Alternatel Contact
|
||||
value: <span class="h-card"><a href="https://mastodon.mauve.moe/@mauve" class="u-url
|
||||
mention">@<span>mauve</span></a></span>
|
||||
verified_at:
|
||||
rules: []
|
153
db/seeds/moderation_queue.yaml
Normal file
153
db/seeds/moderation_queue.yaml
Normal file
File diff suppressed because one or more lines are too long
106
db/seeds/remote_profile.yaml
Normal file
106
db/seeds/remote_profile.yaml
Normal file
|
@ -0,0 +1,106 @@
|
|||
---
|
||||
"@context":
|
||||
- https://www.w3.org/ns/activitystreams
|
||||
- https://w3id.org/security/v1
|
||||
- manuallyApprovesFollowers: as:manuallyApprovesFollowers
|
||||
toot: http://joinmastodon.org/ns#
|
||||
featured:
|
||||
"@id": toot:featured
|
||||
"@type": "@id"
|
||||
featuredTags:
|
||||
"@id": toot:featuredTags
|
||||
"@type": "@id"
|
||||
alsoKnownAs:
|
||||
"@id": as:alsoKnownAs
|
||||
"@type": "@id"
|
||||
movedTo:
|
||||
"@id": as:movedTo
|
||||
"@type": "@id"
|
||||
schema: http://schema.org#
|
||||
PropertyValue: schema:PropertyValue
|
||||
value: schema:value
|
||||
discoverable: toot:discoverable
|
||||
Device: toot:Device
|
||||
Ed25519Signature: toot:Ed25519Signature
|
||||
Ed25519Key: toot:Ed25519Key
|
||||
Curve25519Key: toot:Curve25519Key
|
||||
EncryptedMessage: toot:EncryptedMessage
|
||||
publicKeyBase64: toot:publicKeyBase64
|
||||
deviceId: toot:deviceId
|
||||
claim:
|
||||
"@type": "@id"
|
||||
"@id": toot:claim
|
||||
fingerprintKey:
|
||||
"@type": "@id"
|
||||
"@id": toot:fingerprintKey
|
||||
identityKey:
|
||||
"@type": "@id"
|
||||
"@id": toot:identityKey
|
||||
devices:
|
||||
"@type": "@id"
|
||||
"@id": toot:devices
|
||||
messageFranking: toot:messageFranking
|
||||
messageType: toot:messageType
|
||||
cipherText: toot:cipherText
|
||||
suspended: toot:suspended
|
||||
focalPoint:
|
||||
"@container": "@list"
|
||||
"@id": toot:focalPoint
|
||||
id: https://mastodon.mauve.moe/users/mauve
|
||||
type: Person
|
||||
following: https://mastodon.mauve.moe/users/mauve/following
|
||||
followers: https://mastodon.mauve.moe/users/mauve/followers
|
||||
inbox: https://mastodon.mauve.moe/users/mauve/inbox
|
||||
outbox: https://mastodon.mauve.moe/users/mauve/outbox
|
||||
featured: https://mastodon.mauve.moe/users/mauve/collections/featured
|
||||
featuredTags: https://mastodon.mauve.moe/users/mauve/collections/tags
|
||||
preferredUsername: mauve
|
||||
name: "Mauve \U0001F441\U0001F49C"
|
||||
summary: "<p>Occult Enby that's making local-first software with peer to peer
|
||||
protocols, mesh networks, and the web.</p><p>Also exploring what a local-first
|
||||
cyberspace might look like in my spare time.</p>"
|
||||
url: https://mastodon.mauve.moe/@mauve
|
||||
manuallyApprovesFollowers: false
|
||||
discoverable: true
|
||||
published: '2022-04-25T00:00:00Z'
|
||||
devices: https://mastodon.mauve.moe/users/mauve/collections/devices
|
||||
alsoKnownAs:
|
||||
- https://infosec.exchange/users/RangerMauve
|
||||
publicKey:
|
||||
id: https://mastodon.mauve.moe/users/mauve#main-key
|
||||
owner: https://mastodon.mauve.moe/users/mauve
|
||||
publicKeyPem: |
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxjxu6bRQOjH4caQu7JgZ
|
||||
umIWFeX0ZdbVnofElev2d9JByqcDoWhmaks3RYdW71RDPNrr0JxqZvUbIw9kQBng
|
||||
7iQ9YTcXTdJ/N9CQoB22msffYkEIw4ilehCDXdchNs4aoVAUwI8IhkM0p/itz6gK
|
||||
75C3CQv74Y7rHUJC8ob2p4KUwRUyhgzyhp8QWwCAn/RZ28wP8EbjWF9IskMRo9vq
|
||||
WUX+Io6hpADRkSwZGoOSW2zxCEBVco6tRmABTte8I0WcAucLyMEyfGMlUvxRew4D
|
||||
zAWoEBS8SyqM68vUabbZYLns6kya34tvsf1NkvajDGrfgU3D0LlGX++tOa6N9Pkf
|
||||
XwIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
tag: []
|
||||
attachment:
|
||||
- type: PropertyValue
|
||||
name: Pronouns
|
||||
value: they/them/it
|
||||
- type: PropertyValue
|
||||
name: Email
|
||||
value: mauve@mauve.moe
|
||||
- type: PropertyValue
|
||||
name: Matrix
|
||||
value: <span class="h-card"><a href="https://mastodon.mauve.moe/@mauve" class="u-url
|
||||
mention">@<span>mauve</span></a></span>:mauve.moe
|
||||
- type: PropertyValue
|
||||
name: Github/Twitter
|
||||
value: "@RangerMauve"
|
||||
endpoints:
|
||||
sharedInbox: https://mastodon.mauve.moe/inbox
|
||||
icon:
|
||||
type: Image
|
||||
mediaType: image/png
|
||||
url: https://mastodon.mauve.moe/system/accounts/avatars/000/000/002/original/e4b910cee121b1b8.png
|
||||
image:
|
||||
type: Image
|
||||
mediaType: image/png
|
||||
url: https://mastodon.mauve.moe/system/accounts/headers/000/000/002/original/a96f990025091662.png
|
Loading…
Reference in a new issue