style: Unified spacing to 2 and add editor config

This commit is contained in:
Wessel Tip
2021-03-17 14:01:53 +01:00
parent aec47d9d0b
commit 9981a28638
98 changed files with 2931 additions and 2902 deletions

View File

@@ -4,4 +4,4 @@ export const MARKETPLACE_URL = 'https://marketplace.muetab.com';
export const WEBSITE_URL = 'https://muetab.com';
export const OFFLINE_IMAGES = 20;
export const BETA_VERSION = false;
export const VERSION = '5.0.0';
export const VERSION = '5.0.0';

View File

@@ -1,102 +1,102 @@
[
{
"name": "time",
"value": true
},
{
"name": "greeting",
"value": true
},
{
"name": "background",
"value": true
},
{
"name": "quote",
"value": true
},
{
"name": "searchBar",
"value": true
},
{
"name": "blur",
"value": 0
},
{
"name": "brightness",
"value": 100
},
{
"name": "events",
"value": true
},
{
"name": "customBackgroundColour",
"value": ""
},
{
"name": "customBackground",
"value": ""
},
{
"name": "greetingName",
"value": ""
},
{
"name": "defaultGreetingMessage",
"value": true
},
{
"name": "backgroundAPI",
"value": "mue"
},
{
"name": "ampm",
"value": true
},
{
"name": "copyButton",
"value": false
},
{
"name": "installed",
"value": "[]"
},
{
"name": "searchEngine",
"value": "duckduckgo"
},
{
"name": "refresh",
"value": true
},
{
"name": "view",
"value": true
},
{
"name": "favouriteEnabled",
"value": true
},
{
"name": "tweetButton",
"value": false
},
{
"name": "favouriteQuoteEnabled",
"value": false
},
{
"name": "showWelcome",
"value": true
},
{
"name": "quotelanguage",
"value": "English"
},
{
"name": "date",
"value": "false"
}
]
{
"name": "time",
"value": true
},
{
"name": "greeting",
"value": true
},
{
"name": "background",
"value": true
},
{
"name": "quote",
"value": true
},
{
"name": "searchBar",
"value": true
},
{
"name": "blur",
"value": 0
},
{
"name": "brightness",
"value": 100
},
{
"name": "events",
"value": true
},
{
"name": "customBackgroundColour",
"value": ""
},
{
"name": "customBackground",
"value": ""
},
{
"name": "greetingName",
"value": ""
},
{
"name": "defaultGreetingMessage",
"value": true
},
{
"name": "backgroundAPI",
"value": "mue"
},
{
"name": "ampm",
"value": true
},
{
"name": "copyButton",
"value": false
},
{
"name": "installed",
"value": "[]"
},
{
"name": "searchEngine",
"value": "duckduckgo"
},
{
"name": "refresh",
"value": true
},
{
"name": "view",
"value": true
},
{
"name": "favouriteEnabled",
"value": true
},
{
"name": "tweetButton",
"value": false
},
{
"name": "favouriteQuoteEnabled",
"value": false
},
{
"name": "showWelcome",
"value": true
},
{
"name": "quotelanguage",
"value": "English"
},
{
"name": "date",
"value": "false"
}
]

View File

@@ -6,30 +6,30 @@ const hexRegexp = /(^#{0,1}[0-9A-F]{6}$)|(^#{0,1}[0-9A-F]{3}$)|(^#{0,1}[0-9A-F]{
const regexp = /([0-9A-F])([0-9A-F])([0-9A-F])/i;
export default function hexToRgb(value) {
const valid = hexRegexp.test(value);
const valid = hexRegexp.test(value);
if (valid) {
if (value[0] === '#') {
value = value.slice(1, value.length);
}
if (value.length === 3){
value = value.replace(regexp, '$1$1$2$2$3$3');
}
const red = parseInt(value.substr(0, 2), 16);
const green = parseInt(value.substr(2, 2), 16);
const blue = parseInt(value.substr(4, 2), 16);
const alpha = parseInt(value.substr(6, 2), 16) / 255;
const color = setRgba(red, green, blue, alpha);
const hsv = rgbToHsv({ ...color });
return {
...color,
...hsv,
};
if (valid) {
if (value[0] === '#') {
value = value.slice(1, value.length);
}
return false;
if (value.length === 3){
value = value.replace(regexp, '$1$1$2$2$3$3');
}
const red = parseInt(value.substr(0, 2), 16);
const green = parseInt(value.substr(2, 2), 16);
const blue = parseInt(value.substr(4, 2), 16);
const alpha = parseInt(value.substr(6, 2), 16) / 255;
const color = setRgba(red, green, blue, alpha);
const hsv = rgbToHsv({ ...color });
return {
...color,
...hsv,
};
}
return false;
}

View File

@@ -1,19 +1,19 @@
export default function rgbToHex(red, green, blue) {
let r16 = red.toString(16);
let g16 = green.toString(16);
let b16 = blue.toString(16);
let r16 = red.toString(16);
let g16 = green.toString(16);
let b16 = blue.toString(16);
if (red < 16) {
r16 = `0${r16}`;
}
if (red < 16) {
r16 = `0${r16}`;
}
if (green < 16) {
g16 = `0${g16}`;
}
if (blue < 16) {
b16 = `0${b16}`;
}
if (green < 16) {
g16 = `0${g16}`;
}
return r16 + g16 + b16;
if (blue < 16) {
b16 = `0${b16}`;
}
return r16 + g16 + b16;
}

View File

@@ -1,41 +1,41 @@
export default function rgbToHSv({ red, green, blue }) {
let rr, gg, bb, h, s;
let rr, gg, bb, h, s;
const rabs = red / 255;
const gabs = green / 255;
const babs = blue / 255;
const rabs = red / 255;
const gabs = green / 255;
const babs = blue / 255;
const v = Math.max(rabs, gabs, babs);
const diff = v - Math.min(rabs, gabs, babs);
const diffc = c => (v - c) / 6 / diff + 1 / 2;
const v = Math.max(rabs, gabs, babs);
const diff = v - Math.min(rabs, gabs, babs);
const diffc = c => (v - c) / 6 / diff + 1 / 2;
if (diff === 0) {
h = 0;
s = 0;
} else {
s = diff / v;
rr = diffc(rabs);
gg = diffc(gabs);
bb = diffc(babs);
if (diff === 0) {
h = 0;
s = 0;
} else {
s = diff / v;
rr = diffc(rabs);
gg = diffc(gabs);
bb = diffc(babs);
if (rabs === v){
h = bb - gg;
} else if (gabs === v) {
h = (1 / 3) + rr - bb;
} else if (babs === v) {
h = (2 / 3) + gg - rr;
}
if (h < 0) {
h += 1;
} else if (h > 1) {
h -= 1;
}
if (rabs === v){
h = bb - gg;
} else if (gabs === v) {
h = (1 / 3) + rr - bb;
} else if (babs === v) {
h = (2 / 3) + gg - rr;
}
return {
hue: Math.round(h * 360),
saturation: Math.round(s * 100),
value: Math.round(v * 100),
};
if (h < 0) {
h += 1;
} else if (h > 1) {
h -= 1;
}
}
return {
hue: Math.round(h * 360),
saturation: Math.round(s * 100),
value: Math.round(v * 100),
};
}

View File

@@ -1,19 +1,19 @@
const isValidRGBValue = (value) => {
return (typeof (value) === 'number' && Number.isNaN(value) === false && value >= 0 && value <= 255);
return (typeof (value) === 'number' && Number.isNaN(value) === false && value >= 0 && value <= 255);
}
export default function setRGBA(red, green, blue, alpha) {
if (isValidRGBValue(red) && isValidRGBValue(green) && isValidRGBValue(blue)) {
const color = {
red: red | 0,
green: green | 0,
blue: blue | 0,
};
if (isValidRGBValue(red) && isValidRGBValue(green) && isValidRGBValue(blue)) {
const color = {
red: red | 0,
green: green | 0,
blue: blue | 0,
};
if (isValidRGBValue(alpha) === true) {
color.alpha = alpha | 0;
}
return color;
if (isValidRGBValue(alpha) === true) {
color.alpha = alpha | 0;
}
return color;
}
}

View File

@@ -1,86 +1,86 @@
import { toast } from 'react-toastify';
export default class MarketplaceFunctions {
static urlParser (input) { // based on https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
const urlPattern = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/;
return input.replace(urlPattern, '<a href="$&" target="_blank">$&</a>');
static urlParser (input) { // based on https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
const urlPattern = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/;
return input.replace(urlPattern, '<a href="$&" target="_blank">$&</a>');
}
static uninstall(name, type) {
switch (type) {
case 'settings':
const oldSettings = JSON.parse(localStorage.getItem('backup_settings'));
localStorage.clear();
oldSettings.forEach(item => localStorage.setItem(item.name, item.value));
break;
case 'quote_packs':
localStorage.removeItem('quote_packs');
localStorage.removeItem('quoteAPI');
break;
default:
try {
localStorage.removeItem(type);
} catch (e) {
toast('Failed to uninstall addon, check the console');
console.error(e);
}
}
static uninstall(name, type) {
switch (type) {
case 'settings':
const oldSettings = JSON.parse(localStorage.getItem('backup_settings'));
localStorage.clear();
oldSettings.forEach(item => localStorage.setItem(item.name, item.value));
break;
case 'quote_packs':
localStorage.removeItem('quote_packs');
localStorage.removeItem('quoteAPI');
break;
default:
try {
localStorage.removeItem(type);
} catch (e) {
toast('Failed to uninstall addon, check the console');
console.error(e);
}
let installed = JSON.parse(localStorage.getItem('installed'));
for (let i = 0; i < installed.length; i++) {
if (installed[i].name === name) {
installed.splice(i, 1);
break;
}
}
localStorage.setItem('installed', JSON.stringify(installed));
}
static install(type, input, sideload) {
switch (type) {
case 'settings':
localStorage.removeItem('backup_settings');
let oldSettings = [];
for (const key of Object.keys(localStorage)) {
oldSettings.push({
name: key,
value: localStorage.getItem(key)
});
}
let installed = JSON.parse(localStorage.getItem('installed'));
for (let i = 0; i < installed.length; i++) {
if (installed[i].name === name) {
installed.splice(i, 1);
break;
}
localStorage.setItem('backup_settings', JSON.stringify(oldSettings));
input.settings.forEach(element => localStorage.setItem(element.name, element.value));
break;
case 'photo_packs':
localStorage.setItem('photo_packs', JSON.stringify(input.photos));
break;
case 'quote_packs':
if (input.quote_api) {
localStorage.setItem('quoteAPI', JSON.stringify(input.quote_api));
}
localStorage.setItem('installed', JSON.stringify(installed));
localStorage.setItem('quote_packs', JSON.stringify(input.quotes));
break;
default:
break;
}
static install(type, input, sideload) {
switch (type) {
case 'settings':
localStorage.removeItem('backup_settings');
let installed = JSON.parse(localStorage.getItem('installed'));
let oldSettings = [];
for (const key of Object.keys(localStorage)) {
oldSettings.push({
name: key,
value: localStorage.getItem(key)
});
}
localStorage.setItem('backup_settings', JSON.stringify(oldSettings));
input.settings.forEach(element => localStorage.setItem(element.name, element.value));
break;
case 'photo_packs':
localStorage.setItem('photo_packs', JSON.stringify(input.photos));
break;
case 'quote_packs':
if (input.quote_api) {
localStorage.setItem('quoteAPI', JSON.stringify(input.quote_api));
}
localStorage.setItem('quote_packs', JSON.stringify(input.quotes));
break;
default:
break;
if (sideload) {
installed.push({
content: {
updated: 'Unpublished',
data: input
}
let installed = JSON.parse(localStorage.getItem('installed'));
if (sideload) {
installed.push({
content: {
updated: 'Unpublished',
data: input
}
});
} else {
installed.push(input);
}
localStorage.setItem('installed', JSON.stringify(installed));
});
} else {
installed.push(input);
}
}
localStorage.setItem('installed', JSON.stringify(installed));
}
}

View File

@@ -1,19 +1,19 @@
export default function deepmerge(...objects) {
let target = {};
let target = {};
const merge = (obj) => {
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (typeof obj[prop] === 'object') {
target[prop] = deepmerge(target[prop], obj[prop]);
} else {
target[prop] = obj[prop];
}
}
const merge = (obj) => {
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (typeof obj[prop] === 'object') {
target[prop] = deepmerge(target[prop], obj[prop]);
} else {
target[prop] = obj[prop];
}
};
}
}
};
objects.forEach(object => merge(object));
objects.forEach(object => merge(object));
return target;
}
return target;
}

View File

@@ -2,112 +2,112 @@ const defaultSettings = require('../default_settings.json');
const languages = require('../languages.json');
const saveFile = (data, filename = 'file') => {
if (typeof data === 'object') {
data = JSON.stringify(data, undefined, 4);
}
if (typeof data === 'object') {
data = JSON.stringify(data, undefined, 4);
}
const blob = new Blob([data], { type: 'text/json' });
let e = document.createEvent('MouseEvents');
let a = document.createElement('a');
const blob = new Blob([data], { type: 'text/json' });
let e = document.createEvent('MouseEvents');
let a = document.createElement('a');
a.href = window.URL.createObjectURL(blob);
a.download = filename;
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
a.href = window.URL.createObjectURL(blob);
a.download = filename;
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
};
export default class SettingsFunctions {
static exportSettings() {
let settings = {};
for (const key of Object.keys(localStorage)) {
settings[key] = localStorage.getItem(key);
}
saveFile(settings, 'mue-settings.json');
static exportSettings() {
let settings = {};
for (const key of Object.keys(localStorage)) {
settings[key] = localStorage.getItem(key);
}
saveFile(settings, 'mue-settings.json');
}
static setItem(key, value) {
const old = localStorage.getItem(key);
let val = true;
if (old !== null && !value) {
if (old === 'true') {
val = false;
}
if (old === 'false') {
val = true;
}
}
static setItem(key, value) {
const old = localStorage.getItem(key);
let val = true;
localStorage.setItem(key, val);
}
if (old !== null && !value) {
if (old === 'true') {
val = false;
}
static setDefaultSettings(reset) {
localStorage.clear();
defaultSettings.forEach((element) => localStorage.setItem(element.name, element.value));
if (old === 'false') {
val = true;
}
}
localStorage.setItem(key, val);
// Set theme depending on user preferred
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
localStorage.setItem('darkTheme', true);
} else {
localStorage.setItem('darkTheme', false);
}
static setDefaultSettings(reset) {
localStorage.clear();
defaultSettings.forEach((element) => localStorage.setItem(element.name, element.value));
// Languages
const languageCodes = languages.map(({ code }) => code);
const browserLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
// Set theme depending on user preferred
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
localStorage.setItem('darkTheme', true);
} else {
localStorage.setItem('darkTheme', false);
}
// Languages
const languageCodes = languages.map(({ code }) => code);
const browserLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
if (languageCodes.includes(browserLanguage)) {
localStorage.setItem('language', browserLanguage);
if (browserLanguage !== 'en-GB' || browserLanguage !== 'en-US') {
document.documentElement.lang = browserLanguage;
}
} else {
localStorage.setItem('language', 'en-GB');
}
if (reset) {
localStorage.setItem('showWelcome', false);
}
// Finally we set this to true so it doesn't run the function on every load
localStorage.setItem('firstRun', true);
window.location.reload();
if (languageCodes.includes(browserLanguage)) {
localStorage.setItem('language', browserLanguage);
if (browserLanguage !== 'en-GB' || browserLanguage !== 'en-US') {
document.documentElement.lang = browserLanguage;
}
} else {
localStorage.setItem('language', 'en-GB');
}
static loadSettings() {
const css = localStorage.getItem('customcss');
if (css) {
document.head.insertAdjacentHTML('beforeend', '<style>' + css + '</style>');
}
if (localStorage.getItem('darkTheme') === 'true') {
document.getElementsByClassName('Toastify')[0].classList.add('dark');
}
const font = localStorage.getItem('font');
if (font) {
const data = JSON.parse(font);
let url = '';
if (data.google === true) {
url = `@import url('https://fonts.googleapis.com/css2?family=${data.name}&display=swap');`;
if (reset) {
localStorage.setItem('showWelcome', false);
}
// Finally we set this to true so it doesn't run the function on every load
localStorage.setItem('firstRun', true);
window.location.reload();
}
static loadSettings() {
const css = localStorage.getItem('customcss');
if (css) {
document.head.insertAdjacentHTML('beforeend', '<style>' + css + '</style>');
}
if (localStorage.getItem('darkTheme') === 'true') {
document.getElementsByClassName('Toastify')[0].classList.add('dark');
}
const font = localStorage.getItem('font');
if (font) {
const data = JSON.parse(font);
let url = '';
if (data.google === true) {
url = `@import url('https://fonts.googleapis.com/css2?family=${data.name}&display=swap');`;
}
document.head.insertAdjacentHTML('beforeend', `
<style>
${url}
* {
font-family: '${data.name}', 'Lexend Deca' !important;
}
document.head.insertAdjacentHTML('beforeend', `
<style>
${url}
* {
font-family: '${data.name}', 'Lexend Deca' !important;
}
</style>`);
}
const zoom = localStorage.getItem('zoom');
if (zoom !== 100) { // don't bother if it's default zoom
document.body.style.zoom = zoom + '%';
}
</style>`);
}
}
const zoom = localStorage.getItem('zoom');
if (zoom !== 100) { // don't bother if it's default zoom
document.body.style.zoom = zoom + '%';
}
}
}

View File

@@ -1,30 +1,30 @@
[
{
"text": "English (UK)",
"code": "en-GB"
},
{
"text": "English (US)",
"code": "en-US"
},
{
"text": "Español",
"code": "es"
},
{
"text": "Français",
"code": "fr"
},
{
"text": "Nederlands",
"code": "nl"
},
{
"text": "Norsk",
"code": "no"
},
{
"text": "Pусский",
"code": "ru"
}
]
{
"text": "English (UK)",
"code": "en-GB"
},
{
"text": "English (US)",
"code": "en-US"
},
{
"text": "Español",
"code": "es"
},
{
"text": "Français",
"code": "fr"
},
{
"text": "Nederlands",
"code": "nl"
},
{
"text": "Norsk",
"code": "no"
},
{
"text": "Pусский",
"code": "ru"
}
]

View File

@@ -1,6 +1,6 @@
[
{
"login": "FuryingFox",
"avatar_url": "https://avatars.githubusercontent.com/u/28787893?v=4"
}
]
{
"login": "FuryingFox",
"avatar_url": "https://avatars.githubusercontent.com/u/28787893?v=4"
}
]