diff --git a/index.html b/index.html index ba072eda..c910d2a3 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,10 @@ + Pleroma + + + diff --git a/src/assets/nsfw.png b/src/assets/nsfw.png index d2513776..e0d1fc2a 100644 Binary files a/src/assets/nsfw.png and b/src/assets/nsfw.png differ diff --git a/src/components/status_content/status_content.vue b/src/components/status_content/status_content.vue index 90bfaf40..62ebecda 100644 --- a/src/components/status_content/status_content.vue +++ b/src/components/status_content/status_content.vue @@ -192,8 +192,8 @@ $status-margin: 0.75em; object-fit: contain; &.emoji { - width: 32px; - height: 32px; + width: 50px; + height: 50px; } } diff --git a/src/i18n/en.json b/src/i18n/en.json index b4a154ae..33f90cb5 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -313,6 +313,8 @@ "collapse_subject": "Collapse posts with subjects", "composing": "Composing", "confirm_new_password": "Confirm new password", + "current_avatar": "Your current avatar", + "current_mascot": "Your current mascot", "current_password": "Current password", "mutes_and_blocks": "Mutes and Blocks", "data_import_export_tab": "Data import / export", @@ -433,8 +435,10 @@ "search_user_to_mute": "Search whom you want to mute", "security_tab": "Security", "scope_copy": "Copy scope when replying (DMs are always copied)", + "mascot": "Mastodon FE Mascot", "minimal_scopes_mode": "Minimize post scope selection options", "set_new_avatar": "Set new avatar", + "set_new_mascot": "Set new mascot", "set_new_profile_background": "Set new profile background", "set_new_profile_banner": "Set new profile banner", "reset_avatar": "Reset avatar", diff --git a/src/modules/users.js b/src/modules/users.js index 8a764a16..d783f882 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -88,6 +88,10 @@ const showReblogs = (store, userId) => { .then((relationship) => store.commit('updateUserRelationship', [relationship])) } +const fetchMascot = (store) => { + return store.rootState.api.backendInteractor.fetchMascot() + .then(({ url }) => store.commit('updateMascot', url)) +} const muteDomain = (store, domain) => { return store.rootState.api.backendInteractor.muteDomain({ domain }) .then(() => store.commit('addDomainMute', domain)) @@ -186,6 +190,9 @@ export const mutations = { state.currentUser.muteIds.push(muteId) } }, + updateMascot (state, mascotUrl) { + state.currentUser.mascot = mascotUrl + }, saveDomainMutes (state, domainMutes) { state.currentUser.domainMutes = domainMutes }, @@ -332,6 +339,9 @@ const users = { unmuteUsers (store, ids = []) { return Promise.all(ids.map(id => unmuteUser(store, id))) }, + fetchMascot (store) { + return fetchMascot(store) + }, fetchDomainMutes (store) { return store.rootState.api.backendInteractor.fetchDomainMutes() .then((domainMutes) => { diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 436b8b0a..f640fd1e 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -76,6 +76,7 @@ const MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute` const MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute` const MASTODON_SEARCH_2 = `/api/v2/search` const MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search' +const MASTODON_MASCOT_URL = '/api/v1/pleroma/mascot' const MASTODON_DOMAIN_BLOCKS_URL = '/api/v1/domain_blocks' const MASTODON_STREAMING = '/api/v1/streaming' const MASTODON_KNOWN_DOMAIN_LIST_URL = '/api/v1/instance/peers' @@ -855,6 +856,20 @@ const unmuteUser = ({ id, credentials }) => { return promisedRequest({ url: MASTODON_UNMUTE_USER_URL(id), credentials, method: 'POST' }) } +const fetchMascot = ({ credentials }) => { + return promisedRequest({ url: MASTODON_MASCOT_URL, credentials }) +} + +const updateMascot = ({ mascot, credentials }) => { + const form = new FormData() + form.append('file', mascot) + return fetch(MASTODON_MASCOT_URL, { + headers: authHeaders(credentials), + method: 'PUT', + body: form + }).then((data) => data.json()) +} + const subscribeUser = ({ id, credentials }) => { return promisedRequest({ url: MASTODON_SUBSCRIBE_USER(id), credentials, method: 'POST' }) } @@ -1335,6 +1350,8 @@ const apiService = { fetchPoll, fetchFavoritedByUsers, fetchRebloggedByUsers, + fetchMascot, + updateMascot, fetchEmojiReactions, reactWithEmoji, unreactWithEmoji, diff --git a/static/config.json b/static/config.json index f59e645a..56807ba6 100644 --- a/static/config.json +++ b/static/config.json @@ -24,6 +24,6 @@ "showInstanceSpecificPanel": false, "sidebarRight": false, "subjectLineBehavior": "email", - "theme": "pleroma-dark", + "theme": "ihatebeingalive", "webPushNotifications": false } diff --git a/static/font/css/lato.css b/static/font/css/lato.css new file mode 100644 index 00000000..b75a48d7 --- /dev/null +++ b/static/font/css/lato.css @@ -0,0 +1,13 @@ +/* lato-regular - latin */ +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: url('../font/lato-v15-latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Lato Regular'), local('Lato-Regular'), + url('../font/lato-v15-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../font/lato-v15-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../font/lato-v15-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../font/lato-v15-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../font/lato-v15-latin-regular.svg#Lato') format('svg'); /* Legacy iOS */ +} diff --git a/static/font/font/lato-v15-latin-regular.eot b/static/font/font/lato-v15-latin-regular.eot new file mode 100644 index 00000000..c6413069 Binary files /dev/null and b/static/font/font/lato-v15-latin-regular.eot differ diff --git a/static/font/font/lato-v15-latin-regular.svg b/static/font/font/lato-v15-latin-regular.svg new file mode 100644 index 00000000..55b43fb8 --- /dev/null +++ b/static/font/font/lato-v15-latin-regular.svg @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/font/lato-v15-latin-regular.ttf b/static/font/font/lato-v15-latin-regular.ttf new file mode 100644 index 00000000..3c2d417e Binary files /dev/null and b/static/font/font/lato-v15-latin-regular.ttf differ diff --git a/static/font/font/lato-v15-latin-regular.woff b/static/font/font/lato-v15-latin-regular.woff new file mode 100644 index 00000000..189a0feb Binary files /dev/null and b/static/font/font/lato-v15-latin-regular.woff differ diff --git a/static/font/font/lato-v15-latin-regular.woff2 b/static/font/font/lato-v15-latin-regular.woff2 new file mode 100644 index 00000000..6904b664 Binary files /dev/null and b/static/font/font/lato-v15-latin-regular.woff2 differ diff --git a/static/font/lato-v15-latin-regular.eot b/static/font/lato-v15-latin-regular.eot new file mode 100644 index 00000000..c6413069 Binary files /dev/null and b/static/font/lato-v15-latin-regular.eot differ diff --git a/static/font/lato-v15-latin-regular.svg b/static/font/lato-v15-latin-regular.svg new file mode 100644 index 00000000..55b43fb8 --- /dev/null +++ b/static/font/lato-v15-latin-regular.svg @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/font/lato-v15-latin-regular.ttf b/static/font/lato-v15-latin-regular.ttf new file mode 100644 index 00000000..3c2d417e Binary files /dev/null and b/static/font/lato-v15-latin-regular.ttf differ diff --git a/static/font/lato-v15-latin-regular.woff b/static/font/lato-v15-latin-regular.woff new file mode 100644 index 00000000..189a0feb Binary files /dev/null and b/static/font/lato-v15-latin-regular.woff differ diff --git a/static/font/lato-v15-latin-regular.woff2 b/static/font/lato-v15-latin-regular.woff2 new file mode 100644 index 00000000..6904b664 Binary files /dev/null and b/static/font/lato-v15-latin-regular.woff2 differ diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 00000000..14aaf4a3 Binary files /dev/null and b/static/logo.png differ diff --git a/static/styles.json b/static/styles.json index 23f57c65..feceb47e 100644 --- a/static/styles.json +++ b/static/styles.json @@ -12,6 +12,7 @@ "redmond-xxi": "/static/themes/redmond-xxi.json", "breezy-dark": "/static/themes/breezy-dark.json", "breezy-light": "/static/themes/breezy-light.json", + "ihatebeingalive": "/static/themes/ihatebeingalive.json", "mammal": "/static/themes/mammal.json", "paper": "/static/themes/paper.json" } diff --git a/static/themes/ihatebeingalive.json b/static/themes/ihatebeingalive.json new file mode 100644 index 00000000..ce468825 --- /dev/null +++ b/static/themes/ihatebeingalive.json @@ -0,0 +1,151 @@ +{ + "_pleroma_theme_version": 2, + "name": "ihatebeingalive", + "theme": { + "fonts": { + "interface": { + "family": "Lato" + } + }, + "shadows": { + "panel": [ + { + "x": "1", + "y": "2", + "blur": "6", + "spread": 0, + "color": "#000000", + "alpha": 0.6 + } + ], + "button": [ + { + "x": 0, + "y": "0", + "blur": "0", + "spread": "1", + "color": "#ffffff", + "alpha": "0.15", + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "panelHeader": [ + { + "x": 0, + "y": "40", + "blur": "40", + "spread": "-40", + "inset": true, + "color": "#ffffff", + "alpha": "0.1" + } + ], + "buttonHover": [ + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "--link", + "alpha": "0.3", + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": "1", + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "buttonPressed": [ + { + "x": 0, + "y": 0, + "blur": "0", + "spread": "50", + "color": "--faint", + "alpha": 1, + "inset": true + }, + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "#ffffff", + "alpha": 0.2, + "inset": true + }, + { + "x": "1", + "y": "1", + "blur": 0, + "spread": 0, + "color": "#000000", + "alpha": "0.3", + "inset": false + } + ], + "input": [ + { + "x": 0, + "y": "0", + "blur": 0, + "spread": "1", + "color": "#FFFFFF", + "alpha": "0.2", + "inset": true + } + ] + }, + "opacity": { + "bg": "0.99", + "btn": "0.9", + "input": "0.9", + "panel": "0.75", + "border": "0.55" + }, + "colors": { + "bg": "#070e1b", + "text": "#bebebe", + "link": "#3daee9", + "fg": "#31363b", + "fgLink": "#543fe7", + "panelLink": "#38a5ed", + "input": "#1b1d1f", + "topBar": "#0d1a31", + "topBarLink": "#bebebe", + "btn": "#1b1d1f", + "panel": "#0d1a31", + "alertError": "#ff090f", + "badgeNotification": "#024297", + "border": "#363c41", + "cRed": "#c42d38", + "cBlue": "#ffffff", + "cGreen": "#22b325", + "cOrange": "#d7d720" + }, + "radii": { + "btn": "4", + "input": "4", + "checkbox": "1", + "panel": "9", + "avatar": "3", + "avatarAlt": "4", + "tooltip": "7", + "attachment": "3" + } + } +}