Apply lipstick to hidden image design
This commit is contained in:
parent
daef5f7574
commit
4b0596b6b7
5 changed files with 71 additions and 38 deletions
|
@ -19,21 +19,6 @@ limitations under the License.
|
||||||
margin-right: 34px;
|
margin-right: 34px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_MImageBody_hidden {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
text-align: center;
|
|
||||||
border: 1px dashed $input-border-color;
|
|
||||||
|
|
||||||
// To center the text in the middle of the frame
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_MImageBody_thumbnail {
|
.mx_MImageBody_thumbnail {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
@ -74,3 +59,36 @@ limitations under the License.
|
||||||
color: $imagebody-giflabel-color;
|
color: $imagebody-giflabel-color;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_HiddenImagePlaceholder {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
|
||||||
|
// To center the text in the middle of the frame
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: $header-panel-bg-color;
|
||||||
|
|
||||||
|
.mx_HiddenImagePlaceholder_button {
|
||||||
|
color: $accent-color;
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EventTile:hover .mx_HiddenImagePlaceholder {
|
||||||
|
background-color: $primary-bg-color;
|
||||||
|
}
|
||||||
|
|
6
res/img/feather-customised/eye.svg
Normal file
6
res/img/feather-customised/eye.svg
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="14" viewBox="0 0 18 14">
|
||||||
|
<g fill="none" fill-rule="evenodd" stroke="#03B381" stroke-linecap="round" stroke-linejoin="round" transform="translate(1 1)">
|
||||||
|
<path d="M0 6s3-6 8.25-6 8.25 6 8.25 6-3 6-8.25 6S0 6 0 6z"/>
|
||||||
|
<circle cx="8.25" cy="6" r="2.25"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 345 B |
|
@ -346,11 +346,7 @@ export default class MImageBody extends React.Component {
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
if (!this.state.showImage) {
|
if (!this.state.showImage) {
|
||||||
imageElement = (
|
imageElement = <HiddenImagePlaceholder />;
|
||||||
<div className="mx_MImageBody_hidden">
|
|
||||||
<span>{_t("Click to show image")}</span>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return this.wrapImage(contentUrl, imageElement);
|
return this.wrapImage(contentUrl, imageElement);
|
||||||
}
|
}
|
||||||
|
@ -381,7 +377,7 @@ export default class MImageBody extends React.Component {
|
||||||
placeholder = this.getPlaceholder();
|
placeholder = this.getPlaceholder();
|
||||||
}
|
}
|
||||||
|
|
||||||
const showPlaceholder = Boolean(placeholder);
|
let showPlaceholder = Boolean(placeholder);
|
||||||
|
|
||||||
if (thumbUrl && !this.state.imgError) {
|
if (thumbUrl && !this.state.imgError) {
|
||||||
// Restrict the width of the thumbnail here, otherwise it will fill the container
|
// Restrict the width of the thumbnail here, otherwise it will fill the container
|
||||||
|
@ -396,13 +392,11 @@ export default class MImageBody extends React.Component {
|
||||||
onMouseEnter={this.onImageEnter}
|
onMouseEnter={this.onImageEnter}
|
||||||
onMouseLeave={this.onImageLeave} />
|
onMouseLeave={this.onImageLeave} />
|
||||||
);
|
);
|
||||||
if (!this.state.showImage) {
|
|
||||||
img = (
|
|
||||||
<div style={{ maxWidth: maxWidth + "px" }} className="mx_MImageBody_hidden">
|
|
||||||
<span>{_t("Click to show image")}</span>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!this.state.showImage) {
|
||||||
|
img = <HiddenImagePlaceholder style={{ maxWidth: maxWidth + "px" }} />;
|
||||||
|
showPlaceholder = false; // because we're hiding the image, so don't show the sticker icon.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._isGif() && !SettingsStore.getValue("autoplayGifsAndVideos") && !this.state.hover) {
|
if (this._isGif() && !SettingsStore.getValue("autoplayGifsAndVideos") && !this.state.hover) {
|
||||||
|
@ -488,3 +482,22 @@ export default class MImageBody extends React.Component {
|
||||||
</span>;
|
</span>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class HiddenImagePlaceholder extends React.PureComponent {
|
||||||
|
static propTypes = {
|
||||||
|
hover: PropTypes.bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
let className = 'mx_HiddenImagePlaceholder';
|
||||||
|
if (this.props.hover) className += ' mx_HiddenImagePlaceholder_hover';
|
||||||
|
return (
|
||||||
|
<div className={className}>
|
||||||
|
<div className='mx_HiddenImagePlaceholder_button'>
|
||||||
|
<img src={require("../../../../res/img/feather-customised/eye.svg")} width={17} height={12} />
|
||||||
|
<span>{_t("Show image")}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -33,20 +33,16 @@ export default class MStickerBody extends MImageBody {
|
||||||
// MStickerBody doesn't need a wrapping `<a href=...>`, but it does need extra padding
|
// MStickerBody doesn't need a wrapping `<a href=...>`, but it does need extra padding
|
||||||
// which is added by mx_MStickerBody_wrapper
|
// which is added by mx_MStickerBody_wrapper
|
||||||
wrapImage(contentUrl, children) {
|
wrapImage(contentUrl, children) {
|
||||||
return <div className="mx_MStickerBody_wrapper"> { children } </div>;
|
let onClick = null;
|
||||||
|
if (!this.state.showImage) {
|
||||||
|
onClick = this.onClick;
|
||||||
|
}
|
||||||
|
return <div className="mx_MStickerBody_wrapper" onClick={onClick}> { children } </div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Placeholder to show in place of the sticker image if
|
// Placeholder to show in place of the sticker image if
|
||||||
// img onLoad hasn't fired yet.
|
// img onLoad hasn't fired yet.
|
||||||
getPlaceholder() {
|
getPlaceholder() {
|
||||||
if (!this.state.showImage) {
|
|
||||||
return (
|
|
||||||
<a className="mx_MStickerBody_hidden" onClick={this.onClick} href="#">
|
|
||||||
<span>{_t("Click to show sticker")}</span>
|
|
||||||
</a>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const TintableSVG = sdk.getComponent('elements.TintableSvg');
|
const TintableSVG = sdk.getComponent('elements.TintableSvg');
|
||||||
return <TintableSVG src={require("../../../../res/img/icons-show-stickers.svg")} width="75" height="75" />;
|
return <TintableSVG src={require("../../../../res/img/icons-show-stickers.svg")} width="75" height="75" />;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1036,8 +1036,8 @@
|
||||||
"Decrypt %(text)s": "Decrypt %(text)s",
|
"Decrypt %(text)s": "Decrypt %(text)s",
|
||||||
"Download %(text)s": "Download %(text)s",
|
"Download %(text)s": "Download %(text)s",
|
||||||
"Invalid file%(extra)s": "Invalid file%(extra)s",
|
"Invalid file%(extra)s": "Invalid file%(extra)s",
|
||||||
"Click to show image": "Click to show image",
|
|
||||||
"Error decrypting image": "Error decrypting image",
|
"Error decrypting image": "Error decrypting image",
|
||||||
|
"Show image": "Show image",
|
||||||
"Click to show sticker": "Click to show sticker",
|
"Click to show sticker": "Click to show sticker",
|
||||||
"Error decrypting video": "Error decrypting video",
|
"Error decrypting video": "Error decrypting video",
|
||||||
"Agree": "Agree",
|
"Agree": "Agree",
|
||||||
|
|
Loading…
Reference in a new issue