Removed MOTDs, Allowed mods and staff to edit communities.

This commit is contained in:
some weird guy
2023-07-27 20:56:43 -07:00
parent 40355adef6
commit 71d8b5fff4
20 changed files with 334 additions and 497 deletions
+3
View File
@@ -193,6 +193,9 @@ allow_signups = True
# Mods under this level will still be able to manage users, however will not be able to view any sensitive data.
min_lvl_metadata_perms = 10
# if someone's level is equal or above this, they can edit any community on your clone.
level_needed_to_man_communities = 5
# file size limits in megabytes! only applies when using the community tools.
max_icon_size = .5
max_banner_size = 1
-433
View File
@@ -1,433 +0,0 @@
# Generated by Django 3.2.3 on 2023-02-07 01:50
import closedverse_main.models
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('username', models.CharField(max_length=32, unique=True)),
('nickname', models.CharField(max_length=64, null=True)),
('password', models.CharField(max_length=128)),
('email', models.EmailField(blank=True, default='', max_length=254, null=True)),
('has_mh', models.BooleanField(default=False)),
('avatar', models.CharField(blank=True, default='', max_length=1200)),
('theme', closedverse_main.models.ColorField(blank=True, max_length=18, null=True)),
('level', models.SmallIntegerField(default=0)),
('role', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'Bot'), (2, 'Administrator'), (3, 'Moderator'), (4, 'NO'), (5, 'Donator'), (6, 'Tester'), (7, 'Cools'), (8, 'Developer'), (9, 'SMF9-Django'), (10, 'Staff'), (11, 'GAY DOGWATER'), (12, 'DUMB SNAIL'), (13, 'Russian ADRIAN'), (14, 'Contest'), (15, 'Gamecon'), (16, 'Cedar')], default=0)),
('addr', models.CharField(blank=True, max_length=64, null=True)),
('signup_addr', models.CharField(blank=True, max_length=64, null=True)),
('user_agent', models.TextField(blank=True, null=True)),
('c_tokens', models.IntegerField(default=1)),
('hide_online', models.BooleanField(default=False)),
('color', closedverse_main.models.ColorField(blank=True, default='', max_length=18, null=True)),
('staff', models.BooleanField(default=False)),
('active', models.BooleanField(default=True)),
('warned', models.BooleanField(default=False)),
('warned_reason', models.CharField(blank=True, max_length=600, null=True)),
('bg_url', models.CharField(blank=True, max_length=300, null=True)),
('last_login', models.DateTimeField(auto_now=True)),
('created', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Ads',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('url', models.CharField(max_length=256)),
('imageurl', models.ImageField(upload_to='ad/%y/%m/%d/')),
],
),
migrations.CreateModel(
name='Comment',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
('body', models.TextField(null=True)),
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
('drawing', models.CharField(blank=True, max_length=200, null=True)),
('spoils', models.BooleanField(default=False)),
('created', models.DateTimeField(auto_now_add=True)),
('edited', models.DateTimeField(auto_now=True)),
('befores', models.TextField(blank=True, null=True)),
('has_edit', models.BooleanField(default=False)),
('is_rm', models.BooleanField(default=False)),
('status', models.SmallIntegerField(choices=[(0, 'ok'), (1, 'delete by user'), (2, 'delete by authority'), (3, 'delete by mod'), (4, 'delete by admin'), (5, 'account pruge')], default=0)),
],
),
migrations.CreateModel(
name='Community',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=255)),
('description', models.TextField(blank=True, default='')),
('ico', models.ImageField(blank=True, null=True, upload_to='icon/%y/%m/%d/')),
('banner', models.ImageField(blank=True, null=True, upload_to='banner/%y/%m/%d/')),
('type', models.SmallIntegerField(choices=[(0, 'General'), (1, 'Game'), (2, 'Special'), (3, 'User Community'), (4, 'Hide')], default=0)),
('platform', models.SmallIntegerField(choices=[(0, 'none'), (1, '3ds'), (2, 'wii u'), (3, 'switch'), (4, 'both'), (5, 'PC'), (6, 'Xbox'), (7, 'Playstation')], default=0)),
('tags', models.CharField(blank=True, choices=[('announcements', 'main announcement community'), ('changelog', 'main changelog'), ('activity', 'Activity Feed posting community'), ('general', 'General Discussion Community')], max_length=255, null=True)),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('is_rm', models.BooleanField(default=False)),
('is_feature', models.BooleanField(default=False)),
('require_auth', models.BooleanField(default=False)),
('allowed_users', models.TextField(blank=True, null=True)),
('creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'communities',
},
),
migrations.CreateModel(
name='Conversation',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conv_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conv_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Motd',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('order', models.IntegerField(default=1, max_length=3)),
('show', models.BooleanField(default=True)),
('created', models.DateTimeField(auto_now_add=True)),
('Title', models.CharField(blank=True, default='Title', max_length=256)),
('message', models.TextField()),
('hide_date', models.BooleanField(default=False)),
('image', models.ImageField(blank=True, max_length=255, null=True, upload_to='MOTD/%y/%m/%d/')),
],
),
migrations.CreateModel(
name='Poll',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('able_vote', models.BooleanField(default=True)),
('choices', models.TextField(default='[]')),
('created', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Post',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
('body', models.TextField(null=True)),
('drawing', models.CharField(blank=True, max_length=200, null=True)),
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
('url', models.URLField(blank=True, default='', max_length=1200, null=True)),
('spoils', models.BooleanField(default=False)),
('disable_yeah', models.BooleanField(default=False)),
('created', models.DateTimeField(auto_now_add=True)),
('edited', models.DateTimeField(auto_now=True)),
('befores', models.TextField(blank=True, null=True)),
('has_edit', models.BooleanField(default=False)),
('is_rm', models.BooleanField(default=False)),
('status', models.SmallIntegerField(choices=[(0, 'ok'), (1, 'delete by user'), (2, 'delete by authority'), (3, 'delete by mod'), (4, 'delete by admin'), (5, 'account pruge')], default=0)),
('community', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community')),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('poll', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.poll')),
],
),
migrations.CreateModel(
name='welcomemsg',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('order', models.IntegerField(default=1, max_length=3)),
('show', models.BooleanField(default=True)),
('created', models.DateTimeField(auto_now_add=True)),
('Title', models.CharField(default='Title', max_length=256)),
('message', models.TextField()),
('image', models.ImageField(blank=True, max_length=255, null=True, upload_to='welcomemsg/%y/%m/%d/')),
],
),
migrations.CreateModel(
name='UserRequest',
fields=[
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='closedverse_main.user')),
('ua', models.TextField(blank=True, default='', null=True)),
('latest', models.DateTimeField(auto_now=True)),
('status', models.SmallIntegerField(choices=[(0, 'submitted'), (1, 'viewed'), (2, 'accepted'), (3, 'decline'), (4, 'ignore')], default=0)),
],
bases=('closedverse_main.user',),
),
migrations.CreateModel(
name='Yeah',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('type', models.SmallIntegerField(choices=[(0, 'post'), (1, 'comment')], default=0)),
('created', models.DateTimeField(auto_now_add=True)),
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
],
),
migrations.CreateModel(
name='UserBlock',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('full', models.BooleanField(default=False)),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='block_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='block_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='ThermostatTouch',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('lvl', models.IntegerField(default=1)),
('who', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Restriction',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('type', models.SmallIntegerField(choices=[(0, 'Prevent yeah'), (1, 'Prevent follow'), (2, 'Prevent comment')])),
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='restriction_by', to=settings.AUTH_USER_MODEL)),
('comment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_comment', to='closedverse_main.comment')),
('post', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_post', to='closedverse_main.post')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='restriction_user', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='RedFlag',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('type', models.SmallIntegerField(choices=[(0, 'Post'), (1, 'Comment'), (2, 'User')])),
('reason', models.SmallIntegerField(choices=[(0, 'Actual harassment'), (1, 'Spam'), (2, "I don't like this"), (3, 'Personal info'), (4, 'Obscene use of swearing'), (5, 'NSFW where not allowed'), (6, 'Overly advertising/spam'), (7, 'Please delete this')])),
('reasoning', models.TextField(blank=True, default='', null=True)),
('comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
('post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='ProfileHistory',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('old_nickname', models.CharField(blank=True, max_length=64)),
('new_nickname', models.CharField(blank=True, max_length=64)),
('old_comment', models.TextField(blank=True)),
('new_comment', models.TextField(blank=True)),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Profile',
fields=[
('is_new', models.BooleanField(default=True)),
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('origin_id', models.CharField(blank=True, max_length=16, null=True)),
('origin_info', models.CharField(blank=True, max_length=255, null=True)),
('comment', models.TextField(blank=True, default='')),
('country', models.CharField(blank=True, default='', max_length=120)),
('whatareyou', models.CharField(blank=True, default='', max_length=120)),
('id_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
('pronoun_is', models.IntegerField(choices=[(0, "I don't know"), (1, 'He/him'), (2, 'She/her'), (3, 'He/she'), (4, 'It'), (5, 'They/Them')], default=0)),
('gender_is', models.IntegerField(choices=[(0, "I don't know"), (1, 'Girl'), (2, 'Boy'), (3, 'Minion'), (4, 'Toaster'), (5, 'Dinosaur'), (6, 'Truck'), (7, 'Robot'), (8, 'Monkey'), (9, 'Big chungus'), (10, 'Other')], default=0)),
('let_friendrequest', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
('yeahs_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=0)),
('comments_visibility', models.SmallIntegerField(choices=[(0, 'show'), (1, 'friends only'), (2, 'hide')], default=2)),
('weblink', models.CharField(blank=True, default='', max_length=1200)),
('external', models.CharField(blank=True, default='', max_length=255)),
('let_yeahnotifs', models.BooleanField(default=True)),
('let_freedom', models.BooleanField(default=True)),
('limit_post', models.SmallIntegerField(default=0)),
('cannot_edit', models.BooleanField(default=False)),
('email_login', models.SmallIntegerField(choices=[(0, 'Do not allow'), (1, 'Okay'), (2, 'Only allow')], default=1)),
('adopted', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to=settings.AUTH_USER_MODEL)),
('favorite', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='closedverse_main.post')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='PollVote',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('done', models.DateTimeField(auto_now_add=True)),
('choice', models.SmallIntegerField(default=0)),
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.poll')),
],
),
migrations.CreateModel(
name='Notification',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('read', models.BooleanField(default=False)),
('type', models.SmallIntegerField(choices=[(0, 'Yeah on post'), (1, 'Yeah on comment'), (2, 'Comment on my post'), (3, "Comment on others' post"), (4, 'Follow to me')])),
('merges', models.TextField(blank=True, default='')),
('created', models.DateTimeField(auto_now_add=True)),
('latest', models.DateTimeField(auto_now=True)),
('context_comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.comment')),
('context_post', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post')),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_sender', to=settings.AUTH_USER_MODEL)),
('to', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_to', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Message',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('feeling', models.SmallIntegerField(choices=[(0, 'normal'), (1, 'happy'), (2, 'wink'), (3, 'surprised'), (4, 'frustrated'), (5, 'confused'), (38, 'japan'), (39, 'lol i lied'), (69, 'adam is gay'), (70, 'I am a faggot!'), (71, 'Juice'), (72, 'Commit Suicide'), (73, 'Fresh!')], default=0)),
('body', models.TextField(null=True)),
('drawing', models.CharField(blank=True, max_length=200, null=True)),
('screenshot', models.CharField(blank=True, default='', max_length=1200, null=True)),
('url', models.URLField(blank=True, default='', max_length=1200, null=True)),
('created', models.DateTimeField(auto_now_add=True)),
('read', models.BooleanField(default=False)),
('is_rm', models.BooleanField(default=False)),
('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.conversation')),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='LoginAttempt',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('success', models.BooleanField(default=False)),
('addr', models.CharField(blank=True, max_length=64, null=True)),
('user_agent', models.TextField(blank=True, null=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Friendship',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('latest', models.DateTimeField(auto_now=True)),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='friend_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='friend_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='FriendRequest',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('body', models.TextField(blank=True, default='', null=True)),
('read', models.BooleanField(default=False)),
('finished', models.BooleanField(default=False)),
('created', models.DateTimeField(auto_now_add=True)),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fr_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='fr_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Follow',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='follow_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='follow_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='ConversationInvite',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('body', models.TextField(blank=True, default='', null=True)),
('read', models.BooleanField(default=False)),
('finished', models.BooleanField(default=False)),
('created', models.DateTimeField(auto_now_add=True)),
('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.conversation')),
('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='convinvite_source', to=settings.AUTH_USER_MODEL)),
('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='convinvite_target', to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='Complaint',
fields=[
('unique_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('id', models.AutoField(primary_key=True, serialize=False)),
('type', models.SmallIntegerField(choices=[(0, 'Bug report'), (1, 'Suggestion'), (2, 'Want')])),
('body', models.TextField(blank=True, default='')),
('sex', models.SmallIntegerField(choices=[(0, 'girl'), (1, 'privileged one'), (2, '(none)')], null=True)),
('created', models.DateTimeField(auto_now_add=True)),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='CommunityFavorite',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('community', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community')),
],
),
migrations.CreateModel(
name='CommunityClink',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('kind', models.BooleanField(default=False)),
('also', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='two', to='closedverse_main.community')),
('root', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='one', to='closedverse_main.community')),
],
),
migrations.AddField(
model_name='comment',
name='community',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.community'),
),
migrations.AddField(
model_name='comment',
name='creator',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='comment',
name='original_post',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='closedverse_main.post'),
),
migrations.CreateModel(
name='AuditLog',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('type', models.SmallIntegerField(choices=[(0, 'Post delete'), (1, 'Comment delete'), (2, 'User edit'), (3, 'Generate passwd reset'), (4, 'User delete'), (5, 'Image delete'), (6, 'Purge 1'), (7, 'Purge 2'), (8, 'Purge 3'), (9, 'Purge 4'), (10, 'Purge 5'), (11, 'Un-purge 1'), (12, 'Changed server settings')])),
('reasoning', models.TextField(blank=True, default='', null=True)),
('by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audit_by', to=settings.AUTH_USER_MODEL)),
('comment', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_comment', to='closedverse_main.comment')),
('post', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_post', to='closedverse_main.post')),
('reversed_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_reverse_by', to=settings.AUTH_USER_MODEL)),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='audit_user', to=settings.AUTH_USER_MODEL)),
],
),
]
@@ -1,24 +0,0 @@
# Generated by Django 3.2.3 on 2023-02-08 00:56
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('closedverse_main', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='MetaViews',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True)),
('from_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='from_user', to=settings.AUTH_USER_MODEL)),
('target_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='target_user', to=settings.AUTH_USER_MODEL)),
],
),
]
+21 -16
View File
@@ -614,7 +614,7 @@ class Community(models.Model):
is_rm = models.BooleanField(default=False)
is_feature = models.BooleanField(default=False)
require_auth = models.BooleanField(default=False)
allowed_users = models.TextField(null=True, blank=True)
rank_needed_to_post = models.IntegerField(default=0)
creator = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE)
objects = PostManager()
@@ -678,14 +678,29 @@ class Community(models.Model):
post.recent_comment = post.recent_comment()
return posts
def post_perm(self, request):
if self.allowed_users:
allows = self.allowed_users.split(',')
if not request.user.is_authenticated or str(request.user.id) not in allows:
return False
if request.user.level >= self.rank_needed_to_post:
return True
elif request.user.staff == True:
return True
# If the community is made by you, you should be able to post in there regardless.
elif request.user == self.creator:
return True
else:
return True
return False
def can_edit_community(self, request):
# yanderedev moment
if not request.user.is_authenticated:
return False
# If the user is a mod but can't post in one community, the user should not edit it either.
if not request.user.level >= self.rank_needed_to_post and not request.user.staff == True:
return False
if request.user == self.creator:
return True
elif request.user.level >= settings.level_needed_to_man_communities or request.user.staff == True:
return True
else:
return False
def has_favorite(self, request):
if request.user.communityfavorite_set.filter(community=self).exists():
return True
@@ -1721,16 +1736,6 @@ class Ads(models.Model):
def __str__(self):
return "Ad with id " + str(self.id) + ", created at " + str(self.created) + ", with url " + str(self.url) + ", and imageurl " + str(self.imageurl)
class Motd(models.Model):
id = models.AutoField(primary_key=True)
order = models.IntegerField(max_length=3, default=1)
show = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
Title = models.CharField(max_length=256, blank=True, default='Title')
message = models.TextField(null=False, blank=False)
hide_date = models.BooleanField(default=False)
image = models.ImageField(upload_to='MOTD/%y/%m/%d/', max_length=255, null=True, blank=True)
class welcomemsg(models.Model):
id = models.AutoField(primary_key=True)
order = models.IntegerField(max_length=3, default=1)
@@ -19,14 +19,15 @@
</div>
{% endif %}
{% if mesoftheday and request.user.is_authenticated %}
<div class="post-list-outline index-memo">
<h2 class="label">MOTD / News</h2>
{% for mesoftheday in mesoftheday %}
{% if mesoftheday.Title %}<h2>{{ mesoftheday.Title }}</h2>{% endif %}
<p>{{ mesoftheday.message|linebreaksbr|urlize }}</p>
{% if mesoftheday.image %}<image src={{ mesoftheday.image.url }}></image>{% endif %}
{% if mesoftheday.hide_date == False %}<p class="memo-date">Posted {{ mesoftheday.created }}</p>{% endif %}
{% if announcements and request.user.is_authenticated %}
<div class="Announcements">
{% for announcements in announcements %}
<div class='Announcement-content'>
{% user_icon_container announcements.creator post.feeling %}
<a class='user-name' href={% url "main:user-view" announcements.creator.username %} {% if announcements.creator.color %}style=color:{{ announcements.creator.color }}{% endif %}>{{ announcements.creator }}</a><a class='timestamp"'> - {{ announcements.created }}</a>
<p>{{ announcements.body|linebreaksbr|urlize }}</p>
{% if announcements.screenshot %}<image class='Announcement-image' src={{ announcements.screenshot }}></image>{% endif %}
</div>
{% endfor %}
</div>
{% endif %}
@@ -1,11 +1,11 @@
{% extends "closedverse_main/layout.html" %}
{% block main-body %}{% load closedverse_user %}{% load closedverse_tags %}{% load closedverse_community %}
{% if community.is_feature %}<div class='notice'>
<p>Who the fuck gave you ownership of a fucking featured community!</p>
{% if not request.user == community.creator %}<div class='notice'>
<p>Mods and staff members can edit communities.</p>
</div>{% endif %}
{% community_sidebar community request %}
<div class="main-column"><div class="post-list-outline">
<h2 class="label">Change settings for {{ community.creator }}'s community</h2>
<h2 class="label">Change settings for {% if community.creator %}{{ community.creator }}'s{% else %}this{% endif %} community</h2>
<form class="setting-form" method="post" action={% url "main:community-tools-set" community.id %}>
<li class="setting-community-name">
<p class="settings-label">Set name:</p>
@@ -37,6 +37,7 @@
<p>&nbsp;</p>
<input type="checkbox" name="force_login" {% if community.require_auth %}checked{% endif %}>Require login:
<p class="note">If this is on, users will need to sign in to view your community.</p>
<p class="note">I plan on removing this feature as it's implemented in an extremely janky way. Or at least improving it, so you are no longer forced to sign in to view yeahs from anyone. The whole idea behind this feature is to prevent web crawling or unauthorized third parties from seeing content without an account.</p>
</li>
<li>
<p class="settings-label">Platform</p>
@@ -38,7 +38,7 @@
<button type="button" class="symbol button favorite-button{% if community.has_favorite %} checked{% endif %}" data-action-favorite="{% url "main:community-favorite-add" community.id %}" data-action-unfavorite="{% url "main:community-favorite-rm" community.id %}"><span class="favorite-button-text">Favorite</span></button>
<!--<button class="button reload-btn">Refresh posts</button>
-->
{% if request.user == community.creator %}
{% if can_edit %}
<button class="button" data-href="{% url "main:community-tools" community.id %}">Community Settings</button>
{% endif %}
{% endif %}
@@ -5,6 +5,7 @@ register = template.Library()
def community_sidebar(community, request):
return {
'community': community,
'can_edit': community.can_edit_community(request),
'request': request,
}
@register.inclusion_tag('closedverse_main/elements/community_post.html')
@@ -15,7 +16,7 @@ def community_post(post, type=0):
}
@register.inclusion_tag('closedverse_main/elements/post-list.html')
def post_list(posts, next_offset=None, type=0, nf_text=''):
def post_list(posts, next_offset=None, type=0, nf_text='', time=None):
text = {
0: "This community doesn't have any posts yet.",
}.get(type, nf_text)
@@ -23,6 +24,7 @@ def post_list(posts, next_offset=None, type=0, nf_text=''):
'posts': posts,
'nf': text,
'next': next_offset,
'time': time,
}
@register.inclusion_tag('closedverse_main/elements/post-form.html')
def post_form(user, community):
+7 -5
View File
@@ -69,12 +69,12 @@ def community_list(request):
ad = "no ads"
WelcomeMSG = welcomemsg.objects.filter(show=True).order_by('-order', '-id')
mesoftheday = Motd.objects.filter(show=True).order_by('-order', '-id')
announcements = Post.objects.filter(community__tags='announcements').order_by('-id')[:6]
return render(request, 'closedverse_main/community_list.html', {
'title': 'Communities',
'ad': ad,
'mesoftheday': mesoftheday,
'announcements': announcements,
'WelcomeMSG': WelcomeMSG,
'availableads': availableads,
'classes': classes,
@@ -821,6 +821,7 @@ def community_view(request, community):
"""View an individual community"""
communities = get_object_or_404(Community, id=community)
communities.setup(request)
can_edit = communities.can_edit_community(request)
if not communities.clickable():
return HttpResponseForbidden()
if not request.user.is_authenticated and communities.require_auth:
@@ -836,7 +837,6 @@ def community_view(request, community):
next_offset = 50
else:
next_offset = None
if request.META.get('HTTP_X_AUTOPAGERIZE'):
return render(request, 'closedverse_main/elements/post-list.html', {
'posts': posts,
@@ -875,7 +875,8 @@ def community_tools(request, community):
the_community = get_object_or_404(Community, id=community)
if not request.user.is_authenticated:
raise Http404()
if request.user != the_community.creator:
can_edit = the_community.can_edit_community(request)
if not can_edit:
raise Http404()
return render(request, 'closedverse_main/community_tools.html', {
'title': 'Community tools',
@@ -890,7 +891,8 @@ def community_tools_set(request, community):
#do the checks
if not request.user.is_authenticated:
return HttpResponseForbidden()
if request.user != the_community.creator:
can_edit = the_community.can_edit_community(request)
if not can_edit:
return HttpResponseForbidden()
if len(request.POST.get('community_name')) == 0 or len(request.POST.get('community_name')) >= 100:
return json_response('bad name')
+12
View File
@@ -81,6 +81,18 @@ button {
font-size: 20px;
width: 175px;
}
.Announcement-content {
background: var(--theme-dark, #202030);
border: 1px solid black;
border-radius: 6px;
padding: 6px;
margin-bottom: 12px;
text-align: left;
padding-bottom: 22px;
}
.Announcement-content .Announcement-image {
padding-top: 6px;
}
.none {
display: none !important;
}
-1
View File
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
View File
+141
View File
@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="130"
height="130"
viewBox="0 0 130 130"
sodipodi:docname="backgroundclear.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><inkscape:path-effect
effect="fillet_chamfer"
id="path-effect5"
is_visible="true"
lpeversion="1"
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
radius="8"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" /><inkscape:path-effect
effect="fillet_chamfer"
id="path-effect4"
is_visible="true"
lpeversion="1"
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
radius="8"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" /><inkscape:path-effect
effect="fillet_chamfer"
id="path-effect3"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1"
radius="11"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" /></defs><sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="5.08125"
inkscape:cx="63.468635"
inkscape:cy="55.694957"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="g1"
showgrid="false"
showguides="false" /><g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1"><rect
style="opacity:1;fill:#000000;fill-opacity:0.40000001;stroke-width:0.8125"
id="rect2"
width="130"
height="130"
x="0"
y="0" /><path
style="fill:#000000;fill-opacity:0.11323686"
id="rect1"
width="65"
height="65"
x="0"
y="0"
sodipodi:type="rect"
inkscape:path-effect="#path-effect4"
d="m 8,0 h 49 l 8,8 v 49 l -8,8 H 8 L 0,57 V 8 Z" /><path
style="fill:#000000;fill-opacity:0.11323686"
id="rect1-3"
width="65"
height="65"
x="65"
y="65"
inkscape:path-effect="#path-effect5"
sodipodi:type="rect"
d="m 73,65 h 49 l 8,8 v 49 l -8,8 H 73 l -8,-8 V 73 Z" /><image
width="128"
height="128"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEpElEQVR4nO2dW3LiQBAEE8kmOPae
2w7j/ZjFa0CAHi1N16jqABMZlf2pKB1Op9MfgnI8Hun7Puq5q5zPZz4+Pvj+/g55z6yFs4t6zIWW
qLBeOEMOwIWWqLD+5lx8AC60RIX1lnPRAbjQEhXWIc7ZB+BCS1RYH3HOOgAXWqLC+oxz8gG40BIV
1leckw7AhZaosI7hHH0ALrREhXUs56gDcKElKqxTOF8egAstUWGdyvn0AFxoiQrrHM6HB+BCS1RY
53IOHoALLVFhXcJ5dwAutESFdSnn1QG40BIV1gjOnwNwoSUqrFGcHbjQS1RYIzk7F1qiwhrN2e29
UNBhXYPzLeSlm3x9ffH5+Zm+UNi3/L7v4z4KvcTydeTDwk/CbmP5WvIh8AAsX08+BB2A5WvKh4AD
OJ/Plh+cLTkXHYBKoaDDujXn7ANQKRR0WGtwzjoAlUJBh7UW5+QDUCkUdFhrck46AJVCQYe1Nufo
A6gNOiUqrBk4Rx1ABtCxUWHNwvnyALKAjokKaybOpweQCfRVVFizcT48gGygz6LCmpFz8AAygj6K
CmtWzrsDyAo6FBXWzJxXB5AZ9DYqrNk5fw4gO+jvqLAqcHagAXqJCqsKZ6cCCjqlqnACdCqgKqWq
cEL5kqtTAFUpVYUTinxPxQZGhRP+y4eAbwItX4cTruWDp2IXR4UT7uWDp2IXRYUThuWDp2JnR4UT
HssHT8XOigonPJcPnoqdHBVOeC0fPBU7KSqcME4+eCp2dFQ4Ybx88FTsqKhwwjT54KnYl1HhhOny
wVOxT6PCCfPkg6diH0aFE+bLB0/FDkaFE5bJB0/F3kWFE5bLB0/FXkWFE2Lkg6dif6LCCXHywVOx
gA4nxMo/HA6eilXhhHj5x+MxfikUdEpV4YSV5Hdd/AGolKrCCevJh+CpWJVSVThhXfkQeAAqpapw
wvryIegAVEpV4YRt5EPQVKxCqSqcsJ182MlUrAonbCsfdjAVq8IJ28uHxqdiVTihjnxoeCpWhRPq
yYdGp2JVOKGufGhwKlaFE+rLh8amYlU4IYd8aGgqVoUT8siHRqZiVTghl3xoYCpWhRPyyQfxqVgV
TsgpH4SnYlU4Ia98EJ2KVeGE3PJBcCpWhRPyywexqVgVTtCQD/Cm8t9fy1/l+106y4+NknyJqVjL
X09++qlYy19XPiSeirX89eVD0qlYy99GPiScirX87eRDsqlYy99WPiSairX87eVDkqlYy68jHxJM
xVp+PflQeSrW8uvKh4pTsZZfXz5Umoq1/BzyocJUrOXnkQ8bT8Vafi75sOFUrOXnkw8bTcVafk75
sMFUrOXnlQ8rT8Vafm75sOJUrOXnl7/aVKzla8h/f3/f71IoWH7f97yFvPgvlq8hf5WpWMvXkw87
WwoFyw+firV8Xfmwk6VQsPzwqVjL15cPjS+FguWHT8VafjvyodGlULD88KlYy29PPjS2FAr1C52S
DKzNLIVCjkLHJgtrE0uhkKfQMcnEKr8UCrkKfZVsrNJLoZCv0GfJyCq7FAo5C32UrKySS6GQt9Ch
ZGaVWwqF3IXeJjur1FIo5C/0dxRYO8vfr3yAv3rECG2I4F0DAAAAAElFTkSuQmCC
"
id="image3405"
x="-149.11778"
y="16" /></g></svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

+129
View File
@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="160"
height="160"
viewBox="0 0 160 160"
sodipodi:docname="background.svg"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1">
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect5"
is_visible="true"
lpeversion="1"
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
radius="8"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect4"
is_visible="true"
lpeversion="1"
nodesatellites_param="C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1 @ C,0,0,1,0,8,0,1"
radius="8"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
<inkscape:path-effect
effect="fillet_chamfer"
id="path-effect3"
is_visible="true"
lpeversion="1"
nodesatellites_param="F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1 @ F,0,0,1,0,11,0,1"
radius="11"
unit="px"
method="auto"
mode="F"
chamfer_steps="1"
flexible="false"
use_knot_distance="true"
apply_no_radius="true"
apply_with_radius="true"
only_selected="false"
hide_knots="false" />
</defs>
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="2.540625"
inkscape:cx="-35.621156"
inkscape:cy="65.535055"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="g1" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1">
<image
width="160"
height="160"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAIAAAC2BqGFAAAABmJLR0QAFgAWACbcRYNiAAAACXBI&#10;WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QkQChoXcqytowAAATpJREFUeNrt3MEJwzAQRFFn8MlV&#10;uIT0X5jPqSEgLVr5/QLC7DskYII/9/095vQ8z9Gt67omfXIOlQQaNGiBBg0aAWjQAg0atECDFmjQ&#10;oAUatECDBi3QoLUIdMd/z0ydHco140O55oRQrjkklGvOOct05v1Rc57mQJy8WblyWN6sXDkvL1cu&#10;GxnKNVNDuWawZx1FgQYNWqBBg0YAGrRAgwYt0KAFGjRogQYt0KBBCzRogQYNWqBBCzRo0AINWqBB&#10;gxZo0AINGrRAgxZo0KAFGrSWgG73Grypg9N3eq+p6X5Al5HZ44z152WnY1Yedg58B1nZez7LGoiT&#10;NWdtpjz+q2Mb6+GHZP2JGyjP+jFsbT1pfHrNbap8eNZRFmjQoAUaNGgEoEELNGjQAg1aoEGDFmjQ&#10;Ag0atECD1p/9AKkzTyh2EOP+AAAAAElFTkSuQmCC&#10;"
id="image1"
x="-167.89395"
y="0" />
<rect
style="fill:#161626;fill-opacity:1"
id="rect2"
width="160"
height="160"
x="0"
y="0" />
<path
style="fill:#202030;fill-opacity:1"
id="rect1"
width="80"
height="80"
x="0"
y="0"
sodipodi:type="rect"
inkscape:path-effect="#path-effect4"
d="m 8,0 h 64 l 8,8 v 64 l -8,8 H 8 L 0,72 V 8 Z" />
<path
style="fill:#202030;fill-opacity:1"
id="rect1-3"
width="80"
height="80"
x="80"
y="80"
inkscape:path-effect="#path-effect5"
sodipodi:type="rect"
d="m 88,80 h 64 l 8,8 v 64 l -8,8 H 88 l -8,-8 V 88 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB