initial commit
This commit is contained in:
		
							
								
								
									
										21
									
								
								appinfo/info.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								appinfo/info.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0"?>
 | 
				
			||||||
 | 
					<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
					      xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
 | 
				
			||||||
 | 
					    <id>pride_flags</id>
 | 
				
			||||||
 | 
					    <name>Pride Flags</name>
 | 
				
			||||||
 | 
					    <summary>Add pride flags to your nextcloud</summary>
 | 
				
			||||||
 | 
					    <description><![CDATA[Diversity and inclusion are what makes the world worth living in! Let's show some pride!]]></description>
 | 
				
			||||||
 | 
					    <version>0.1.2</version>
 | 
				
			||||||
 | 
					    <licence>cnvpl</licence>
 | 
				
			||||||
 | 
					    <author mail="" homepage="https://github.com/finallycoffee/nextcloud-pride"></author>
 | 
				
			||||||
 | 
					    <namespace>PrideFlags</namespace>
 | 
				
			||||||
 | 
					    <category>customization</category>
 | 
				
			||||||
 | 
					    <bugs>https://github.com/finallycoffee/nextcloud-pride/issues</bugs>
 | 
				
			||||||
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					        <nextcloud min-version="26" max-version="28"/>
 | 
				
			||||||
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					    <settings>
 | 
				
			||||||
 | 
					      <personal-section>OCA\PrideFlags\Settings\PersonalSection</personal-section>
 | 
				
			||||||
 | 
					      <personal>OCA\PrideFlags\Settings\PersonalSettings</personal>
 | 
				
			||||||
 | 
					    </settings>
 | 
				
			||||||
 | 
					</info>
 | 
				
			||||||
							
								
								
									
										8
									
								
								appinfo/routes.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								appinfo/routes.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					<?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return [
 | 
				
			||||||
 | 
						'routes' => [
 | 
				
			||||||
 | 
							['name' => 'settings#get', 'url' => '/settings', 'verb' => 'GET'],
 | 
				
			||||||
 | 
							['name' => 'settings#set', 'url' => '/settings', 'verb' => 'POST'],
 | 
				
			||||||
 | 
						]
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
							
								
								
									
										3
									
								
								css/pride.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								css/pride.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					.files-list__row-icon .folder-icon svg {
 | 
				
			||||||
 | 
						fill: url("#gradient-pride");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										29
									
								
								js/pride-settings.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								js/pride-settings.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					const folder_selector = document.querySelectorAll('.pride_flags_user_settings .user-settings.folder-flavour select');
 | 
				
			||||||
 | 
					const button_selector = document.querySelectorAll('.pride_flags_user_settings .user-settings.button-flavour select');
 | 
				
			||||||
 | 
					const submit_button = document.querySelectorAll('.pride_flags_user_settings .settings-pride-submit');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fetch('/index.php/apps/pride_flags/settings')
 | 
				
			||||||
 | 
						.then(res => JSON.parse(res))
 | 
				
			||||||
 | 
						.then(({folderPrideVariant, buttonPrideVariant}) => {
 | 
				
			||||||
 | 
							folder_selector.value = folderPrideVariant;
 | 
				
			||||||
 | 
							button_selector.value = buttonPrideVariant;
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function save() {
 | 
				
			||||||
 | 
						const payload = {
 | 
				
			||||||
 | 
							folderVariant: folder_selector.value,
 | 
				
			||||||
 | 
							buttonVariant: button_selector.value,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fetch('index.php/apps/pride_flags/settings', {
 | 
				
			||||||
 | 
							method: 'POST',
 | 
				
			||||||
 | 
							body: JSON.stringify(payload),
 | 
				
			||||||
 | 
							headers: {
 | 
				
			||||||
 | 
								"Content-Type": "application/json",
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}).then(response => {
 | 
				
			||||||
 | 
							if (response.ok) {
 | 
				
			||||||
 | 
								window.location.reload();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					submit_button.on('click', e => save());
 | 
				
			||||||
							
								
								
									
										66
									
								
								js/pride.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								js/pride.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					const flags = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: 'pride',
 | 
				
			||||||
 | 
							colors: ['#E04641', '#DE7E41', '#E4D56F', '#55B85F', '#2473B5', '#6F5DA5'],
 | 
				
			||||||
 | 
							transform: 'rotate(90)'
 | 
				
			||||||
 | 
						}, {
 | 
				
			||||||
 | 
							id: 'trans',
 | 
				
			||||||
 | 
							colors: ['#55CDFC', '#F7A8B8', '#FFFFFF', '#F7A8B8', '#55CDFC'],
 | 
				
			||||||
 | 
							transform: 'rotate(90)'
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const generateGradient = colors => {
 | 
				
			||||||
 | 
						const steps = colors.length;
 | 
				
			||||||
 | 
						return colors.map((color, index) => { return [
 | 
				
			||||||
 | 
							[color, (index / steps)],
 | 
				
			||||||
 | 
							[color, (index + 1) / steps]
 | 
				
			||||||
 | 
						]}).flat();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const generateStops = (colors, opacity) => {
 | 
				
			||||||
 | 
						return generateGradient(colors).map(([color, offset]) => {
 | 
				
			||||||
 | 
							return `<stop stop-color="${color}" stop-opacity="${opacity}" offset="${offset * 100}%"></stop>`;
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const makeLinearGradientSvg = (id, colors, opacity, transform) => {
 | 
				
			||||||
 | 
						return `<svg xmlns="http://www.w3.org/2000/svg" id="svg-${id}" preserveAspectRatio="none" width="100%" height="100%">
 | 
				
			||||||
 | 
							  <defs>
 | 
				
			||||||
 | 
							    <linearGradient id="gradient-${id}" gradientTransform="${transform}">
 | 
				
			||||||
 | 
							      ${generateStops(colors, opacity).join('\n')}
 | 
				
			||||||
 | 
							    </linearGradient>
 | 
				
			||||||
 | 
							  </defs>
 | 
				
			||||||
 | 
							  <style>
 | 
				
			||||||
 | 
							    rect { height: 100%; width: 100%; }
 | 
				
			||||||
 | 
							  </style>
 | 
				
			||||||
 | 
							  <rect fill="url(#gradient-${id})" width="100%" height="100%" />
 | 
				
			||||||
 | 
							</svg>`;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flags.forEach(flag => {
 | 
				
			||||||
 | 
						const svg_html = makeLinearGradientSvg(flag.id, flag.colors, flag.opacity ?? '0.8', flag.transform ?? 'rotate(0)');
 | 
				
			||||||
 | 
						const container = document.createElement('div');
 | 
				
			||||||
 | 
						container.classList.add('hidden-visually');
 | 
				
			||||||
 | 
						container.ariaHidden = true;
 | 
				
			||||||
 | 
						container.innerHTML = svg_html;
 | 
				
			||||||
 | 
						const style_c = document.createElement('style');
 | 
				
			||||||
 | 
						style_c.textContent = `
 | 
				
			||||||
 | 
						body {
 | 
				
			||||||
 | 
							--image-background-pride-${flag.id}: url('data:image/svg+xml;base64,${btoa(svg_html)}');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						#app-navigation ul > li.active,
 | 
				
			||||||
 | 
						.button-vue--vue-primary,
 | 
				
			||||||
 | 
						.preview-card__header,
 | 
				
			||||||
 | 
						.profile__primary-action-button,
 | 
				
			||||||
 | 
						.app-navigation-entry.active {
 | 
				
			||||||
 | 
							background-image: var(--image-background-pride-trans) !important;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.material-design-icon__svg,
 | 
				
			||||||
 | 
						.checkbox-radio-switch svg {
 | 
				
			||||||
 | 
							fill: url(#gradient-trans);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						`;
 | 
				
			||||||
 | 
						document.body.prepend(container);
 | 
				
			||||||
 | 
						document.head.prepend(style_c);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										9
									
								
								lib/AppConstants.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								lib/AppConstants.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abstract class AppConstants {
 | 
				
			||||||
 | 
						public const APP_ID = 'pride_flags';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								lib/AppInfo/Application.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								lib/AppInfo/Application.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags\AppInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use OCA\PrideFlags\AppConstants;
 | 
				
			||||||
 | 
					use OCP\Util;
 | 
				
			||||||
 | 
					use OCP\AppFramework\App;
 | 
				
			||||||
 | 
					use OCP\AppFramework\Bootstrap\IBootContext;
 | 
				
			||||||
 | 
					use OCP\AppFramework\Bootstrap\IBootstrap;
 | 
				
			||||||
 | 
					use OCP\AppFramework\Bootstrap\IRegistrationContext;
 | 
				
			||||||
 | 
					use OCP\IConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Application extends App implements IBootstrap {
 | 
				
			||||||
 | 
						const APP_ID = AppConstants::APP_ID;
 | 
				
			||||||
 | 
						public function __construct(array $urlParams = []) {
 | 
				
			||||||
 | 
							parent::__construct(AppConstants::APP_ID, $urlParams);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function register(IRegistrationContext $ctx): void {
 | 
				
			||||||
 | 
							$config = \OC::$server->get(IConfig::class);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function boot(IBootContext $ctx): void {
 | 
				
			||||||
 | 
							Util::addStyle(AppConstants::APP_ID, 'pride');
 | 
				
			||||||
 | 
							Util::addScript(AppConstants::APP_ID, 'pride');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								lib/Controller/SettingsController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								lib/Controller/SettingsController.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags\Controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use OCA\PrideFlags\Settings\AppSettings;
 | 
				
			||||||
 | 
					use OCP\IRequest;
 | 
				
			||||||
 | 
					use OCP\IConfig;
 | 
				
			||||||
 | 
					use OCP\Framework\Http;
 | 
				
			||||||
 | 
					use OCP\Framework\Http\JSONResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SettingsController {
 | 
				
			||||||
 | 
						public function __construct($appName, IRequest $request, AppSettings $settings) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function get(): JSONResponse {
 | 
				
			||||||
 | 
							return $this->makeJSONResponse(fn () => $this->settings->getAll());	
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function set(string $folderVariant, string $buttonVariant): JSONResponse {
 | 
				
			||||||
 | 
							$this->settings->set($folderVariant, $buttonVariant);
 | 
				
			||||||
 | 
							return $this->makeJSONResponse(fn () => $this->settings->getAll());	
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected function makeJSONResponse(Closure $closure): JSONResponse {
 | 
				
			||||||
 | 
							try {
 | 
				
			||||||
 | 
								return new JSONResponse($closure(), HTTP::STATUS_OK);
 | 
				
			||||||
 | 
							} catch (Exception $e) {
 | 
				
			||||||
 | 
								return new JSONResponse(['message' => $e->getMessage()], HTTP::INTERNAL_SERVER_ERROR);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								lib/Settings/AppSettings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lib/Settings/AppSettings.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					<?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags\Settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use OCA\PrideFlags\AppConstants;
 | 
				
			||||||
 | 
					use OCP\IConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AppSettings {
 | 
				
			||||||
 | 
						public const FOLDER_VARIANT = 'folderVariant';
 | 
				
			||||||
 | 
						public const BUTTON_VARIANT = 'buttonVariant';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function __construct(private IConfig $config) {
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getStringSetting(string $key, string $default = ''): string {
 | 
				
			||||||
 | 
							return $this->config->getAppValue(AppConstants::APP_ID, $key) ?: $default;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function setStringSetting(string $key, string $value): string {
 | 
				
			||||||
 | 
							return $this->config->setAppValue(AppConstants::APP_ID, $key, $value);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getAll(): array {
 | 
				
			||||||
 | 
							return [
 | 
				
			||||||
 | 
								AppSettings::FOLDER_VARIANT => $this->getStringSetting(AppSettings::FOLDER_VARIANT, 'pride'),
 | 
				
			||||||
 | 
								AppSettings::BUTTON_VARIANT => $this->getStringSetting(AppSettings::BUTTON_VARIANT, 'trans'),
 | 
				
			||||||
 | 
							]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function set($folder, $button): void {
 | 
				
			||||||
 | 
							$this->setStringSetting(AppSettings::FOLDER_VARIANT, $folder);
 | 
				
			||||||
 | 
							$this->setStringSetting(AppSettings::BUTTON_VARIANT, $button);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								lib/Settings/PersonalSection.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/Settings/PersonalSection.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags\Settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use OCA\PrideFlags\AppConstants;
 | 
				
			||||||
 | 
					use OCP\IL10N;
 | 
				
			||||||
 | 
					use OCP\IURLGenerator;
 | 
				
			||||||
 | 
					use OCP\Settings\IIConSection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PersonalSection implements IIconSection {
 | 
				
			||||||
 | 
						public function __construct(private IL10N $l10n, private IURLGenerator $urlGenerator) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getID(): string {
 | 
				
			||||||
 | 
							return AppConstants::APP_ID;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getName(): string {
 | 
				
			||||||
 | 
							return 'Pride';
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getPriority(): int {
 | 
				
			||||||
 | 
							return 100;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getIcon(): string {
 | 
				
			||||||
 | 
							return $this->urlGenerator->imagePath('core', 'actions/settings-dark.svg');
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								lib/Settings/PersonalSettings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								lib/Settings/PersonalSettings.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare(strict_types=1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace OCA\PrideFlags\Settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use OCA\PrideFlags\AppConstants;
 | 
				
			||||||
 | 
					use OCP\AppFramework\Http\TemplateResponse;
 | 
				
			||||||
 | 
					use OCP\Settings\ISettings;
 | 
				
			||||||
 | 
					use OCP\Util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PersonalSettings implements ISettings {
 | 
				
			||||||
 | 
						public function getForm(): TemplateResponse {
 | 
				
			||||||
 | 
							Util::addScript(AppConstants::APP_ID, 'pride-settings');
 | 
				
			||||||
 | 
							return new TemplateResponse(AppConstants::APP_ID, 'settings', []);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getSection(): string {
 | 
				
			||||||
 | 
							return AppConstants::APP_ID;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function getPriority(): int {
 | 
				
			||||||
 | 
							return 50;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								templates/settings.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								templates/settings.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
 | 
					<div class="pride_flags_user_settings">
 | 
				
			||||||
 | 
						<div class="settings-section section">
 | 
				
			||||||
 | 
							<h2 class="settings_section__name">Personal preferences</h2>
 | 
				
			||||||
 | 
							<div class="user-settings folder-flavour" style="margin-left: 40px; display: flex;">
 | 
				
			||||||
 | 
								<label for="user-settings-folder-flavour-select" style="display: flex; width: 100px;">Folders</label>
 | 
				
			||||||
 | 
								<select id="user-settings-folder-flavour-select" style="display: flex; width: 200px;">
 | 
				
			||||||
 | 
									<option value='pride'>Pride</option>
 | 
				
			||||||
 | 
									<option value='trans'>Trans Pride</option>
 | 
				
			||||||
 | 
								</select>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							<div class="user-settings button-flavour" style="margin-left: 40px; display: flex;">
 | 
				
			||||||
 | 
								<label for="user-settings-button-flavour-select" style="display: flex; width: 100px;">Buttons</label>
 | 
				
			||||||
 | 
								<select id="user-settings-button-flavour-select" style="display: flex; width: 200px;">
 | 
				
			||||||
 | 
									<option value='pride'>Pride</option>
 | 
				
			||||||
 | 
									<option value='trans'>Trans Pride</option>
 | 
				
			||||||
 | 
								</select>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							<button class="settings-pride-submit button primary" style="margin-left: 40px; display: flex; width: 80px; text-align: center;">Save</button>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user