From 2e3640ecbb9050405f9bcfefc9ae92ebbffd23cd Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 17 Apr 2019 14:23:36 +0200 Subject: Accept richer text from remote statuses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Support abbr, del, pre, blockquote, code, strong, b, em, i, and h1…h5 HTML elements in remote statuses, add corresponding CSS. --- .../flavours/glitch/styles/components/status.scss | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index b73dd3d09..ce07bd64a 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -22,7 +22,7 @@ margin: -3px 0 0; } - p { + p, pre, blockquote { margin-bottom: 20px; white-space: pre-wrap; @@ -31,6 +31,33 @@ } } + h1, h2, h3, h4, h5 { + margin-top: 20px; + margin-bottom: 20px; + } + + h1, h2 { + font-weight: 500; + font-size: 18px; + } + + h2 { + font-size: 16px; + } + + blockquote { + margin-left: 20px; + color: $dark-text-color; + } + + b, strong { + font-weight: 500; + } + + em, i { + font-style: italic; + } + a { color: $secondary-text-color; text-decoration: none; -- cgit From 659f972bed63d9e8f18791ba4e0f779169f5fb4e Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Sun, 21 Apr 2019 21:44:31 +0200 Subject: Do not switch to italic for status media buttons --- .../flavours/glitch/components/status_content.js | 4 ++- .../flavours/glitch/styles/components/status.scss | 42 +++++++++++----------- 2 files changed, 25 insertions(+), 21 deletions(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js index ae14c949a..fc11b8091 100644 --- a/app/javascript/flavours/glitch/components/status_content.js +++ b/app/javascript/flavours/glitch/components/status_content.js @@ -213,6 +213,7 @@ export default class StatusContent extends React.PureComponent { style={directionStyle} tabIndex={!hidden ? 0 : null} dangerouslySetInnerHTML={content} + className='status__text' lang={status.get('language')} /> {media} @@ -233,6 +234,7 @@ export default class StatusContent extends React.PureComponent { ref={this.setRef} dangerouslySetInnerHTML={content} lang={status.get('language')} + className='status__text' tabIndex='0' /> {media} @@ -245,7 +247,7 @@ export default class StatusContent extends React.PureComponent { style={directionStyle} tabIndex='0' > -
+
{media}
); diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index ce07bd64a..91467c886 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -31,31 +31,33 @@ } } - h1, h2, h3, h4, h5 { - margin-top: 20px; - margin-bottom: 20px; - } + .status__text { + h1, h2, h3, h4, h5 { + margin-top: 20px; + margin-bottom: 20px; + } - h1, h2 { - font-weight: 500; - font-size: 18px; - } + h1, h2 { + font-weight: 500; + font-size: 18px; + } - h2 { - font-size: 16px; - } + h2 { + font-size: 16px; + } - blockquote { - margin-left: 20px; - color: $dark-text-color; - } + blockquote { + margin-left: 20px; + color: $dark-text-color; + } - b, strong { - font-weight: 500; - } + b, strong { + font-weight: 500; + } - em, i { - font-style: italic; + em, i { + font-style: italic; + } } a { -- cgit From 27e8354914cb9f6725c911d5825399fc265852fe Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Sun, 21 Apr 2019 22:04:19 +0200 Subject: Add support for lists in statuses --- app/javascript/flavours/glitch/styles/components/status.scss | 12 ++++++++++++ app/lib/sanitize_config.rb | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index 91467c886..c09e3398d 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -58,6 +58,18 @@ em, i { font-style: italic; } + + ul, ol { + margin-left: 1em; + } + + ul { + list-style-type: disc; + } + + ol { + list-style-type: decimal; + } } a { diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize_config.rb index 7c376c412..0a87bf6df 100644 --- a/app/lib/sanitize_config.rb +++ b/app/lib/sanitize_config.rb @@ -20,7 +20,7 @@ class Sanitize end MASTODON_STRICT ||= freeze_config( - elements: %w(p br span a abbr del pre blockquote code b strong i em h1 h2 h3 h4 h5), + elements: %w(p br span a abbr del pre blockquote code b strong i em h1 h2 h3 h4 h5 ul ol li), attributes: { 'a' => %w(href rel class title), -- cgit From ef249a2718f69be4d73ee81f5e3ca523f7a45e1b Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:27:44 +0200 Subject: Rename status__text to status__content__text for consistency with upstream --- app/javascript/flavours/glitch/components/status_content.js | 6 +++--- app/javascript/flavours/glitch/styles/components/status.scss | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/components/status_content.js b/app/javascript/flavours/glitch/components/status_content.js index fc11b8091..07a0d1d5d 100644 --- a/app/javascript/flavours/glitch/components/status_content.js +++ b/app/javascript/flavours/glitch/components/status_content.js @@ -213,7 +213,7 @@ export default class StatusContent extends React.PureComponent { style={directionStyle} tabIndex={!hidden ? 0 : null} dangerouslySetInnerHTML={content} - className='status__text' + className='status__content__text' lang={status.get('language')} /> {media} @@ -234,7 +234,7 @@ export default class StatusContent extends React.PureComponent { ref={this.setRef} dangerouslySetInnerHTML={content} lang={status.get('language')} - className='status__text' + className='status__content__text' tabIndex='0' /> {media} @@ -247,7 +247,7 @@ export default class StatusContent extends React.PureComponent { style={directionStyle} tabIndex='0' > -
+
{media}
); diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index c09e3398d..9fe3aa349 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -31,7 +31,7 @@ } } - .status__text { + .status__content__text { h1, h2, h3, h4, h5 { margin-top: 20px; margin-bottom: 20px; -- cgit From 5a8495dabe8ab9571bc028bc02ddc9372275b1f5 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:28:33 +0200 Subject: Remove margins around `p` tags in lists --- app/javascript/flavours/glitch/styles/components/status.scss | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index 9fe3aa349..c1afe0832 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -61,6 +61,10 @@ ul, ol { margin-left: 1em; + + p { + margin: 0; + } } ul { -- cgit From 9b86707b1e15c1fbfee408f1199cc96156d5c0f0 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:29:25 +0200 Subject: Make bold text bolder --- app/javascript/flavours/glitch/styles/components/status.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index c1afe0832..65a41e947 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -52,7 +52,7 @@ } b, strong { - font-weight: 500; + font-weight: 700; } em, i { -- cgit From 3631c3314a7708f1e29e7d1b0fbc6cbb3d802af3 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:30:55 +0200 Subject: Remove extra margin in paragraphs inside blockquotes --- app/javascript/flavours/glitch/styles/components/status.scss | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index 65a41e947..f16b43186 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -49,6 +49,10 @@ blockquote { margin-left: 20px; color: $dark-text-color; + + p:last-child { + margin-bottom: 0; + } } b, strong { -- cgit From 8753e5317fb77ac25a120b1baba7043ded9106b9 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:31:50 +0200 Subject: Better distinguish titles from text --- app/javascript/flavours/glitch/styles/components/status.scss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index f16b43186..f91fb2027 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -38,7 +38,7 @@ } h1, h2 { - font-weight: 500; + font-weight: 700; font-size: 18px; } @@ -46,6 +46,10 @@ font-size: 16px; } + h3, h4, h5 { + font-weight: 500; + } + blockquote { margin-left: 20px; color: $dark-text-color; -- cgit From e4b65e6349bf7fa6ca2cdb45c9d0169a6727b9b7 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 18:42:17 +0200 Subject: Redesign blockquote styling --- app/javascript/flavours/glitch/styles/components/status.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index f91fb2027..ef4e113dd 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -51,8 +51,10 @@ } blockquote { - margin-left: 20px; - color: $dark-text-color; + padding-left: 10px; + border-left: 3px solid $darker-text-color; + color: $darker-text-color; + white-space: normal; p:last-child { margin-bottom: 0; -- cgit From b13c90f3e35cd2ed3d6cfee218b8a8ec62c3b131 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Wed, 24 Apr 2019 20:30:02 +0200 Subject: Fix color of muted statuses content not wrapped in a p tag --- app/javascript/flavours/glitch/styles/components/status.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index ef4e113dd..889bcaec0 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -647,7 +647,8 @@ .muted { .status__content p, - .status__content a { + .status__content a, + .status__content_text { color: $dark-text-color; } -- cgit From 3e095cab83f3e88c5f5f4ca9d7029379ed5b5b56 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Mon, 29 Apr 2019 19:00:27 +0200 Subject: Add support for missing formatting tags --- app/javascript/flavours/glitch/styles/components/status.scss | 5 +++++ app/lib/sanitize_config.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index 889bcaec0..b656f0baf 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -69,6 +69,11 @@ font-style: italic; } + sub { + font-size: smaller; + text-align: sub; + } + ul, ol { margin-left: 1em; diff --git a/app/lib/sanitize_config.rb b/app/lib/sanitize_config.rb index 0a87bf6df..23d0a418f 100644 --- a/app/lib/sanitize_config.rb +++ b/app/lib/sanitize_config.rb @@ -20,7 +20,7 @@ class Sanitize end MASTODON_STRICT ||= freeze_config( - elements: %w(p br span a abbr del pre blockquote code b strong i em h1 h2 h3 h4 h5 ul ol li), + elements: %w(p br span a abbr del pre blockquote code b strong u sub i em h1 h2 h3 h4 h5 ul ol li), attributes: { 'a' => %w(href rel class title), -- cgit From ccf4f3240ae80f4b1410d816f03d0bef33062a71 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 27 Apr 2019 03:24:09 +0200 Subject: [Glitch] Add blurhash Port front-end changes from fba96c808d25d2fc35ec63ee6745a1e55a95d707 to glitch-soc Signed-off-by: Thibaut Girka --- .../flavours/glitch/components/media_gallery.js | 107 ++++++++++++++------- .../flavours/glitch/components/status.js | 1 + .../features/report/components/status_check_box.js | 1 + .../features/status/components/detailed_status.js | 1 + .../glitch/features/ui/components/media_modal.js | 1 + .../glitch/features/ui/components/video_modal.js | 1 + .../flavours/glitch/features/video/index.js | 48 +++++++-- .../flavours/glitch/styles/components/index.scss | 44 ++++++++- .../flavours/glitch/styles/components/media.scss | 17 ++++ .../flavours/glitch/styles/components/status.scss | 9 +- 10 files changed, 179 insertions(+), 51 deletions(-) (limited to 'app/javascript/flavours/glitch/styles/components/status.scss') diff --git a/app/javascript/flavours/glitch/components/media_gallery.js b/app/javascript/flavours/glitch/components/media_gallery.js index b7360bae4..d1dde45b1 100644 --- a/app/javascript/flavours/glitch/components/media_gallery.js +++ b/app/javascript/flavours/glitch/components/media_gallery.js @@ -7,6 +7,7 @@ import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { isIOS } from 'flavours/glitch/util/is_mobile'; import classNames from 'classnames'; import { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state'; +import { decode } from 'blurhash'; const messages = defineMessages({ hidden: { @@ -41,6 +42,7 @@ class Item extends React.PureComponent { letterbox: PropTypes.bool, onClick: PropTypes.func.isRequired, displayWidth: PropTypes.number, + visible: PropTypes.bool.isRequired, }; static defaultProps = { @@ -49,6 +51,10 @@ class Item extends React.PureComponent { size: 1, }; + state = { + loaded: false, + }; + handleMouseEnter = (e) => { if (this.hoverToPlay()) { e.target.play(); @@ -82,8 +88,40 @@ class Item extends React.PureComponent { e.stopPropagation(); } + componentDidMount () { + if (this.props.attachment.get('blurhash')) { + this._decode(); + } + } + + componentDidUpdate (prevProps) { + if (prevProps.attachment.get('blurhash') !== this.props.attachment.get('blurhash') && this.props.attachment.get('blurhash')) { + this._decode(); + } + } + + _decode () { + const hash = this.props.attachment.get('blurhash'); + const pixels = decode(hash, 32, 32); + + if (pixels) { + const ctx = this.canvas.getContext('2d'); + const imageData = new ImageData(pixels, 32, 32); + + ctx.putImageData(imageData, 0, 0); + } + } + + setCanvasRef = c => { + this.canvas = c; + } + + handleImageLoad = () => { + this.setState({ loaded: true }); + } + render () { - const { attachment, index, size, standalone, letterbox, displayWidth } = this.props; + const { attachment, index, size, standalone, letterbox, displayWidth, visible } = this.props; let width = 50; let height = 100; @@ -136,12 +174,20 @@ class Item extends React.PureComponent { let thumbnail = ''; - if (attachment.get('type') === 'image') { + if (attachment.get('type') === 'unknown') { + return ( +
+ + + +
+ ); + } else if (attachment.get('type') === 'image') { const previewUrl = attachment.get('preview_url'); const previewWidth = attachment.getIn(['meta', 'small', 'width']); - const originalUrl = attachment.get('url'); - const originalWidth = attachment.getIn(['meta', 'original', 'width']); + const originalUrl = attachment.get('url'); + const originalWidth = attachment.getIn(['meta', 'original', 'width']); const hasSize = typeof originalWidth === 'number' && typeof previewWidth === 'number'; @@ -168,6 +214,7 @@ class Item extends React.PureComponent { alt={attachment.get('description')} title={attachment.get('description')} style={{ objectPosition: letterbox ? null : `${x}% ${y}%` }} + onLoad={this.handleImageLoad} /> ); @@ -197,7 +244,8 @@ class Item extends React.PureComponent { return (
- {thumbnail} + + {visible && thumbnail}
); } @@ -257,6 +305,7 @@ export default class MediaGallery extends React.PureComponent { this.node = node; if (node && node.offsetWidth && node.offsetWidth != this.state.width) { if (this.props.cacheWidth) this.props.cacheWidth(node.offsetWidth); + this.setState({ width: node.offsetWidth, }); @@ -275,7 +324,7 @@ export default class MediaGallery extends React.PureComponent { const width = this.state.width || defaultWidth; - let children; + let children, spoilerButton; const style = {}; @@ -289,40 +338,32 @@ export default class MediaGallery extends React.PureComponent { return (
); } - if (!visible) { - let warning = ; + if (this.isStandaloneEligible()) { + children = ; + } else { + children = media.take(4).map((attachment, i) => ); + } - children = ( - ); - } else { - if (this.isStandaloneEligible()) { - children = ; - } else { - children = media.take(4).map((attachment, i) => ); - } } return (
- {visible ? ( -
- - {sensitive ? ( - - - - ) : null} -
- ) : null} +
+ {spoilerButton} + {visible && sensitive && ( + + + + )} +
{children}
diff --git a/app/javascript/flavours/glitch/components/status.js b/app/javascript/flavours/glitch/components/status.js index 94297260b..5f10e0c52 100644 --- a/app/javascript/flavours/glitch/components/status.js +++ b/app/javascript/flavours/glitch/components/status.js @@ -479,6 +479,7 @@ export default class Status extends ImmutablePureComponent { {Component => ( (