Changes & Adoptions made so far

master
Tuan 3 years ago
parent ba22398c38
commit 2d30ca72b6
  1. 10
      app/javascript/flavours/glitch/actions/compose.js
  2. 2
      app/javascript/flavours/glitch/features/compose/components/compose_form.js
  3. 32
      app/javascript/flavours/glitch/features/compose/components/options.js
  4. 10
      app/javascript/flavours/glitch/features/compose/containers/options_container.js
  5. 106
      app/javascript/flavours/glitch/features/compose/gif_modal.js
  6. 2
      app/javascript/flavours/glitch/features/emoji_picker/index.js
  7. 10
      app/javascript/flavours/glitch/features/getting_started/index.js
  8. 97
      app/javascript/flavours/glitch/features/ui/components/gif_modal.js
  9. 2
      app/javascript/flavours/glitch/features/ui/components/link_footer.js
  10. 4
      app/javascript/flavours/glitch/features/ui/components/modal_root.js
  11. 15
      app/javascript/flavours/glitch/features/ui/components/navigation_panel.js
  12. 3
      app/javascript/flavours/glitch/locales/en.js
  13. 3
      app/javascript/flavours/glitch/locales/tr.js
  14. 4
      app/javascript/flavours/glitch/reducers/compose.js
  15. 0
      app/javascript/flavours/glitch/styles/.content
  16. 20
      app/javascript/flavours/glitch/styles/accounts.scss
  17. 4
      app/javascript/flavours/glitch/styles/basics.scss
  18. 2
      app/javascript/flavours/glitch/styles/components/composer.scss
  19. 25
      app/javascript/flavours/glitch/styles/components/drawer.scss
  20. 13
      app/javascript/flavours/glitch/styles/components/giphy.scss
  21. 9
      app/javascript/flavours/glitch/styles/components/index.scss
  22. 8
      app/javascript/flavours/glitch/styles/components/media.scss
  23. 7
      app/javascript/flavours/glitch/styles/extras.scss
  24. 1715
      app/javascript/flavours/glitch/styles/flat.scss
  25. 9
      app/javascript/flavours/glitch/styles/flatClean.scss
  26. 9
      app/javascript/flavours/glitch/styles/flatDroid.scss
  27. 9
      app/javascript/flavours/glitch/styles/flatFlamingo.scss
  28. 9
      app/javascript/flavours/glitch/styles/flatTwitter.scss
  29. 7
      app/javascript/flavours/glitch/styles/index.scss
  30. 271
      app/javascript/flavours/glitch/styles/mfc/1-foreground.css
  31. 242
      app/javascript/flavours/glitch/styles/mfc/2-background.css
  32. 224
      app/javascript/flavours/glitch/styles/mfc/3-highlights.css
  33. 72
      app/javascript/flavours/glitch/styles/mfc/5-material.css
  34. 120
      app/javascript/flavours/glitch/styles/mfc/6-actions.css
  35. 65
      app/javascript/flavours/glitch/styles/mfc/clean.css
  36. 65
      app/javascript/flavours/glitch/styles/mfc/droid.css
  37. 7
      app/javascript/flavours/glitch/styles/mfc/fix.css
  38. 65
      app/javascript/flavours/glitch/styles/mfc/flamingo.css
  39. 65
      app/javascript/flavours/glitch/styles/mfc/twitter.css
  40. 11
      app/javascript/flavours/glitch/styles/mfc/variables.scss
  41. 12
      app/javascript/flavours/glitch/styles/motd.scss
  42. 5
      app/javascript/images/logo_full.svg
  43. 2
      app/javascript/mastodon/features/compose/components/compose_form.js
  44. 1025
      app/javascript/skins/glitch/cyberpunk/common.scss
  45. 5
      app/javascript/skins/glitch/cyberpunk/names.yml
  46. 1
      app/javascript/skins/glitch/flat-clean/common.scss
  47. 8
      app/javascript/skins/glitch/flat-clean/names.yml
  48. 1
      app/javascript/skins/glitch/flat-droid/common.scss
  49. 8
      app/javascript/skins/glitch/flat-droid/names.yml
  50. 1
      app/javascript/skins/glitch/flat-flamingo/common.scss
  51. 8
      app/javascript/skins/glitch/flat-flamingo/names.yml
  52. 1
      app/javascript/skins/glitch/flat-twitter/common.scss
  53. 8
      app/javascript/skins/glitch/flat-twitter/names.yml
  54. 2
      app/javascript/skins/glitch/kafuka/common.scss
  55. 5
      app/javascript/skins/glitch/kafuka/names.yml
  56. 62
      app/javascript/skins/glitch/kafuka/variables.scss
  57. 3
      app/javascript/skins/glitch/koyuspace/common.scss
  58. 5
      app/javascript/skins/glitch/koyuspace/names.yml
  59. 83
      app/javascript/skins/glitch/koyuspace/overrides.scss
  60. 61
      app/javascript/skins/glitch/koyuspace/variables.scss
  61. 2
      app/javascript/skins/glitch/pitchpink/common.scss
  62. 5
      app/javascript/skins/glitch/pitchpink/names.yml
  63. 62
      app/javascript/skins/glitch/pitchpink/variables.scss
  64. 2
      app/javascript/skins/glitch/pumpkin/common.scss
  65. 5
      app/javascript/skins/glitch/pumpkin/names.yml
  66. 61
      app/javascript/skins/glitch/pumpkin/variables.scss
  67. 1571
      app/javascript/skins/glitch/safari/common.scss
  68. 5
      app/javascript/skins/glitch/safari/names.yml
  69. 364
      app/javascript/skins/glitch/summertime/common.scss
  70. 5
      app/javascript/skins/glitch/summertime/names.yml
  71. 3
      app/javascript/skins/glitch/witches/common.scss
  72. 3
      app/javascript/skins/glitch/witches/fixes.scss
  73. 5
      app/javascript/skins/glitch/witches/names.yml
  74. 105
      app/javascript/skins/glitch/witches/variables.scss
  75. 1
      app/javascript/skins/vanilla/win95/common.scss
  76. 4
      app/javascript/skins/vanilla/win95/names.yml
  77. 17
      app/javascript/styles/linernotes_dark.scss
  78. 15
      app/javascript/styles/linernotes_dark/overrides.scss
  79. 59
      app/javascript/styles/linernotes_dark/palette.scss
  80. 127
      app/javascript/styles/mfc/0-palette.css
  81. 271
      app/javascript/styles/mfc/1-foreground.css
  82. 181
      app/javascript/styles/mfc/2-background.css
  83. 224
      app/javascript/styles/mfc/3-highlights.css
  84. 72
      app/javascript/styles/mfc/5-material.css
  85. 120
      app/javascript/styles/mfc/6-actions.css
  86. 6
      app/javascript/styles/mfc/mastodonFlat.scss
  87. 11
      app/javascript/styles/mfc/variables.scss
  88. 10
      app/javascript/styles/mods/deprecated/display_bettersearch.css
  89. 9
      app/javascript/styles/mods/display_breakname.css
  90. 20
      app/javascript/styles/mods/display_browserfont.css
  91. 15
      app/javascript/styles/mods/display_circleavatar.css
  92. 37
      app/javascript/styles/mods/display_collapsedinteractions.css
  93. 23
      app/javascript/styles/mods/display_emojizoom.css
  94. 9
      app/javascript/styles/mods/display_fadedinteractions.css
  95. 31
      app/javascript/styles/mods/display_fullmedia.css
  96. 11
      app/javascript/styles/mods/display_fullname.css
  97. 10
      app/javascript/styles/mods/display_hidefollowcounts.css
  98. 7
      app/javascript/styles/mods/display_hidereplycounts.css
  99. 16
      app/javascript/styles/mods/display_starstohearts.css
  100. 10
      app/javascript/styles/mods/display_transparentmedia.css
  101. Some files were not shown because too many files have changed in this diff Show More

@ -60,6 +60,7 @@ export const COMPOSE_UPLOAD_CHANGE_SUCCESS = 'COMPOSE_UPLOAD_UPDATE_SUCCESS'
export const COMPOSE_UPLOAD_CHANGE_FAIL = 'COMPOSE_UPLOAD_UPDATE_FAIL';
export const COMPOSE_DOODLE_SET = 'COMPOSE_DOODLE_SET';
export const COMPOSE_GIPHY_SET = 'COMPOSE_GIPHY_SET';
export const COMPOSE_POLL_ADD = 'COMPOSE_POLL_ADD';
export const COMPOSE_POLL_REMOVE = 'COMPOSE_POLL_REMOVE';
@ -154,7 +155,7 @@ export function submitCompose(routerHistory) {
dispatch(submitComposeRequest());
if (getState().getIn(['compose', 'advanced_options', 'do_not_federate'])) {
status = status + ' 👁';
status = status + ' :tree:';
}
api(getState).post('/api/v1/statuses', {
status,
@ -237,6 +238,13 @@ export function doodleSet(options) {
};
};
export function giphySet(options) {
return {
type: COMPOSE_GIPHY_SET,
options: options,
};
};
export function uploadCompose(files) {
return function (dispatch, getState) {
const uploadLimit = 4;

@ -360,6 +360,8 @@ class ComposeForm extends ImmutablePureComponent {
privacy={privacy}
sideArm={sideArm}
/>
<div id="motd"></div>
</div>
);
}

@ -34,6 +34,14 @@ const messages = defineMessages({
defaultMessage: 'Draw something',
id: 'compose.attach.doodle',
},
gif: {
defaultMessage: 'Embed GIF',
id: 'compose.attach.gif',
},
jitsi: {
defaultMessage: 'Start call',
id: 'compose.attach.jitsi',
},
html: {
defaultMessage: 'HTML',
id: 'compose.content-type.html',
@ -97,6 +105,8 @@ class ComposerOptions extends ImmutablePureComponent {
onChangeContentType: PropTypes.func,
onTogglePoll: PropTypes.func,
onDoodleOpen: PropTypes.func,
onEmbedJitsi: PropTypes.func,
onEmbedGiphy: PropTypes.func,
onModalClose: PropTypes.func,
onModalOpen: PropTypes.func,
onToggleSpoiler: PropTypes.func,
@ -119,7 +129,7 @@ class ComposerOptions extends ImmutablePureComponent {
// Handles attachment clicks.
handleClickAttach = (name) => {
const { fileElement } = this;
const { onDoodleOpen } = this.props;
const { onDoodleOpen, onEmbedJitsi, onEmbedGiphy } = this.props;
// We switch over the name of the option.
switch (name) {
@ -133,6 +143,16 @@ class ComposerOptions extends ImmutablePureComponent {
onDoodleOpen();
}
return;
case 'jitsi':
if (onEmbedJitsi) {
onEmbedJitsi();
}
return;
case 'gif':
if (onEmbedGiphy) {
onEmbedGiphy();
}
return;
}
}
@ -211,6 +231,16 @@ class ComposerOptions extends ImmutablePureComponent {
name: 'doodle',
text: <FormattedMessage {...messages.doodle} />,
},
{
icon: 'video-camera',
name: 'jitsi',
text: <FormattedMessage {...messages.jitsi} />,
},
{
icon: 'file-image-o',
name: 'gif',
text: <FormattedMessage {...messages.gif} />,
}
]}
onChange={this.handleClickAttach}
onModalClose={onModalClose}

@ -3,6 +3,7 @@ import Options from '../components/options';
import {
changeComposeAdvancedOption,
changeComposeContentType,
changeCompose,
addPoll,
removePoll,
} from 'flavours/glitch/actions/compose';
@ -49,6 +50,15 @@ const mapDispatchToProps = (dispatch) => ({
dispatch(openModal('DOODLE', { noEsc: true }));
},
onEmbedJitsi() {
var x = Math.floor((Math.random() * 10000000000000000) + 1);
dispatch(changeCompose("https://meet.jit.si//"+x));
},
onEmbedGiphy() {
dispatch(openModal('GIPHY', { noEsc: true }));
},
onModalClose() {
dispatch(closeModal());
},

@ -0,0 +1,106 @@
import React from 'react';
import PropTypes from 'prop-types';
import Button from 'flavours/glitch/components/button';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { giphySet, uploadCompose } from 'flavours/glitch/actions/compose';
import IconButton from 'flavours/glitch/components/icon_button';
import { debounce, mapValues } from 'lodash';
import classNames from 'classnames';
import ReactGiphySearchbox from 'react-giphy-searchbox'
import { changeCompose } from 'flavours/glitch/actions/compose';
// Utility for converting base64 image to binary for upload
// https://stackoverflow.com/questions/35940290/how-to-convert-base64-string-to-javascript-file-object-like-as-from-file-input-f
function dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}
const mapStateToProps = state => ({
options: state.getIn(['compose', 'giphy']),
});
const mapDispatchToProps = dispatch => ({
/** Set options in the redux store */
setOpt: (opts) => dispatch(giphySet(opts)),
/** Submit GIF for upload */
submit: (file) => dispatch(uploadCompose([file])),
});
export default @connect(mapStateToProps, mapDispatchToProps)
class GIFModal extends ImmutablePureComponent {
static propTypes = {
options: ImmutablePropTypes.map,
onClose: PropTypes.func.isRequired,
setOpt: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired,
};
componentDidMount() {
//If component mounted
}
onDoneButton = (item) => {
const url = item["images"]["original"]["url"];
var modal = this;
fetch(url).then(function(response) {
return response.blob();
}).then(function(blob) {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var dataUrl = reader.result;
console.log(dataUrl);
const file = dataURLtoFile(dataUrl, 'giphy.gif');
modal.props.submit(file);
modal.props.onClose(); // close dialog
};
});
};
handleClick = () => {
this.props.onClose();
}
handleCancel = () => {
this.props.onClose();
}
setRef = (c) => {
this.button = c;
}
toggleNotifications = () => {
this.props.onToggleNotifications();
}
changeMuteDuration = (e) => {
this.props.onChangeMuteDuration(e);
}
render () {
return (
<div className='modal-root__modal mute-modal'>
<div className='mute-modal__container'>
<ReactGiphySearchbox
apiKey="1ttK05MF98dLllFFknTAVo0U4CGcQb4J"
onSelect={item => this.onDoneButton(item)}
masonryConfig={[
{ columns: 2, imageWidth: 190, gutter: 5 },
{ mq: "700px", columns: 2, imageWidth: 210, gutter: 5 }
]}
/>
</div>
</div>
);
}
}

@ -444,7 +444,7 @@ class EmojiPickerDropdown extends React.PureComponent {
{button || <img
className={classNames('emojione', { 'pulse-loading': active && loading })}
alt='🙂'
src={`${assetHost}/emoji/1f602.svg`}
src={`${assetHost}/emoji/1f984.svg`}
/>}
</div>

@ -177,6 +177,16 @@ const NAVIGATION_PANEL_BREAKPOINT = 600 + (285 * 2) + (10 * 2);
<ColumnSubheading text={intl.formatMessage(messages.settings_subheading)} />
{ preferencesLink !== undefined && <ColumnLink icon='cog' text={intl.formatMessage(messages.preferences)} href={preferencesLink} /> }
<ColumnLink icon='cogs' text={intl.formatMessage(messages.settings)} onClick={openSettings} />
<hr />
<p><audio style={{width: "285px"}} controls><source src="https://stream.radyoodtu.com.tr/canli"></source></audio></p>
<p><FormattedMessage id='navigation_bar.radiostation' defaultMessage='Current radio station' />: <a id="current-radio" className='column-link--transparent' href='https://radyoodtu.com.tr/' target='_blank'>Radyo ODTÜ</a></p>
<hr />
<p><audio style={{width: "285px"}} controls><source src="https://sc.vargonen.net:5001/;stream.mp3"></source></audio></p>
<p><FormattedMessage id='navigation_bar.radiostation' defaultMessage='Current radio station' />: <a id="current-radio" className='column-link--transparent' href='https://www.futuregeneration.net/' target='_blank'>FG</a></p>
<hr />
<p><FormattedMessage id='navigation_bar.weekly' defaultMessage='Join our' /> <a id="discord-server" className='column-link--transparent' href='https://discord.gg/p3j8H73Z6s' target='_blank'>Discord Server</a></p>
</div>
<LinkFooter />

@ -0,0 +1,97 @@
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { giphySet, uploadCompose } from 'flavours/glitch/actions/compose';
import IconButton from 'flavours/glitch/components/icon_button';
import ReactGiphySearchbox from 'react-giphy-searchbox'
import { defineMessages, injectIntl } from 'react-intl';
const messages = defineMessages({
search: { id: 'giphy.search', defaultMessage: 'Search for GIFs' },
error: { id: 'giphy.error', defaultMessage: 'Oops! Something went wrong. Please, try again.' },
loading: { id: 'giphy.loading', defaultMessage: 'Loading...'},
nomatches: { id: 'giphy.nomatches', defaultMessage: 'No matches found.' },
close: { id: 'settings.close', defaultMessage: 'Close' },
});
// Utility for converting base64 image to binary for upload
// https://stackoverflow.com/questions/35940290/how-to-convert-base64-string-to-javascript-file-object-like-as-from-file-input-f
function dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}
const mapStateToProps = state => ({
options: state.getIn(['compose', 'giphy']),
});
const mapDispatchToProps = dispatch => ({
/** Set options in the redux store */
setOpt: (opts) => dispatch(giphySet(opts)),
/** Submit GIF for upload */
submit: (file) => dispatch(uploadCompose([file])),
});
export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl
class GIFModal extends ImmutablePureComponent {
static propTypes = {
intl: PropTypes.object.isRequired,
options: ImmutablePropTypes.map,
onClose: PropTypes.func.isRequired,
setOpt: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired,
};
onDoneButton = (item) => {
const url = item["images"]["original"]["mp4"];
var modal = this;
fetch(url).then(function(response) {
return response.blob();
}).then(function(blob) {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var dataUrl = reader.result;
const file = dataURLtoFile(dataUrl, 'giphy.mp4');
modal.props.submit(file);
modal.props.onClose(); // close dialog
};
});
};
render () {
const { intl } = this.props;
return (
<div className='modal-root__modal mute-modal'>
<div className='mute-modal__container'>
<IconButton title={intl.formatMessage(messages.close)} icon="close" size="16" onClick={this.props.onClose} style={{float: "right"}} /><br />
<ReactGiphySearchbox
apiKey="Id56al7DqONG4s5UiiKZZaZbegKNV1EC"
onSelect={item => this.onDoneButton(item)}
masonryConfig={[
{ columns: 2, imageWidth: 190, gutter: 5 },
{ mq: "700px", columns: 2, imageWidth: 210, gutter: 5 }
]}
autoFocus="true"
searchPlaceholder={intl.formatMessage(messages.search)}
messageError={intl.formatMessage(messages.error)}
messageLoading={intl.formatMessage(messages.loading)}
messageNoMatches={intl.formatMessage(messages.nomatches)}
wrapperClassName="giphy-modal__searchbox"
/>
</div>
</div>
);
}
}

@ -58,7 +58,7 @@ class LinkFooter extends React.PureComponent {
<p>
<FormattedMessage
id='getting_started.open_source_notice'
defaultMessage='Glitchsoc is open source software, a friendly fork of {Mastodon}. You can contribute or report issues on GitHub at {github}.'
defaultMessage='Metu.Life is open source software forked from {Mastodon}. You can contribute or report issues on GitHub at {github}.'
values={{
github: <span><a href='https://github.com/glitch-soc/mastodon' rel='noopener noreferrer' target='_blank'>glitch-soc/mastodon</a> (v{version})</span>,
Mastodon: <a href='https://github.com/tootsuite/mastodon' rel='noopener noreferrer' target='_blank'>Mastodon</a> }}

@ -12,6 +12,7 @@ import BoostModal from './boost_modal';
import FavouriteModal from './favourite_modal';
import AudioModal from './audio_modal';
import DoodleModal from './doodle_modal';
import GIFModal from './gif_modal';
import ConfirmationModal from './confirmation_modal';
import FocalPointModal from './focal_point_modal';
import {
@ -34,6 +35,7 @@ const MODAL_COMPONENTS = {
'BOOST': () => Promise.resolve({ default: BoostModal }),
'FAVOURITE': () => Promise.resolve({ default: FavouriteModal }),
'DOODLE': () => Promise.resolve({ default: DoodleModal }),
'GIPHY': () => Promise.resolve({ default: GIFModal }),
'CONFIRM': () => Promise.resolve({ default: ConfirmationModal }),
'MUTE': MuteModal,
'BLOCK': BlockModal,
@ -70,7 +72,7 @@ export default class ModalRoot extends React.PureComponent {
}
renderLoading = modalId => () => {
return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
return ['MEDIA', 'VIDEO', 'BOOST', 'FAVOURITE', 'DOODLE', 'GIPHY', 'CONFIRM', 'ACTIONS'].indexOf(modalId) === -1 ? <ModalLoading /> : null;
}
renderError = (props) => {

@ -29,6 +29,21 @@ const NavigationPanel = ({ onOpenSettings }) => (
<a className='column-link column-link--transparent' href='#' onClick={onOpenSettings}><Icon className='column-link__icon' id='cogs' fixedWidth /><FormattedMessage id='navigation_bar.app_settings' defaultMessage='App settings' /></a>
{!!relationshipsLink && <a className='column-link column-link--transparent' href={relationshipsLink} target='_blank'><Icon className='column-link__icon' id='users' fixedWidth /><FormattedMessage id='navigation_bar.follows_and_followers' defaultMessage='Follows and followers' /></a>}
<hr />
<p><audio style={{width: "285px"}} controls><source src="https://stream.radyoodtu.com.tr/canli"></source></audio></p>
<p><FormattedMessage id='navigation_bar.radiostation' defaultMessage='Current radio station' />: <a id="current-radio" className='column-link--transparent' href='https://radyoodtu.com.tr/' target='_blank'>Radyo ODTÜ</a></p>
<hr />
<p><audio style={{width: "285px"}} controls><source src="https://sc.vargonen.net:5001/;stream.mp3"></source></audio></p>
<p><FormattedMessage id='navigation_bar.radiostation' defaultMessage='Current radio station' />: <a id="current-radio" className='column-link--transparent' href='https://www.futuregeneration.net/' target='_blank'>FG</a></p>
<hr />
<p><FormattedMessage id='navigation_bar.weekly' defaultMessage='Join our' /> <a id="discord-server" className='column-link--transparent' href='https://discord.gg/p3j8H73Z6s' target='_blank'>Discord Server</a></p>
<hr />
{showTrends && <div className='flex-spacer' />}
{showTrends && <TrendsContainer />}
</div>

@ -1,7 +1,7 @@
import inherited from 'mastodon/locales/en.json';
const messages = {
'getting_started.open_source_notice': 'Glitchsoc is free open source software forked from {Mastodon}. You can contribute or report issues on GitHub at {github}.',
'getting_started.open_source_notice': 'Metu Life is free open source software forked from {Mastodon}.', /* You can contribute or report issues on GitHub at {github}.' */
'layout.auto': 'Auto',
'layout.current_is': 'Your current layout is:',
'layout.desktop': 'Desktop',
@ -53,6 +53,7 @@ const messages = {
'compose.attach.upload': 'Upload a file',
'compose.attach.doodle': 'Draw something',
'compose.attach.gif': 'Embed GIF',
'compose.attach': 'Attach...',
'advanced_options.local-only.short': 'Local-only',

@ -2,6 +2,9 @@ import inherited from 'mastodon/locales/tr.json';
const messages = {
// No translations available.
'compose.attach.jitsi': 'Arama başlat',
'compose.attach.doodle': 'Çizim yap',
'compose.attach.gif': 'GIF yükle',
};
export default Object.assign({}, inherited, messages);

@ -35,6 +35,7 @@ import {
COMPOSE_UPLOAD_CHANGE_SUCCESS,
COMPOSE_UPLOAD_CHANGE_FAIL,
COMPOSE_DOODLE_SET,
COMPOSE_GIPHY_SET,
COMPOSE_RESET,
COMPOSE_POLL_ADD,
COMPOSE_POLL_REMOVE,
@ -97,6 +98,7 @@ const initialState = ImmutableMap({
resetFileKey: Math.floor((Math.random() * 0x10000)),
idempotencyKey: null,
tagHistory: ImmutableList(),
giphy: null,
doodle: ImmutableMap({
fg: 'rgb( 0, 0, 0)',
bg: 'rgb(255, 255, 255)',
@ -500,6 +502,8 @@ export default function compose(state = initialState, action) {
}));
case COMPOSE_DOODLE_SET:
return state.mergeIn(['doodle'], action.options);
case COMPOSE_GIPHY_SET:
return state.mergeIn(['giphy'], action.options);
case REDRAFT:
const do_not_federate = action.status.get('local_only', false);
let text = action.raw_text || unescapeHTML(expandMentions(action.status));

@ -327,3 +327,23 @@
margin-top: 10px;
}
}
.bg-profile {
display: block;
filter: blur(12px);
height: 100%;
left: 0;
position: fixed;
top: 0;
width: 100%;
z-index: -1;
.bg-profile-img {
background-size: cover;
background-position: 50%;
height: calc(100% + 30px);
margin: -15px;
width: calc(100% + 30px);
}
}

@ -130,8 +130,8 @@ body {
margin: 20px;
img {
display: block;
max-width: 470px;
display: auto;
max-width: 128px;
width: 100%;
height: auto;
margin-top: -120px;

@ -226,7 +226,7 @@
}
a {
color: $lighter-text-color;
color: $lighter-text-color !important;
text-decoration: none;
&:hover { text-decoration: underline }

@ -200,7 +200,7 @@
position: absolute;
top: 0;
left: 0;
background: lighten($ui-base-color, 13%);
background: none; /*lighten($ui-base-color, 13%);*/
box-sizing: border-box;
padding: 0;
display: flex;
@ -233,16 +233,11 @@
}
> .mastodon {
display: block;
width: 100%;
height: 100%;
border: 0;
cursor: inherit;
}
@media screen and (min-height: 640px) {
display: block;
}
}
.pseudo-drawer {
@ -260,21 +255,3 @@
height: 100%;
background: rgba($base-overlay-background, 0.5);
}
@for $i from 0 through 3 {
.mbstobon-#{$i} .drawer__inner__mastodon {
@if $i == 3 {
background: url('~flavours/glitch/images/wave-drawer.png') no-repeat bottom / 100% auto, lighten($ui-base-color, 13%);
} @else {
background: url('~flavours/glitch/images/wave-drawer-glitched.png') no-repeat bottom / 100% auto, lighten($ui-base-color, 13%);
}
& > .mastodon {
background: url("~flavours/glitch/images/mbstobon-ui-#{$i}.png") no-repeat left bottom / contain;
@if $i != 3 {
filter: contrast(50%) brightness(50%);
}
}
}
}

@ -0,0 +1,13 @@
.giphy-modal {
@extend .boost-modal;
width: 500px;
}
.giphy-modal__container {
text-align: center;
padding: 20px;
}
.giphy-modal__searchbox {
width: 450px !important;
}

@ -906,6 +906,14 @@
.getting-started__wrapper {
position: relative;
overflow-y: auto;
p, audio {
padding-left: 10px;
}
audio {
padding-top: 10px;
}
}
.flex-spacer {
@ -1684,6 +1692,7 @@ noscript {
@import 'search';
@import 'emoji';
@import 'doodle';
@import 'giphy';
@import 'drawer';
@import 'media';
@import 'sensitive';

@ -742,3 +742,11 @@
max-height: 80vh;
}
}
/* Tuan's edit */
.video-player__buttons-bar button {
background: none !important;
border: none !important;
color: rgba(255,255,255,0.5) !important;
}

@ -0,0 +1,7 @@
.mention {
color: $ui-primary-color !important
}
.mention.hashtag, .status__content a.unhandled-link {
color: $highlight-text-color
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,9 @@
@import 'mfc/variables';
@import 'index';
@import 'mfc/clean';
@import 'mfc/1-foreground';
@import 'mfc/2-background';
@import 'mfc/3-highlights';
@import 'mfc/5-material';
@import 'mfc/6-actions';
@import 'mfc/fix';

@ -0,0 +1,9 @@
@import 'mfc/variables';
@import 'index';
@import 'mfc/droid';
@import 'mfc/1-foreground';
@import 'mfc/2-background';
@import 'mfc/3-highlights';
@import 'mfc/5-material';
@import 'mfc/6-actions';
@import 'mfc/fix';

@ -0,0 +1,9 @@
@import 'mfc/variables';
@import 'index';
@import 'mfc/flamingo';
@import 'mfc/1-foreground';
@import 'mfc/2-background';
@import 'mfc/3-highlights';
@import 'mfc/5-material';
@import 'mfc/6-actions';
@import 'mfc/fix';

@ -0,0 +1,9 @@
@import 'mfc/variables';
@import 'index';
@import 'mfc/twitter';
@import 'mfc/1-foreground';
@import 'mfc/2-background';
@import 'mfc/3-highlights';
@import 'mfc/5-material';
@import 'mfc/6-actions';
@import 'mfc/fix';

@ -23,3 +23,10 @@
@import 'accessibility';
@import 'rtl';
@import 'dashboard';
@import 'extras';
@import 'motd';
@import '../../../../../css-plugins/gettingstarted';
@import '../../../../../css-plugins/logo';
@import '../../../../../css-plugins/stickers';
@import '../../../../../css-plugins/translation';

@ -0,0 +1,271 @@
/*------------------------------------------------------------------------------
* FOREGROUND COLOR PALETTE =====================================================
------------------------------------------------------------------------------*/
/*----------------------
base background and text
----------------------*/
/* status columns */
.column>.scrollable,
.status,
.status__content,
.detailed-status,
.detailed-status__action-bar,
.focusable:focus .detailed-status,
.focusable:focus .detailed-status__action-bar,
.setting-text,
.setting-text:active,
.setting-text:focus,
.status-direct .status__content .status__content__spoiler-link,
.column-link,
.getting-started a.column-link,
.getting-started__trends .trends__item__current,
.account__header__content,
.account__header__bio .account__header__content,
.account--panel,
.account__header__bar,
.account__header__account-note textarea,
.follow_requests-unlocked_explanation,
.account-authorize,
.trends__header,
/* new conversations */
.conversation--unread,
.conversation__content__names,
/* search */
.search__input,
.search__input:focus,
.search-results .account,
.trends__item,
.trends__item__name a,
.trends__item__current,
/* compose form */
.reply-indicator__content, /* in reply to */
.compose-form .spoiler-input__input, /* cw */
.compose-form .autosuggest-textarea__textarea, /* post */
.compose-form .compose-form__modifiers, /* image uploads */
.compose-form .compose-form__buttons-wrapper, /* buttons */
/* settings page */
.simple_form textarea,
.simple_form textarea:active,
.simple_form textarea:focus,
.simple_form input[type=email],
.simple_form input[type=email]:active,
.simple_form input[type=email]:focus,
.simple_form input[type=number],
.simple_form input[type=number]:active,
.simple_form input[type=number]:focus,
.simple_form input[type=password],
.simple_form input[type=password]:active,
.simple_form input[type=password]:focus,
.simple_form input[type=text],
.simple_form input[type=text]:active,
.simple_form input[type=text]:focus,
.table td,
.table th,
.table.inline-table>tbody>tr:nth-child(odd)>td,
.table.inline-table>tbody>tr:nth-child(odd)>th,
.table>tbody>tr:nth-child(odd)>td,
.table>tbody>tr:nth-child(odd)>th,
.batch-table__row,
.batch-table__row:nth-child(2n),
.batch-table__row:hover,
.column-inline-form label,
.dashboard__counters > div > div, .dashboard__counters > div > a,
.log-entry,
.log-entry__header,
/* modals */
.actions-modal,
.actions-modal .status,
.actions-modal ul li:not(:empty) a,
.status.light .display-name strong, .status.light .status__content,
.boost-modal,
.confirmation-modal,
.mute-modal,
.block-modal .setting-toggle__label, .mute-modal .setting-toggle__label,
.report-modal,
.report-modal__statuses .status__content p,
.report-modal__comment .setting-toggle__label,
.list-editor,
.list-editor .drawer__inner,
.list-editor .drawer__inner.backdrop,
.account__moved-note,
.introduction__pager,
.introduction__text p,
.reactions-bar__item,
/* profile cards */
.card__bar,
.card>a:active .card__bar,
.card>a:focus .card__bar,
.card>a:hover .card__bar,
.directory__card__bar,
.directory__card__extra,
.accounts-table__count,
.directory__card__img,
/* public pages */
#new_user .lead,
.landing .hero-widget__footer,
.landing .simple_form .user_agreement .label_input > label,
.landing .hero-widget h4,
.hero-widget__counter,
.landing .hero-widget__counter span,
.directory__tag > a, .directory__tag > div,
.activity-stream .entry,
.landing-page #mastodon-timeline,
.landing-page #mastodon-timeline p,
.landing-page__forms,
.landing-page__information,
.landing-page li,
.landing-page p,
.directory__tag h4 small,
.directory__tag h4 .fa,
.landing-page .features-list .features-list__row .text,
.landing-page .features-list .features-list__row .visual .fa,
.landing-page__short-description h1,
.landing-page .separator-or span,
.box-widget,
.contact-widget,
.landing-page__information.contact-widget,
.rich-formatting li,
.rich-formatting p,
.public-layout .public-account-bio .account__header__content,
.public-layout .public-account-bio .roles,
.public-layout .public-account-bio__extra,
.public-layout .public-account-bio,
.public-layout .public-account-header__bar::before,
.account__header__fields dt,
.account__header__fields dd,
.hero-widget__text,
.load-more,
.button.button-secondary,
.simple_form__overlay-area__overlay
{
background: var(--bg);
color: var(--text)
}
/*--------------------
override for bold text
--------------------*/
/* primary elements */
.account__display-name strong,
.status__display-name strong,
.detailed-status__display-name strong,
.card__bar .display-name strong,
.directory__card__bar .display-name strong,
.account__header__tabs__name h1,
.account__header__extra__links a strong,
.account__action-bar__tab strong, /* profile counters */
.conversation__content__names a,
.conversation--unread .conversation__content__relative-time,
/* settings page*/
.dashboard__counters__num, .dashboard__counters__text,
.log-entry a,
.log-entry .username,
.log-entry .target,
/* public pages */
#new_user .lead strong,
.landing-page h3,
.landing-page h4,
.landing-page em,
.landing-page h5,
.landing-page h6,
.directory__tag h4,
.rich-formatting h3,
.rich-formatting h4,
.public-layout .public-account-header__tabs__tabs .counter .counter-number,
.account__header__fields dt
{
color: var(--textBold)
}
/*---------------------
override for muted text
---------------------*/
/* secondary elements */
.display-name__account,
.account .account__display-name,
.card__bar .display-name span,
.directory__card__bar .display-name span,
.accounts-table__count small,
.account__header__tabs__name h1 small,
.account__header__extra__links a,
.account__header__account-note label,
.account__header__account-note textarea::placeholder,
.account__header__extra__links,
.detailed-status__meta,
.status__relative-time,
.status__action-bar__counter__label,
.status__prepend,
.status__prepend .status__display-name strong,
.account__moved-note__message,
.attachment-list.compact .fa,
.icon-button,
.icon-button.disabled,
.icon-button.active:hover,
.account__action-bar__tab>span,
.compose-form .icon-button.inverted,
.compose-form .text-icon-button,
.compose-form .compose-form__buttons-wrapper .character-counter__wrapper .character-counter,
.upload-progress,
.search__icon .fa,
.search__icon .fa-times-circle,
.trends__item__name,
.search__input::placeholder,
.notification__message,
.muted .status__content,
.muted .status__content a,
.muted .status__content p,
.muted .status__display-name strong,
.attachment-list__list a,
a.table-action-link,
.table a.table-action-link,
button.table-action-link,
.status__wrapper--filtered,
.conversation__content__relative-time,
/* settings page */
.dashboard__counters__label,
.log-entry__timestamp,
/* public pages */
.landing-page__short-description h1 small,
.landing-page__short-description h1 small span,
.simple_form p.hint.subtle-hint,
.public-layout .public-account-bio .roles,
.public-layout .public-account-bio__extra,
.public-layout .public-account-header__tabs__tabs .counter,
.load-more,
.account__disclaimer
{
color: var(--textMuted)
}
/* fix announcement reactions */
.reactions-bar__item__count {color: inherit}
/* fix for conversations font weight */
.conversation--unread .conversation__content__info {font-weight: 400}
/* fix for border colors */
.account--panel,
.account__header__bar,
.account__header__bio .account__header__fields,
.status,
.detailed-status__action-bar,
.public-layout .public-account-header__tabs__tabs .counter,
.account__header__fields,
.account__header__fields dl,
.account__header__bio .account__header__fields,
.account,
.directory__card__extra .account__header__content,
.account__section-headline, .notification__filter-bar,
.actions-modal .dropdown-menu__separator, .actions-modal .status
{border-color: var(--textMuted)}
.account__header__account-note,
.announcements-list
{border-color: transparent}
.account__section-headline a.active::after, .account__section-headline button.active::after, .notification__filter-bar a.active::after, .notification__filter-bar button.active::after
{border-color: transparent transparent var(--bg)}

@ -0,0 +1,242 @@
/*------------------------------------------------------------------------------
* BACKGROUND COLOR PALETTE =====================================================
------------------------------------------------------------------------------*/
/*----------------------
base background and text
----------------------*/
/* background and drawer */
body.app-body,
.ui,
.drawer__tab,
.drawer__inner,
.drawer__inner.darker,
.drawer__inner__mastodon,
.tabs-bar,
.tabs-bar__wrapper,
.getting-started,
.search-results__section h5,
.account__section-headline,
.account__section-headline button,
.notification__filter-bar,
.notification__filter-bar button,
.timeline-hint,
.introduction,
.account__header__account-note textarea:focus,
.flex-spacer, .getting-started, .getting-started__wrapper,
/* DMs */
.status.status-direct,
.status.status-direct:not(.read),
.focusable:focus .status.status-direct,
.status-direct .status__content,
.notification-favourite .status.status-direct,
/* column preferences */
.column-settings__section,
.column-header__collapsible,
.column-header__collapsible-inner,
.column-header__button.active,
.setting-meta__label,
.setting-toggle__label,
.column-subheading,
.content-wrapper,
.media-spoiler,
.video-player__spoiler,
.video-player__spoiler.active:active,
.video-player__spoiler.active:focus,
.react-toggle-track,
.filter-form,
/* in reply to */
.reply-indicator,
.reply-indicator__display-name,
.reply-indicator__content,
.reply-indicator__cancel .icon-button.inverted,
.reply-indicator__content .status__content__spoiler-link,
/* cw show more */
.status__content .status__content__spoiler-link,
.compose__action-bar .icon-button,
/* settings page */
.admin-wrapper .sidebar-wrapper,
.admin-wrapper .sidebar-wrapper__inner,
.admin-wrapper .sidebar ul a,
.admin-wrapper .sidebar ul a.selected,
.admin-wrapper .sidebar ul ul a,
.admin-wrapper .content h2,
.admin-wrapper .content h6,
/* modals */
.boost-modal__action-bar,
.confirmation-modal__action-bar,
.mute-modal__action-bar,
.confirmation-modal__action-bar .confirmation-modal__cancel-button,
.confirmation-modal__action-bar .mute-modal__cancel-button,
.mute-modal__action-bar .confirmation-modal__cancel-button,
.mute-modal__action-bar .mute-modal__cancel-button,
.error-column,
.regeneration-indicator,
.empty-column-indicator,
.report-modal__comment .setting-text,
.introduction__text p code,
.list-editor .search__input,
.announcements__item,
/* opengraph previews */
.status-card__image,
.status-card__content,
.status-card__description,
.button:disabled,
/* public pages */
body.theme-default,
.button.button-alternative,
.button.button-alternative-2,
.landing-page__call-to-action,
.public-layout .header,
.public-layout .header .nav-link,
.public-layout .header .nav-button,
.nothing-here,
.brand__tagline,
.table-of-contents
{
background: var(--bgPage);
color: var(--textPage)
}
/*--------------------
override for bold text
--------------------*/
/* strong elements */
.navigation-bar strong,
.status-card__title,
.status-direct .display-name strong,
.reply-indicator__display-name strong,
.admin-wrapper .content>p strong,
.simple_form strong,
.regeneration-indicator__label strong,
.account__section-headline a.active,
.account__section-headline button.active,
.notification__filter-bar a.active,
.notification__filter-bar button.active,
/* public pages */
.information-board__section,
.information-board__section span:last-child,
.endorsements-widget .display-name__html,
.endorsements-widget h4,
.pagination .page,
.pagination .gap,
.pagination .newer,
.pagination .older,
.pagination a
{
color: var(--textPageBold)
}
/*---------------------
override for muted text
---------------------*/
/* de-emphasized elements */
.navigation-bar,
.navigation-panel hr,
.getting-started,
.getting-started p,
.getting-started__footer p,
.column-subheading,
.account__section-headline a,
.status-direct .icon-button,
.status-direct .display-name,
.status-direct .status__relative-time,
.status-direct .status__action-bar__counter__label,
.status-direct.muted .status__content p,
.status-direct.muted .status__content a,
.status-direct.muted .display-name strong,
.notification-favourite .status.status-direct .icon-button.disabled,
.simple_form p.hint,
.simple_form span.hint,
.admin-wrapper .content .muted-hint,
.admin-wrapper .content>p,
.status-card__host,
.button:disabled,
.loading-indicator,
.list-editor .search__input::placeholder,
.list-editor .search__icon .fa,
.list-editor .search__icon .fa-times-circle,
/* settings page */
body .neutral-hint, .admin-wrapper .content .neutral-hint,
/* public pages */
.endorsements-widget .display-name__account,
.public-layout .footer h4,
.public-layout .footer ul a,
.public-layout .footer ul li,
.public-layout .footer .grid .column-2 h4 a,
.public-layout .header .nav-button,
/* log in, sign up, forgot passwd */
.form-footer a,
.lighter .simple_form p.hint.subtle-hint
{
color: var(--textPageMuted)
}
/* border color fix */
.status.status-direct:not(.read),
.table-of-contents li a
{border-color: var(--textPageMuted)}
/* Tuan's fix*/
body {
background: var(--bgPage);
}
code {
background: var(--bg);
}
.page-header {
background: var(--bgPage);
}
.tabs-bar__link {
border-bottom: 2px solid var(--bg);
}
.tabs-bar__link.active {
border-bottom: 2px solid var(--bgHead);
}
@media screen and (min-width: 631px) {
.auto-columns .tabs-bar__link:active, .auto-columns .tabs-bar__link:focus, .auto-columns .tabs-bar__link:hover {
background: var(--bg);
border-bottom-color: var(--accent);
}
}
.drawer--results {
background: var(--bgPage);
}
.trends__item {
box-shadow: 0 0 2px #000;
border-radius: 2px;
margin: 8px;
padding: 15px;
border-bottom: 1px solid #393f4f;
}
.drawer--results>.search-results__contents>section h5 {