diff --git a/.gitmodules b/.gitmodules
index 35b0cd787d..e69de29bb2 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "app/javascript/themes/mastodon-go"]
- path = app/javascript/themes/mastodon-go
- url = https://github.com/marrus-sh/mastodon-go
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index f5753963df..d116c4767e 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -12,7 +12,7 @@ class ApplicationController < ActionController::Base
helper_method :current_account
helper_method :current_session
- helper_method :current_theme
+ helper_method :current_flavour
helper_method :current_skin
helper_method :single_user_mode?
@@ -57,8 +57,8 @@ class ApplicationController < ActionController::Base
def pack(data, pack_name, skin = 'default')
return nil unless pack?(data, pack_name)
pack_data = {
- common: pack_name == 'common' ? nil : resolve_pack(data['name'] ? Themes.instance.get(current_theme) : Themes.instance.core, 'common'),
- name: data['name'],
+ common: pack_name == 'common' ? nil : resolve_pack(data['name'] ? Themes.instance.flavour(current_flavour) : Themes.instance.core, 'common'),
+ flavour: data['name'],
pack: pack_name,
preload: nil,
skin: nil,
@@ -88,8 +88,8 @@ class ApplicationController < ActionController::Base
def nil_pack(data, pack_name, skin = 'default')
{
- common: pack_name == 'common' ? nil : resolve_pack(data['name'] ? Themes.instance.get(current_theme) : Themes.instance.core, 'common', skin),
- name: data['name'],
+ common: pack_name == 'common' ? nil : resolve_pack(data['name'] ? Themes.instance.flavour(current_flavour) : Themes.instance.core, 'common', skin),
+ flavour: data['name'],
pack: nil,
preload: nil,
skin: nil,
@@ -102,23 +102,23 @@ class ApplicationController < ActionController::Base
if data['name'] && data.key?('fallback')
if data['fallback'].nil?
return nil_pack(data, pack_name, skin)
- elsif data['fallback'].is_a?(String) && Themes.instance.get(data['fallback'])
- return resolve_pack(Themes.instance.get(data['fallback']), pack_name, skin)
+ elsif data['fallback'].is_a?(String) && Themes.instance.flavour(data['fallback'])
+ return resolve_pack(Themes.instance.flavour(data['fallback']), pack_name, skin)
elsif data['fallback'].is_a?(Array)
data['fallback'].each do |fallback|
- return resolve_pack(Themes.instance.get(fallback), pack_name, skin) if Themes.instance.get(fallback)
+ return resolve_pack(Themes.instance.flavour(fallback), pack_name, skin) if Themes.instance.flavour(fallback)
end
end
return nil_pack(data, pack_name, skin)
end
- return data.key?('name') && data['name'] != default_theme ? resolve_pack(Themes.instance.get(default_theme), pack_name, skin) : nil_pack(data, pack_name, skin)
+ return data.key?('name') && data['name'] != Setting.default_settings['flavour'] ? resolve_pack(Themes.instance.flavour(Setting.default_settings['flavour']), pack_name, skin) : nil_pack(data, pack_name, skin)
end
result
end
def use_pack(pack_name)
@core = resolve_pack(Themes.instance.core, pack_name)
- @theme = resolve_pack(Themes.instance.get(current_theme), pack_name, current_skin)
+ @theme = resolve_pack(Themes.instance.flavour(current_flavour), pack_name, current_skin)
end
protected
@@ -151,21 +151,13 @@ class ApplicationController < ActionController::Base
@current_session ||= SessionActivation.find_by(session_id: cookies.signed['_session_id'])
end
- def default_theme
- Setting.default_settings['theme']
- end
-
- def current_theme
- return default_theme unless Themes.instance.names.include? current_user&.setting_theme
- current_user.setting_theme
- end
-
- def default_skin
- 'default'
+ def current_flavour
+ return Setting.default_settings['flavour'] unless Themes.instance.flavours.include? current_user&.setting_flavour
+ current_user.setting_flavour
end
def current_skin
- return default_skin unless Themes.instance.skins_for(current_theme).include? current_user&.setting_skin
+ return 'default' unless Themes.instance.skins_for(current_flavour).include? current_user&.setting_skin
current_user.setting_skin
end
diff --git a/app/javascript/core/settings.js b/app/javascript/core/settings.js
index bc5f9ed1d9..1e4bb4cede 100644
--- a/app/javascript/core/settings.js
+++ b/app/javascript/core/settings.js
@@ -3,7 +3,7 @@
const { length } = require('stringz');
const { delegate } = require('rails-ujs');
-import { processBio } from 'themes/glitch/util/bio_metadata';
+import { processBio } from 'flavours/glitch/util/bio_metadata';
delegate(document, '.account_display_name', 'input', ({ target }) => {
const nameCounter = document.querySelector('.name-counter');
diff --git a/app/javascript/themes/glitch/actions/accounts.js b/app/javascript/flavours/glitch/actions/accounts.js
similarity index 99%
rename from app/javascript/themes/glitch/actions/accounts.js
rename to app/javascript/flavours/glitch/actions/accounts.js
index f1a8c5471e..8ab92f9e7a 100644
--- a/app/javascript/themes/glitch/actions/accounts.js
+++ b/app/javascript/flavours/glitch/actions/accounts.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST';
export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/alerts.js b/app/javascript/flavours/glitch/actions/alerts.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/alerts.js
rename to app/javascript/flavours/glitch/actions/alerts.js
diff --git a/app/javascript/themes/glitch/actions/blocks.js b/app/javascript/flavours/glitch/actions/blocks.js
similarity index 97%
rename from app/javascript/themes/glitch/actions/blocks.js
rename to app/javascript/flavours/glitch/actions/blocks.js
index 6ba9460f02..fe44ca19a0 100644
--- a/app/javascript/themes/glitch/actions/blocks.js
+++ b/app/javascript/flavours/glitch/actions/blocks.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
import { fetchRelationships } from './accounts';
export const BLOCKS_FETCH_REQUEST = 'BLOCKS_FETCH_REQUEST';
diff --git a/app/javascript/themes/glitch/actions/bundles.js b/app/javascript/flavours/glitch/actions/bundles.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/bundles.js
rename to app/javascript/flavours/glitch/actions/bundles.js
diff --git a/app/javascript/themes/glitch/actions/cards.js b/app/javascript/flavours/glitch/actions/cards.js
similarity index 96%
rename from app/javascript/themes/glitch/actions/cards.js
rename to app/javascript/flavours/glitch/actions/cards.js
index 2a1bc369a3..c897daf58d 100644
--- a/app/javascript/themes/glitch/actions/cards.js
+++ b/app/javascript/flavours/glitch/actions/cards.js
@@ -1,4 +1,4 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
export const STATUS_CARD_FETCH_REQUEST = 'STATUS_CARD_FETCH_REQUEST';
export const STATUS_CARD_FETCH_SUCCESS = 'STATUS_CARD_FETCH_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/columns.js b/app/javascript/flavours/glitch/actions/columns.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/columns.js
rename to app/javascript/flavours/glitch/actions/columns.js
diff --git a/app/javascript/themes/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js
similarity index 98%
rename from app/javascript/themes/glitch/actions/compose.js
rename to app/javascript/flavours/glitch/actions/compose.js
index 07c4694773..32746f27b6 100644
--- a/app/javascript/themes/glitch/actions/compose.js
+++ b/app/javascript/flavours/glitch/actions/compose.js
@@ -1,6 +1,6 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
import { throttle } from 'lodash';
-import { search as emojiSearch } from 'themes/glitch/util/emoji/emoji_mart_search_light';
+import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light';
import { useEmoji } from './emojis';
import {
diff --git a/app/javascript/themes/glitch/actions/domain_blocks.js b/app/javascript/flavours/glitch/actions/domain_blocks.js
similarity index 97%
rename from app/javascript/themes/glitch/actions/domain_blocks.js
rename to app/javascript/flavours/glitch/actions/domain_blocks.js
index 0a880394a8..8506df91c9 100644
--- a/app/javascript/themes/glitch/actions/domain_blocks.js
+++ b/app/javascript/flavours/glitch/actions/domain_blocks.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
export const DOMAIN_BLOCK_REQUEST = 'DOMAIN_BLOCK_REQUEST';
export const DOMAIN_BLOCK_SUCCESS = 'DOMAIN_BLOCK_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/emojis.js b/app/javascript/flavours/glitch/actions/emojis.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/emojis.js
rename to app/javascript/flavours/glitch/actions/emojis.js
diff --git a/app/javascript/themes/glitch/actions/favourites.js b/app/javascript/flavours/glitch/actions/favourites.js
similarity index 97%
rename from app/javascript/themes/glitch/actions/favourites.js
rename to app/javascript/flavours/glitch/actions/favourites.js
index e9b3559af6..decdcee4f2 100644
--- a/app/javascript/themes/glitch/actions/favourites.js
+++ b/app/javascript/flavours/glitch/actions/favourites.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
export const FAVOURITED_STATUSES_FETCH_REQUEST = 'FAVOURITED_STATUSES_FETCH_REQUEST';
export const FAVOURITED_STATUSES_FETCH_SUCCESS = 'FAVOURITED_STATUSES_FETCH_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/height_cache.js b/app/javascript/flavours/glitch/actions/height_cache.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/height_cache.js
rename to app/javascript/flavours/glitch/actions/height_cache.js
diff --git a/app/javascript/themes/glitch/actions/interactions.js b/app/javascript/flavours/glitch/actions/interactions.js
similarity index 99%
rename from app/javascript/themes/glitch/actions/interactions.js
rename to app/javascript/flavours/glitch/actions/interactions.js
index d61a7ba2ad..ceeb2773bd 100644
--- a/app/javascript/themes/glitch/actions/interactions.js
+++ b/app/javascript/flavours/glitch/actions/interactions.js
@@ -1,4 +1,4 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
export const REBLOG_REQUEST = 'REBLOG_REQUEST';
export const REBLOG_SUCCESS = 'REBLOG_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/local_settings.js b/app/javascript/flavours/glitch/actions/local_settings.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/local_settings.js
rename to app/javascript/flavours/glitch/actions/local_settings.js
diff --git a/app/javascript/themes/glitch/actions/modal.js b/app/javascript/flavours/glitch/actions/modal.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/modal.js
rename to app/javascript/flavours/glitch/actions/modal.js
diff --git a/app/javascript/themes/glitch/actions/mutes.js b/app/javascript/flavours/glitch/actions/mutes.js
similarity index 95%
rename from app/javascript/themes/glitch/actions/mutes.js
rename to app/javascript/flavours/glitch/actions/mutes.js
index bb19e86577..e061305336 100644
--- a/app/javascript/themes/glitch/actions/mutes.js
+++ b/app/javascript/flavours/glitch/actions/mutes.js
@@ -1,6 +1,6 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
import { fetchRelationships } from './accounts';
-import { openModal } from 'themes/glitch/actions/modal';
+import { openModal } from 'flavours/glitch/actions/modal';
export const MUTES_FETCH_REQUEST = 'MUTES_FETCH_REQUEST';
export const MUTES_FETCH_SUCCESS = 'MUTES_FETCH_SUCCESS';
diff --git a/app/javascript/themes/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js
similarity index 99%
rename from app/javascript/themes/glitch/actions/notifications.js
rename to app/javascript/flavours/glitch/actions/notifications.js
index fbf06f7c42..9b9ebf86d1 100644
--- a/app/javascript/themes/glitch/actions/notifications.js
+++ b/app/javascript/flavours/glitch/actions/notifications.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
import { List as ImmutableList } from 'immutable';
import IntlMessageFormat from 'intl-messageformat';
import { fetchRelationships } from './accounts';
diff --git a/app/javascript/themes/glitch/actions/onboarding.js b/app/javascript/flavours/glitch/actions/onboarding.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/onboarding.js
rename to app/javascript/flavours/glitch/actions/onboarding.js
diff --git a/app/javascript/themes/glitch/actions/pin_statuses.js b/app/javascript/flavours/glitch/actions/pin_statuses.js
similarity index 90%
rename from app/javascript/themes/glitch/actions/pin_statuses.js
rename to app/javascript/flavours/glitch/actions/pin_statuses.js
index b3e064e586..d3d1a154f6 100644
--- a/app/javascript/themes/glitch/actions/pin_statuses.js
+++ b/app/javascript/flavours/glitch/actions/pin_statuses.js
@@ -1,10 +1,10 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
export const PINNED_STATUSES_FETCH_REQUEST = 'PINNED_STATUSES_FETCH_REQUEST';
export const PINNED_STATUSES_FETCH_SUCCESS = 'PINNED_STATUSES_FETCH_SUCCESS';
export const PINNED_STATUSES_FETCH_FAIL = 'PINNED_STATUSES_FETCH_FAIL';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
export function fetchPinnedStatuses() {
return (dispatch, getState) => {
diff --git a/app/javascript/themes/glitch/actions/push_notifications.js b/app/javascript/flavours/glitch/actions/push_notifications.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/push_notifications.js
rename to app/javascript/flavours/glitch/actions/push_notifications.js
diff --git a/app/javascript/themes/glitch/actions/reports.js b/app/javascript/flavours/glitch/actions/reports.js
similarity index 97%
rename from app/javascript/themes/glitch/actions/reports.js
rename to app/javascript/flavours/glitch/actions/reports.js
index 93f9085b2c..ad4fd18a93 100644
--- a/app/javascript/themes/glitch/actions/reports.js
+++ b/app/javascript/flavours/glitch/actions/reports.js
@@ -1,4 +1,4 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
import { openModal, closeModal } from './modal';
export const REPORT_INIT = 'REPORT_INIT';
diff --git a/app/javascript/themes/glitch/actions/search.js b/app/javascript/flavours/glitch/actions/search.js
similarity index 96%
rename from app/javascript/themes/glitch/actions/search.js
rename to app/javascript/flavours/glitch/actions/search.js
index 414e4755eb..e86bd848e5 100644
--- a/app/javascript/themes/glitch/actions/search.js
+++ b/app/javascript/flavours/glitch/actions/search.js
@@ -1,4 +1,4 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
export const SEARCH_CHANGE = 'SEARCH_CHANGE';
export const SEARCH_CLEAR = 'SEARCH_CLEAR';
diff --git a/app/javascript/themes/glitch/actions/settings.js b/app/javascript/flavours/glitch/actions/settings.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/settings.js
rename to app/javascript/flavours/glitch/actions/settings.js
diff --git a/app/javascript/themes/glitch/actions/statuses.js b/app/javascript/flavours/glitch/actions/statuses.js
similarity index 99%
rename from app/javascript/themes/glitch/actions/statuses.js
rename to app/javascript/flavours/glitch/actions/statuses.js
index 702f4e9b6f..8b49083ac2 100644
--- a/app/javascript/themes/glitch/actions/statuses.js
+++ b/app/javascript/flavours/glitch/actions/statuses.js
@@ -1,4 +1,4 @@
-import api from 'themes/glitch/util/api';
+import api from 'flavours/glitch/util/api';
import { deleteFromTimelines } from './timelines';
import { fetchStatusCard } from './cards';
diff --git a/app/javascript/themes/glitch/actions/store.js b/app/javascript/flavours/glitch/actions/store.js
similarity index 100%
rename from app/javascript/themes/glitch/actions/store.js
rename to app/javascript/flavours/glitch/actions/store.js
diff --git a/app/javascript/themes/glitch/actions/streaming.js b/app/javascript/flavours/glitch/actions/streaming.js
similarity index 96%
rename from app/javascript/themes/glitch/actions/streaming.js
rename to app/javascript/flavours/glitch/actions/streaming.js
index ccf6c27d82..595eefa41f 100644
--- a/app/javascript/themes/glitch/actions/streaming.js
+++ b/app/javascript/flavours/glitch/actions/streaming.js
@@ -1,4 +1,4 @@
-import { connectStream } from 'themes/glitch/util/stream';
+import { connectStream } from 'flavours/glitch/util/stream';
import {
updateTimeline,
deleteFromTimelines,
diff --git a/app/javascript/themes/glitch/actions/timelines.js b/app/javascript/flavours/glitch/actions/timelines.js
similarity index 99%
rename from app/javascript/themes/glitch/actions/timelines.js
rename to app/javascript/flavours/glitch/actions/timelines.js
index 5ce14fbe9f..3fabf38858 100644
--- a/app/javascript/themes/glitch/actions/timelines.js
+++ b/app/javascript/flavours/glitch/actions/timelines.js
@@ -1,4 +1,4 @@
-import api, { getLinks } from 'themes/glitch/util/api';
+import api, { getLinks } from 'flavours/glitch/util/api';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
export const TIMELINE_UPDATE = 'TIMELINE_UPDATE';
diff --git a/app/javascript/themes/glitch/components/account.js b/app/javascript/flavours/glitch/components/account.js
similarity index 98%
rename from app/javascript/themes/glitch/components/account.js
rename to app/javascript/flavours/glitch/components/account.js
index d0ff770504..c8dacb0ab9 100644
--- a/app/javascript/themes/glitch/components/account.js
+++ b/app/javascript/flavours/glitch/components/account.js
@@ -7,7 +7,7 @@ import Permalink from './permalink';
import IconButton from './icon_button';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
follow: { id: 'account.follow', defaultMessage: 'Follow' },
diff --git a/app/javascript/themes/glitch/components/attachment_list.js b/app/javascript/flavours/glitch/components/attachment_list.js
similarity index 100%
rename from app/javascript/themes/glitch/components/attachment_list.js
rename to app/javascript/flavours/glitch/components/attachment_list.js
diff --git a/app/javascript/themes/glitch/components/autosuggest_emoji.js b/app/javascript/flavours/glitch/components/autosuggest_emoji.js
similarity index 90%
rename from app/javascript/themes/glitch/components/autosuggest_emoji.js
rename to app/javascript/flavours/glitch/components/autosuggest_emoji.js
index 3c6f915e40..79e113d9cf 100644
--- a/app/javascript/themes/glitch/components/autosuggest_emoji.js
+++ b/app/javascript/flavours/glitch/components/autosuggest_emoji.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import unicodeMapping from 'themes/glitch/util/emoji/emoji_unicode_mapping_light';
+import unicodeMapping from 'flavours/glitch/util/emoji/emoji_unicode_mapping_light';
const assetHost = process.env.CDN_HOST || '';
diff --git a/app/javascript/themes/glitch/components/autosuggest_textarea.js b/app/javascript/flavours/glitch/components/autosuggest_textarea.js
similarity index 97%
rename from app/javascript/themes/glitch/components/autosuggest_textarea.js
rename to app/javascript/flavours/glitch/components/autosuggest_textarea.js
index fa93847a23..551528e5ac 100644
--- a/app/javascript/themes/glitch/components/autosuggest_textarea.js
+++ b/app/javascript/flavours/glitch/components/autosuggest_textarea.js
@@ -1,9 +1,9 @@
import React from 'react';
-import AutosuggestAccountContainer from 'themes/glitch/features/compose/containers/autosuggest_account_container';
+import AutosuggestAccountContainer from 'flavours/glitch/features/compose/containers/autosuggest_account_container';
import AutosuggestEmoji from './autosuggest_emoji';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { isRtl } from 'themes/glitch/util/rtl';
+import { isRtl } from 'flavours/glitch/util/rtl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Textarea from 'react-textarea-autosize';
import classNames from 'classnames';
diff --git a/app/javascript/themes/glitch/components/avatar.js b/app/javascript/flavours/glitch/components/avatar.js
similarity index 100%
rename from app/javascript/themes/glitch/components/avatar.js
rename to app/javascript/flavours/glitch/components/avatar.js
diff --git a/app/javascript/themes/glitch/components/avatar_overlay.js b/app/javascript/flavours/glitch/components/avatar_overlay.js
similarity index 100%
rename from app/javascript/themes/glitch/components/avatar_overlay.js
rename to app/javascript/flavours/glitch/components/avatar_overlay.js
diff --git a/app/javascript/themes/glitch/components/button.js b/app/javascript/flavours/glitch/components/button.js
similarity index 100%
rename from app/javascript/themes/glitch/components/button.js
rename to app/javascript/flavours/glitch/components/button.js
diff --git a/app/javascript/themes/glitch/components/collapsable.js b/app/javascript/flavours/glitch/components/collapsable.js
similarity index 92%
rename from app/javascript/themes/glitch/components/collapsable.js
rename to app/javascript/flavours/glitch/components/collapsable.js
index 8bc0a54f4f..fe125a729a 100644
--- a/app/javascript/themes/glitch/components/collapsable.js
+++ b/app/javascript/flavours/glitch/components/collapsable.js
@@ -1,5 +1,5 @@
import React from 'react';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import PropTypes from 'prop-types';
diff --git a/app/javascript/themes/glitch/components/column.js b/app/javascript/flavours/glitch/components/column.js
similarity index 95%
rename from app/javascript/themes/glitch/components/column.js
rename to app/javascript/flavours/glitch/components/column.js
index adeba9cc11..57c4c7a404 100644
--- a/app/javascript/themes/glitch/components/column.js
+++ b/app/javascript/flavours/glitch/components/column.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import detectPassiveEvents from 'detect-passive-events';
-import { scrollTop } from 'themes/glitch/util/scroll';
+import { scrollTop } from 'flavours/glitch/util/scroll';
export default class Column extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/components/column_back_button.js b/app/javascript/flavours/glitch/components/column_back_button.js
similarity index 100%
rename from app/javascript/themes/glitch/components/column_back_button.js
rename to app/javascript/flavours/glitch/components/column_back_button.js
diff --git a/app/javascript/themes/glitch/components/column_back_button_slim.js b/app/javascript/flavours/glitch/components/column_back_button_slim.js
similarity index 100%
rename from app/javascript/themes/glitch/components/column_back_button_slim.js
rename to app/javascript/flavours/glitch/components/column_back_button_slim.js
diff --git a/app/javascript/themes/glitch/components/column_header.js b/app/javascript/flavours/glitch/components/column_header.js
similarity index 98%
rename from app/javascript/themes/glitch/components/column_header.js
rename to app/javascript/flavours/glitch/components/column_header.js
index e601082c85..ae90b6f81f 100644
--- a/app/javascript/themes/glitch/components/column_header.js
+++ b/app/javascript/flavours/glitch/components/column_header.js
@@ -4,8 +4,7 @@ import classNames from 'classnames';
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
-// Glitch imports
-import NotificationPurgeButtonsContainer from 'themes/glitch/containers/notification_purge_buttons_container';
+import NotificationPurgeButtonsContainer from 'flavours/glitch/containers/notification_purge_buttons_container';
const messages = defineMessages({
show: { id: 'column_header.show_settings', defaultMessage: 'Show settings' },
diff --git a/app/javascript/themes/glitch/components/display_name.js b/app/javascript/flavours/glitch/components/display_name.js
similarity index 100%
rename from app/javascript/themes/glitch/components/display_name.js
rename to app/javascript/flavours/glitch/components/display_name.js
diff --git a/app/javascript/themes/glitch/components/dropdown_menu.js b/app/javascript/flavours/glitch/components/dropdown_menu.js
similarity index 98%
rename from app/javascript/themes/glitch/components/dropdown_menu.js
rename to app/javascript/flavours/glitch/components/dropdown_menu.js
index d30dc2aaf6..d4a886a8b3 100644
--- a/app/javascript/themes/glitch/components/dropdown_menu.js
+++ b/app/javascript/flavours/glitch/components/dropdown_menu.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import IconButton from './icon_button';
import Overlay from 'react-overlays/lib/Overlay';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import detectPassiveEvents from 'detect-passive-events';
diff --git a/app/javascript/themes/glitch/components/extended_video_player.js b/app/javascript/flavours/glitch/components/extended_video_player.js
similarity index 100%
rename from app/javascript/themes/glitch/components/extended_video_player.js
rename to app/javascript/flavours/glitch/components/extended_video_player.js
diff --git a/app/javascript/themes/glitch/components/icon_button.js b/app/javascript/flavours/glitch/components/icon_button.js
similarity index 98%
rename from app/javascript/themes/glitch/components/icon_button.js
rename to app/javascript/flavours/glitch/components/icon_button.js
index 31cdf47036..13b91e8a1f 100644
--- a/app/javascript/themes/glitch/components/icon_button.js
+++ b/app/javascript/flavours/glitch/components/icon_button.js
@@ -1,5 +1,5 @@
import React from 'react';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import PropTypes from 'prop-types';
import classNames from 'classnames';
diff --git a/app/javascript/themes/glitch/components/intersection_observer_article.js b/app/javascript/flavours/glitch/components/intersection_observer_article.js
similarity index 96%
rename from app/javascript/themes/glitch/components/intersection_observer_article.js
rename to app/javascript/flavours/glitch/components/intersection_observer_article.js
index f0139ac754..8b06f9a8c8 100644
--- a/app/javascript/themes/glitch/components/intersection_observer_article.js
+++ b/app/javascript/flavours/glitch/components/intersection_observer_article.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
-import scheduleIdleTask from 'themes/glitch/util/schedule_idle_task';
-import getRectFromEntry from 'themes/glitch/util/get_rect_from_entry';
+import scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task';
+import getRectFromEntry from 'flavours/glitch/util/get_rect_from_entry';
import { is } from 'immutable';
// Diff these props in the "rendered" state
diff --git a/app/javascript/themes/glitch/components/load_more.js b/app/javascript/flavours/glitch/components/load_more.js
similarity index 100%
rename from app/javascript/themes/glitch/components/load_more.js
rename to app/javascript/flavours/glitch/components/load_more.js
diff --git a/app/javascript/themes/glitch/components/loading_indicator.js b/app/javascript/flavours/glitch/components/loading_indicator.js
similarity index 100%
rename from app/javascript/themes/glitch/components/loading_indicator.js
rename to app/javascript/flavours/glitch/components/loading_indicator.js
diff --git a/app/javascript/themes/glitch/components/media_gallery.js b/app/javascript/flavours/glitch/components/media_gallery.js
similarity index 98%
rename from app/javascript/themes/glitch/components/media_gallery.js
rename to app/javascript/flavours/glitch/components/media_gallery.js
index b6b40c5855..d2e80de496 100644
--- a/app/javascript/themes/glitch/components/media_gallery.js
+++ b/app/javascript/flavours/glitch/components/media_gallery.js
@@ -4,9 +4,9 @@ import PropTypes from 'prop-types';
import { is } from 'immutable';
import IconButton from './icon_button';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import { isIOS } from 'themes/glitch/util/is_mobile';
+import { isIOS } from 'flavours/glitch/util/is_mobile';
import classNames from 'classnames';
-import { autoPlayGif } from 'themes/glitch/util/initial_state';
+import { autoPlayGif } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' },
diff --git a/app/javascript/themes/glitch/components/missing_indicator.js b/app/javascript/flavours/glitch/components/missing_indicator.js
similarity index 100%
rename from app/javascript/themes/glitch/components/missing_indicator.js
rename to app/javascript/flavours/glitch/components/missing_indicator.js
diff --git a/app/javascript/themes/glitch/components/notification_purge_buttons.js b/app/javascript/flavours/glitch/components/notification_purge_buttons.js
similarity index 100%
rename from app/javascript/themes/glitch/components/notification_purge_buttons.js
rename to app/javascript/flavours/glitch/components/notification_purge_buttons.js
diff --git a/app/javascript/themes/glitch/components/permalink.js b/app/javascript/flavours/glitch/components/permalink.js
similarity index 100%
rename from app/javascript/themes/glitch/components/permalink.js
rename to app/javascript/flavours/glitch/components/permalink.js
diff --git a/app/javascript/themes/glitch/components/relative_timestamp.js b/app/javascript/flavours/glitch/components/relative_timestamp.js
similarity index 100%
rename from app/javascript/themes/glitch/components/relative_timestamp.js
rename to app/javascript/flavours/glitch/components/relative_timestamp.js
diff --git a/app/javascript/themes/glitch/components/scrollable_list.js b/app/javascript/flavours/glitch/components/scrollable_list.js
similarity index 95%
rename from app/javascript/themes/glitch/components/scrollable_list.js
rename to app/javascript/flavours/glitch/components/scrollable_list.js
index ccdcd7c854..8b1e3c93dd 100644
--- a/app/javascript/themes/glitch/components/scrollable_list.js
+++ b/app/javascript/flavours/glitch/components/scrollable_list.js
@@ -1,13 +1,13 @@
import React, { PureComponent } from 'react';
import { ScrollContainer } from 'react-router-scroll-4';
import PropTypes from 'prop-types';
-import IntersectionObserverArticleContainer from 'themes/glitch/containers/intersection_observer_article_container';
+import IntersectionObserverArticleContainer from 'flavours/glitch/containers/intersection_observer_article_container';
import LoadMore from './load_more';
-import IntersectionObserverWrapper from 'themes/glitch/util/intersection_observer_wrapper';
+import IntersectionObserverWrapper from 'flavours/glitch/util/intersection_observer_wrapper';
import { throttle } from 'lodash';
import { List as ImmutableList } from 'immutable';
import classNames from 'classnames';
-import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'themes/glitch/util/fullscreen';
+import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';
export default class ScrollableList extends PureComponent {
diff --git a/app/javascript/themes/glitch/components/setting_text.js b/app/javascript/flavours/glitch/components/setting_text.js
similarity index 100%
rename from app/javascript/themes/glitch/components/setting_text.js
rename to app/javascript/flavours/glitch/components/setting_text.js
diff --git a/app/javascript/themes/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js
similarity index 98%
rename from app/javascript/themes/glitch/components/status.js
rename to app/javascript/flavours/glitch/components/status.js
index e2ef47f5f1..6662285d0a 100644
--- a/app/javascript/themes/glitch/components/status.js
+++ b/app/javascript/flavours/glitch/components/status.js
@@ -6,9 +6,9 @@ import StatusHeader from './status_header';
import StatusContent from './status_content';
import StatusActionBar from './status_action_bar';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { MediaGallery, Video } from 'themes/glitch/util/async-components';
+import { MediaGallery, Video } from 'flavours/glitch/util/async-components';
import { HotKeys } from 'react-hotkeys';
-import NotificationOverlayContainer from 'themes/glitch/features/notifications/containers/overlay_container';
+import NotificationOverlayContainer from 'flavours/glitch/features/notifications/containers/overlay_container';
// We use the component (and not the container) since we do not want
// to use the progress bar to show download progress
diff --git a/app/javascript/themes/glitch/components/status_action_bar.js b/app/javascript/flavours/glitch/components/status_action_bar.js
similarity index 96%
rename from app/javascript/themes/glitch/components/status_action_bar.js
rename to app/javascript/flavours/glitch/components/status_action_bar.js
index 9d615ed7cf..5a06782bec 100644
--- a/app/javascript/themes/glitch/components/status_action_bar.js
+++ b/app/javascript/flavours/glitch/components/status_action_bar.js
@@ -1,14 +1,11 @@
-// THIS FILE EXISTS FOR UPSTREAM COMPATIBILITY & SHOULDN'T BE USED !!
-// SEE INSTEAD : glitch/components/status/action_bar
-
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import IconButton from './icon_button';
-import DropdownMenuContainer from 'themes/glitch/containers/dropdown_menu_container';
+import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
import RelativeTimestamp from './relative_timestamp';
const messages = defineMessages({
diff --git a/app/javascript/themes/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js
similarity index 99%
rename from app/javascript/themes/glitch/components/status_content.js
rename to app/javascript/flavours/glitch/components/status_content.js
index 3eba6eaa0e..0c40e62cca 100644
--- a/app/javascript/themes/glitch/components/status_content.js
+++ b/app/javascript/flavours/glitch/components/status_content.js
@@ -1,7 +1,7 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { isRtl } from 'themes/glitch/util/rtl';
+import { isRtl } from 'flavours/glitch/util/rtl';
import { FormattedMessage } from 'react-intl';
import Permalink from './permalink';
import classnames from 'classnames';
diff --git a/app/javascript/themes/glitch/components/status_header.js b/app/javascript/flavours/glitch/components/status_header.js
similarity index 100%
rename from app/javascript/themes/glitch/components/status_header.js
rename to app/javascript/flavours/glitch/components/status_header.js
diff --git a/app/javascript/themes/glitch/components/status_list.js b/app/javascript/flavours/glitch/components/status_list.js
similarity index 95%
rename from app/javascript/themes/glitch/components/status_list.js
rename to app/javascript/flavours/glitch/components/status_list.js
index ddb1354c67..f190ba6ab6 100644
--- a/app/javascript/themes/glitch/components/status_list.js
+++ b/app/javascript/flavours/glitch/components/status_list.js
@@ -1,7 +1,7 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import StatusContainer from 'themes/glitch/containers/status_container';
+import StatusContainer from 'flavours/glitch/containers/status_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ScrollableList from './scrollable_list';
diff --git a/app/javascript/themes/glitch/components/status_prepend.js b/app/javascript/flavours/glitch/components/status_prepend.js
similarity index 100%
rename from app/javascript/themes/glitch/components/status_prepend.js
rename to app/javascript/flavours/glitch/components/status_prepend.js
diff --git a/app/javascript/themes/glitch/components/status_visibility_icon.js b/app/javascript/flavours/glitch/components/status_visibility_icon.js
similarity index 100%
rename from app/javascript/themes/glitch/components/status_visibility_icon.js
rename to app/javascript/flavours/glitch/components/status_visibility_icon.js
diff --git a/app/javascript/themes/glitch/containers/account_container.js b/app/javascript/flavours/glitch/containers/account_container.js
similarity index 84%
rename from app/javascript/themes/glitch/containers/account_container.js
rename to app/javascript/flavours/glitch/containers/account_container.js
index c1ce499871..bc84d299b4 100644
--- a/app/javascript/themes/glitch/containers/account_container.js
+++ b/app/javascript/flavours/glitch/containers/account_container.js
@@ -1,8 +1,8 @@
import React from 'react';
import { connect } from 'react-redux';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import { makeGetAccount } from 'themes/glitch/selectors';
-import Account from 'themes/glitch/components/account';
+import { makeGetAccount } from 'flavours/glitch/selectors';
+import Account from 'flavours/glitch/components/account';
import {
followAccount,
unfollowAccount,
@@ -10,10 +10,10 @@ import {
unblockAccount,
muteAccount,
unmuteAccount,
-} from 'themes/glitch/actions/accounts';
-import { openModal } from 'themes/glitch/actions/modal';
-import { initMuteModal } from 'themes/glitch/actions/mutes';
-import { unfollowModal } from 'themes/glitch/util/initial_state';
+} from 'flavours/glitch/actions/accounts';
+import { openModal } from 'flavours/glitch/actions/modal';
+import { initMuteModal } from 'flavours/glitch/actions/mutes';
+import { unfollowModal } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
diff --git a/app/javascript/themes/glitch/containers/card_container.js b/app/javascript/flavours/glitch/containers/card_container.js
similarity index 84%
rename from app/javascript/themes/glitch/containers/card_container.js
rename to app/javascript/flavours/glitch/containers/card_container.js
index 8285437bbf..dec7df5223 100644
--- a/app/javascript/themes/glitch/containers/card_container.js
+++ b/app/javascript/flavours/glitch/containers/card_container.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Card from 'themes/glitch/features/status/components/card';
+import Card from 'flavours/glitch/features/status/components/card';
import { fromJS } from 'immutable';
export default class CardContainer extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/containers/compose_container.js b/app/javascript/flavours/glitch/containers/compose_container.js
similarity index 74%
rename from app/javascript/themes/glitch/containers/compose_container.js
rename to app/javascript/flavours/glitch/containers/compose_container.js
index 82980ee36f..60f6a9c9f2 100644
--- a/app/javascript/themes/glitch/containers/compose_container.js
+++ b/app/javascript/flavours/glitch/containers/compose_container.js
@@ -1,12 +1,12 @@
import React from 'react';
import { Provider } from 'react-redux';
import PropTypes from 'prop-types';
-import configureStore from 'themes/glitch/store/configureStore';
-import { hydrateStore } from 'themes/glitch/actions/store';
+import configureStore from 'flavours/glitch/store/configureStore';
+import { hydrateStore } from 'flavours/glitch/actions/store';
import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'mastodon/locales';
-import Compose from 'themes/glitch/features/standalone/compose';
-import initialState from 'themes/glitch/util/initial_state';
+import Compose from 'flavours/glitch/features/standalone/compose';
+import initialState from 'flavours/glitch/util/initial_state';
const { localeData, messages } = getLocale();
addLocaleData(localeData);
diff --git a/app/javascript/themes/glitch/containers/dropdown_menu_container.js b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js
similarity index 65%
rename from app/javascript/themes/glitch/containers/dropdown_menu_container.js
rename to app/javascript/flavours/glitch/containers/dropdown_menu_container.js
index 15e8da2e3a..0b4f72fa16 100644
--- a/app/javascript/themes/glitch/containers/dropdown_menu_container.js
+++ b/app/javascript/flavours/glitch/containers/dropdown_menu_container.js
@@ -1,7 +1,7 @@
-import { openModal, closeModal } from 'themes/glitch/actions/modal';
+import { openModal, closeModal } from 'flavours/glitch/actions/modal';
import { connect } from 'react-redux';
-import DropdownMenu from 'themes/glitch/components/dropdown_menu';
-import { isUserTouching } from 'themes/glitch/util/is_mobile';
+import DropdownMenu from 'flavours/glitch/components/dropdown_menu';
+import { isUserTouching } from 'flavours/glitch/util/is_mobile';
const mapStateToProps = state => ({
isModalOpen: state.get('modal').modalType === 'ACTIONS',
diff --git a/app/javascript/themes/glitch/containers/intersection_observer_article_container.js b/app/javascript/flavours/glitch/containers/intersection_observer_article_container.js
similarity index 70%
rename from app/javascript/themes/glitch/containers/intersection_observer_article_container.js
rename to app/javascript/flavours/glitch/containers/intersection_observer_article_container.js
index 6ede64738b..f2741f2d4f 100644
--- a/app/javascript/themes/glitch/containers/intersection_observer_article_container.js
+++ b/app/javascript/flavours/glitch/containers/intersection_observer_article_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
-import IntersectionObserverArticle from 'themes/glitch/components/intersection_observer_article';
-import { setHeight } from 'themes/glitch/actions/height_cache';
+import IntersectionObserverArticle from 'flavours/glitch/components/intersection_observer_article';
+import { setHeight } from 'flavours/glitch/actions/height_cache';
const makeMapStateToProps = (state, props) => ({
cachedHeight: state.getIn(['height_cache', props.saveHeightKey, props.id]),
diff --git a/app/javascript/themes/glitch/containers/mastodon.js b/app/javascript/flavours/glitch/containers/mastodon.js
similarity index 82%
rename from app/javascript/themes/glitch/containers/mastodon.js
rename to app/javascript/flavours/glitch/containers/mastodon.js
index 755b5564a1..1c98cd5f75 100644
--- a/app/javascript/themes/glitch/containers/mastodon.js
+++ b/app/javascript/flavours/glitch/containers/mastodon.js
@@ -1,16 +1,16 @@
import React from 'react';
import { Provider } from 'react-redux';
import PropTypes from 'prop-types';
-import configureStore from 'themes/glitch/store/configureStore';
-import { showOnboardingOnce } from 'themes/glitch/actions/onboarding';
+import configureStore from 'flavours/glitch/store/configureStore';
+import { showOnboardingOnce } from 'flavours/glitch/actions/onboarding';
import { BrowserRouter, Route } from 'react-router-dom';
import { ScrollContext } from 'react-router-scroll-4';
-import UI from 'themes/glitch/features/ui';
-import { hydrateStore } from 'themes/glitch/actions/store';
-import { connectUserStream } from 'themes/glitch/actions/streaming';
+import UI from 'flavours/glitch/features/ui';
+import { hydrateStore } from 'flavours/glitch/actions/store';
+import { connectUserStream } from 'flavours/glitch/actions/streaming';
import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'locales';
-import initialState from 'themes/glitch/util/initial_state';
+import initialState from 'flavours/glitch/util/initial_state';
const { localeData, messages } = getLocale();
addLocaleData(localeData);
diff --git a/app/javascript/themes/glitch/containers/media_gallery_container.js b/app/javascript/flavours/glitch/containers/media_gallery_container.js
similarity index 92%
rename from app/javascript/themes/glitch/containers/media_gallery_container.js
rename to app/javascript/flavours/glitch/containers/media_gallery_container.js
index 86965f73b3..54bfbf4535 100644
--- a/app/javascript/themes/glitch/containers/media_gallery_container.js
+++ b/app/javascript/flavours/glitch/containers/media_gallery_container.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'mastodon/locales';
-import MediaGallery from 'themes/glitch/components/media_gallery';
+import MediaGallery from 'flavours/glitch/components/media_gallery';
import { fromJS } from 'immutable';
const { localeData, messages } = getLocale();
diff --git a/app/javascript/themes/glitch/containers/notification_purge_buttons_container.js b/app/javascript/flavours/glitch/containers/notification_purge_buttons_container.js
similarity index 86%
rename from app/javascript/themes/glitch/containers/notification_purge_buttons_container.js
rename to app/javascript/flavours/glitch/containers/notification_purge_buttons_container.js
index ee4cb84cdf..2570cf4a56 100644
--- a/app/javascript/themes/glitch/containers/notification_purge_buttons_container.js
+++ b/app/javascript/flavours/glitch/containers/notification_purge_buttons_container.js
@@ -3,13 +3,13 @@ import { connect } from 'react-redux';
import { defineMessages, injectIntl } from 'react-intl';
// Our imports.
-import NotificationPurgeButtons from 'themes/glitch/components/notification_purge_buttons';
+import NotificationPurgeButtons from 'flavours/glitch/components/notification_purge_buttons';
import {
deleteMarkedNotifications,
enterNotificationClearingMode,
markAllNotifications,
-} from 'themes/glitch/actions/notifications';
-import { openModal } from 'themes/glitch/actions/modal';
+} from 'flavours/glitch/actions/notifications';
+import { openModal } from 'flavours/glitch/actions/modal';
const messages = defineMessages({
clearMessage: { id: 'notifications.marked_clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all selected notifications?' },
diff --git a/app/javascript/themes/glitch/containers/status_container.js b/app/javascript/flavours/glitch/containers/status_container.js
similarity index 85%
rename from app/javascript/themes/glitch/containers/status_container.js
rename to app/javascript/flavours/glitch/containers/status_container.js
index 14906723a6..1a4f352786 100644
--- a/app/javascript/themes/glitch/containers/status_container.js
+++ b/app/javascript/flavours/glitch/containers/status_container.js
@@ -1,11 +1,11 @@
import React from 'react';
import { connect } from 'react-redux';
-import Status from 'themes/glitch/components/status';
-import { makeGetStatus } from 'themes/glitch/selectors';
+import Status from 'flavours/glitch/components/status';
+import { makeGetStatus } from 'flavours/glitch/selectors';
import {
replyCompose,
mentionCompose,
-} from 'themes/glitch/actions/compose';
+} from 'flavours/glitch/actions/compose';
import {
reblog,
favourite,
@@ -13,14 +13,14 @@ import {
unfavourite,
pin,
unpin,
-} from 'themes/glitch/actions/interactions';
-import { blockAccount } from 'themes/glitch/actions/accounts';
-import { muteStatus, unmuteStatus, deleteStatus } from 'themes/glitch/actions/statuses';
-import { initMuteModal } from 'themes/glitch/actions/mutes';
-import { initReport } from 'themes/glitch/actions/reports';
-import { openModal } from 'themes/glitch/actions/modal';
+} from 'flavours/glitch/actions/interactions';
+import { blockAccount } from 'flavours/glitch/actions/accounts';
+import { muteStatus, unmuteStatus, deleteStatus } from 'flavours/glitch/actions/statuses';
+import { initMuteModal } from 'flavours/glitch/actions/mutes';
+import { initReport } from 'flavours/glitch/actions/reports';
+import { openModal } from 'flavours/glitch/actions/modal';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import { boostModal, deleteModal } from 'themes/glitch/util/initial_state';
+import { boostModal, deleteModal } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
diff --git a/app/javascript/themes/glitch/containers/timeline_container.js b/app/javascript/flavours/glitch/containers/timeline_container.js
similarity index 72%
rename from app/javascript/themes/glitch/containers/timeline_container.js
rename to app/javascript/flavours/glitch/containers/timeline_container.js
index a75f8808dc..c5ffe1b633 100644
--- a/app/javascript/themes/glitch/containers/timeline_container.js
+++ b/app/javascript/flavours/glitch/containers/timeline_container.js
@@ -1,13 +1,13 @@
import React from 'react';
import { Provider } from 'react-redux';
import PropTypes from 'prop-types';
-import configureStore from 'themes/glitch/store/configureStore';
-import { hydrateStore } from 'themes/glitch/actions/store';
+import configureStore from 'flavours/glitch/store/configureStore';
+import { hydrateStore } from 'flavours/glitch/actions/store';
import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'mastodon/locales';
-import PublicTimeline from 'themes/glitch/features/standalone/public_timeline';
-import HashtagTimeline from 'themes/glitch/features/standalone/hashtag_timeline';
-import initialState from 'themes/glitch/util/initial_state';
+import PublicTimeline from 'flavours/glitch/features/standalone/public_timeline';
+import HashtagTimeline from 'flavours/glitch/features/standalone/hashtag_timeline';
+import initialState from 'flavours/glitch/util/initial_state';
const { localeData, messages } = getLocale();
addLocaleData(localeData);
diff --git a/app/javascript/themes/glitch/containers/video_container.js b/app/javascript/flavours/glitch/containers/video_container.js
similarity index 91%
rename from app/javascript/themes/glitch/containers/video_container.js
rename to app/javascript/flavours/glitch/containers/video_container.js
index 2b0e986662..b206e9a100 100644
--- a/app/javascript/themes/glitch/containers/video_container.js
+++ b/app/javascript/flavours/glitch/containers/video_container.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { IntlProvider, addLocaleData } from 'react-intl';
import { getLocale } from 'mastodon/locales';
-import Video from 'themes/glitch/features/video';
+import Video from 'flavours/glitch/features/video';
const { localeData, messages } = getLocale();
addLocaleData(localeData);
diff --git a/app/javascript/themes/glitch/features/account/components/action_bar.js b/app/javascript/flavours/glitch/features/account/components/action_bar.js
similarity index 97%
rename from app/javascript/themes/glitch/features/account/components/action_bar.js
rename to app/javascript/flavours/glitch/features/account/components/action_bar.js
index 0edd5c8481..7c9c1af4e8 100644
--- a/app/javascript/themes/glitch/features/account/components/action_bar.js
+++ b/app/javascript/flavours/glitch/features/account/components/action_bar.js
@@ -1,10 +1,10 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import DropdownMenuContainer from 'themes/glitch/containers/dropdown_menu_container';
+import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';
import { Link } from 'react-router-dom';
import { defineMessages, injectIntl, FormattedMessage, FormattedNumber } from 'react-intl';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' },
diff --git a/app/javascript/themes/glitch/features/account/components/header.js b/app/javascript/flavours/glitch/features/account/components/header.js
similarity index 92%
rename from app/javascript/themes/glitch/features/account/components/header.js
rename to app/javascript/flavours/glitch/features/account/components/header.js
index 696bb19919..f5ecaae71e 100644
--- a/app/javascript/themes/glitch/features/account/components/header.js
+++ b/app/javascript/flavours/glitch/features/account/components/header.js
@@ -4,12 +4,12 @@ import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import Avatar from 'themes/glitch/components/avatar';
-import IconButton from 'themes/glitch/components/icon_button';
+import Avatar from 'flavours/glitch/components/avatar';
+import IconButton from 'flavours/glitch/components/icon_button';
-import emojify from 'themes/glitch/util/emoji';
-import { me } from 'themes/glitch/util/initial_state';
-import { processBio } from 'themes/glitch/util/bio_metadata';
+import emojify from 'flavours/glitch/util/emoji';
+import { me } from 'flavours/glitch/util/initial_state';
+import { processBio } from 'flavours/glitch/util/bio_metadata';
const messages = defineMessages({
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
diff --git a/app/javascript/themes/glitch/features/account_gallery/components/media_item.js b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
similarity index 93%
rename from app/javascript/themes/glitch/features/account_gallery/components/media_item.js
rename to app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
index 88c9156b5e..e52d3b0bb0 100644
--- a/app/javascript/themes/glitch/features/account_gallery/components/media_item.js
+++ b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js
@@ -1,7 +1,7 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import Permalink from 'themes/glitch/components/permalink';
+import Permalink from 'flavours/glitch/components/permalink';
export default class MediaItem extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/account_gallery/index.js b/app/javascript/flavours/glitch/features/account_gallery/index.js
similarity index 84%
rename from app/javascript/themes/glitch/features/account_gallery/index.js
rename to app/javascript/flavours/glitch/features/account_gallery/index.js
index a21c089da7..951e019e37 100644
--- a/app/javascript/themes/glitch/features/account_gallery/index.js
+++ b/app/javascript/flavours/glitch/features/account_gallery/index.js
@@ -2,18 +2,18 @@ import React from 'react';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { fetchAccount } from 'themes/glitch/actions/accounts';
-import { refreshAccountMediaTimeline, expandAccountMediaTimeline } from 'themes/glitch/actions/timelines';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
+import { fetchAccount } from 'flavours/glitch/actions/accounts';
+import { refreshAccountMediaTimeline, expandAccountMediaTimeline } from 'flavours/glitch/actions/timelines';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { getAccountGallery } from 'themes/glitch/selectors';
+import { getAccountGallery } from 'flavours/glitch/selectors';
import MediaItem from './components/media_item';
-import HeaderContainer from 'themes/glitch/features/account_timeline/containers/header_container';
+import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
import { FormattedMessage } from 'react-intl';
import { ScrollContainer } from 'react-router-scroll-4';
-import LoadMore from 'themes/glitch/components/load_more';
+import LoadMore from 'flavours/glitch/components/load_more';
const mapStateToProps = (state, props) => ({
medias: getAccountGallery(state, props.params.accountId),
diff --git a/app/javascript/themes/glitch/features/account_timeline/components/header.js b/app/javascript/flavours/glitch/features/account_timeline/components/header.js
similarity index 90%
rename from app/javascript/themes/glitch/features/account_timeline/components/header.js
rename to app/javascript/flavours/glitch/features/account_timeline/components/header.js
index c719a7bcba..4ad677fbeb 100644
--- a/app/javascript/themes/glitch/features/account_timeline/components/header.js
+++ b/app/javascript/flavours/glitch/features/account_timeline/components/header.js
@@ -1,9 +1,9 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import InnerHeader from 'themes/glitch/features/account/components/header';
-import ActionBar from 'themes/glitch/features/account/components/action_bar';
-import MissingIndicator from 'themes/glitch/components/missing_indicator';
+import InnerHeader from 'flavours/glitch/features/account/components/header';
+import ActionBar from 'flavours/glitch/features/account/components/action_bar';
+import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import ImmutablePureComponent from 'react-immutable-pure-component';
export default class Header extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/account_timeline/containers/header_container.js b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js
similarity index 86%
rename from app/javascript/themes/glitch/features/account_timeline/containers/header_container.js
rename to app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js
index 766b57b564..815a1a6136 100644
--- a/app/javascript/themes/glitch/features/account_timeline/containers/header_container.js
+++ b/app/javascript/flavours/glitch/features/account_timeline/containers/header_container.js
@@ -1,6 +1,6 @@
import React from 'react';
import { connect } from 'react-redux';
-import { makeGetAccount } from 'themes/glitch/selectors';
+import { makeGetAccount } from 'flavours/glitch/selectors';
import Header from '../components/header';
import {
followAccount,
@@ -8,14 +8,14 @@ import {
blockAccount,
unblockAccount,
unmuteAccount,
-} from 'themes/glitch/actions/accounts';
-import { mentionCompose } from 'themes/glitch/actions/compose';
-import { initMuteModal } from 'themes/glitch/actions/mutes';
-import { initReport } from 'themes/glitch/actions/reports';
-import { openModal } from 'themes/glitch/actions/modal';
-import { blockDomain, unblockDomain } from 'themes/glitch/actions/domain_blocks';
+} from 'flavours/glitch/actions/accounts';
+import { mentionCompose } from 'flavours/glitch/actions/compose';
+import { initMuteModal } from 'flavours/glitch/actions/mutes';
+import { initReport } from 'flavours/glitch/actions/reports';
+import { openModal } from 'flavours/glitch/actions/modal';
+import { blockDomain, unblockDomain } from 'flavours/glitch/actions/domain_blocks';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import { unfollowModal } from 'themes/glitch/util/initial_state';
+import { unfollowModal } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' },
diff --git a/app/javascript/themes/glitch/features/account_timeline/index.js b/app/javascript/flavours/glitch/features/account_timeline/index.js
similarity index 93%
rename from app/javascript/themes/glitch/features/account_timeline/index.js
rename to app/javascript/flavours/glitch/features/account_timeline/index.js
index 81336ef3a2..75dba50490 100644
--- a/app/javascript/themes/glitch/features/account_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/account_timeline/index.js
@@ -2,8 +2,8 @@ import React from 'react';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { fetchAccount } from 'themes/glitch/actions/accounts';
-import { refreshAccountTimeline, expandAccountTimeline } from 'themes/glitch/actions/timelines';
+import { fetchAccount } from 'flavours/glitch/actions/accounts';
+import { refreshAccountTimeline, expandAccountTimeline } from 'flavours/glitch/actions/timelines';
import StatusList from '../../components/status_list';
import LoadingIndicator from '../../components/loading_indicator';
import Column from '../ui/components/column';
diff --git a/app/javascript/themes/glitch/features/blocks/index.js b/app/javascript/flavours/glitch/features/blocks/index.js
similarity index 81%
rename from app/javascript/themes/glitch/features/blocks/index.js
rename to app/javascript/flavours/glitch/features/blocks/index.js
index 70630818c6..edd448921e 100644
--- a/app/javascript/themes/glitch/features/blocks/index.js
+++ b/app/javascript/flavours/glitch/features/blocks/index.js
@@ -2,12 +2,12 @@ import React from 'react';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import { ScrollContainer } from 'react-router-scroll-4';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButtonSlim from 'themes/glitch/components/column_back_button_slim';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import { fetchBlocks, expandBlocks } from 'themes/glitch/actions/blocks';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import { fetchBlocks, expandBlocks } from 'flavours/glitch/actions/blocks';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/community_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js
similarity index 94%
rename from app/javascript/themes/glitch/features/community_timeline/components/column_settings.js
rename to app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js
index 988e363082..6dc292ee54 100644
--- a/app/javascript/themes/glitch/features/community_timeline/components/column_settings.js
+++ b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import SettingText from 'themes/glitch/components/setting_text';
+import SettingText from 'flavours/glitch/components/setting_text';
const messages = defineMessages({
filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },
diff --git a/app/javascript/themes/glitch/features/community_timeline/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/community_timeline/containers/column_settings_container.js
similarity index 86%
rename from app/javascript/themes/glitch/features/community_timeline/containers/column_settings_container.js
rename to app/javascript/flavours/glitch/features/community_timeline/containers/column_settings_container.js
index cd9c343652..84234a836b 100644
--- a/app/javascript/themes/glitch/features/community_timeline/containers/column_settings_container.js
+++ b/app/javascript/flavours/glitch/features/community_timeline/containers/column_settings_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import ColumnSettings from '../components/column_settings';
-import { changeSetting } from 'themes/glitch/actions/settings';
+import { changeSetting } from 'flavours/glitch/actions/settings';
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'community']),
diff --git a/app/javascript/themes/glitch/features/community_timeline/index.js b/app/javascript/flavours/glitch/features/community_timeline/index.js
similarity index 85%
rename from app/javascript/themes/glitch/features/community_timeline/index.js
rename to app/javascript/flavours/glitch/features/community_timeline/index.js
index 9d255bd01c..55355414f4 100644
--- a/app/javascript/themes/glitch/features/community_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/community_timeline/index.js
@@ -1,17 +1,17 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import {
refreshCommunityTimeline,
expandCommunityTimeline,
-} from 'themes/glitch/actions/timelines';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+} from 'flavours/glitch/actions/timelines';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container';
-import { connectCommunityStream } from 'themes/glitch/actions/streaming';
+import { connectCommunityStream } from 'flavours/glitch/actions/streaming';
const messages = defineMessages({
title: { id: 'column.community', defaultMessage: 'Local timeline' },
diff --git a/app/javascript/themes/glitch/features/compose/components/advanced_options.js b/app/javascript/flavours/glitch/features/compose/components/advanced_options.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/components/advanced_options.js
rename to app/javascript/flavours/glitch/features/compose/components/advanced_options.js
diff --git a/app/javascript/themes/glitch/features/compose/components/advanced_options_toggle.js b/app/javascript/flavours/glitch/features/compose/components/advanced_options_toggle.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/components/advanced_options_toggle.js
rename to app/javascript/flavours/glitch/features/compose/components/advanced_options_toggle.js
diff --git a/app/javascript/themes/glitch/features/compose/components/attach_options.js b/app/javascript/flavours/glitch/features/compose/components/attach_options.js
similarity index 96%
rename from app/javascript/themes/glitch/features/compose/components/attach_options.js
rename to app/javascript/flavours/glitch/features/compose/components/attach_options.js
index c396714f3a..6c7a1f55f6 100644
--- a/app/javascript/themes/glitch/features/compose/components/attach_options.js
+++ b/app/javascript/flavours/glitch/features/compose/components/attach_options.js
@@ -6,10 +6,10 @@ import { injectIntl, defineMessages } from 'react-intl';
// Our imports //
import ComposeDropdown from './dropdown';
-import { uploadCompose } from 'themes/glitch/actions/compose';
+import { uploadCompose } from 'flavours/glitch/actions/compose';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { openModal } from 'themes/glitch/actions/modal';
+import { openModal } from 'flavours/glitch/actions/modal';
const messages = defineMessages({
upload :
diff --git a/app/javascript/themes/glitch/features/compose/components/autosuggest_account.js b/app/javascript/flavours/glitch/features/compose/components/autosuggest_account.js
similarity index 82%
rename from app/javascript/themes/glitch/features/compose/components/autosuggest_account.js
rename to app/javascript/flavours/glitch/features/compose/components/autosuggest_account.js
index 4a98d89fec..3d474af30e 100644
--- a/app/javascript/themes/glitch/features/compose/components/autosuggest_account.js
+++ b/app/javascript/flavours/glitch/features/compose/components/autosuggest_account.js
@@ -1,6 +1,6 @@
import React from 'react';
-import Avatar from 'themes/glitch/components/avatar';
-import DisplayName from 'themes/glitch/components/display_name';
+import Avatar from 'flavours/glitch/components/avatar';
+import DisplayName from 'flavours/glitch/components/display_name';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/compose/components/character_counter.js b/app/javascript/flavours/glitch/features/compose/components/character_counter.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/components/character_counter.js
rename to app/javascript/flavours/glitch/features/compose/components/character_counter.js
diff --git a/app/javascript/themes/glitch/features/compose/components/compose_form.js b/app/javascript/flavours/glitch/features/compose/components/compose_form.js
similarity index 96%
rename from app/javascript/themes/glitch/features/compose/components/compose_form.js
rename to app/javascript/flavours/glitch/features/compose/components/compose_form.js
index 54b1944a46..67ce935f43 100644
--- a/app/javascript/themes/glitch/features/compose/components/compose_form.js
+++ b/app/javascript/flavours/glitch/features/compose/components/compose_form.js
@@ -1,12 +1,12 @@
import React from 'react';
import CharacterCounter from './character_counter';
-import Button from 'themes/glitch/components/button';
+import Button from 'flavours/glitch/components/button';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import ReplyIndicatorContainer from '../containers/reply_indicator_container';
-import AutosuggestTextarea from 'themes/glitch/components/autosuggest_textarea';
+import AutosuggestTextarea from 'flavours/glitch/components/autosuggest_textarea';
import { defineMessages, injectIntl } from 'react-intl';
-import Collapsable from 'themes/glitch/components/collapsable';
+import Collapsable from 'flavours/glitch/components/collapsable';
import SpoilerButtonContainer from '../containers/spoiler_button_container';
import PrivacyDropdownContainer from '../containers/privacy_dropdown_container';
import ComposeAdvancedOptionsContainer from '../containers/advanced_options_container';
@@ -14,12 +14,12 @@ import SensitiveButtonContainer from '../containers/sensitive_button_container';
import EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';
import UploadFormContainer from '../containers/upload_form_container';
import WarningContainer from '../containers/warning_container';
-import { isMobile } from 'themes/glitch/util/is_mobile';
+import { isMobile } from 'flavours/glitch/util/is_mobile';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { length } from 'stringz';
-import { countableText } from 'themes/glitch/util/counter';
+import { countableText } from 'flavours/glitch/util/counter';
import ComposeAttachOptions from './attach_options';
-import initialState from 'themes/glitch/util/initial_state';
+import initialState from 'flavours/glitch/util/initial_state';
const maxChars = initialState.max_toot_chars;
diff --git a/app/javascript/themes/glitch/features/compose/components/dropdown.js b/app/javascript/flavours/glitch/features/compose/components/dropdown.js
similarity index 96%
rename from app/javascript/themes/glitch/features/compose/components/dropdown.js
rename to app/javascript/flavours/glitch/features/compose/components/dropdown.js
index f3d9f094e5..1b0000fb7f 100644
--- a/app/javascript/themes/glitch/features/compose/components/dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/dropdown.js
@@ -3,7 +3,7 @@ import React from 'react';
import PropTypes from 'prop-types';
// Our imports.
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
const iconStyle = {
height : null,
diff --git a/app/javascript/themes/glitch/features/compose/components/emoji_picker_dropdown.js b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
similarity index 98%
rename from app/javascript/themes/glitch/features/compose/components/emoji_picker_dropdown.js
rename to app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
index fd59efb851..cf89f91d33 100644
--- a/app/javascript/themes/glitch/features/compose/components/emoji_picker_dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/emoji_picker_dropdown.js
@@ -1,12 +1,12 @@
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
-import { EmojiPicker as EmojiPickerAsync } from 'themes/glitch/util/async-components';
+import { EmojiPicker as EmojiPickerAsync } from 'flavours/glitch/util/async-components';
import Overlay from 'react-overlays/lib/Overlay';
import classNames from 'classnames';
import ImmutablePropTypes from 'react-immutable-proptypes';
import detectPassiveEvents from 'detect-passive-events';
-import { buildCustomEmojis } from 'themes/glitch/util/emoji';
+import { buildCustomEmojis } from 'flavours/glitch/util/emoji';
const messages = defineMessages({
emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },
diff --git a/app/javascript/themes/glitch/features/compose/components/navigation_bar.js b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
similarity index 87%
rename from app/javascript/themes/glitch/features/compose/components/navigation_bar.js
rename to app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
index 24a70949b8..1b6d74123e 100644
--- a/app/javascript/themes/glitch/features/compose/components/navigation_bar.js
+++ b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
@@ -1,9 +1,9 @@
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import Avatar from 'themes/glitch/components/avatar';
-import IconButton from 'themes/glitch/components/icon_button';
-import Permalink from 'themes/glitch/components/permalink';
+import Avatar from 'flavours/glitch/components/avatar';
+import IconButton from 'flavours/glitch/components/icon_button';
+import Permalink from 'flavours/glitch/components/permalink';
import { FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/compose/components/privacy_dropdown.js b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.js
similarity index 98%
rename from app/javascript/themes/glitch/features/compose/components/privacy_dropdown.js
rename to app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.js
index 0cd92d174f..90f062f8f0 100644
--- a/app/javascript/themes/glitch/features/compose/components/privacy_dropdown.js
+++ b/app/javascript/flavours/glitch/features/compose/components/privacy_dropdown.js
@@ -1,9 +1,9 @@
import React from 'react';
import PropTypes from 'prop-types';
import { injectIntl, defineMessages } from 'react-intl';
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
import Overlay from 'react-overlays/lib/Overlay';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import detectPassiveEvents from 'detect-passive-events';
import classNames from 'classnames';
diff --git a/app/javascript/themes/glitch/features/compose/components/reply_indicator.js b/app/javascript/flavours/glitch/features/compose/components/reply_indicator.js
similarity index 90%
rename from app/javascript/themes/glitch/features/compose/components/reply_indicator.js
rename to app/javascript/flavours/glitch/features/compose/components/reply_indicator.js
index 9a8d10cebc..cb28e51be1 100644
--- a/app/javascript/themes/glitch/features/compose/components/reply_indicator.js
+++ b/app/javascript/flavours/glitch/features/compose/components/reply_indicator.js
@@ -1,9 +1,9 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import Avatar from 'themes/glitch/components/avatar';
-import IconButton from 'themes/glitch/components/icon_button';
-import DisplayName from 'themes/glitch/components/display_name';
+import Avatar from 'flavours/glitch/components/avatar';
+import IconButton from 'flavours/glitch/components/icon_button';
+import DisplayName from 'flavours/glitch/components/display_name';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/compose/components/search.js b/app/javascript/flavours/glitch/features/compose/components/search.js
similarity index 98%
rename from app/javascript/themes/glitch/features/compose/components/search.js
rename to app/javascript/flavours/glitch/features/compose/components/search.js
index c3218137f8..1ce66b19da 100644
--- a/app/javascript/themes/glitch/features/compose/components/search.js
+++ b/app/javascript/flavours/glitch/features/compose/components/search.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import Overlay from 'react-overlays/lib/Overlay';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
const messages = defineMessages({
diff --git a/app/javascript/themes/glitch/features/compose/components/search_results.js b/app/javascript/flavours/glitch/features/compose/components/search_results.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/components/search_results.js
rename to app/javascript/flavours/glitch/features/compose/components/search_results.js
index 3fdafa5f3c..2a4818d4e2 100644
--- a/app/javascript/themes/glitch/features/compose/components/search_results.js
+++ b/app/javascript/flavours/glitch/features/compose/components/search_results.js
@@ -1,8 +1,8 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { FormattedMessage } from 'react-intl';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import StatusContainer from 'themes/glitch/containers/status_container';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import StatusContainer from 'flavours/glitch/containers/status_container';
import { Link } from 'react-router-dom';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/compose/components/text_icon_button.js b/app/javascript/flavours/glitch/features/compose/components/text_icon_button.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/components/text_icon_button.js
rename to app/javascript/flavours/glitch/features/compose/components/text_icon_button.js
diff --git a/app/javascript/themes/glitch/features/compose/components/upload.js b/app/javascript/flavours/glitch/features/compose/components/upload.js
similarity index 96%
rename from app/javascript/themes/glitch/features/compose/components/upload.js
rename to app/javascript/flavours/glitch/features/compose/components/upload.js
index ded376ada3..a1fc93234c 100644
--- a/app/javascript/themes/glitch/features/compose/components/upload.js
+++ b/app/javascript/flavours/glitch/features/compose/components/upload.js
@@ -1,8 +1,8 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import IconButton from 'themes/glitch/components/icon_button';
-import Motion from 'themes/glitch/util/optional_motion';
+import IconButton from 'flavours/glitch/components/icon_button';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { defineMessages, injectIntl } from 'react-intl';
diff --git a/app/javascript/themes/glitch/features/compose/components/upload_button.js b/app/javascript/flavours/glitch/features/compose/components/upload_button.js
similarity index 97%
rename from app/javascript/themes/glitch/features/compose/components/upload_button.js
rename to app/javascript/flavours/glitch/features/compose/components/upload_button.js
index d7742adfe7..f06167a2a9 100644
--- a/app/javascript/themes/glitch/features/compose/components/upload_button.js
+++ b/app/javascript/flavours/glitch/features/compose/components/upload_button.js
@@ -1,5 +1,5 @@
import React from 'react';
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
import { connect } from 'react-redux';
diff --git a/app/javascript/themes/glitch/features/compose/components/upload_form.js b/app/javascript/flavours/glitch/features/compose/components/upload_form.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/components/upload_form.js
rename to app/javascript/flavours/glitch/features/compose/components/upload_form.js
diff --git a/app/javascript/themes/glitch/features/compose/components/upload_progress.js b/app/javascript/flavours/glitch/features/compose/components/upload_progress.js
similarity index 94%
rename from app/javascript/themes/glitch/features/compose/components/upload_progress.js
rename to app/javascript/flavours/glitch/features/compose/components/upload_progress.js
index b923d0a226..2a3b8ceb48 100644
--- a/app/javascript/themes/glitch/features/compose/components/upload_progress.js
+++ b/app/javascript/flavours/glitch/features/compose/components/upload_progress.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import { FormattedMessage } from 'react-intl';
diff --git a/app/javascript/themes/glitch/features/compose/components/warning.js b/app/javascript/flavours/glitch/features/compose/components/warning.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/components/warning.js
rename to app/javascript/flavours/glitch/features/compose/components/warning.js
index 82df55a31d..4962e76c8a 100644
--- a/app/javascript/themes/glitch/features/compose/components/warning.js
+++ b/app/javascript/flavours/glitch/features/compose/components/warning.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
export default class Warning extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/features/compose/containers/advanced_options_container.js b/app/javascript/flavours/glitch/features/compose/containers/advanced_options_container.js
similarity index 85%
rename from app/javascript/themes/glitch/features/compose/containers/advanced_options_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/advanced_options_container.js
index 9f168942a0..da381568b2 100644
--- a/app/javascript/themes/glitch/features/compose/containers/advanced_options_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/advanced_options_container.js
@@ -2,7 +2,7 @@
import { connect } from 'react-redux';
// Our imports.
-import { toggleComposeAdvancedOption } from 'themes/glitch/actions/compose';
+import { toggleComposeAdvancedOption } from 'flavours/glitch/actions/compose';
import ComposeAdvancedOptions from '../components/advanced_options';
const mapStateToProps = state => ({
diff --git a/app/javascript/themes/glitch/features/compose/containers/autosuggest_account_container.js b/app/javascript/flavours/glitch/features/compose/containers/autosuggest_account_container.js
similarity index 86%
rename from app/javascript/themes/glitch/features/compose/containers/autosuggest_account_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/autosuggest_account_container.js
index 96eb70c185..0e1c328fe9 100644
--- a/app/javascript/themes/glitch/features/compose/containers/autosuggest_account_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/autosuggest_account_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import AutosuggestAccount from '../components/autosuggest_account';
-import { makeGetAccount } from 'themes/glitch/selectors';
+import { makeGetAccount } from 'flavours/glitch/selectors';
const makeMapStateToProps = () => {
const getAccount = makeGetAccount();
diff --git a/app/javascript/themes/glitch/features/compose/containers/compose_form_container.js b/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/containers/compose_form_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js
index 7afa988f1f..e2e93e44b6 100644
--- a/app/javascript/themes/glitch/features/compose/containers/compose_form_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/compose_form_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import ComposeForm from '../components/compose_form';
-import { changeComposeVisibility, uploadCompose } from 'themes/glitch/actions/compose';
+import { changeComposeVisibility, uploadCompose } from 'flavours/glitch/actions/compose';
import {
changeCompose,
submitCompose,
@@ -9,7 +9,7 @@ import {
selectComposeSuggestion,
changeComposeSpoilerText,
insertEmojiCompose,
-} from 'themes/glitch/actions/compose';
+} from 'flavours/glitch/actions/compose';
const mapStateToProps = state => ({
text: state.getIn(['compose', 'text']),
diff --git a/app/javascript/themes/glitch/features/compose/containers/emoji_picker_dropdown_container.js b/app/javascript/flavours/glitch/features/compose/containers/emoji_picker_dropdown_container.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/containers/emoji_picker_dropdown_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/emoji_picker_dropdown_container.js
index 55a13bd653..ba85edd873 100644
--- a/app/javascript/themes/glitch/features/compose/containers/emoji_picker_dropdown_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/emoji_picker_dropdown_container.js
@@ -1,9 +1,9 @@
import { connect } from 'react-redux';
import EmojiPickerDropdown from '../components/emoji_picker_dropdown';
-import { changeSetting } from 'themes/glitch/actions/settings';
+import { changeSetting } from 'flavours/glitch/actions/settings';
import { createSelector } from 'reselect';
import { Map as ImmutableMap } from 'immutable';
-import { useEmoji } from 'themes/glitch/actions/emojis';
+import { useEmoji } from 'flavours/glitch/actions/emojis';
const perLine = 8;
const lines = 2;
diff --git a/app/javascript/themes/glitch/features/compose/containers/navigation_container.js b/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
similarity index 81%
rename from app/javascript/themes/glitch/features/compose/containers/navigation_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
index b6d737b462..eb630ffbb5 100644
--- a/app/javascript/themes/glitch/features/compose/containers/navigation_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import NavigationBar from '../components/navigation_bar';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const mapStateToProps = state => {
return {
diff --git a/app/javascript/themes/glitch/features/compose/containers/privacy_dropdown_container.js b/app/javascript/flavours/glitch/features/compose/containers/privacy_dropdown_container.js
similarity index 73%
rename from app/javascript/themes/glitch/features/compose/containers/privacy_dropdown_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/privacy_dropdown_container.js
index 9636ceab24..cb94fcc806 100644
--- a/app/javascript/themes/glitch/features/compose/containers/privacy_dropdown_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/privacy_dropdown_container.js
@@ -1,8 +1,8 @@
import { connect } from 'react-redux';
import PrivacyDropdown from '../components/privacy_dropdown';
-import { changeComposeVisibility } from 'themes/glitch/actions/compose';
-import { openModal, closeModal } from 'themes/glitch/actions/modal';
-import { isUserTouching } from 'themes/glitch/util/is_mobile';
+import { changeComposeVisibility } from 'flavours/glitch/actions/compose';
+import { openModal, closeModal } from 'flavours/glitch/actions/modal';
+import { isUserTouching } from 'flavours/glitch/util/is_mobile';
const mapStateToProps = state => ({
isModalOpen: state.get('modal').modalType === 'ACTIONS',
diff --git a/app/javascript/themes/glitch/features/compose/containers/reply_indicator_container.js b/app/javascript/flavours/glitch/features/compose/containers/reply_indicator_container.js
similarity index 79%
rename from app/javascript/themes/glitch/features/compose/containers/reply_indicator_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/reply_indicator_container.js
index 6dcabb3cd1..a7c82d135d 100644
--- a/app/javascript/themes/glitch/features/compose/containers/reply_indicator_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/reply_indicator_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
-import { cancelReplyCompose } from 'themes/glitch/actions/compose';
-import { makeGetStatus } from 'themes/glitch/selectors';
+import { cancelReplyCompose } from 'flavours/glitch/actions/compose';
+import { makeGetStatus } from 'flavours/glitch/selectors';
import ReplyIndicator from '../components/reply_indicator';
const makeMapStateToProps = () => {
diff --git a/app/javascript/themes/glitch/features/compose/containers/search_container.js b/app/javascript/flavours/glitch/features/compose/containers/search_container.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/containers/search_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/search_container.js
index a450d27e7a..8f4bfcf088 100644
--- a/app/javascript/themes/glitch/features/compose/containers/search_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/search_container.js
@@ -4,7 +4,7 @@ import {
clearSearch,
submitSearch,
showSearch,
-} from 'themes/glitch/actions/search';
+} from 'flavours/glitch/actions/search';
import Search from '../components/search';
const mapStateToProps = state => ({
diff --git a/app/javascript/themes/glitch/features/compose/containers/search_results_container.js b/app/javascript/flavours/glitch/features/compose/containers/search_results_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/containers/search_results_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/search_results_container.js
diff --git a/app/javascript/themes/glitch/features/compose/containers/sensitive_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/sensitive_button_container.js
similarity index 91%
rename from app/javascript/themes/glitch/features/compose/containers/sensitive_button_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/sensitive_button_container.js
index a710dd104f..cf6706c0e0 100644
--- a/app/javascript/themes/glitch/features/compose/containers/sensitive_button_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/sensitive_button_container.js
@@ -2,9 +2,9 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classNames from 'classnames';
-import IconButton from 'themes/glitch/components/icon_button';
-import { changeComposeSensitivity } from 'themes/glitch/actions/compose';
-import Motion from 'themes/glitch/util/optional_motion';
+import IconButton from 'flavours/glitch/components/icon_button';
+import { changeComposeSensitivity } from 'flavours/glitch/actions/compose';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import { injectIntl, defineMessages } from 'react-intl';
diff --git a/app/javascript/themes/glitch/features/compose/containers/spoiler_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/spoiler_button_container.js
similarity index 89%
rename from app/javascript/themes/glitch/features/compose/containers/spoiler_button_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/spoiler_button_container.js
index 160e71ba92..d7b4246bc2 100644
--- a/app/javascript/themes/glitch/features/compose/containers/spoiler_button_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/spoiler_button_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import TextIconButton from '../components/text_icon_button';
-import { changeComposeSpoilerness } from 'themes/glitch/actions/compose';
+import { changeComposeSpoilerness } from 'flavours/glitch/actions/compose';
import { injectIntl, defineMessages } from 'react-intl';
const messages = defineMessages({
diff --git a/app/javascript/themes/glitch/features/compose/containers/upload_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js
similarity index 90%
rename from app/javascript/themes/glitch/features/compose/containers/upload_button_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js
index f332eae1aa..4c1cb49e93 100644
--- a/app/javascript/themes/glitch/features/compose/containers/upload_button_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import UploadButton from '../components/upload_button';
-import { uploadCompose } from 'themes/glitch/actions/compose';
+import { uploadCompose } from 'flavours/glitch/actions/compose';
const mapStateToProps = state => ({
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')),
diff --git a/app/javascript/themes/glitch/features/compose/containers/upload_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_container.js
similarity index 84%
rename from app/javascript/themes/glitch/features/compose/containers/upload_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/upload_container.js
index eea514bf53..368038425e 100644
--- a/app/javascript/themes/glitch/features/compose/containers/upload_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/upload_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import Upload from '../components/upload';
-import { undoUploadCompose, changeUploadCompose } from 'themes/glitch/actions/compose';
+import { undoUploadCompose, changeUploadCompose } from 'flavours/glitch/actions/compose';
const mapStateToProps = (state, { id }) => ({
media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
diff --git a/app/javascript/themes/glitch/features/compose/containers/upload_form_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_form_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/containers/upload_form_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/upload_form_container.js
diff --git a/app/javascript/themes/glitch/features/compose/containers/upload_progress_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_progress_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/compose/containers/upload_progress_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/upload_progress_container.js
diff --git a/app/javascript/themes/glitch/features/compose/containers/warning_container.js b/app/javascript/flavours/glitch/features/compose/containers/warning_container.js
similarity index 94%
rename from app/javascript/themes/glitch/features/compose/containers/warning_container.js
rename to app/javascript/flavours/glitch/features/compose/containers/warning_container.js
index 225d6a1dd9..f20c75b911 100644
--- a/app/javascript/themes/glitch/features/compose/containers/warning_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/warning_container.js
@@ -3,7 +3,7 @@ import { connect } from 'react-redux';
import Warning from '../components/warning';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const mapStateToProps = state => ({
needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']),
diff --git a/app/javascript/themes/glitch/features/compose/index.js b/app/javascript/flavours/glitch/features/compose/index.js
similarity index 93%
rename from app/javascript/themes/glitch/features/compose/index.js
rename to app/javascript/flavours/glitch/features/compose/index.js
index 3fcaf416f8..02b97ad00e 100644
--- a/app/javascript/themes/glitch/features/compose/index.js
+++ b/app/javascript/flavours/glitch/features/compose/index.js
@@ -4,16 +4,16 @@ import NavigationContainer from './containers/navigation_container';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { mountCompose, unmountCompose } from 'themes/glitch/actions/compose';
-import { openModal } from 'themes/glitch/actions/modal';
-import { changeLocalSetting } from 'themes/glitch/actions/local_settings';
+import { mountCompose, unmountCompose } from 'flavours/glitch/actions/compose';
+import { openModal } from 'flavours/glitch/actions/modal';
+import { changeLocalSetting } from 'flavours/glitch/actions/local_settings';
import { Link } from 'react-router-dom';
import { injectIntl, defineMessages } from 'react-intl';
import SearchContainer from './containers/search_container';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import SearchResultsContainer from './containers/search_results_container';
-import { changeComposing } from 'themes/glitch/actions/compose';
+import { changeComposing } from 'flavours/glitch/actions/compose';
const messages = defineMessages({
start: { id: 'getting_started.heading', defaultMessage: 'Getting started' },
diff --git a/app/javascript/themes/glitch/features/direct_timeline/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/direct_timeline/containers/column_settings_container.js
similarity index 67%
rename from app/javascript/themes/glitch/features/direct_timeline/containers/column_settings_container.js
rename to app/javascript/flavours/glitch/features/direct_timeline/containers/column_settings_container.js
index 2a40c65a52..d3e4b42168 100644
--- a/app/javascript/themes/glitch/features/direct_timeline/containers/column_settings_container.js
+++ b/app/javascript/flavours/glitch/features/direct_timeline/containers/column_settings_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
-import ColumnSettings from 'themes/glitch/features/community_timeline/components/column_settings';
-import { changeSetting } from 'themes/glitch/actions/settings';
+import ColumnSettings from 'flavours/glitch/features/community_timeline/components/column_settings';
+import { changeSetting } from 'flavours/glitch/actions/settings';
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'direct']),
diff --git a/app/javascript/themes/glitch/features/direct_timeline/index.js b/app/javascript/flavours/glitch/features/direct_timeline/index.js
similarity index 85%
rename from app/javascript/themes/glitch/features/direct_timeline/index.js
rename to app/javascript/flavours/glitch/features/direct_timeline/index.js
index 6b29cf94d2..81096c0ece 100644
--- a/app/javascript/themes/glitch/features/direct_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/direct_timeline/index.js
@@ -1,17 +1,17 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import {
refreshDirectTimeline,
expandDirectTimeline,
-} from 'themes/glitch/actions/timelines';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+} from 'flavours/glitch/actions/timelines';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container';
-import { connectDirectStream } from 'themes/glitch/actions/streaming';
+import { connectDirectStream } from 'flavours/glitch/actions/streaming';
const messages = defineMessages({
title: { id: 'column.direct', defaultMessage: 'Direct messages' },
diff --git a/app/javascript/themes/glitch/features/favourited_statuses/index.js b/app/javascript/flavours/glitch/features/favourited_statuses/index.js
similarity index 87%
rename from app/javascript/themes/glitch/features/favourited_statuses/index.js
rename to app/javascript/flavours/glitch/features/favourited_statuses/index.js
index 80345e0e2b..e20dda7183 100644
--- a/app/javascript/themes/glitch/features/favourited_statuses/index.js
+++ b/app/javascript/flavours/glitch/features/favourited_statuses/index.js
@@ -2,11 +2,11 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'themes/glitch/actions/favourites';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
-import StatusList from 'themes/glitch/components/status_list';
+import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'flavours/glitch/actions/favourites';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
+import StatusList from 'flavours/glitch/components/status_list';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/favourites/index.js b/app/javascript/flavours/glitch/features/favourites/index.js
similarity index 79%
rename from app/javascript/themes/glitch/features/favourites/index.js
rename to app/javascript/flavours/glitch/features/favourites/index.js
index d7b8ac3b10..055a15ccb7 100644
--- a/app/javascript/themes/glitch/features/favourites/index.js
+++ b/app/javascript/flavours/glitch/features/favourites/index.js
@@ -2,12 +2,12 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
-import { fetchFavourites } from 'themes/glitch/actions/interactions';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
+import { fetchFavourites } from 'flavours/glitch/actions/interactions';
import { ScrollContainer } from 'react-router-scroll-4';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
diff --git a/app/javascript/themes/glitch/features/follow_requests/components/account_authorize.js b/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js
similarity index 87%
rename from app/javascript/themes/glitch/features/follow_requests/components/account_authorize.js
rename to app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js
index ce386d888d..dead0753f8 100644
--- a/app/javascript/themes/glitch/features/follow_requests/components/account_authorize.js
+++ b/app/javascript/flavours/glitch/features/follow_requests/components/account_authorize.js
@@ -1,10 +1,10 @@
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import Permalink from 'themes/glitch/components/permalink';
-import Avatar from 'themes/glitch/components/avatar';
-import DisplayName from 'themes/glitch/components/display_name';
-import IconButton from 'themes/glitch/components/icon_button';
+import Permalink from 'flavours/glitch/components/permalink';
+import Avatar from 'flavours/glitch/components/avatar';
+import DisplayName from 'flavours/glitch/components/display_name';
+import IconButton from 'flavours/glitch/components/icon_button';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/follow_requests/containers/account_authorize_container.js b/app/javascript/flavours/glitch/features/follow_requests/containers/account_authorize_container.js
similarity index 78%
rename from app/javascript/themes/glitch/features/follow_requests/containers/account_authorize_container.js
rename to app/javascript/flavours/glitch/features/follow_requests/containers/account_authorize_container.js
index 78ae77eee3..693e98e8ce 100644
--- a/app/javascript/themes/glitch/features/follow_requests/containers/account_authorize_container.js
+++ b/app/javascript/flavours/glitch/features/follow_requests/containers/account_authorize_container.js
@@ -1,7 +1,7 @@
import { connect } from 'react-redux';
-import { makeGetAccount } from 'themes/glitch/selectors';
+import { makeGetAccount } from 'flavours/glitch/selectors';
import AccountAuthorize from '../components/account_authorize';
-import { authorizeFollowRequest, rejectFollowRequest } from 'themes/glitch/actions/accounts';
+import { authorizeFollowRequest, rejectFollowRequest } from 'flavours/glitch/actions/accounts';
const makeMapStateToProps = () => {
const getAccount = makeGetAccount();
diff --git a/app/javascript/themes/glitch/features/follow_requests/index.js b/app/javascript/flavours/glitch/features/follow_requests/index.js
similarity index 85%
rename from app/javascript/themes/glitch/features/follow_requests/index.js
rename to app/javascript/flavours/glitch/features/follow_requests/index.js
index 3f44f518a9..04ff3f1116 100644
--- a/app/javascript/themes/glitch/features/follow_requests/index.js
+++ b/app/javascript/flavours/glitch/features/follow_requests/index.js
@@ -2,12 +2,12 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import { ScrollContainer } from 'react-router-scroll-4';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButtonSlim from 'themes/glitch/components/column_back_button_slim';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
import AccountAuthorizeContainer from './containers/account_authorize_container';
-import { fetchFollowRequests, expandFollowRequests } from 'themes/glitch/actions/accounts';
+import { fetchFollowRequests, expandFollowRequests } from 'flavours/glitch/actions/accounts';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/followers/index.js b/app/javascript/flavours/glitch/features/followers/index.js
similarity index 83%
rename from app/javascript/themes/glitch/features/followers/index.js
rename to app/javascript/flavours/glitch/features/followers/index.js
index d586bf41d0..f0ef29ff68 100644
--- a/app/javascript/themes/glitch/features/followers/index.js
+++ b/app/javascript/flavours/glitch/features/followers/index.js
@@ -2,18 +2,18 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import {
fetchAccount,
fetchFollowers,
expandFollowers,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import { ScrollContainer } from 'react-router-scroll-4';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import Column from 'themes/glitch/features/ui/components/column';
-import HeaderContainer from 'themes/glitch/features/account_timeline/containers/header_container';
-import LoadMore from 'themes/glitch/components/load_more';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import Column from 'flavours/glitch/features/ui/components/column';
+import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
+import LoadMore from 'flavours/glitch/components/load_more';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
diff --git a/app/javascript/themes/glitch/features/following/index.js b/app/javascript/flavours/glitch/features/following/index.js
similarity index 83%
rename from app/javascript/themes/glitch/features/following/index.js
rename to app/javascript/flavours/glitch/features/following/index.js
index c306faf21d..f30f7b0d98 100644
--- a/app/javascript/themes/glitch/features/following/index.js
+++ b/app/javascript/flavours/glitch/features/following/index.js
@@ -2,18 +2,18 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import {
fetchAccount,
fetchFollowing,
expandFollowing,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import { ScrollContainer } from 'react-router-scroll-4';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import Column from 'themes/glitch/features/ui/components/column';
-import HeaderContainer from 'themes/glitch/features/account_timeline/containers/header_container';
-import LoadMore from 'themes/glitch/components/load_more';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import Column from 'flavours/glitch/features/ui/components/column';
+import HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';
+import LoadMore from 'flavours/glitch/components/load_more';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
diff --git a/app/javascript/flavours/glitch/features/generic_not_found/index.js b/app/javascript/flavours/glitch/features/generic_not_found/index.js
new file mode 100644
index 0000000000..d01a1ba471
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/generic_not_found/index.js
@@ -0,0 +1,11 @@
+import React from 'react';
+import Column from 'flavours/glitch/features/ui/components/column';
+import MissingIndicator from 'flavours/glitch/components/missing_indicator';
+
+const GenericNotFound = () => (
+
+
+
+);
+
+export default GenericNotFound;
diff --git a/app/javascript/themes/glitch/features/getting_started/index.js b/app/javascript/flavours/glitch/features/getting_started/index.js
similarity index 95%
rename from app/javascript/themes/glitch/features/getting_started/index.js
rename to app/javascript/flavours/glitch/features/getting_started/index.js
index 74b019cf1c..2af0fcf48d 100644
--- a/app/javascript/themes/glitch/features/getting_started/index.js
+++ b/app/javascript/flavours/glitch/features/getting_started/index.js
@@ -1,14 +1,14 @@
import React from 'react';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnLink from 'themes/glitch/features/ui/components/column_link';
-import ColumnSubheading from 'themes/glitch/features/ui/components/column_subheading';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnLink from 'flavours/glitch/features/ui/components/column_link';
+import ColumnSubheading from 'flavours/glitch/features/ui/components/column_subheading';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
-import { openModal } from 'themes/glitch/actions/modal';
+import { openModal } from 'flavours/glitch/actions/modal';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' },
diff --git a/app/javascript/themes/glitch/features/hashtag_timeline/index.js b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js
similarity index 86%
rename from app/javascript/themes/glitch/features/hashtag_timeline/index.js
rename to app/javascript/flavours/glitch/features/hashtag_timeline/index.js
index a878931b3d..9f3c9bec76 100644
--- a/app/javascript/themes/glitch/features/hashtag_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/hashtag_timeline/index.js
@@ -1,16 +1,16 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import {
refreshHashtagTimeline,
expandHashtagTimeline,
-} from 'themes/glitch/actions/timelines';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+} from 'flavours/glitch/actions/timelines';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import { FormattedMessage } from 'react-intl';
-import { connectHashtagStream } from 'themes/glitch/actions/streaming';
+import { connectHashtagStream } from 'flavours/glitch/actions/streaming';
const mapStateToProps = (state, props) => ({
hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0,
diff --git a/app/javascript/themes/glitch/features/home_timeline/components/column_settings.js b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js
similarity index 92%
rename from app/javascript/themes/glitch/features/home_timeline/components/column_settings.js
rename to app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js
index 533da6c36c..604a7c6dc0 100644
--- a/app/javascript/themes/glitch/features/home_timeline/components/column_settings.js
+++ b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.js
@@ -2,8 +2,8 @@ import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import SettingToggle from 'themes/glitch/features/notifications/components/setting_toggle';
-import SettingText from 'themes/glitch/components/setting_text';
+import SettingToggle from 'flavours/glitch/features/notifications/components/setting_toggle';
+import SettingText from 'flavours/glitch/components/setting_text';
const messages = defineMessages({
filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' },
diff --git a/app/javascript/themes/glitch/features/home_timeline/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/home_timeline/containers/column_settings_container.js
similarity index 84%
rename from app/javascript/themes/glitch/features/home_timeline/containers/column_settings_container.js
rename to app/javascript/flavours/glitch/features/home_timeline/containers/column_settings_container.js
index a0062f564e..19a8e792f7 100644
--- a/app/javascript/themes/glitch/features/home_timeline/containers/column_settings_container.js
+++ b/app/javascript/flavours/glitch/features/home_timeline/containers/column_settings_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import ColumnSettings from '../components/column_settings';
-import { changeSetting, saveSettings } from 'themes/glitch/actions/settings';
+import { changeSetting, saveSettings } from 'flavours/glitch/actions/settings';
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'home']),
diff --git a/app/javascript/themes/glitch/features/home_timeline/index.js b/app/javascript/flavours/glitch/features/home_timeline/index.js
similarity index 86%
rename from app/javascript/themes/glitch/features/home_timeline/index.js
rename to app/javascript/flavours/glitch/features/home_timeline/index.js
index 8a65891cdb..2dfec6bbed 100644
--- a/app/javascript/themes/glitch/features/home_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/home_timeline/index.js
@@ -1,11 +1,11 @@
import React from 'react';
import { connect } from 'react-redux';
-import { expandHomeTimeline } from 'themes/glitch/actions/timelines';
+import { expandHomeTimeline } from 'flavours/glitch/actions/timelines';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container';
import { Link } from 'react-router-dom';
diff --git a/app/javascript/themes/glitch/features/local_settings/index.js b/app/javascript/flavours/glitch/features/local_settings/index.js
similarity index 91%
rename from app/javascript/themes/glitch/features/local_settings/index.js
rename to app/javascript/flavours/glitch/features/local_settings/index.js
index 6c5d514136..81d9a3f416 100644
--- a/app/javascript/themes/glitch/features/local_settings/index.js
+++ b/app/javascript/flavours/glitch/features/local_settings/index.js
@@ -7,8 +7,8 @@ import { connect } from 'react-redux';
// Our imports
import LocalSettingsPage from './page';
import LocalSettingsNavigation from './navigation';
-import { closeModal } from 'themes/glitch/actions/modal';
-import { changeLocalSetting } from 'themes/glitch/actions/local_settings';
+import { closeModal } from 'flavours/glitch/actions/modal';
+import { changeLocalSetting } from 'flavours/glitch/actions/local_settings';
// Stylesheet imports
import './style.scss';
diff --git a/app/javascript/themes/glitch/features/local_settings/navigation/index.js b/app/javascript/flavours/glitch/features/local_settings/navigation/index.js
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/navigation/index.js
rename to app/javascript/flavours/glitch/features/local_settings/navigation/index.js
diff --git a/app/javascript/themes/glitch/features/local_settings/navigation/item/index.js b/app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/navigation/item/index.js
rename to app/javascript/flavours/glitch/features/local_settings/navigation/item/index.js
diff --git a/app/javascript/themes/glitch/features/local_settings/navigation/item/style.scss b/app/javascript/flavours/glitch/features/local_settings/navigation/item/style.scss
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/navigation/item/style.scss
rename to app/javascript/flavours/glitch/features/local_settings/navigation/item/style.scss
diff --git a/app/javascript/themes/glitch/features/local_settings/navigation/style.scss b/app/javascript/flavours/glitch/features/local_settings/navigation/style.scss
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/navigation/style.scss
rename to app/javascript/flavours/glitch/features/local_settings/navigation/style.scss
diff --git a/app/javascript/themes/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/page/index.js
rename to app/javascript/flavours/glitch/features/local_settings/page/index.js
diff --git a/app/javascript/themes/glitch/features/local_settings/page/item/index.js b/app/javascript/flavours/glitch/features/local_settings/page/item/index.js
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/page/item/index.js
rename to app/javascript/flavours/glitch/features/local_settings/page/item/index.js
diff --git a/app/javascript/themes/glitch/features/local_settings/page/item/style.scss b/app/javascript/flavours/glitch/features/local_settings/page/item/style.scss
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/page/item/style.scss
rename to app/javascript/flavours/glitch/features/local_settings/page/item/style.scss
diff --git a/app/javascript/themes/glitch/features/local_settings/page/style.scss b/app/javascript/flavours/glitch/features/local_settings/page/style.scss
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/page/style.scss
rename to app/javascript/flavours/glitch/features/local_settings/page/style.scss
diff --git a/app/javascript/themes/glitch/features/local_settings/style.scss b/app/javascript/flavours/glitch/features/local_settings/style.scss
similarity index 100%
rename from app/javascript/themes/glitch/features/local_settings/style.scss
rename to app/javascript/flavours/glitch/features/local_settings/style.scss
diff --git a/app/javascript/themes/glitch/features/mutes/index.js b/app/javascript/flavours/glitch/features/mutes/index.js
similarity index 81%
rename from app/javascript/themes/glitch/features/mutes/index.js
rename to app/javascript/flavours/glitch/features/mutes/index.js
index 1158b8262f..87517eec94 100644
--- a/app/javascript/themes/glitch/features/mutes/index.js
+++ b/app/javascript/flavours/glitch/features/mutes/index.js
@@ -2,12 +2,12 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
import { ScrollContainer } from 'react-router-scroll-4';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButtonSlim from 'themes/glitch/components/column_back_button_slim';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import { fetchMutes, expandMutes } from 'themes/glitch/actions/mutes';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import { fetchMutes, expandMutes } from 'flavours/glitch/actions/mutes';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/notifications/components/clear_column_button.js b/app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js
similarity index 100%
rename from app/javascript/themes/glitch/features/notifications/components/clear_column_button.js
rename to app/javascript/flavours/glitch/features/notifications/components/clear_column_button.js
diff --git a/app/javascript/themes/glitch/features/notifications/components/column_settings.js b/app/javascript/flavours/glitch/features/notifications/components/column_settings.js
similarity index 100%
rename from app/javascript/themes/glitch/features/notifications/components/column_settings.js
rename to app/javascript/flavours/glitch/features/notifications/components/column_settings.js
diff --git a/app/javascript/themes/glitch/features/notifications/components/follow.js b/app/javascript/flavours/glitch/features/notifications/components/follow.js
similarity index 95%
rename from app/javascript/themes/glitch/features/notifications/components/follow.js
rename to app/javascript/flavours/glitch/features/notifications/components/follow.js
index 8a0f01736d..4b682733ee 100644
--- a/app/javascript/themes/glitch/features/notifications/components/follow.js
+++ b/app/javascript/flavours/glitch/features/notifications/components/follow.js
@@ -7,8 +7,8 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
// Our imports.
-import Permalink from 'themes/glitch/components/permalink';
-import AccountContainer from 'themes/glitch/containers/account_container';
+import Permalink from 'flavours/glitch/components/permalink';
+import AccountContainer from 'flavours/glitch/containers/account_container';
import NotificationOverlayContainer from '../containers/overlay_container';
export default class NotificationFollow extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/notifications/components/notification.js b/app/javascript/flavours/glitch/features/notifications/components/notification.js
similarity index 96%
rename from app/javascript/themes/glitch/features/notifications/components/notification.js
rename to app/javascript/flavours/glitch/features/notifications/components/notification.js
index a309d3a42a..185da8395a 100644
--- a/app/javascript/themes/glitch/features/notifications/components/notification.js
+++ b/app/javascript/flavours/glitch/features/notifications/components/notification.js
@@ -5,7 +5,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
// Our imports,
-import StatusContainer from 'themes/glitch/containers/status_container';
+import StatusContainer from 'flavours/glitch/containers/status_container';
import NotificationFollow from './follow';
export default class Notification extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/notifications/components/overlay.js b/app/javascript/flavours/glitch/features/notifications/components/overlay.js
similarity index 100%
rename from app/javascript/themes/glitch/features/notifications/components/overlay.js
rename to app/javascript/flavours/glitch/features/notifications/components/overlay.js
diff --git a/app/javascript/themes/glitch/features/notifications/components/setting_toggle.js b/app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js
similarity index 100%
rename from app/javascript/themes/glitch/features/notifications/components/setting_toggle.js
rename to app/javascript/flavours/glitch/features/notifications/components/setting_toggle.js
diff --git a/app/javascript/themes/glitch/features/notifications/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js
similarity index 81%
rename from app/javascript/themes/glitch/features/notifications/containers/column_settings_container.js
rename to app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js
index ddc8495f48..ce502700c4 100644
--- a/app/javascript/themes/glitch/features/notifications/containers/column_settings_container.js
+++ b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js
@@ -1,10 +1,10 @@
import { connect } from 'react-redux';
import { defineMessages, injectIntl } from 'react-intl';
import ColumnSettings from '../components/column_settings';
-import { changeSetting, saveSettings } from 'themes/glitch/actions/settings';
-import { clearNotifications } from 'themes/glitch/actions/notifications';
-import { changeAlerts as changePushNotifications, saveSettings as savePushNotificationSettings } from 'themes/glitch/actions/push_notifications';
-import { openModal } from 'themes/glitch/actions/modal';
+import { changeSetting, saveSettings } from 'flavours/glitch/actions/settings';
+import { clearNotifications } from 'flavours/glitch/actions/notifications';
+import { changeAlerts as changePushNotifications, saveSettings as savePushNotificationSettings } from 'flavours/glitch/actions/push_notifications';
+import { openModal } from 'flavours/glitch/actions/modal';
const messages = defineMessages({
clearMessage: { id: 'notifications.clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all your notifications?' },
diff --git a/app/javascript/themes/glitch/features/notifications/containers/notification_container.js b/app/javascript/flavours/glitch/features/notifications/containers/notification_container.js
similarity index 84%
rename from app/javascript/themes/glitch/features/notifications/containers/notification_container.js
rename to app/javascript/flavours/glitch/features/notifications/containers/notification_container.js
index b61aaa21cd..c60e72e1c2 100644
--- a/app/javascript/themes/glitch/features/notifications/containers/notification_container.js
+++ b/app/javascript/flavours/glitch/features/notifications/containers/notification_container.js
@@ -2,9 +2,9 @@
import { connect } from 'react-redux';
// Our imports.
-import { makeGetNotification } from 'themes/glitch/selectors';
+import { makeGetNotification } from 'flavours/glitch/selectors';
import Notification from '../components/notification';
-import { mentionCompose } from 'themes/glitch/actions/compose';
+import { mentionCompose } from 'flavours/glitch/actions/compose';
const makeMapStateToProps = () => {
const getNotification = makeGetNotification();
diff --git a/app/javascript/themes/glitch/features/notifications/containers/overlay_container.js b/app/javascript/flavours/glitch/features/notifications/containers/overlay_container.js
similarity index 84%
rename from app/javascript/themes/glitch/features/notifications/containers/overlay_container.js
rename to app/javascript/flavours/glitch/features/notifications/containers/overlay_container.js
index 52649cdd75..ee2d19814a 100644
--- a/app/javascript/themes/glitch/features/notifications/containers/overlay_container.js
+++ b/app/javascript/flavours/glitch/features/notifications/containers/overlay_container.js
@@ -3,7 +3,7 @@ import { connect } from 'react-redux';
// Our imports.
import NotificationOverlay from '../components/overlay';
-import { markNotificationForDelete } from 'themes/glitch/actions/notifications';
+import { markNotificationForDelete } from 'flavours/glitch/actions/notifications';
const mapDispatchToProps = dispatch => ({
onMarkForDelete(id, yes) {
diff --git a/app/javascript/themes/glitch/features/notifications/index.js b/app/javascript/flavours/glitch/features/notifications/index.js
similarity index 94%
rename from app/javascript/themes/glitch/features/notifications/index.js
rename to app/javascript/flavours/glitch/features/notifications/index.js
index 1ecde660a8..12b0b5b834 100644
--- a/app/javascript/themes/glitch/features/notifications/index.js
+++ b/app/javascript/flavours/glitch/features/notifications/index.js
@@ -2,21 +2,21 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import {
enterNotificationClearingMode,
expandNotifications,
scrollTopNotifications,
-} from 'themes/glitch/actions/notifications';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+} from 'flavours/glitch/actions/notifications';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import NotificationContainer from './containers/notification_container';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container';
import { createSelector } from 'reselect';
import { List as ImmutableList } from 'immutable';
import { debounce } from 'lodash';
-import ScrollableList from 'themes/glitch/components/scrollable_list';
+import ScrollableList from 'flavours/glitch/components/scrollable_list';
const messages = defineMessages({
title: { id: 'column.notifications', defaultMessage: 'Notifications' },
diff --git a/app/javascript/themes/glitch/features/pinned_statuses/index.js b/app/javascript/flavours/glitch/features/pinned_statuses/index.js
similarity index 82%
rename from app/javascript/themes/glitch/features/pinned_statuses/index.js
rename to app/javascript/flavours/glitch/features/pinned_statuses/index.js
index 0a3997850b..f56d701760 100644
--- a/app/javascript/themes/glitch/features/pinned_statuses/index.js
+++ b/app/javascript/flavours/glitch/features/pinned_statuses/index.js
@@ -2,10 +2,10 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { fetchPinnedStatuses } from 'themes/glitch/actions/pin_statuses';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButtonSlim from 'themes/glitch/components/column_back_button_slim';
-import StatusList from 'themes/glitch/components/status_list';
+import { fetchPinnedStatuses } from 'flavours/glitch/actions/pin_statuses';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
+import StatusList from 'flavours/glitch/components/status_list';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
diff --git a/app/javascript/themes/glitch/features/public_timeline/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/public_timeline/containers/column_settings_container.js
similarity index 67%
rename from app/javascript/themes/glitch/features/public_timeline/containers/column_settings_container.js
rename to app/javascript/flavours/glitch/features/public_timeline/containers/column_settings_container.js
index 0185a7724c..b13e206453 100644
--- a/app/javascript/themes/glitch/features/public_timeline/containers/column_settings_container.js
+++ b/app/javascript/flavours/glitch/features/public_timeline/containers/column_settings_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
-import ColumnSettings from 'themes/glitch/features/community_timeline/components/column_settings';
-import { changeSetting } from 'themes/glitch/actions/settings';
+import ColumnSettings from 'flavours/glitch/features/community_timeline/components/column_settings';
+import { changeSetting } from 'flavours/glitch/actions/settings';
const mapStateToProps = state => ({
settings: state.getIn(['settings', 'public']),
diff --git a/app/javascript/themes/glitch/features/public_timeline/index.js b/app/javascript/flavours/glitch/features/public_timeline/index.js
similarity index 85%
rename from app/javascript/themes/glitch/features/public_timeline/index.js
rename to app/javascript/flavours/glitch/features/public_timeline/index.js
index f5b3865afa..bbdd4612e1 100644
--- a/app/javascript/themes/glitch/features/public_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/public_timeline/index.js
@@ -1,17 +1,17 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import {
refreshPublicTimeline,
expandPublicTimeline,
-} from 'themes/glitch/actions/timelines';
-import { addColumn, removeColumn, moveColumn } from 'themes/glitch/actions/columns';
+} from 'flavours/glitch/actions/timelines';
+import { addColumn, removeColumn, moveColumn } from 'flavours/glitch/actions/columns';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ColumnSettingsContainer from './containers/column_settings_container';
-import { connectPublicStream } from 'themes/glitch/actions/streaming';
+import { connectPublicStream } from 'flavours/glitch/actions/streaming';
const messages = defineMessages({
title: { id: 'column.public', defaultMessage: 'Federated timeline' },
diff --git a/app/javascript/themes/glitch/features/reblogs/index.js b/app/javascript/flavours/glitch/features/reblogs/index.js
similarity index 79%
rename from app/javascript/themes/glitch/features/reblogs/index.js
rename to app/javascript/flavours/glitch/features/reblogs/index.js
index 8723f7c7ce..25b792b397 100644
--- a/app/javascript/themes/glitch/features/reblogs/index.js
+++ b/app/javascript/flavours/glitch/features/reblogs/index.js
@@ -2,12 +2,12 @@ import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
-import { fetchReblogs } from 'themes/glitch/actions/interactions';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
+import { fetchReblogs } from 'flavours/glitch/actions/interactions';
import { ScrollContainer } from 'react-router-scroll-4';
-import AccountContainer from 'themes/glitch/containers/account_container';
-import Column from 'themes/glitch/features/ui/components/column';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
+import AccountContainer from 'flavours/glitch/containers/account_container';
+import Column from 'flavours/glitch/features/ui/components/column';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
const mapStateToProps = (state, props) => ({
diff --git a/app/javascript/themes/glitch/features/report/components/status_check_box.js b/app/javascript/flavours/glitch/features/report/components/status_check_box.js
similarity index 100%
rename from app/javascript/themes/glitch/features/report/components/status_check_box.js
rename to app/javascript/flavours/glitch/features/report/components/status_check_box.js
diff --git a/app/javascript/themes/glitch/features/report/containers/status_check_box_container.js b/app/javascript/flavours/glitch/features/report/containers/status_check_box_container.js
similarity index 88%
rename from app/javascript/themes/glitch/features/report/containers/status_check_box_container.js
rename to app/javascript/flavours/glitch/features/report/containers/status_check_box_container.js
index 40d55fb3c0..9bfd41ffc6 100644
--- a/app/javascript/themes/glitch/features/report/containers/status_check_box_container.js
+++ b/app/javascript/flavours/glitch/features/report/containers/status_check_box_container.js
@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import StatusCheckBox from '../components/status_check_box';
-import { toggleStatusReport } from 'themes/glitch/actions/reports';
+import { toggleStatusReport } from 'flavours/glitch/actions/reports';
import { Set as ImmutableSet } from 'immutable';
const mapStateToProps = (state, { id }) => ({
diff --git a/app/javascript/flavours/glitch/features/standalone/compose/index.js b/app/javascript/flavours/glitch/features/standalone/compose/index.js
new file mode 100644
index 0000000000..b33c21cb5b
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/standalone/compose/index.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import ComposeFormContainer from 'flavours/glitch/features/compose/containers/compose_form_container';
+import NotificationsContainer from 'flavours/glitch/features/ui/containers/notifications_container';
+import LoadingBarContainer from 'flavours/glitch/features/ui/containers/loading_bar_container';
+import ModalContainer from 'flavours/glitch/features/ui/containers/modal_container';
+
+export default class Compose extends React.PureComponent {
+
+ render () {
+ return (
+
+
+
+
+
+
+ );
+ }
+
+}
diff --git a/app/javascript/themes/glitch/features/standalone/hashtag_timeline/index.js b/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
similarity index 84%
rename from app/javascript/themes/glitch/features/standalone/hashtag_timeline/index.js
rename to app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
index 7c56f264ff..0ad2cef80e 100644
--- a/app/javascript/themes/glitch/features/standalone/hashtag_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
@@ -1,13 +1,13 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
import {
refreshHashtagTimeline,
expandHashtagTimeline,
-} from 'themes/glitch/actions/timelines';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+} from 'flavours/glitch/actions/timelines';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
@connect()
export default class HashtagTimeline extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/features/standalone/public_timeline/index.js b/app/javascript/flavours/glitch/features/standalone/public_timeline/index.js
similarity index 85%
rename from app/javascript/themes/glitch/features/standalone/public_timeline/index.js
rename to app/javascript/flavours/glitch/features/standalone/public_timeline/index.js
index b3fb552884..717f6fcafc 100644
--- a/app/javascript/themes/glitch/features/standalone/public_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/standalone/public_timeline/index.js
@@ -1,13 +1,13 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'themes/glitch/features/ui/containers/status_list_container';
+import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
import {
refreshPublicTimeline,
expandPublicTimeline,
-} from 'themes/glitch/actions/timelines';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+} from 'flavours/glitch/actions/timelines';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import { defineMessages, injectIntl } from 'react-intl';
const messages = defineMessages({
diff --git a/app/javascript/themes/glitch/features/status/components/action_bar.js b/app/javascript/flavours/glitch/features/status/components/action_bar.js
similarity index 95%
rename from app/javascript/themes/glitch/features/status/components/action_bar.js
rename to app/javascript/flavours/glitch/features/status/components/action_bar.js
index 6cda988d10..4d660ee3c0 100644
--- a/app/javascript/themes/glitch/features/status/components/action_bar.js
+++ b/app/javascript/flavours/glitch/features/status/components/action_bar.js
@@ -1,10 +1,10 @@
import React from 'react';
import PropTypes from 'prop-types';
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import DropdownMenuContainer from 'themes/glitch/containers/dropdown_menu_container';
+import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container';
import { defineMessages, injectIntl } from 'react-intl';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
delete: { id: 'status.delete', defaultMessage: 'Delete' },
diff --git a/app/javascript/themes/glitch/features/status/components/card.js b/app/javascript/flavours/glitch/features/status/components/card.js
similarity index 100%
rename from app/javascript/themes/glitch/features/status/components/card.js
rename to app/javascript/flavours/glitch/features/status/components/card.js
diff --git a/app/javascript/themes/glitch/features/status/components/detailed_status.js b/app/javascript/flavours/glitch/features/status/components/detailed_status.js
similarity index 90%
rename from app/javascript/themes/glitch/features/status/components/detailed_status.js
rename to app/javascript/flavours/glitch/features/status/components/detailed_status.js
index 7606bfbf37..7c6f436d67 100644
--- a/app/javascript/themes/glitch/features/status/components/detailed_status.js
+++ b/app/javascript/flavours/glitch/features/status/components/detailed_status.js
@@ -1,17 +1,17 @@
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import Avatar from 'themes/glitch/components/avatar';
-import DisplayName from 'themes/glitch/components/display_name';
-import StatusContent from 'themes/glitch/components/status_content';
-import StatusGallery from 'themes/glitch/components/media_gallery';
-import AttachmentList from 'themes/glitch/components/attachment_list';
+import Avatar from 'flavours/glitch/components/avatar';
+import DisplayName from 'flavours/glitch/components/display_name';
+import StatusContent from 'flavours/glitch/components/status_content';
+import StatusGallery from 'flavours/glitch/components/media_gallery';
+import AttachmentList from 'flavours/glitch/components/attachment_list';
import { Link } from 'react-router-dom';
import { FormattedDate, FormattedNumber } from 'react-intl';
import CardContainer from '../containers/card_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import Video from 'themes/glitch/features/video';
-import VisibilityIcon from 'themes/glitch/components/status_visibility_icon';
+import Video from 'flavours/glitch/features/video';
+import VisibilityIcon from 'flavours/glitch/components/status_visibility_icon';
export default class DetailedStatus extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/status/containers/card_container.js b/app/javascript/flavours/glitch/features/status/containers/card_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/status/containers/card_container.js
rename to app/javascript/flavours/glitch/features/status/containers/card_container.js
diff --git a/app/javascript/themes/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js
similarity index 91%
rename from app/javascript/themes/glitch/features/status/index.js
rename to app/javascript/flavours/glitch/features/status/index.js
index 57af94a9ad..73b212bba5 100644
--- a/app/javascript/themes/glitch/features/status/index.js
+++ b/app/javascript/flavours/glitch/features/status/index.js
@@ -3,11 +3,11 @@ import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { fetchStatus } from 'themes/glitch/actions/statuses';
-import MissingIndicator from 'themes/glitch/components/missing_indicator';
+import { fetchStatus } from 'flavours/glitch/actions/statuses';
+import MissingIndicator from 'flavours/glitch/components/missing_indicator';
import DetailedStatus from './components/detailed_status';
import ActionBar from './components/action_bar';
-import Column from 'themes/glitch/features/ui/components/column';
+import Column from 'flavours/glitch/features/ui/components/column';
import {
favourite,
unfavourite,
@@ -15,23 +15,23 @@ import {
unreblog,
pin,
unpin,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
import {
replyCompose,
mentionCompose,
-} from 'themes/glitch/actions/compose';
-import { deleteStatus } from 'themes/glitch/actions/statuses';
-import { initReport } from 'themes/glitch/actions/reports';
-import { makeGetStatus } from 'themes/glitch/selectors';
+} from 'flavours/glitch/actions/compose';
+import { deleteStatus } from 'flavours/glitch/actions/statuses';
+import { initReport } from 'flavours/glitch/actions/reports';
+import { makeGetStatus } from 'flavours/glitch/selectors';
import { ScrollContainer } from 'react-router-scroll-4';
-import ColumnBackButton from 'themes/glitch/components/column_back_button';
-import StatusContainer from 'themes/glitch/containers/status_container';
-import { openModal } from 'themes/glitch/actions/modal';
+import ColumnBackButton from 'flavours/glitch/components/column_back_button';
+import StatusContainer from 'flavours/glitch/containers/status_container';
+import { openModal } from 'flavours/glitch/actions/modal';
import { defineMessages, injectIntl } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
-import { boostModal, deleteModal } from 'themes/glitch/util/initial_state';
-import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'themes/glitch/util/fullscreen';
+import { boostModal, deleteModal } from 'flavours/glitch/util/initial_state';
+import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from 'flavours/glitch/util/fullscreen';
const messages = defineMessages({
deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },
diff --git a/app/javascript/themes/glitch/features/ui/components/actions_modal.js b/app/javascript/flavours/glitch/features/ui/components/actions_modal.js
similarity index 86%
rename from app/javascript/themes/glitch/features/ui/components/actions_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/actions_modal.js
index 7a2b78b63d..0873c282fa 100644
--- a/app/javascript/themes/glitch/features/ui/components/actions_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/actions_modal.js
@@ -2,11 +2,11 @@ import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import StatusContent from 'themes/glitch/components/status_content';
-import Avatar from 'themes/glitch/components/avatar';
-import RelativeTimestamp from 'themes/glitch/components/relative_timestamp';
-import DisplayName from 'themes/glitch/components/display_name';
-import IconButton from 'themes/glitch/components/icon_button';
+import StatusContent from 'flavours/glitch/components/status_content';
+import Avatar from 'flavours/glitch/components/avatar';
+import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';
+import DisplayName from 'flavours/glitch/components/display_name';
+import IconButton from 'flavours/glitch/components/icon_button';
import classNames from 'classnames';
export default class ActionsModal extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/ui/components/boost_modal.js b/app/javascript/flavours/glitch/features/ui/components/boost_modal.js
similarity index 88%
rename from app/javascript/themes/glitch/features/ui/components/boost_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/boost_modal.js
index 49781db10d..9652bcb2db 100644
--- a/app/javascript/themes/glitch/features/ui/components/boost_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/boost_modal.js
@@ -2,11 +2,11 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
-import Button from 'themes/glitch/components/button';
-import StatusContent from 'themes/glitch/components/status_content';
-import Avatar from 'themes/glitch/components/avatar';
-import RelativeTimestamp from 'themes/glitch/components/relative_timestamp';
-import DisplayName from 'themes/glitch/components/display_name';
+import Button from 'flavours/glitch/components/button';
+import StatusContent from 'flavours/glitch/components/status_content';
+import Avatar from 'flavours/glitch/components/avatar';
+import RelativeTimestamp from 'flavours/glitch/components/relative_timestamp';
+import DisplayName from 'flavours/glitch/components/display_name';
import ImmutablePureComponent from 'react-immutable-pure-component';
const messages = defineMessages({
diff --git a/app/javascript/themes/glitch/features/ui/components/bundle.js b/app/javascript/flavours/glitch/features/ui/components/bundle.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/bundle.js
rename to app/javascript/flavours/glitch/features/ui/components/bundle.js
diff --git a/app/javascript/themes/glitch/features/ui/components/bundle_column_error.js b/app/javascript/flavours/glitch/features/ui/components/bundle_column_error.js
similarity index 88%
rename from app/javascript/themes/glitch/features/ui/components/bundle_column_error.js
rename to app/javascript/flavours/glitch/features/ui/components/bundle_column_error.js
index daedc62993..3e979a2506 100644
--- a/app/javascript/themes/glitch/features/ui/components/bundle_column_error.js
+++ b/app/javascript/flavours/glitch/features/ui/components/bundle_column_error.js
@@ -4,8 +4,8 @@ import { defineMessages, injectIntl } from 'react-intl';
import Column from './column';
import ColumnHeader from './column_header';
-import ColumnBackButtonSlim from 'themes/glitch/components/column_back_button_slim';
-import IconButton from 'themes/glitch/components/icon_button';
+import ColumnBackButtonSlim from 'flavours/glitch/components/column_back_button_slim';
+import IconButton from 'flavours/glitch/components/icon_button';
const messages = defineMessages({
title: { id: 'bundle_column_error.title', defaultMessage: 'Network error' },
diff --git a/app/javascript/themes/glitch/features/ui/components/bundle_modal_error.js b/app/javascript/flavours/glitch/features/ui/components/bundle_modal_error.js
similarity index 95%
rename from app/javascript/themes/glitch/features/ui/components/bundle_modal_error.js
rename to app/javascript/flavours/glitch/features/ui/components/bundle_modal_error.js
index 8cca32ae9a..2c14a1e5c3 100644
--- a/app/javascript/themes/glitch/features/ui/components/bundle_modal_error.js
+++ b/app/javascript/flavours/glitch/features/ui/components/bundle_modal_error.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, injectIntl } from 'react-intl';
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
const messages = defineMessages({
error: { id: 'bundle_modal_error.message', defaultMessage: 'Something went wrong while loading this component.' },
diff --git a/app/javascript/themes/glitch/features/ui/components/column.js b/app/javascript/flavours/glitch/features/ui/components/column.js
similarity index 93%
rename from app/javascript/themes/glitch/features/ui/components/column.js
rename to app/javascript/flavours/glitch/features/ui/components/column.js
index 73a5bc15e5..ab78414e05 100644
--- a/app/javascript/themes/glitch/features/ui/components/column.js
+++ b/app/javascript/flavours/glitch/features/ui/components/column.js
@@ -2,8 +2,8 @@ import React from 'react';
import ColumnHeader from './column_header';
import PropTypes from 'prop-types';
import { debounce } from 'lodash';
-import { scrollTop } from 'themes/glitch/util/scroll';
-import { isMobile } from 'themes/glitch/util/is_mobile';
+import { scrollTop } from 'flavours/glitch/util/scroll';
+import { isMobile } from 'flavours/glitch/util/is_mobile';
export default class Column extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/features/ui/components/column_header.js b/app/javascript/flavours/glitch/features/ui/components/column_header.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/column_header.js
rename to app/javascript/flavours/glitch/features/ui/components/column_header.js
diff --git a/app/javascript/themes/glitch/features/ui/components/column_link.js b/app/javascript/flavours/glitch/features/ui/components/column_link.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/column_link.js
rename to app/javascript/flavours/glitch/features/ui/components/column_link.js
diff --git a/app/javascript/themes/glitch/features/ui/components/column_loading.js b/app/javascript/flavours/glitch/features/ui/components/column_loading.js
similarity index 83%
rename from app/javascript/themes/glitch/features/ui/components/column_loading.js
rename to app/javascript/flavours/glitch/features/ui/components/column_loading.js
index 75f26218ad..ba2d0824ef 100644
--- a/app/javascript/themes/glitch/features/ui/components/column_loading.js
+++ b/app/javascript/flavours/glitch/features/ui/components/column_loading.js
@@ -1,8 +1,8 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Column from 'themes/glitch/components/column';
-import ColumnHeader from 'themes/glitch/components/column_header';
+import Column from 'flavours/glitch/components/column';
+import ColumnHeader from 'flavours/glitch/components/column_header';
import ImmutablePureComponent from 'react-immutable-pure-component';
export default class ColumnLoading extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/ui/components/column_subheading.js b/app/javascript/flavours/glitch/features/ui/components/column_subheading.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/column_subheading.js
rename to app/javascript/flavours/glitch/features/ui/components/column_subheading.js
diff --git a/app/javascript/themes/glitch/features/ui/components/columns_area.js b/app/javascript/flavours/glitch/features/ui/components/columns_area.js
similarity index 98%
rename from app/javascript/themes/glitch/features/ui/components/columns_area.js
rename to app/javascript/flavours/glitch/features/ui/components/columns_area.js
index 4529503633..264f60724d 100644
--- a/app/javascript/themes/glitch/features/ui/components/columns_area.js
+++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.js
@@ -11,10 +11,10 @@ import BundleContainer from '../containers/bundle_container';
import ColumnLoading from './column_loading';
import DrawerLoading from './drawer_loading';
import BundleColumnError from './bundle_column_error';
-import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, DirectTimeline, FavouritedStatuses } from 'themes/glitch/util/async-components';
+import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, DirectTimeline, FavouritedStatuses } from 'flavours/glitch/util/async-components';
import detectPassiveEvents from 'detect-passive-events';
-import { scrollRight } from 'themes/glitch/util/scroll';
+import { scrollRight } from 'flavours/glitch/util/scroll';
const componentMap = {
'COMPOSE': Compose,
diff --git a/app/javascript/themes/glitch/features/ui/components/confirmation_modal.js b/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js
similarity index 95%
rename from app/javascript/themes/glitch/features/ui/components/confirmation_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js
index 3d568aec37..d4d1e587ee 100644
--- a/app/javascript/themes/glitch/features/ui/components/confirmation_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/confirmation_modal.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { injectIntl, FormattedMessage } from 'react-intl';
-import Button from 'themes/glitch/components/button';
+import Button from 'flavours/glitch/components/button';
@injectIntl
export default class ConfirmationModal extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/features/ui/components/doodle_modal.js b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js
similarity index 98%
rename from app/javascript/themes/glitch/features/ui/components/doodle_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/doodle_modal.js
index 819656dbf2..9c74451b3e 100644
--- a/app/javascript/themes/glitch/features/ui/components/doodle_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/doodle_modal.js
@@ -1,12 +1,12 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Button from 'themes/glitch/components/button';
+import Button from 'flavours/glitch/components/button';
import ImmutablePureComponent from 'react-immutable-pure-component';
import Atrament from 'atrament'; // the doodling library
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { doodleSet, uploadCompose } from 'themes/glitch/actions/compose';
-import IconButton from 'themes/glitch/components/icon_button';
+import { doodleSet, uploadCompose } from 'flavours/glitch/actions/compose';
+import IconButton from 'flavours/glitch/components/icon_button';
import { debounce, mapValues } from 'lodash';
import classNames from 'classnames';
diff --git a/app/javascript/themes/glitch/features/ui/components/drawer_loading.js b/app/javascript/flavours/glitch/features/ui/components/drawer_loading.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/drawer_loading.js
rename to app/javascript/flavours/glitch/features/ui/components/drawer_loading.js
diff --git a/app/javascript/themes/glitch/features/ui/components/embed_modal.js b/app/javascript/flavours/glitch/features/ui/components/embed_modal.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/embed_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/embed_modal.js
diff --git a/app/javascript/themes/glitch/features/ui/components/image_loader.js b/app/javascript/flavours/glitch/features/ui/components/image_loader.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/components/image_loader.js
rename to app/javascript/flavours/glitch/features/ui/components/image_loader.js
diff --git a/app/javascript/themes/glitch/features/ui/components/media_modal.js b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
similarity index 96%
rename from app/javascript/themes/glitch/features/ui/components/media_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/media_modal.js
index 1dad972b2e..e56147c5bc 100644
--- a/app/javascript/themes/glitch/features/ui/components/media_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/media_modal.js
@@ -2,9 +2,9 @@ import React from 'react';
import ReactSwipeableViews from 'react-swipeable-views';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import ExtendedVideoPlayer from 'themes/glitch/components/extended_video_player';
+import ExtendedVideoPlayer from 'flavours/glitch/components/extended_video_player';
import { defineMessages, injectIntl } from 'react-intl';
-import IconButton from 'themes/glitch/components/icon_button';
+import IconButton from 'flavours/glitch/components/icon_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ImageLoader from './image_loader';
diff --git a/app/javascript/themes/glitch/features/ui/components/modal_loading.js b/app/javascript/flavours/glitch/features/ui/components/modal_loading.js
similarity index 86%
rename from app/javascript/themes/glitch/features/ui/components/modal_loading.js
rename to app/javascript/flavours/glitch/features/ui/components/modal_loading.js
index e14d20fbb2..b1c3221541 100644
--- a/app/javascript/themes/glitch/features/ui/components/modal_loading.js
+++ b/app/javascript/flavours/glitch/features/ui/components/modal_loading.js
@@ -1,6 +1,6 @@
import React from 'react';
-import LoadingIndicator from 'themes/glitch/components/loading_indicator';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
// Keep the markup in sync with
// (make sure they have the same dimensions)
diff --git a/app/javascript/themes/glitch/features/ui/components/modal_root.js b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
similarity index 98%
rename from app/javascript/themes/glitch/features/ui/components/modal_root.js
rename to app/javascript/flavours/glitch/features/ui/components/modal_root.js
index fbe7941708..61b2392839 100644
--- a/app/javascript/themes/glitch/features/ui/components/modal_root.js
+++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.js
@@ -15,7 +15,7 @@ import {
ReportModal,
SettingsModal,
EmbedModal,
-} from 'themes/glitch/util/async-components';
+} from 'flavours/glitch/util/async-components';
const MODAL_COMPONENTS = {
'MEDIA': () => Promise.resolve({ default: MediaModal }),
diff --git a/app/javascript/themes/glitch/features/ui/components/mute_modal.js b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js
similarity index 91%
rename from app/javascript/themes/glitch/features/ui/components/mute_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/mute_modal.js
index ffccdc84d3..0202b1ab13 100644
--- a/app/javascript/themes/glitch/features/ui/components/mute_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/mute_modal.js
@@ -3,10 +3,10 @@ import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { injectIntl, FormattedMessage } from 'react-intl';
import Toggle from 'react-toggle';
-import Button from 'themes/glitch/components/button';
-import { closeModal } from 'themes/glitch/actions/modal';
-import { muteAccount } from 'themes/glitch/actions/accounts';
-import { toggleHideNotifications } from 'themes/glitch/actions/mutes';
+import Button from 'flavours/glitch/components/button';
+import { closeModal } from 'flavours/glitch/actions/modal';
+import { muteAccount } from 'flavours/glitch/actions/accounts';
+import { toggleHideNotifications } from 'flavours/glitch/actions/mutes';
const mapStateToProps = state => {
diff --git a/app/javascript/themes/glitch/features/ui/components/onboarding_modal.js b/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js
similarity index 97%
rename from app/javascript/themes/glitch/features/ui/components/onboarding_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js
index 58875262ef..21f1addea5 100644
--- a/app/javascript/themes/glitch/features/ui/components/onboarding_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/onboarding_modal.js
@@ -5,16 +5,16 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ReactSwipeableViews from 'react-swipeable-views';
import classNames from 'classnames';
-import Permalink from 'themes/glitch/components/permalink';
-import ComposeForm from 'themes/glitch/features/compose/components/compose_form';
-import Search from 'themes/glitch/features/compose/components/search';
-import NavigationBar from 'themes/glitch/features/compose/components/navigation_bar';
+import Permalink from 'flavours/glitch/components/permalink';
+import ComposeForm from 'flavours/glitch/features/compose/components/compose_form';
+import Search from 'flavours/glitch/features/compose/components/search';
+import NavigationBar from 'flavours/glitch/features/compose/components/navigation_bar';
import ColumnHeader from './column_header';
import {
List as ImmutableList,
Map as ImmutableMap,
} from 'immutable';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const noop = () => { };
diff --git a/app/javascript/themes/glitch/features/ui/components/report_modal.js b/app/javascript/flavours/glitch/features/ui/components/report_modal.js
similarity index 89%
rename from app/javascript/themes/glitch/features/ui/components/report_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/report_modal.js
index e6153948ec..b4dc1e3d61 100644
--- a/app/javascript/themes/glitch/features/ui/components/report_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/report_modal.js
@@ -1,15 +1,15 @@
import React from 'react';
import { connect } from 'react-redux';
-import { changeReportComment, submitReport } from 'themes/glitch/actions/reports';
-import { refreshAccountTimeline } from 'themes/glitch/actions/timelines';
+import { changeReportComment, submitReport } from 'flavours/glitch/actions/reports';
+import { refreshAccountTimeline } from 'flavours/glitch/actions/timelines';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { makeGetAccount } from 'themes/glitch/selectors';
+import { makeGetAccount } from 'flavours/glitch/selectors';
import { defineMessages, FormattedMessage, injectIntl } from 'react-intl';
-import StatusCheckBox from 'themes/glitch/features/report/containers/status_check_box_container';
+import StatusCheckBox from 'flavours/glitch/features/report/containers/status_check_box_container';
import { OrderedSet } from 'immutable';
import ImmutablePureComponent from 'react-immutable-pure-component';
-import Button from 'themes/glitch/components/button';
+import Button from 'flavours/glitch/components/button';
const messages = defineMessages({
placeholder: { id: 'report.placeholder', defaultMessage: 'Additional comments' },
diff --git a/app/javascript/themes/glitch/features/ui/components/tabs_bar.js b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
similarity index 98%
rename from app/javascript/themes/glitch/features/ui/components/tabs_bar.js
rename to app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
index ef5deae992..89b455dd87 100644
--- a/app/javascript/themes/glitch/features/ui/components/tabs_bar.js
+++ b/app/javascript/flavours/glitch/features/ui/components/tabs_bar.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { NavLink } from 'react-router-dom';
import { FormattedMessage, injectIntl } from 'react-intl';
import { debounce } from 'lodash';
-import { isUserTouching } from 'themes/glitch/util/is_mobile';
+import { isUserTouching } from 'flavours/glitch/util/is_mobile';
export const links = [
,
diff --git a/app/javascript/themes/glitch/features/ui/components/upload_area.js b/app/javascript/flavours/glitch/features/ui/components/upload_area.js
similarity index 96%
rename from app/javascript/themes/glitch/features/ui/components/upload_area.js
rename to app/javascript/flavours/glitch/features/ui/components/upload_area.js
index 72a450215c..cc6b6d1713 100644
--- a/app/javascript/themes/glitch/features/ui/components/upload_area.js
+++ b/app/javascript/flavours/glitch/features/ui/components/upload_area.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import Motion from 'themes/glitch/util/optional_motion';
+import Motion from 'flavours/glitch/util/optional_motion';
import spring from 'react-motion/lib/spring';
import { FormattedMessage } from 'react-intl';
diff --git a/app/javascript/themes/glitch/features/ui/components/video_modal.js b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
similarity index 94%
rename from app/javascript/themes/glitch/features/ui/components/video_modal.js
rename to app/javascript/flavours/glitch/features/ui/components/video_modal.js
index 91168c7907..22fa998fb3 100644
--- a/app/javascript/themes/glitch/features/ui/components/video_modal.js
+++ b/app/javascript/flavours/glitch/features/ui/components/video_modal.js
@@ -1,7 +1,7 @@
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import Video from 'themes/glitch/features/video';
+import Video from 'flavours/glitch/features/video';
import ImmutablePureComponent from 'react-immutable-pure-component';
export default class VideoModal extends ImmutablePureComponent {
diff --git a/app/javascript/themes/glitch/features/ui/containers/bundle_container.js b/app/javascript/flavours/glitch/features/ui/containers/bundle_container.js
similarity index 91%
rename from app/javascript/themes/glitch/features/ui/containers/bundle_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/bundle_container.js
index e6f9afcf71..c9086c9bca 100644
--- a/app/javascript/themes/glitch/features/ui/containers/bundle_container.js
+++ b/app/javascript/flavours/glitch/features/ui/containers/bundle_container.js
@@ -2,7 +2,7 @@ import { connect } from 'react-redux';
import Bundle from '../components/bundle';
-import { fetchBundleRequest, fetchBundleSuccess, fetchBundleFail } from 'themes/glitch/actions/bundles';
+import { fetchBundleRequest, fetchBundleSuccess, fetchBundleFail } from 'flavours/glitch/actions/bundles';
const mapDispatchToProps = dispatch => ({
onFetch () {
diff --git a/app/javascript/themes/glitch/features/ui/containers/columns_area_container.js b/app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/containers/columns_area_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js
diff --git a/app/javascript/themes/glitch/features/ui/containers/loading_bar_container.js b/app/javascript/flavours/glitch/features/ui/containers/loading_bar_container.js
similarity index 100%
rename from app/javascript/themes/glitch/features/ui/containers/loading_bar_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/loading_bar_container.js
diff --git a/app/javascript/themes/glitch/features/ui/containers/modal_container.js b/app/javascript/flavours/glitch/features/ui/containers/modal_container.js
similarity index 86%
rename from app/javascript/themes/glitch/features/ui/containers/modal_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/modal_container.js
index c26f19886b..f074002e44 100644
--- a/app/javascript/themes/glitch/features/ui/containers/modal_container.js
+++ b/app/javascript/flavours/glitch/features/ui/containers/modal_container.js
@@ -1,5 +1,5 @@
import { connect } from 'react-redux';
-import { closeModal } from 'themes/glitch/actions/modal';
+import { closeModal } from 'flavours/glitch/actions/modal';
import ModalRoot from '../components/modal_root';
const mapStateToProps = state => ({
diff --git a/app/javascript/themes/glitch/features/ui/containers/notifications_container.js b/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js
similarity index 76%
rename from app/javascript/themes/glitch/features/ui/containers/notifications_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/notifications_container.js
index 5bd4017f5f..88d482bcf2 100644
--- a/app/javascript/themes/glitch/features/ui/containers/notifications_container.js
+++ b/app/javascript/flavours/glitch/features/ui/containers/notifications_container.js
@@ -1,7 +1,7 @@
import { connect } from 'react-redux';
import { NotificationStack } from 'react-notification';
-import { dismissAlert } from 'themes/glitch/actions/alerts';
-import { getAlerts } from 'themes/glitch/selectors';
+import { dismissAlert } from 'flavours/glitch/actions/alerts';
+import { getAlerts } from 'flavours/glitch/selectors';
const mapStateToProps = state => ({
notifications: getAlerts(state),
diff --git a/app/javascript/themes/glitch/features/ui/containers/status_list_container.js b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js
similarity index 92%
rename from app/javascript/themes/glitch/features/ui/containers/status_list_container.js
rename to app/javascript/flavours/glitch/features/ui/containers/status_list_container.js
index 807c82e16b..69508f9ff5 100644
--- a/app/javascript/themes/glitch/features/ui/containers/status_list_container.js
+++ b/app/javascript/flavours/glitch/features/ui/containers/status_list_container.js
@@ -1,10 +1,10 @@
import { connect } from 'react-redux';
-import StatusList from 'themes/glitch/components/status_list';
-import { scrollTopTimeline } from 'themes/glitch/actions/timelines';
+import StatusList from 'flavours/glitch/components/status_list';
+import { scrollTopTimeline } from 'flavours/glitch/actions/timelines';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import { createSelector } from 'reselect';
import { debounce } from 'lodash';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
const makeGetStatusIds = () => createSelector([
(state, { type }) => state.getIn(['settings', type], ImmutableMap()),
diff --git a/app/javascript/themes/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js
similarity index 96%
rename from app/javascript/themes/glitch/features/ui/index.js
rename to app/javascript/flavours/glitch/features/ui/index.js
index b59a2e6370..620630faf0 100644
--- a/app/javascript/themes/glitch/features/ui/index.js
+++ b/app/javascript/flavours/glitch/features/ui/index.js
@@ -6,13 +6,13 @@ import TabsBar from './components/tabs_bar';
import ModalContainer from './containers/modal_container';
import { connect } from 'react-redux';
import { Redirect, withRouter } from 'react-router-dom';
-import { isMobile } from 'themes/glitch/util/is_mobile';
+import { isMobile } from 'flavours/glitch/util/is_mobile';
import { debounce } from 'lodash';
-import { uploadCompose, resetCompose } from 'themes/glitch/actions/compose';
-import { refreshHomeTimeline } from 'themes/glitch/actions/timelines';
-import { refreshNotifications } from 'themes/glitch/actions/notifications';
-import { clearHeight } from 'themes/glitch/actions/height_cache';
-import { WrappedSwitch, WrappedRoute } from 'themes/glitch/util/react_router_helpers';
+import { uploadCompose, resetCompose } from 'flavours/glitch/actions/compose';
+import { refreshHomeTimeline } from 'flavours/glitch/actions/timelines';
+import { refreshNotifications } from 'flavours/glitch/actions/notifications';
+import { clearHeight } from 'flavours/glitch/actions/height_cache';
+import { WrappedSwitch, WrappedRoute } from 'flavours/glitch/util/react_router_helpers';
import UploadArea from './components/upload_area';
import ColumnsAreaContainer from './containers/columns_area_container';
import classNames from 'classnames';
@@ -38,9 +38,9 @@ import {
Blocks,
Mutes,
PinnedStatuses,
-} from 'themes/glitch/util/async-components';
+} from 'flavours/glitch/util/async-components';
import { HotKeys } from 'react-hotkeys';
-import { me } from 'themes/glitch/util/initial_state';
+import { me } from 'flavours/glitch/util/initial_state';
import { defineMessages, injectIntl } from 'react-intl';
// Dummy import, to make sure that ends up in the application bundle.
diff --git a/app/javascript/themes/glitch/features/video/index.js b/app/javascript/flavours/glitch/features/video/index.js
similarity index 99%
rename from app/javascript/themes/glitch/features/video/index.js
rename to app/javascript/flavours/glitch/features/video/index.js
index 0ecbe37c9d..97c1c27fab 100644
--- a/app/javascript/themes/glitch/features/video/index.js
+++ b/app/javascript/flavours/glitch/features/video/index.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { throttle } from 'lodash';
import classNames from 'classnames';
-import { isFullscreen, requestFullscreen, exitFullscreen } from 'themes/glitch/util/fullscreen';
+import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen';
const messages = defineMessages({
play: { id: 'video.play', defaultMessage: 'Play' },
diff --git a/app/javascript/themes/glitch/middleware/errors.js b/app/javascript/flavours/glitch/middleware/errors.js
similarity index 92%
rename from app/javascript/themes/glitch/middleware/errors.js
rename to app/javascript/flavours/glitch/middleware/errors.js
index c54e7b0a28..f3dfc8b069 100644
--- a/app/javascript/themes/glitch/middleware/errors.js
+++ b/app/javascript/flavours/glitch/middleware/errors.js
@@ -1,4 +1,4 @@
-import { showAlert } from 'themes/glitch/actions/alerts';
+import { showAlert } from 'flavours/glitch/actions/alerts';
const defaultFailSuffix = 'FAIL';
diff --git a/app/javascript/themes/glitch/middleware/loading_bar.js b/app/javascript/flavours/glitch/middleware/loading_bar.js
similarity index 100%
rename from app/javascript/themes/glitch/middleware/loading_bar.js
rename to app/javascript/flavours/glitch/middleware/loading_bar.js
diff --git a/app/javascript/themes/glitch/middleware/sounds.js b/app/javascript/flavours/glitch/middleware/sounds.js
similarity index 100%
rename from app/javascript/themes/glitch/middleware/sounds.js
rename to app/javascript/flavours/glitch/middleware/sounds.js
diff --git a/app/javascript/themes/glitch/packs/about.js b/app/javascript/flavours/glitch/packs/about.js
similarity index 67%
rename from app/javascript/themes/glitch/packs/about.js
rename to app/javascript/flavours/glitch/packs/about.js
index 9639d5453a..bc0a4887bb 100644
--- a/app/javascript/themes/glitch/packs/about.js
+++ b/app/javascript/flavours/glitch/packs/about.js
@@ -1,7 +1,7 @@
-import loadPolyfills from 'themes/glitch/util/load_polyfills';
+import loadPolyfills from 'flavours/glitch/util/load_polyfills';
function loaded() {
- const TimelineContainer = require('themes/glitch/containers/timeline_container').default;
+ const TimelineContainer = require('flavours/glitch/containers/timeline_container').default;
const React = require('react');
const ReactDOM = require('react-dom');
const mountNode = document.getElementById('mastodon-timeline');
@@ -13,7 +13,7 @@ function loaded() {
}
function main() {
- const ready = require('themes/glitch/util/ready').default;
+ const ready = require('flavours/glitch/util/ready').default;
ready(loaded);
}
diff --git a/app/javascript/flavours/glitch/packs/common.js b/app/javascript/flavours/glitch/packs/common.js
new file mode 100644
index 0000000000..07445d2b3f
--- /dev/null
+++ b/app/javascript/flavours/glitch/packs/common.js
@@ -0,0 +1 @@
+import 'flavours/glitch/styles/index.scss';
diff --git a/app/javascript/flavours/glitch/packs/home.js b/app/javascript/flavours/glitch/packs/home.js
new file mode 100644
index 0000000000..b8f7b7d8ef
--- /dev/null
+++ b/app/javascript/flavours/glitch/packs/home.js
@@ -0,0 +1,7 @@
+import loadPolyfills from 'flavours/glitch/util/load_polyfills';
+
+loadPolyfills().then(() => {
+ require('flavours/glitch/util/main').default();
+}).catch(e => {
+ console.error(e);
+});
diff --git a/app/javascript/themes/glitch/packs/public.js b/app/javascript/flavours/glitch/packs/public.js
similarity index 85%
rename from app/javascript/themes/glitch/packs/public.js
rename to app/javascript/flavours/glitch/packs/public.js
index 410e66716b..9ea82b53aa 100644
--- a/app/javascript/themes/glitch/packs/public.js
+++ b/app/javascript/flavours/glitch/packs/public.js
@@ -1,14 +1,14 @@
-import loadPolyfills from 'themes/glitch/util/load_polyfills';
-import ready from 'themes/glitch/util/ready';
+import loadPolyfills from 'flavours/glitch/util/load_polyfills';
+import ready from 'flavours/glitch/util/ready';
function main() {
const IntlRelativeFormat = require('intl-relativeformat').default;
- const emojify = require('themes/glitch/util/emoji').default;
+ const emojify = require('flavours/glitch/util/emoji').default;
const { getLocale } = require('locales');
const { localeData } = getLocale();
- const VideoContainer = require('themes/glitch/containers/video_container').default;
- const MediaGalleryContainer = require('themes/glitch/containers/media_gallery_container').default;
- const CardContainer = require('themes/glitch/containers/card_container').default;
+ const VideoContainer = require('flavours/glitch/containers/video_container').default;
+ const MediaGalleryContainer = require('flavours/glitch/containers/media_gallery_container').default;
+ const CardContainer = require('flavours/glitch/containers/card_container').default;
const React = require('react');
const ReactDOM = require('react-dom');
diff --git a/app/javascript/themes/glitch/packs/share.js b/app/javascript/flavours/glitch/packs/share.js
similarity index 66%
rename from app/javascript/themes/glitch/packs/share.js
rename to app/javascript/flavours/glitch/packs/share.js
index dc2e677e4f..9f2aa25539 100644
--- a/app/javascript/themes/glitch/packs/share.js
+++ b/app/javascript/flavours/glitch/packs/share.js
@@ -1,7 +1,7 @@
-import loadPolyfills from 'themes/glitch/util/load_polyfills';
+import loadPolyfills from 'flavours/glitch/util/load_polyfills';
function loaded() {
- const ComposeContainer = require('themes/glitch/containers/compose_container').default;
+ const ComposeContainer = require('flavours/glitch/containers/compose_container').default;
const React = require('react');
const ReactDOM = require('react-dom');
const mountNode = document.getElementById('mastodon-compose');
@@ -13,7 +13,7 @@ function loaded() {
}
function main() {
- const ready = require('themes/glitch/util/ready').default;
+ const ready = require('flavours/glitch/util/ready').default;
ready(loaded);
}
diff --git a/app/javascript/themes/glitch/reducers/accounts.js b/app/javascript/flavours/glitch/reducers/accounts.js
similarity index 85%
rename from app/javascript/themes/glitch/reducers/accounts.js
rename to app/javascript/flavours/glitch/reducers/accounts.js
index 0a65d3723c..5113a281aa 100644
--- a/app/javascript/themes/glitch/reducers/accounts.js
+++ b/app/javascript/flavours/glitch/reducers/accounts.js
@@ -6,16 +6,16 @@ import {
FOLLOWING_EXPAND_SUCCESS,
FOLLOW_REQUESTS_FETCH_SUCCESS,
FOLLOW_REQUESTS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import {
BLOCKS_FETCH_SUCCESS,
BLOCKS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/blocks';
+} from 'flavours/glitch/actions/blocks';
import {
MUTES_FETCH_SUCCESS,
MUTES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/mutes';
-import { COMPOSE_SUGGESTIONS_READY } from 'themes/glitch/actions/compose';
+} from 'flavours/glitch/actions/mutes';
+import { COMPOSE_SUGGESTIONS_READY } from 'flavours/glitch/actions/compose';
import {
REBLOG_SUCCESS,
UNREBLOG_SUCCESS,
@@ -23,28 +23,28 @@ import {
UNFAVOURITE_SUCCESS,
REBLOGS_FETCH_SUCCESS,
FAVOURITES_FETCH_SUCCESS,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
import {
TIMELINE_REFRESH_SUCCESS,
TIMELINE_UPDATE,
TIMELINE_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/timelines';
+} from 'flavours/glitch/actions/timelines';
import {
STATUS_FETCH_SUCCESS,
CONTEXT_FETCH_SUCCESS,
-} from 'themes/glitch/actions/statuses';
-import { SEARCH_FETCH_SUCCESS } from 'themes/glitch/actions/search';
+} from 'flavours/glitch/actions/statuses';
+import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
import {
NOTIFICATIONS_UPDATE,
NOTIFICATIONS_REFRESH_SUCCESS,
NOTIFICATIONS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/notifications';
+} from 'flavours/glitch/actions/notifications';
import {
FAVOURITED_STATUSES_FETCH_SUCCESS,
FAVOURITED_STATUSES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/favourites';
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
-import emojify from 'themes/glitch/util/emoji';
+} from 'flavours/glitch/actions/favourites';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
+import emojify from 'flavours/glitch/util/emoji';
import { Map as ImmutableMap, fromJS } from 'immutable';
import escapeTextContentForBrowser from 'escape-html';
diff --git a/app/javascript/themes/glitch/reducers/accounts_counters.js b/app/javascript/flavours/glitch/reducers/accounts_counters.js
similarity index 87%
rename from app/javascript/themes/glitch/reducers/accounts_counters.js
rename to app/javascript/flavours/glitch/reducers/accounts_counters.js
index e3728ecd7d..a9aebd26fc 100644
--- a/app/javascript/themes/glitch/reducers/accounts_counters.js
+++ b/app/javascript/flavours/glitch/reducers/accounts_counters.js
@@ -8,16 +8,16 @@ import {
FOLLOW_REQUESTS_EXPAND_SUCCESS,
ACCOUNT_FOLLOW_SUCCESS,
ACCOUNT_UNFOLLOW_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import {
BLOCKS_FETCH_SUCCESS,
BLOCKS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/blocks';
+} from 'flavours/glitch/actions/blocks';
import {
MUTES_FETCH_SUCCESS,
MUTES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/mutes';
-import { COMPOSE_SUGGESTIONS_READY } from 'themes/glitch/actions/compose';
+} from 'flavours/glitch/actions/mutes';
+import { COMPOSE_SUGGESTIONS_READY } from 'flavours/glitch/actions/compose';
import {
REBLOG_SUCCESS,
UNREBLOG_SUCCESS,
@@ -25,27 +25,27 @@ import {
UNFAVOURITE_SUCCESS,
REBLOGS_FETCH_SUCCESS,
FAVOURITES_FETCH_SUCCESS,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
import {
TIMELINE_REFRESH_SUCCESS,
TIMELINE_UPDATE,
TIMELINE_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/timelines';
+} from 'flavours/glitch/actions/timelines';
import {
STATUS_FETCH_SUCCESS,
CONTEXT_FETCH_SUCCESS,
-} from 'themes/glitch/actions/statuses';
-import { SEARCH_FETCH_SUCCESS } from 'themes/glitch/actions/search';
+} from 'flavours/glitch/actions/statuses';
+import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
import {
NOTIFICATIONS_UPDATE,
NOTIFICATIONS_REFRESH_SUCCESS,
NOTIFICATIONS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/notifications';
+} from 'flavours/glitch/actions/notifications';
import {
FAVOURITED_STATUSES_FETCH_SUCCESS,
FAVOURITED_STATUSES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/favourites';
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
+} from 'flavours/glitch/actions/favourites';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeAccount = (state, account) => state.set(account.id, fromJS({
diff --git a/app/javascript/themes/glitch/reducers/alerts.js b/app/javascript/flavours/glitch/reducers/alerts.js
similarity index 93%
rename from app/javascript/themes/glitch/reducers/alerts.js
rename to app/javascript/flavours/glitch/reducers/alerts.js
index ad66b63f68..50f8d30f71 100644
--- a/app/javascript/themes/glitch/reducers/alerts.js
+++ b/app/javascript/flavours/glitch/reducers/alerts.js
@@ -2,7 +2,7 @@ import {
ALERT_SHOW,
ALERT_DISMISS,
ALERT_CLEAR,
-} from 'themes/glitch/actions/alerts';
+} from 'flavours/glitch/actions/alerts';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = ImmutableList([]);
diff --git a/app/javascript/themes/glitch/reducers/cards.js b/app/javascript/flavours/glitch/reducers/cards.js
similarity index 80%
rename from app/javascript/themes/glitch/reducers/cards.js
rename to app/javascript/flavours/glitch/reducers/cards.js
index 35be30444f..92ecfd0863 100644
--- a/app/javascript/themes/glitch/reducers/cards.js
+++ b/app/javascript/flavours/glitch/reducers/cards.js
@@ -1,4 +1,4 @@
-import { STATUS_CARD_FETCH_SUCCESS } from 'themes/glitch/actions/cards';
+import { STATUS_CARD_FETCH_SUCCESS } from 'flavours/glitch/actions/cards';
import { Map as ImmutableMap, fromJS } from 'immutable';
diff --git a/app/javascript/themes/glitch/reducers/compose.js b/app/javascript/flavours/glitch/reducers/compose.js
similarity index 97%
rename from app/javascript/themes/glitch/reducers/compose.js
rename to app/javascript/flavours/glitch/reducers/compose.js
index be359fcb42..aaa36b6961 100644
--- a/app/javascript/themes/glitch/reducers/compose.js
+++ b/app/javascript/flavours/glitch/reducers/compose.js
@@ -28,12 +28,12 @@ import {
COMPOSE_UPLOAD_CHANGE_FAIL,
COMPOSE_DOODLE_SET,
COMPOSE_RESET,
-} from 'themes/glitch/actions/compose';
-import { TIMELINE_DELETE } from 'themes/glitch/actions/timelines';
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
+} from 'flavours/glitch/actions/compose';
+import { TIMELINE_DELETE } from 'flavours/glitch/actions/timelines';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
-import uuid from 'themes/glitch/util/uuid';
-import { me } from 'themes/glitch/util/initial_state';
+import uuid from 'flavours/glitch/util/uuid';
+import { me } from 'flavours/glitch/util/initial_state';
const initialState = ImmutableMap({
mounted: false,
diff --git a/app/javascript/themes/glitch/reducers/contexts.js b/app/javascript/flavours/glitch/reducers/contexts.js
similarity index 91%
rename from app/javascript/themes/glitch/reducers/contexts.js
rename to app/javascript/flavours/glitch/reducers/contexts.js
index 56c930bd5b..53e93a5892 100644
--- a/app/javascript/themes/glitch/reducers/contexts.js
+++ b/app/javascript/flavours/glitch/reducers/contexts.js
@@ -1,5 +1,5 @@
-import { CONTEXT_FETCH_SUCCESS } from 'themes/glitch/actions/statuses';
-import { TIMELINE_DELETE, TIMELINE_CONTEXT_UPDATE } from 'themes/glitch/actions/timelines';
+import { CONTEXT_FETCH_SUCCESS } from 'flavours/glitch/actions/statuses';
+import { TIMELINE_DELETE, TIMELINE_CONTEXT_UPDATE } from 'flavours/glitch/actions/timelines';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/custom_emojis.js b/app/javascript/flavours/glitch/reducers/custom_emojis.js
similarity index 63%
rename from app/javascript/themes/glitch/reducers/custom_emojis.js
rename to app/javascript/flavours/glitch/reducers/custom_emojis.js
index e3f1e00180..592cea8dcd 100644
--- a/app/javascript/themes/glitch/reducers/custom_emojis.js
+++ b/app/javascript/flavours/glitch/reducers/custom_emojis.js
@@ -1,7 +1,7 @@
import { List as ImmutableList } from 'immutable';
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
-import { search as emojiSearch } from 'themes/glitch/util/emoji/emoji_mart_search_light';
-import { buildCustomEmojis } from 'themes/glitch/util/emoji';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
+import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light';
+import { buildCustomEmojis } from 'flavours/glitch/util/emoji';
const initialState = ImmutableList();
diff --git a/app/javascript/themes/glitch/reducers/height_cache.js b/app/javascript/flavours/glitch/reducers/height_cache.js
similarity index 85%
rename from app/javascript/themes/glitch/reducers/height_cache.js
rename to app/javascript/flavours/glitch/reducers/height_cache.js
index 93c31b42c1..8b05e0b196 100644
--- a/app/javascript/themes/glitch/reducers/height_cache.js
+++ b/app/javascript/flavours/glitch/reducers/height_cache.js
@@ -1,5 +1,5 @@
import { Map as ImmutableMap } from 'immutable';
-import { HEIGHT_CACHE_SET, HEIGHT_CACHE_CLEAR } from 'themes/glitch/actions/height_cache';
+import { HEIGHT_CACHE_SET, HEIGHT_CACHE_CLEAR } from 'flavours/glitch/actions/height_cache';
const initialState = ImmutableMap();
diff --git a/app/javascript/themes/glitch/reducers/index.js b/app/javascript/flavours/glitch/reducers/index.js
similarity index 100%
rename from app/javascript/themes/glitch/reducers/index.js
rename to app/javascript/flavours/glitch/reducers/index.js
diff --git a/app/javascript/themes/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js
similarity index 88%
rename from app/javascript/themes/glitch/reducers/local_settings.js
rename to app/javascript/flavours/glitch/reducers/local_settings.js
index b1ffa047eb..69d98741b6 100644
--- a/app/javascript/themes/glitch/reducers/local_settings.js
+++ b/app/javascript/flavours/glitch/reducers/local_settings.js
@@ -2,8 +2,8 @@
import { Map as ImmutableMap } from 'immutable';
// Our imports.
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
-import { LOCAL_SETTING_CHANGE } from 'themes/glitch/actions/local_settings';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
+import { LOCAL_SETTING_CHANGE } from 'flavours/glitch/actions/local_settings';
const initialState = ImmutableMap({
layout : 'auto',
diff --git a/app/javascript/themes/glitch/reducers/media_attachments.js b/app/javascript/flavours/glitch/reducers/media_attachments.js
similarity index 83%
rename from app/javascript/themes/glitch/reducers/media_attachments.js
rename to app/javascript/flavours/glitch/reducers/media_attachments.js
index 69a44639cb..6e60585766 100644
--- a/app/javascript/themes/glitch/reducers/media_attachments.js
+++ b/app/javascript/flavours/glitch/reducers/media_attachments.js
@@ -1,4 +1,4 @@
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
import { Map as ImmutableMap } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/meta.js b/app/javascript/flavours/glitch/reducers/meta.js
similarity index 84%
rename from app/javascript/themes/glitch/reducers/meta.js
rename to app/javascript/flavours/glitch/reducers/meta.js
index 2249f1d78d..a98dc436a0 100644
--- a/app/javascript/themes/glitch/reducers/meta.js
+++ b/app/javascript/flavours/glitch/reducers/meta.js
@@ -1,4 +1,4 @@
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
import { Map as ImmutableMap } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/modal.js b/app/javascript/flavours/glitch/reducers/modal.js
similarity index 81%
rename from app/javascript/themes/glitch/reducers/modal.js
rename to app/javascript/flavours/glitch/reducers/modal.js
index 97fb312036..80bc11dda4 100644
--- a/app/javascript/themes/glitch/reducers/modal.js
+++ b/app/javascript/flavours/glitch/reducers/modal.js
@@ -1,4 +1,4 @@
-import { MODAL_OPEN, MODAL_CLOSE } from 'themes/glitch/actions/modal';
+import { MODAL_OPEN, MODAL_CLOSE } from 'flavours/glitch/actions/modal';
const initialState = {
modalType: null,
diff --git a/app/javascript/themes/glitch/reducers/mutes.js b/app/javascript/flavours/glitch/reducers/mutes.js
similarity index 94%
rename from app/javascript/themes/glitch/reducers/mutes.js
rename to app/javascript/flavours/glitch/reducers/mutes.js
index 8fe4ae0c36..8f52a7704a 100644
--- a/app/javascript/themes/glitch/reducers/mutes.js
+++ b/app/javascript/flavours/glitch/reducers/mutes.js
@@ -3,7 +3,7 @@ import Immutable from 'immutable';
import {
MUTES_INIT_MODAL,
MUTES_TOGGLE_HIDE_NOTIFICATIONS,
-} from 'themes/glitch/actions/mutes';
+} from 'flavours/glitch/actions/mutes';
const initialState = Immutable.Map({
new: Immutable.Map({
diff --git a/app/javascript/themes/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js
similarity index 97%
rename from app/javascript/themes/glitch/reducers/notifications.js
rename to app/javascript/flavours/glitch/reducers/notifications.js
index c4f505053b..fb2b3f5498 100644
--- a/app/javascript/themes/glitch/reducers/notifications.js
+++ b/app/javascript/flavours/glitch/reducers/notifications.js
@@ -14,12 +14,12 @@ import {
NOTIFICATIONS_DELETE_MARKED_FAIL,
NOTIFICATIONS_ENTER_CLEARING_MODE,
NOTIFICATIONS_MARK_ALL_FOR_DELETE,
-} from 'themes/glitch/actions/notifications';
+} from 'flavours/glitch/actions/notifications';
import {
ACCOUNT_BLOCK_SUCCESS,
ACCOUNT_MUTE_SUCCESS,
-} from 'themes/glitch/actions/accounts';
-import { TIMELINE_DELETE } from 'themes/glitch/actions/timelines';
+} from 'flavours/glitch/actions/accounts';
+import { TIMELINE_DELETE } from 'flavours/glitch/actions/timelines';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/push_notifications.js b/app/javascript/flavours/glitch/reducers/push_notifications.js
similarity index 91%
rename from app/javascript/themes/glitch/reducers/push_notifications.js
rename to app/javascript/flavours/glitch/reducers/push_notifications.js
index 744e4a0ebd..f0a800d23c 100644
--- a/app/javascript/themes/glitch/reducers/push_notifications.js
+++ b/app/javascript/flavours/glitch/reducers/push_notifications.js
@@ -1,5 +1,5 @@
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
-import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, ALERTS_CHANGE } from 'themes/glitch/actions/push_notifications';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
+import { SET_BROWSER_SUPPORT, SET_SUBSCRIPTION, CLEAR_SUBSCRIPTION, ALERTS_CHANGE } from 'flavours/glitch/actions/push_notifications';
import Immutable from 'immutable';
const initialState = Immutable.Map({
diff --git a/app/javascript/themes/glitch/reducers/relationships.js b/app/javascript/flavours/glitch/reducers/relationships.js
similarity index 93%
rename from app/javascript/themes/glitch/reducers/relationships.js
rename to app/javascript/flavours/glitch/reducers/relationships.js
index d9135d6da8..6303089ac7 100644
--- a/app/javascript/themes/glitch/reducers/relationships.js
+++ b/app/javascript/flavours/glitch/reducers/relationships.js
@@ -6,11 +6,11 @@ import {
ACCOUNT_MUTE_SUCCESS,
ACCOUNT_UNMUTE_SUCCESS,
RELATIONSHIPS_FETCH_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import {
DOMAIN_BLOCK_SUCCESS,
DOMAIN_UNBLOCK_SUCCESS,
-} from 'themes/glitch/actions/domain_blocks';
+} from 'flavours/glitch/actions/domain_blocks';
import { Map as ImmutableMap, fromJS } from 'immutable';
const normalizeRelationship = (state, relationship) => state.set(relationship.id, fromJS(relationship));
diff --git a/app/javascript/themes/glitch/reducers/reports.js b/app/javascript/flavours/glitch/reducers/reports.js
similarity index 97%
rename from app/javascript/themes/glitch/reducers/reports.js
rename to app/javascript/flavours/glitch/reducers/reports.js
index b714374eac..c18fbcdc61 100644
--- a/app/javascript/themes/glitch/reducers/reports.js
+++ b/app/javascript/flavours/glitch/reducers/reports.js
@@ -6,7 +6,7 @@ import {
REPORT_CANCEL,
REPORT_STATUS_TOGGLE,
REPORT_COMMENT_CHANGE,
-} from 'themes/glitch/actions/reports';
+} from 'flavours/glitch/actions/reports';
import { Map as ImmutableMap, Set as ImmutableSet } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/search.js b/app/javascript/flavours/glitch/reducers/search.js
similarity index 90%
rename from app/javascript/themes/glitch/reducers/search.js
rename to app/javascript/flavours/glitch/reducers/search.js
index aec9e2efb2..f9bf920980 100644
--- a/app/javascript/themes/glitch/reducers/search.js
+++ b/app/javascript/flavours/glitch/reducers/search.js
@@ -3,8 +3,8 @@ import {
SEARCH_CLEAR,
SEARCH_FETCH_SUCCESS,
SEARCH_SHOW,
-} from 'themes/glitch/actions/search';
-import { COMPOSE_MENTION, COMPOSE_REPLY } from 'themes/glitch/actions/compose';
+} from 'flavours/glitch/actions/search';
+import { COMPOSE_MENTION, COMPOSE_REPLY } from 'flavours/glitch/actions/compose';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/settings.js b/app/javascript/flavours/glitch/reducers/settings.js
similarity index 88%
rename from app/javascript/themes/glitch/reducers/settings.js
rename to app/javascript/flavours/glitch/reducers/settings.js
index c22bbbd8dc..ceafbc4679 100644
--- a/app/javascript/themes/glitch/reducers/settings.js
+++ b/app/javascript/flavours/glitch/reducers/settings.js
@@ -1,9 +1,9 @@
-import { SETTING_CHANGE, SETTING_SAVE } from 'themes/glitch/actions/settings';
-import { COLUMN_ADD, COLUMN_REMOVE, COLUMN_MOVE } from 'themes/glitch/actions/columns';
-import { STORE_HYDRATE } from 'themes/glitch/actions/store';
-import { EMOJI_USE } from 'themes/glitch/actions/emojis';
+import { SETTING_CHANGE, SETTING_SAVE } from 'flavours/glitch/actions/settings';
+import { COLUMN_ADD, COLUMN_REMOVE, COLUMN_MOVE } from 'flavours/glitch/actions/columns';
+import { STORE_HYDRATE } from 'flavours/glitch/actions/store';
+import { EMOJI_USE } from 'flavours/glitch/actions/emojis';
import { Map as ImmutableMap, fromJS } from 'immutable';
-import uuid from 'themes/glitch/util/uuid';
+import uuid from 'flavours/glitch/util/uuid';
const initialState = ImmutableMap({
saved: true,
diff --git a/app/javascript/themes/glitch/reducers/status_lists.js b/app/javascript/flavours/glitch/reducers/status_lists.js
similarity index 94%
rename from app/javascript/themes/glitch/reducers/status_lists.js
rename to app/javascript/flavours/glitch/reducers/status_lists.js
index 8dc7d374e3..5a3d0db0ca 100644
--- a/app/javascript/themes/glitch/reducers/status_lists.js
+++ b/app/javascript/flavours/glitch/reducers/status_lists.js
@@ -1,17 +1,17 @@
import {
FAVOURITED_STATUSES_FETCH_SUCCESS,
FAVOURITED_STATUSES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/favourites';
+} from 'flavours/glitch/actions/favourites';
import {
PINNED_STATUSES_FETCH_SUCCESS,
-} from 'themes/glitch/actions/pin_statuses';
+} from 'flavours/glitch/actions/pin_statuses';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import {
FAVOURITE_SUCCESS,
UNFAVOURITE_SUCCESS,
PIN_SUCCESS,
UNPIN_SUCCESS,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
const initialState = ImmutableMap({
favourites: ImmutableMap({
diff --git a/app/javascript/themes/glitch/reducers/statuses.js b/app/javascript/flavours/glitch/reducers/statuses.js
similarity index 90%
rename from app/javascript/themes/glitch/reducers/statuses.js
rename to app/javascript/flavours/glitch/reducers/statuses.js
index ef80868655..410bc013b9 100644
--- a/app/javascript/themes/glitch/reducers/statuses.js
+++ b/app/javascript/flavours/glitch/reducers/statuses.js
@@ -9,37 +9,37 @@ import {
UNFAVOURITE_SUCCESS,
PIN_SUCCESS,
UNPIN_SUCCESS,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
import {
STATUS_FETCH_SUCCESS,
CONTEXT_FETCH_SUCCESS,
STATUS_MUTE_SUCCESS,
STATUS_UNMUTE_SUCCESS,
-} from 'themes/glitch/actions/statuses';
+} from 'flavours/glitch/actions/statuses';
import {
TIMELINE_REFRESH_SUCCESS,
TIMELINE_UPDATE,
TIMELINE_DELETE,
TIMELINE_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/timelines';
+} from 'flavours/glitch/actions/timelines';
import {
ACCOUNT_BLOCK_SUCCESS,
ACCOUNT_MUTE_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import {
NOTIFICATIONS_UPDATE,
NOTIFICATIONS_REFRESH_SUCCESS,
NOTIFICATIONS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/notifications';
+} from 'flavours/glitch/actions/notifications';
import {
FAVOURITED_STATUSES_FETCH_SUCCESS,
FAVOURITED_STATUSES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/favourites';
+} from 'flavours/glitch/actions/favourites';
import {
PINNED_STATUSES_FETCH_SUCCESS,
-} from 'themes/glitch/actions/pin_statuses';
-import { SEARCH_FETCH_SUCCESS } from 'themes/glitch/actions/search';
-import emojify from 'themes/glitch/util/emoji';
+} from 'flavours/glitch/actions/pin_statuses';
+import { SEARCH_FETCH_SUCCESS } from 'flavours/glitch/actions/search';
+import emojify from 'flavours/glitch/util/emoji';
import { Map as ImmutableMap, fromJS } from 'immutable';
import escapeTextContentForBrowser from 'escape-html';
diff --git a/app/javascript/themes/glitch/reducers/timelines.js b/app/javascript/flavours/glitch/reducers/timelines.js
similarity index 98%
rename from app/javascript/themes/glitch/reducers/timelines.js
rename to app/javascript/flavours/glitch/reducers/timelines.js
index 7f19a18971..679e1601eb 100644
--- a/app/javascript/themes/glitch/reducers/timelines.js
+++ b/app/javascript/flavours/glitch/reducers/timelines.js
@@ -10,12 +10,12 @@ import {
TIMELINE_SCROLL_TOP,
TIMELINE_CONNECT,
TIMELINE_DISCONNECT,
-} from 'themes/glitch/actions/timelines';
+} from 'flavours/glitch/actions/timelines';
import {
ACCOUNT_BLOCK_SUCCESS,
ACCOUNT_MUTE_SUCCESS,
ACCOUNT_UNFOLLOW_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';
const initialState = ImmutableMap();
diff --git a/app/javascript/themes/glitch/reducers/user_lists.js b/app/javascript/flavours/glitch/reducers/user_lists.js
similarity index 95%
rename from app/javascript/themes/glitch/reducers/user_lists.js
rename to app/javascript/flavours/glitch/reducers/user_lists.js
index 8c3a7d7480..a4df9ec8de 100644
--- a/app/javascript/themes/glitch/reducers/user_lists.js
+++ b/app/javascript/flavours/glitch/reducers/user_lists.js
@@ -7,19 +7,19 @@ import {
FOLLOW_REQUESTS_EXPAND_SUCCESS,
FOLLOW_REQUEST_AUTHORIZE_SUCCESS,
FOLLOW_REQUEST_REJECT_SUCCESS,
-} from 'themes/glitch/actions/accounts';
+} from 'flavours/glitch/actions/accounts';
import {
REBLOGS_FETCH_SUCCESS,
FAVOURITES_FETCH_SUCCESS,
-} from 'themes/glitch/actions/interactions';
+} from 'flavours/glitch/actions/interactions';
import {
BLOCKS_FETCH_SUCCESS,
BLOCKS_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/blocks';
+} from 'flavours/glitch/actions/blocks';
import {
MUTES_FETCH_SUCCESS,
MUTES_EXPAND_SUCCESS,
-} from 'themes/glitch/actions/mutes';
+} from 'flavours/glitch/actions/mutes';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
const initialState = ImmutableMap({
diff --git a/app/javascript/themes/glitch/selectors/index.js b/app/javascript/flavours/glitch/selectors/index.js
similarity index 100%
rename from app/javascript/themes/glitch/selectors/index.js
rename to app/javascript/flavours/glitch/selectors/index.js
diff --git a/app/javascript/themes/glitch/service_worker/entry.js b/app/javascript/flavours/glitch/service_worker/entry.js
similarity index 100%
rename from app/javascript/themes/glitch/service_worker/entry.js
rename to app/javascript/flavours/glitch/service_worker/entry.js
diff --git a/app/javascript/themes/glitch/service_worker/web_push_notifications.js b/app/javascript/flavours/glitch/service_worker/web_push_notifications.js
similarity index 100%
rename from app/javascript/themes/glitch/service_worker/web_push_notifications.js
rename to app/javascript/flavours/glitch/service_worker/web_push_notifications.js
diff --git a/app/javascript/themes/glitch/store/configureStore.js b/app/javascript/flavours/glitch/store/configureStore.js
similarity index 100%
rename from app/javascript/themes/glitch/store/configureStore.js
rename to app/javascript/flavours/glitch/store/configureStore.js
diff --git a/app/javascript/themes/glitch/styles/_mixins.scss b/app/javascript/flavours/glitch/styles/_mixins.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/_mixins.scss
rename to app/javascript/flavours/glitch/styles/_mixins.scss
diff --git a/app/javascript/themes/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/about.scss
rename to app/javascript/flavours/glitch/styles/about.scss
diff --git a/app/javascript/themes/glitch/styles/accounts.scss b/app/javascript/flavours/glitch/styles/accounts.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/accounts.scss
rename to app/javascript/flavours/glitch/styles/accounts.scss
diff --git a/app/javascript/themes/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/admin.scss
rename to app/javascript/flavours/glitch/styles/admin.scss
diff --git a/app/javascript/themes/glitch/styles/basics.scss b/app/javascript/flavours/glitch/styles/basics.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/basics.scss
rename to app/javascript/flavours/glitch/styles/basics.scss
diff --git a/app/javascript/themes/glitch/styles/boost.scss b/app/javascript/flavours/glitch/styles/boost.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/boost.scss
rename to app/javascript/flavours/glitch/styles/boost.scss
diff --git a/app/javascript/themes/glitch/styles/compact_header.scss b/app/javascript/flavours/glitch/styles/compact_header.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/compact_header.scss
rename to app/javascript/flavours/glitch/styles/compact_header.scss
diff --git a/app/javascript/themes/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/components.scss
rename to app/javascript/flavours/glitch/styles/components.scss
diff --git a/app/javascript/themes/glitch/styles/containers.scss b/app/javascript/flavours/glitch/styles/containers.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/containers.scss
rename to app/javascript/flavours/glitch/styles/containers.scss
diff --git a/app/javascript/themes/glitch/styles/doodle.scss b/app/javascript/flavours/glitch/styles/doodle.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/doodle.scss
rename to app/javascript/flavours/glitch/styles/doodle.scss
diff --git a/app/javascript/themes/glitch/styles/emoji_picker.scss b/app/javascript/flavours/glitch/styles/emoji_picker.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/emoji_picker.scss
rename to app/javascript/flavours/glitch/styles/emoji_picker.scss
diff --git a/app/javascript/themes/glitch/styles/footer.scss b/app/javascript/flavours/glitch/styles/footer.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/footer.scss
rename to app/javascript/flavours/glitch/styles/footer.scss
diff --git a/app/javascript/themes/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/forms.scss
rename to app/javascript/flavours/glitch/styles/forms.scss
diff --git a/app/javascript/themes/glitch/styles/index.scss b/app/javascript/flavours/glitch/styles/index.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/index.scss
rename to app/javascript/flavours/glitch/styles/index.scss
diff --git a/app/javascript/themes/glitch/styles/landing_strip.scss b/app/javascript/flavours/glitch/styles/landing_strip.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/landing_strip.scss
rename to app/javascript/flavours/glitch/styles/landing_strip.scss
diff --git a/app/javascript/themes/glitch/styles/lists.scss b/app/javascript/flavours/glitch/styles/lists.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/lists.scss
rename to app/javascript/flavours/glitch/styles/lists.scss
diff --git a/app/javascript/themes/glitch/styles/reset copy.scss b/app/javascript/flavours/glitch/styles/reset copy.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/reset copy.scss
rename to app/javascript/flavours/glitch/styles/reset copy.scss
diff --git a/app/javascript/themes/glitch/styles/reset.scss b/app/javascript/flavours/glitch/styles/reset.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/reset.scss
rename to app/javascript/flavours/glitch/styles/reset.scss
diff --git a/app/javascript/themes/glitch/styles/rtl.scss b/app/javascript/flavours/glitch/styles/rtl.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/rtl.scss
rename to app/javascript/flavours/glitch/styles/rtl.scss
diff --git a/app/javascript/themes/glitch/styles/stream_entries.scss b/app/javascript/flavours/glitch/styles/stream_entries.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/stream_entries.scss
rename to app/javascript/flavours/glitch/styles/stream_entries.scss
diff --git a/app/javascript/themes/glitch/styles/tables.scss b/app/javascript/flavours/glitch/styles/tables.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/tables.scss
rename to app/javascript/flavours/glitch/styles/tables.scss
diff --git a/app/javascript/themes/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss
similarity index 100%
rename from app/javascript/themes/glitch/styles/variables.scss
rename to app/javascript/flavours/glitch/styles/variables.scss
diff --git a/app/javascript/themes/glitch/theme.yml b/app/javascript/flavours/glitch/theme.yml
similarity index 83%
rename from app/javascript/themes/glitch/theme.yml
rename to app/javascript/flavours/glitch/theme.yml
index ac6f57546c..9d24f0107e 100644
--- a/app/javascript/themes/glitch/theme.yml
+++ b/app/javascript/flavours/glitch/theme.yml
@@ -11,10 +11,10 @@ pack:
home:
filename: packs/home.js
preload:
- - themes/glitch/async/getting_started
- - themes/glitch/async/compose
- - themes/glitch/async/home_timeline
- - themes/glitch/async/notifications
+ - flavours/glitch/async/getting_started
+ - flavours/glitch/async/compose
+ - flavours/glitch/async/home_timeline
+ - flavours/glitch/async/notifications
stylesheet: true
modal:
public: packs/public.js
diff --git a/app/javascript/themes/glitch/util/api.js b/app/javascript/flavours/glitch/util/api.js
similarity index 100%
rename from app/javascript/themes/glitch/util/api.js
rename to app/javascript/flavours/glitch/util/api.js
diff --git a/app/javascript/flavours/glitch/util/async-components.js b/app/javascript/flavours/glitch/util/async-components.js
new file mode 100644
index 0000000000..b7ac4d3ec5
--- /dev/null
+++ b/app/javascript/flavours/glitch/util/async-components.js
@@ -0,0 +1,115 @@
+export function EmojiPicker () {
+ return import(/* webpackChunkName: "flavours/glitch/async/emoji_picker" */'flavours/glitch/util/emoji/emoji_picker');
+}
+
+export function Compose () {
+ return import(/* webpackChunkName: "flavours/glitch/async/compose" */'flavours/glitch/features/compose');
+}
+
+export function Notifications () {
+ return import(/* webpackChunkName: "flavours/glitch/async/notifications" */'flavours/glitch/features/notifications');
+}
+
+export function HomeTimeline () {
+ return import(/* webpackChunkName: "flavours/glitch/async/home_timeline" */'flavours/glitch/features/home_timeline');
+}
+
+export function PublicTimeline () {
+ return import(/* webpackChunkName: "flavours/glitch/async/public_timeline" */'flavours/glitch/features/public_timeline');
+}
+
+export function CommunityTimeline () {
+ return import(/* webpackChunkName: "flavours/glitch/async/community_timeline" */'flavours/glitch/features/community_timeline');
+}
+
+export function HashtagTimeline () {
+ return import(/* webpackChunkName: "flavours/glitch/async/hashtag_timeline" */'flavours/glitch/features/hashtag_timeline');
+}
+
+export function DirectTimeline() {
+ return import(/* webpackChunkName: "flavours/glitch/async/direct_timeline" */'flavours/glitch/features/direct_timeline');
+}
+
+export function Status () {
+ return import(/* webpackChunkName: "flavours/glitch/async/status" */'flavours/glitch/features/status');
+}
+
+export function GettingStarted () {
+ return import(/* webpackChunkName: "flavours/glitch/async/getting_started" */'flavours/glitch/features/getting_started');
+}
+
+export function PinnedStatuses () {
+ return import(/* webpackChunkName: "flavours/glitch/async/pinned_statuses" */'flavours/glitch/features/pinned_statuses');
+}
+
+export function AccountTimeline () {
+ return import(/* webpackChunkName: "flavours/glitch/async/account_timeline" */'flavours/glitch/features/account_timeline');
+}
+
+export function AccountGallery () {
+ return import(/* webpackChunkName: "flavours/glitch/async/account_gallery" */'flavours/glitch/features/account_gallery');
+}
+
+export function Followers () {
+ return import(/* webpackChunkName: "flavours/glitch/async/followers" */'flavours/glitch/features/followers');
+}
+
+export function Following () {
+ return import(/* webpackChunkName: "flavours/glitch/async/following" */'flavours/glitch/features/following');
+}
+
+export function Reblogs () {
+ return import(/* webpackChunkName: "flavours/glitch/async/reblogs" */'flavours/glitch/features/reblogs');
+}
+
+export function Favourites () {
+ return import(/* webpackChunkName: "flavours/glitch/async/favourites" */'flavours/glitch/features/favourites');
+}
+
+export function FollowRequests () {
+ return import(/* webpackChunkName: "flavours/glitch/async/follow_requests" */'flavours/glitch/features/follow_requests');
+}
+
+export function GenericNotFound () {
+ return import(/* webpackChunkName: "flavours/glitch/async/generic_not_found" */'flavours/glitch/features/generic_not_found');
+}
+
+export function FavouritedStatuses () {
+ return import(/* webpackChunkName: "flavours/glitch/async/favourited_statuses" */'flavours/glitch/features/favourited_statuses');
+}
+
+export function Blocks () {
+ return import(/* webpackChunkName: "flavours/glitch/async/blocks" */'flavours/glitch/features/blocks');
+}
+
+export function Mutes () {
+ return import(/* webpackChunkName: "flavours/glitch/async/mutes" */'flavours/glitch/features/mutes');
+}
+
+export function OnboardingModal () {
+ return import(/* webpackChunkName: "flavours/glitch/async/onboarding_modal" */'flavours/glitch/features/ui/components/onboarding_modal');
+}
+
+export function MuteModal () {
+ return import(/* webpackChunkName: "flavours/glitch/async/mute_modal" */'flavours/glitch/features/ui/components/mute_modal');
+}
+
+export function ReportModal () {
+ return import(/* webpackChunkName: "flavours/glitch/async/report_modal" */'flavours/glitch/features/ui/components/report_modal');
+}
+
+export function SettingsModal () {
+ return import(/* webpackChunkName: "flavours/glitch/async/settings_modal" */'flavours/glitch/features/local_settings');
+}
+
+export function MediaGallery () {
+ return import(/* webpackChunkName: "flavours/glitch/async/media_gallery" */'flavours/glitch/components/media_gallery');
+}
+
+export function Video () {
+ return import(/* webpackChunkName: "flavours/glitch/async/video" */'flavours/glitch/features/video');
+}
+
+export function EmbedModal () {
+ return import(/* webpackChunkName: "flavours/glitch/async/embed_modal" */'flavours/glitch/features/ui/components/embed_modal');
+}
diff --git a/app/javascript/themes/glitch/util/base_polyfills.js b/app/javascript/flavours/glitch/util/base_polyfills.js
similarity index 100%
rename from app/javascript/themes/glitch/util/base_polyfills.js
rename to app/javascript/flavours/glitch/util/base_polyfills.js
diff --git a/app/javascript/themes/glitch/util/bio_metadata.js b/app/javascript/flavours/glitch/util/bio_metadata.js
similarity index 100%
rename from app/javascript/themes/glitch/util/bio_metadata.js
rename to app/javascript/flavours/glitch/util/bio_metadata.js
diff --git a/app/javascript/themes/glitch/util/counter.js b/app/javascript/flavours/glitch/util/counter.js
similarity index 100%
rename from app/javascript/themes/glitch/util/counter.js
rename to app/javascript/flavours/glitch/util/counter.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_compressed.js b/app/javascript/flavours/glitch/util/emoji/emoji_compressed.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_compressed.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_compressed.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_map.json b/app/javascript/flavours/glitch/util/emoji/emoji_map.json
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_map.json
rename to app/javascript/flavours/glitch/util/emoji/emoji_map.json
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_mart_data_light.js b/app/javascript/flavours/glitch/util/emoji/emoji_mart_data_light.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_mart_data_light.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_mart_data_light.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_mart_search_light.js b/app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_mart_search_light.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_mart_search_light.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_picker.js b/app/javascript/flavours/glitch/util/emoji/emoji_picker.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_picker.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_picker.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_unicode_mapping_light.js b/app/javascript/flavours/glitch/util/emoji/emoji_unicode_mapping_light.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_unicode_mapping_light.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_unicode_mapping_light.js
diff --git a/app/javascript/themes/glitch/util/emoji/emoji_utils.js b/app/javascript/flavours/glitch/util/emoji/emoji_utils.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/emoji_utils.js
rename to app/javascript/flavours/glitch/util/emoji/emoji_utils.js
diff --git a/app/javascript/themes/glitch/util/emoji/index.js b/app/javascript/flavours/glitch/util/emoji/index.js
similarity index 97%
rename from app/javascript/themes/glitch/util/emoji/index.js
rename to app/javascript/flavours/glitch/util/emoji/index.js
index 8c45a58fec..31c3e14cac 100644
--- a/app/javascript/themes/glitch/util/emoji/index.js
+++ b/app/javascript/flavours/glitch/util/emoji/index.js
@@ -1,4 +1,4 @@
-import { autoPlayGif } from 'themes/glitch/util/initial_state';
+import { autoPlayGif } from 'flavours/glitch/util/initial_state';
import unicodeMapping from './emoji_unicode_mapping_light';
import Trie from 'substring-trie';
diff --git a/app/javascript/themes/glitch/util/emoji/unicode_to_filename.js b/app/javascript/flavours/glitch/util/emoji/unicode_to_filename.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/unicode_to_filename.js
rename to app/javascript/flavours/glitch/util/emoji/unicode_to_filename.js
diff --git a/app/javascript/themes/glitch/util/emoji/unicode_to_unified_name.js b/app/javascript/flavours/glitch/util/emoji/unicode_to_unified_name.js
similarity index 100%
rename from app/javascript/themes/glitch/util/emoji/unicode_to_unified_name.js
rename to app/javascript/flavours/glitch/util/emoji/unicode_to_unified_name.js
diff --git a/app/javascript/themes/glitch/util/extra_polyfills.js b/app/javascript/flavours/glitch/util/extra_polyfills.js
similarity index 100%
rename from app/javascript/themes/glitch/util/extra_polyfills.js
rename to app/javascript/flavours/glitch/util/extra_polyfills.js
diff --git a/app/javascript/themes/glitch/util/fullscreen.js b/app/javascript/flavours/glitch/util/fullscreen.js
similarity index 100%
rename from app/javascript/themes/glitch/util/fullscreen.js
rename to app/javascript/flavours/glitch/util/fullscreen.js
diff --git a/app/javascript/themes/glitch/util/get_rect_from_entry.js b/app/javascript/flavours/glitch/util/get_rect_from_entry.js
similarity index 100%
rename from app/javascript/themes/glitch/util/get_rect_from_entry.js
rename to app/javascript/flavours/glitch/util/get_rect_from_entry.js
diff --git a/app/javascript/themes/glitch/util/initial_state.js b/app/javascript/flavours/glitch/util/initial_state.js
similarity index 100%
rename from app/javascript/themes/glitch/util/initial_state.js
rename to app/javascript/flavours/glitch/util/initial_state.js
diff --git a/app/javascript/themes/glitch/util/intersection_observer_wrapper.js b/app/javascript/flavours/glitch/util/intersection_observer_wrapper.js
similarity index 100%
rename from app/javascript/themes/glitch/util/intersection_observer_wrapper.js
rename to app/javascript/flavours/glitch/util/intersection_observer_wrapper.js
diff --git a/app/javascript/themes/glitch/util/is_mobile.js b/app/javascript/flavours/glitch/util/is_mobile.js
similarity index 100%
rename from app/javascript/themes/glitch/util/is_mobile.js
rename to app/javascript/flavours/glitch/util/is_mobile.js
diff --git a/app/javascript/themes/glitch/util/link_header.js b/app/javascript/flavours/glitch/util/link_header.js
similarity index 100%
rename from app/javascript/themes/glitch/util/link_header.js
rename to app/javascript/flavours/glitch/util/link_header.js
diff --git a/app/javascript/themes/glitch/util/load_polyfills.js b/app/javascript/flavours/glitch/util/load_polyfills.js
similarity index 100%
rename from app/javascript/themes/glitch/util/load_polyfills.js
rename to app/javascript/flavours/glitch/util/load_polyfills.js
diff --git a/app/javascript/themes/glitch/util/main.js b/app/javascript/flavours/glitch/util/main.js
similarity index 95%
rename from app/javascript/themes/glitch/util/main.js
rename to app/javascript/flavours/glitch/util/main.js
index c10a64ded0..fe57fa962a 100644
--- a/app/javascript/themes/glitch/util/main.js
+++ b/app/javascript/flavours/glitch/util/main.js
@@ -1,5 +1,5 @@
import * as WebPushSubscription from './web_push_subscription';
-import Mastodon from 'themes/glitch/containers/mastodon';
+import Mastodon from 'flavours/glitch/containers/mastodon';
import React from 'react';
import ReactDOM from 'react-dom';
import ready from './ready';
diff --git a/app/javascript/themes/glitch/util/optional_motion.js b/app/javascript/flavours/glitch/util/optional_motion.js
similarity index 68%
rename from app/javascript/themes/glitch/util/optional_motion.js
rename to app/javascript/flavours/glitch/util/optional_motion.js
index b8a57b22f9..eecb6634e9 100644
--- a/app/javascript/themes/glitch/util/optional_motion.js
+++ b/app/javascript/flavours/glitch/util/optional_motion.js
@@ -1,4 +1,4 @@
-import { reduceMotion } from 'themes/glitch/util/initial_state';
+import { reduceMotion } from 'flavours/glitch/util/initial_state';
import ReducedMotion from './reduced_motion';
import Motion from 'react-motion/lib/Motion';
diff --git a/app/javascript/themes/glitch/util/performance.js b/app/javascript/flavours/glitch/util/performance.js
similarity index 100%
rename from app/javascript/themes/glitch/util/performance.js
rename to app/javascript/flavours/glitch/util/performance.js
diff --git a/app/javascript/themes/glitch/util/react_router_helpers.js b/app/javascript/flavours/glitch/util/react_router_helpers.js
similarity index 85%
rename from app/javascript/themes/glitch/util/react_router_helpers.js
rename to app/javascript/flavours/glitch/util/react_router_helpers.js
index c02fb52479..1dba5e9bb0 100644
--- a/app/javascript/themes/glitch/util/react_router_helpers.js
+++ b/app/javascript/flavours/glitch/util/react_router_helpers.js
@@ -2,9 +2,9 @@ import React from 'react';
import PropTypes from 'prop-types';
import { Switch, Route } from 'react-router-dom';
-import ColumnLoading from 'themes/glitch/features/ui/components/column_loading';
-import BundleColumnError from 'themes/glitch/features/ui/components/bundle_column_error';
-import BundleContainer from 'themes/glitch/features/ui/containers/bundle_container';
+import ColumnLoading from 'flavours/glitch/features/ui/components/column_loading';
+import BundleColumnError from 'flavours/glitch/features/ui/components/bundle_column_error';
+import BundleContainer from 'flavours/glitch/features/ui/containers/bundle_container';
// Small wrapper to pass multiColumn to the route components
export class WrappedSwitch extends React.PureComponent {
diff --git a/app/javascript/themes/glitch/util/ready.js b/app/javascript/flavours/glitch/util/ready.js
similarity index 100%
rename from app/javascript/themes/glitch/util/ready.js
rename to app/javascript/flavours/glitch/util/ready.js
diff --git a/app/javascript/themes/glitch/util/reduced_motion.js b/app/javascript/flavours/glitch/util/reduced_motion.js
similarity index 100%
rename from app/javascript/themes/glitch/util/reduced_motion.js
rename to app/javascript/flavours/glitch/util/reduced_motion.js
diff --git a/app/javascript/themes/glitch/util/rtl.js b/app/javascript/flavours/glitch/util/rtl.js
similarity index 100%
rename from app/javascript/themes/glitch/util/rtl.js
rename to app/javascript/flavours/glitch/util/rtl.js
diff --git a/app/javascript/themes/glitch/util/schedule_idle_task.js b/app/javascript/flavours/glitch/util/schedule_idle_task.js
similarity index 100%
rename from app/javascript/themes/glitch/util/schedule_idle_task.js
rename to app/javascript/flavours/glitch/util/schedule_idle_task.js
diff --git a/app/javascript/themes/glitch/util/scroll.js b/app/javascript/flavours/glitch/util/scroll.js
similarity index 100%
rename from app/javascript/themes/glitch/util/scroll.js
rename to app/javascript/flavours/glitch/util/scroll.js
diff --git a/app/javascript/themes/glitch/util/stream.js b/app/javascript/flavours/glitch/util/stream.js
similarity index 100%
rename from app/javascript/themes/glitch/util/stream.js
rename to app/javascript/flavours/glitch/util/stream.js
diff --git a/app/javascript/themes/glitch/util/url_regex.js b/app/javascript/flavours/glitch/util/url_regex.js
similarity index 100%
rename from app/javascript/themes/glitch/util/url_regex.js
rename to app/javascript/flavours/glitch/util/url_regex.js
diff --git a/app/javascript/themes/glitch/util/uuid.js b/app/javascript/flavours/glitch/util/uuid.js
similarity index 100%
rename from app/javascript/themes/glitch/util/uuid.js
rename to app/javascript/flavours/glitch/util/uuid.js
diff --git a/app/javascript/themes/glitch/util/web_push_subscription.js b/app/javascript/flavours/glitch/util/web_push_subscription.js
similarity index 97%
rename from app/javascript/themes/glitch/util/web_push_subscription.js
rename to app/javascript/flavours/glitch/util/web_push_subscription.js
index 70b26105b8..de185b6d92 100644
--- a/app/javascript/themes/glitch/util/web_push_subscription.js
+++ b/app/javascript/flavours/glitch/util/web_push_subscription.js
@@ -1,6 +1,6 @@
import axios from 'axios';
-import { store } from 'themes/glitch/containers/mastodon';
-import { setBrowserSupport, setSubscription, clearSubscription } from 'themes/glitch/actions/push_notifications';
+import { store } from 'flavours/glitch/containers/mastodon';
+import { setBrowserSupport, setSubscription, clearSubscription } from 'flavours/glitch/actions/push_notifications';
// Taken from https://www.npmjs.com/package/web-push
const urlBase64ToUint8Array = (base64String) => {
diff --git a/app/javascript/themes/vanilla/theme.yml b/app/javascript/flavours/vanilla/theme.yml
similarity index 100%
rename from app/javascript/themes/vanilla/theme.yml
rename to app/javascript/flavours/vanilla/theme.yml
diff --git a/app/javascript/themes/glitch/features/generic_not_found/index.js b/app/javascript/themes/glitch/features/generic_not_found/index.js
deleted file mode 100644
index ccd2b87b2f..0000000000
--- a/app/javascript/themes/glitch/features/generic_not_found/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import React from 'react';
-import Column from 'themes/glitch/features/ui/components/column';
-import MissingIndicator from 'themes/glitch/components/missing_indicator';
-
-const GenericNotFound = () => (
-
-
-
-);
-
-export default GenericNotFound;
diff --git a/app/javascript/themes/glitch/features/standalone/compose/index.js b/app/javascript/themes/glitch/features/standalone/compose/index.js
deleted file mode 100644
index 8a8118178b..0000000000
--- a/app/javascript/themes/glitch/features/standalone/compose/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react';
-import ComposeFormContainer from 'themes/glitch/features/compose/containers/compose_form_container';
-import NotificationsContainer from 'themes/glitch/features/ui/containers/notifications_container';
-import LoadingBarContainer from 'themes/glitch/features/ui/containers/loading_bar_container';
-import ModalContainer from 'themes/glitch/features/ui/containers/modal_container';
-
-export default class Compose extends React.PureComponent {
-
- render () {
- return (
-
-
-
-
-
-
- );
- }
-
-}
diff --git a/app/javascript/themes/glitch/packs/common.js b/app/javascript/themes/glitch/packs/common.js
deleted file mode 100644
index fd4254a0e4..0000000000
--- a/app/javascript/themes/glitch/packs/common.js
+++ /dev/null
@@ -1 +0,0 @@
-import 'themes/glitch/styles/index.scss';
diff --git a/app/javascript/themes/glitch/packs/home.js b/app/javascript/themes/glitch/packs/home.js
deleted file mode 100644
index 69dddf51c1..0000000000
--- a/app/javascript/themes/glitch/packs/home.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import loadPolyfills from 'themes/glitch/util/load_polyfills';
-
-loadPolyfills().then(() => {
- require('themes/glitch/util/main').default();
-}).catch(e => {
- console.error(e);
-});
diff --git a/app/javascript/themes/glitch/util/async-components.js b/app/javascript/themes/glitch/util/async-components.js
deleted file mode 100644
index 91e85fed55..0000000000
--- a/app/javascript/themes/glitch/util/async-components.js
+++ /dev/null
@@ -1,115 +0,0 @@
-export function EmojiPicker () {
- return import(/* webpackChunkName: "themes/glitch/async/emoji_picker" */'themes/glitch/util/emoji/emoji_picker');
-}
-
-export function Compose () {
- return import(/* webpackChunkName: "themes/glitch/async/compose" */'themes/glitch/features/compose');
-}
-
-export function Notifications () {
- return import(/* webpackChunkName: "themes/glitch/async/notifications" */'themes/glitch/features/notifications');
-}
-
-export function HomeTimeline () {
- return import(/* webpackChunkName: "themes/glitch/async/home_timeline" */'themes/glitch/features/home_timeline');
-}
-
-export function PublicTimeline () {
- return import(/* webpackChunkName: "themes/glitch/async/public_timeline" */'themes/glitch/features/public_timeline');
-}
-
-export function CommunityTimeline () {
- return import(/* webpackChunkName: "themes/glitch/async/community_timeline" */'themes/glitch/features/community_timeline');
-}
-
-export function HashtagTimeline () {
- return import(/* webpackChunkName: "themes/glitch/async/hashtag_timeline" */'themes/glitch/features/hashtag_timeline');
-}
-
-export function DirectTimeline() {
- return import(/* webpackChunkName: "themes/glitch/async/direct_timeline" */'themes/glitch/features/direct_timeline');
-}
-
-export function Status () {
- return import(/* webpackChunkName: "themes/glitch/async/status" */'themes/glitch/features/status');
-}
-
-export function GettingStarted () {
- return import(/* webpackChunkName: "themes/glitch/async/getting_started" */'themes/glitch/features/getting_started');
-}
-
-export function PinnedStatuses () {
- return import(/* webpackChunkName: "themes/glitch/async/pinned_statuses" */'themes/glitch/features/pinned_statuses');
-}
-
-export function AccountTimeline () {
- return import(/* webpackChunkName: "themes/glitch/async/account_timeline" */'themes/glitch/features/account_timeline');
-}
-
-export function AccountGallery () {
- return import(/* webpackChunkName: "themes/glitch/async/account_gallery" */'themes/glitch/features/account_gallery');
-}
-
-export function Followers () {
- return import(/* webpackChunkName: "themes/glitch/async/followers" */'themes/glitch/features/followers');
-}
-
-export function Following () {
- return import(/* webpackChunkName: "themes/glitch/async/following" */'themes/glitch/features/following');
-}
-
-export function Reblogs () {
- return import(/* webpackChunkName: "themes/glitch/async/reblogs" */'themes/glitch/features/reblogs');
-}
-
-export function Favourites () {
- return import(/* webpackChunkName: "themes/glitch/async/favourites" */'themes/glitch/features/favourites');
-}
-
-export function FollowRequests () {
- return import(/* webpackChunkName: "themes/glitch/async/follow_requests" */'themes/glitch/features/follow_requests');
-}
-
-export function GenericNotFound () {
- return import(/* webpackChunkName: "themes/glitch/async/generic_not_found" */'themes/glitch/features/generic_not_found');
-}
-
-export function FavouritedStatuses () {
- return import(/* webpackChunkName: "themes/glitch/async/favourited_statuses" */'themes/glitch/features/favourited_statuses');
-}
-
-export function Blocks () {
- return import(/* webpackChunkName: "themes/glitch/async/blocks" */'themes/glitch/features/blocks');
-}
-
-export function Mutes () {
- return import(/* webpackChunkName: "themes/glitch/async/mutes" */'themes/glitch/features/mutes');
-}
-
-export function OnboardingModal () {
- return import(/* webpackChunkName: "themes/glitch/async/onboarding_modal" */'themes/glitch/features/ui/components/onboarding_modal');
-}
-
-export function MuteModal () {
- return import(/* webpackChunkName: "themes/glitch/async/mute_modal" */'themes/glitch/features/ui/components/mute_modal');
-}
-
-export function ReportModal () {
- return import(/* webpackChunkName: "themes/glitch/async/report_modal" */'themes/glitch/features/ui/components/report_modal');
-}
-
-export function SettingsModal () {
- return import(/* webpackChunkName: "themes/glitch/async/settings_modal" */'themes/glitch/features/local_settings');
-}
-
-export function MediaGallery () {
- return import(/* webpackChunkName: "themes/glitch/async/media_gallery" */'themes/glitch/components/media_gallery');
-}
-
-export function Video () {
- return import(/* webpackChunkName: "themes/glitch/async/video" */'themes/glitch/features/video');
-}
-
-export function EmbedModal () {
- return import(/* webpackChunkName: "themes/glitch/async/embed_modal" */'themes/glitch/features/ui/components/embed_modal');
-}
diff --git a/app/javascript/themes/mastodon-go b/app/javascript/themes/mastodon-go
deleted file mode 160000
index 74c0293e83..0000000000
--- a/app/javascript/themes/mastodon-go
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 74c0293e83dbb49ea4f27eea108526df6216d2a2
diff --git a/app/lib/themes.rb b/app/lib/themes.rb
index f1796d0e36..863326e2d5 100644
--- a/app/lib/themes.rb
+++ b/app/lib/themes.rb
@@ -12,7 +12,7 @@ class Themes
core['pack'] = Hash.new unless core['pack']
result = Hash.new
- Dir.glob(Rails.root.join('app', 'javascript', 'themes', '*', 'theme.yml')) do |path|
+ Dir.glob(Rails.root.join('app', 'javascript', 'flavours', '*', 'theme.yml')) do |path|
data = YAML.load_file(path)
name = File.basename(File.dirname(path))
if data['pack']
@@ -51,11 +51,11 @@ class Themes
@core
end
- def get(name)
+ def flavour(name)
@conf[name]
end
- def names
+ def flavours
@conf.keys
end
diff --git a/app/models/user.rb b/app/models/user.rb
index 1d42d4f701..2458cf298e 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -74,7 +74,7 @@ class User < ApplicationRecord
has_many :session_activations, dependent: :destroy
delegate :auto_play_gif, :default_sensitive, :unfollow_modal, :boost_modal, :delete_modal,
- :reduce_motion, :system_font_ui, :noindex, :theme, :skin,
+ :reduce_motion, :system_font_ui, :noindex, :flavour, :skin,
to: :settings, prefix: :setting, allow_nil: false
def confirmed?
diff --git a/app/views/layouts/_theme.html.haml b/app/views/layouts/_theme.html.haml
index 941ccc9148..39727953d2 100644
--- a/app/views/layouts/_theme.html.haml
+++ b/app/views/layouts/_theme.html.haml
@@ -2,10 +2,10 @@
- if theme[:pack] != 'common' && theme[:common]
= render partial: 'layouts/theme', object: theme[:common]
- if theme[:pack]
- = javascript_pack_tag theme[:name] ? "themes/#{theme[:name]}/#{theme[:pack]}" : "core/#{theme[:pack]}", integrity: true, crossorigin: 'anonymous'
+ = javascript_pack_tag theme[:flavour] ? "flavours/#{theme[:flavour]}/#{theme[:pack]}" : "core/#{theme[:pack]}", integrity: true, crossorigin: 'anonymous'
- if theme[:skin]
- - if !theme[:name] || theme[:skin] == 'default'
- = stylesheet_pack_tag theme[:name] ? "themes/#{theme[:name]}/#{theme[:pack]}" : "core/#{theme[:pack]}", integrity: true, media: 'all'
+ - if !theme[:flavour] || theme[:skin] == 'default'
+ = stylesheet_pack_tag theme[:flavour] ? "flavours/#{theme[:flavour]}/#{theme[:pack]}" : "core/#{theme[:pack]}", integrity: true, media: 'all'
- else
= stylesheet_pack_tag "skins/#{theme[:name]}/#{theme[:skin]}/#{theme[:pack]}"
- if theme[:preload]
diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml
index 0d487d9f38..030a902cf2 100644
--- a/app/views/settings/preferences/show.html.haml
+++ b/app/views/settings/preferences/show.html.haml
@@ -27,7 +27,7 @@
.fields-group
- if Themes.instance.names.size > 1
- = f.input :setting_theme, collection: Themes.instance.names, label_method: lambda { |theme| I18n.t("themes.#{theme}", default: theme) }, wrapper: :with_label, include_blank: false
+ = f.input :setting_flavour, collection: Themes.instance.flavours, label_method: lambda { |flavour| I18n.t("themes.#{flavour}", default: flavour) }, wrapper: :with_label, include_blank: false
= f.input :setting_skin, collection: Themes.instance.skins_for(current_theme), label_method: lambda { |skin| I18n.t("themes.#{current_theme}.skins.#{skin}", default: skin) }, wrapper: :with_label, include_blank: false
= f.input :setting_unfollow_modal, as: :boolean, wrapper: :with_label
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index b9ef21fef1..1ce24e3c63 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -14,8 +14,8 @@ en:
one: 1 character left
other: %{count} characters left
setting_noindex: Affects your public profile and status pages
- setting_theme: Affects how Mastodon looks when you're logged in from any device.
- setting_skin: Reskins the selected Mastodon theme
+ setting_flavour: Affects how Mastodon looks when you're logged in from any device
+ setting_skin: Reskins the selected Mastodon flavour
imports:
data: CSV file exported from another Mastodon instance
sessions:
@@ -47,7 +47,7 @@ en:
setting_noindex: Opt-out of search engine indexing
setting_reduce_motion: Reduce motion in animations
setting_system_font_ui: Use system's default font
- setting_theme: Site theme
+ setting_flavour: Mastodon Flavour
setting_skin: Skin
setting_unfollow_modal: Show confirmation dialog before unfollowing someone
severity: Severity
diff --git a/config/settings.yml b/config/settings.yml
index 5abf647e87..48d971d44c 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -25,7 +25,7 @@ defaults: &defaults
reduce_motion: false
system_font_ui: false
noindex: false
- theme: 'glitch'
+ flavour: 'glitch'
skin: 'default'
notification_emails:
follow: false
diff --git a/config/webpack/configuration.js b/config/webpack/configuration.js
index cb31c6ab83..59d46c78d4 100644
--- a/config/webpack/configuration.js
+++ b/config/webpack/configuration.js
@@ -9,9 +9,9 @@ const glob = require('glob');
const configPath = resolve('config', 'webpacker.yml');
const loadersDir = join(__dirname, 'loaders');
const settings = safeLoad(readFileSync(configPath), 'utf8')[env.NODE_ENV];
-const themeFiles = glob.sync('app/javascript/themes/*/theme.yml');
+const flavourFiles = glob.sync('app/javascript/flavours/*/theme.yml');
const skinFiles = glob.sync('app/javascript/skins/*/*');
-const themes = {};
+const flavours = {};
const core = function () {
const coreFile = resolve('app', 'javascript', 'core', 'theme.yml');
@@ -22,16 +22,16 @@ const core = function () {
return data.pack ? data : {};
}();
-for (let i = 0; i < themeFiles.length; i++) {
- const themeFile = themeFiles[i];
- const data = safeLoad(readFileSync(themeFile), 'utf8');
- data.name = basename(dirname(themeFile));
+for (let i = 0; i < flavourFiles.length; i++) {
+ const flavourFile = flavourFiles[i];
+ const data = safeLoad(readFileSync(flavourFile), 'utf8');
+ data.name = basename(dirname(flavourFile));
data.skin = {};
if (!data.pack_directory) {
- data.pack_directory = dirname(themeFile);
+ data.pack_directory = dirname(flavourFile);
}
if (data.pack && typeof data.pack === 'object') {
- themes[data.name] = data;
+ flavours[data.name] = data;
}
}
@@ -39,10 +39,10 @@ for (let i = 0; i < skinFiles.length; i++) {
const skinFile = skinFiles[i];
let skin = basename(skinFile);
const name = basename(dirname(skinFile));
- if (!themes[name]) {
+ if (!flavours[name]) {
continue;
}
- const data = themes[name].skin;
+ const data = flavours[name].skin;
if (lstatSync(skinFile).isDirectory()) {
data[skin] = {};
const skinPacks = glob.sync(skinFile, '*.{css,scss}');
@@ -76,7 +76,7 @@ const output = {
module.exports = {
settings,
core,
- themes,
+ flavours,
env,
loadersDir,
output,
diff --git a/config/webpack/shared.js b/config/webpack/shared.js
index a2550bc819..e4b057ffbd 100644
--- a/config/webpack/shared.js
+++ b/config/webpack/shared.js
@@ -6,7 +6,7 @@ const { sync } = require('glob');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const ManifestPlugin = require('webpack-manifest-plugin');
const extname = require('path-complete-extname');
-const { env, settings, core, themes, output, loadersDir } = require('./configuration.js');
+const { env, settings, core, flavours, output, loadersDir } = require('./configuration.js');
const localePackPaths = require('./generateLocalePacks');
function reducePacks (data, into = {}) {
@@ -20,7 +20,7 @@ function reducePacks (data, into = {}) {
}
const packFile = typeof pack === 'string' ? pack : pack.filename;
if (packFile) {
- map[data.name ? `themes/${data.name}/${entry}` : `core/${entry}`] = resolve(data.pack_directory, packFile);
+ map[data.name ? `flavours/${data.name}/${entry}` : `core/${entry}`] = resolve(data.pack_directory, packFile);
}
return map;
}, into);
@@ -54,7 +54,7 @@ module.exports = {
return localMap;
}, {}),
reducePacks(core),
- Object.keys(themes).reduce((map, entry) => reducePacks(themes[entry], map), {})
+ Object.keys(flavours).reduce((map, entry) => reducePacks(flavours[entry], map), {})
),
output: {