diff --git a/app/javascript/mastodon/actions/picture_in_picture.js b/app/javascript/mastodon/actions/picture_in_picture.js
index 4085cb59e..33d8d57d4 100644
--- a/app/javascript/mastodon/actions/picture_in_picture.js
+++ b/app/javascript/mastodon/actions/picture_in_picture.js
@@ -22,13 +22,20 @@ export const PICTURE_IN_PICTURE_REMOVE = 'PICTURE_IN_PICTURE_REMOVE';
* @param {MediaProps} props
* @return {object}
*/
-export const deployPictureInPicture = (statusId, accountId, playerType, props) => ({
- type: PICTURE_IN_PICTURE_DEPLOY,
- statusId,
- accountId,
- playerType,
- props,
-});
+export const deployPictureInPicture = (statusId, accountId, playerType, props) => {
+ return (dispatch, getState) => {
+ // Do not open a player for a toot that does not exist
+ if (getState().hasIn(['statuses', statusId])) {
+ dispatch({
+ type: PICTURE_IN_PICTURE_DEPLOY,
+ statusId,
+ accountId,
+ playerType,
+ props,
+ });
+ }
+ };
+};
/*
* @return {object}
diff --git a/app/javascript/mastodon/reducers/picture_in_picture.js b/app/javascript/mastodon/reducers/picture_in_picture.js
index 06cd8c5e8..48772ae7f 100644
--- a/app/javascript/mastodon/reducers/picture_in_picture.js
+++ b/app/javascript/mastodon/reducers/picture_in_picture.js
@@ -1,4 +1,5 @@
import { PICTURE_IN_PICTURE_DEPLOY, PICTURE_IN_PICTURE_REMOVE } from 'mastodon/actions/picture_in_picture';
+import { TIMELINE_DELETE } from '../actions/timelines';
const initialState = {
statusId: null,
@@ -16,6 +17,8 @@ export default function pictureInPicture(state = initialState, action) {
return { statusId: action.statusId, accountId: action.accountId, type: action.playerType, ...action.props };
case PICTURE_IN_PICTURE_REMOVE:
return { ...initialState };
+ case TIMELINE_DELETE:
+ return (state.statusId === action.id) ? { ...initialState } : state;
default:
return state;
}
diff --git a/app/javascript/styles/mastodon/boost.scss b/app/javascript/styles/mastodon/boost.scss
index fb1451cb2..2969958e2 100644
--- a/app/javascript/styles/mastodon/boost.scss
+++ b/app/javascript/styles/mastodon/boost.scss
@@ -28,5 +28,17 @@ button.icon-button {
i.fa-retweet {
background-image: url("data:image/svg+xml;utf8,");
}
+
+ &.reblogPrivate {
+ i.fa-retweet {
+ background-image: url("data:image/svg+xml;utf8,");
+ }
+ }
+
+ &.disabled {
+ i.fa-retweet {
+ background-image: url("data:image/svg+xml;utf8,");
+ }
+ }
}
}
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index 2ca844076..33f1e2989 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -4732,6 +4732,13 @@ a.status-card.compact:hover {
background: rgba($gold-star, 0.3);
}
}
+
+ &.disabled {
+ color: $white;
+ background-color: transparent;
+ cursor: default;
+ opacity: 0.4;
+ }
}
}
}
diff --git a/config/webpack/production.js b/config/webpack/production.js
index f1d0dabae..cd3d01035 100644
--- a/config/webpack/production.js
+++ b/config/webpack/production.js
@@ -43,7 +43,7 @@ module.exports = merge(sharedConfig, {
plugins: [
new CompressionPlugin({
- filename: '[path].gz[query]',
+ filename: '[path][base].gz[query]',
cache: true,
test: /\.(js|css|html|json|ico|svg|eot|otf|ttf|map)$/,
}),