Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Editor: Make mime type config less confusing #10709

Merged
merged 58 commits into from
Mar 10, 2022
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
bba80b3
Remove lots of mime properties.
spacedmonkey Feb 24, 2022
6b94fe0
useMemo.
spacedmonkey Feb 24, 2022
8d99e78
Fix keys.
spacedmonkey Feb 25, 2022
3506908
Remove unused method.
spacedmonkey Feb 25, 2022
132328c
More usememos.
spacedmonkey Feb 25, 2022
34459e0
Add new `getExtensionsFromMimeType` function (#10718)
swissspidy Feb 25, 2022
51dd3bf
Break vector into it's own group.
spacedmonkey Feb 25, 2022
a94862e
Handle mime types in one place.
spacedmonkey Feb 25, 2022
106614f
Don't allow audio and text to hotlinked.
spacedmonkey Feb 25, 2022
5703004
Fix lints
spacedmonkey Feb 28, 2022
8aade45
Merge branch 'main' into try/mime-type-tidy-up
spacedmonkey Feb 28, 2022
09b5008
Improved php logic and fixed tests.
spacedmonkey Feb 28, 2022
fe5cf19
Tidy up php logic of test.
spacedmonkey Feb 28, 2022
a7cbb41
Add unit tests for multisite.
spacedmonkey Feb 28, 2022
ef7b182
Fixes for js unit tests.
spacedmonkey Feb 28, 2022
643de93
Add vector to allowed list.
spacedmonkey Feb 28, 2022
c16e3a8
Update fixtures
spacedmonkey Feb 28, 2022
49b8d54
Fix lints.
spacedmonkey Feb 28, 2022
f4785bf
Remove lots of mime properties.
spacedmonkey Feb 24, 2022
df44baf
useMemo.
spacedmonkey Feb 24, 2022
1828e27
Fix keys.
spacedmonkey Feb 25, 2022
6cf2a97
Remove unused method.
spacedmonkey Feb 25, 2022
7e091fd
More usememos.
spacedmonkey Feb 25, 2022
46aebb2
Add new `getExtensionsFromMimeType` function (#10718)
swissspidy Feb 25, 2022
ff4d401
Break vector into it's own group.
spacedmonkey Feb 25, 2022
110ce68
Handle mime types in one place.
spacedmonkey Feb 25, 2022
49a8236
Don't allow audio and text to hotlinked.
spacedmonkey Feb 25, 2022
9e5aec7
Fix lints
spacedmonkey Feb 28, 2022
ef44774
Improved php logic and fixed tests.
spacedmonkey Feb 28, 2022
367706b
Tidy up php logic of test.
spacedmonkey Feb 28, 2022
0977b59
Add unit tests for multisite.
spacedmonkey Feb 28, 2022
80f9dfe
Fixes for js unit tests.
spacedmonkey Feb 28, 2022
2d4c5d4
Add vector to allowed list.
spacedmonkey Feb 28, 2022
7dd5ab6
Update fixtures
spacedmonkey Feb 28, 2022
186e0db
Fix lints.
spacedmonkey Feb 28, 2022
e0df21e
Merge branch 'try/mime-type-tidy-up' of github.com:google/web-stories…
spacedmonkey Feb 28, 2022
7249292
Merge branch 'main' into try/mime-type-tidy-up
spacedmonkey Mar 2, 2022
0c8cf44
Merge branch 'try/mime-type-tidy-up' of github.com:google/web-stories…
spacedmonkey Mar 2, 2022
59fc07b
Change method name.
spacedmonkey Mar 2, 2022
29f363e
Skip test on multisite.
spacedmonkey Mar 2, 2022
64b3f2c
Change text to caption.
spacedmonkey Mar 2, 2022
60b1307
Unused variable.
spacedmonkey Mar 2, 2022
ae6bd56
Rename variables.
spacedmonkey Mar 2, 2022
0c3ca6c
Merge branch 'main' into try/mime-type-tidy-up
spacedmonkey Mar 3, 2022
69f603a
Update includes/REST_API/Hotlinking_Controller.php
spacedmonkey Mar 4, 2022
71e1eb7
Change variable name.
spacedmonkey Mar 4, 2022
e515290
Space and tabs.
spacedmonkey Mar 4, 2022
6a50936
Space and tabs again.
spacedmonkey Mar 4, 2022
1aeff8d
Merge branch 'main' into try/mime-type-tidy-up
spacedmonkey Mar 4, 2022
949c998
Merge branch 'main' into try/mime-type-tidy-up
swissspidy Mar 9, 2022
44c6aaf
Use tabs
swissspidy Mar 9, 2022
ce22739
Apply suggestions from code review
spacedmonkey Mar 9, 2022
d9657bc
Tweak logic.
spacedmonkey Mar 9, 2022
d1cb9c6
Default to empty array.
spacedmonkey Mar 9, 2022
300025f
Merge branch 'main' into try/mime-type-tidy-up
spacedmonkey Mar 9, 2022
5259e55
Update fixtures.
spacedmonkey Mar 9, 2022
c5835ed
Merge remote-tracking branch 'origin/try/mime-type-tidy-up' into try/…
spacedmonkey Mar 9, 2022
b95b4e4
Fix karma tests.
spacedmonkey Mar 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 5 additions & 10 deletions includes/Admin/Editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,11 @@ public function get_editor_settings(): array {
$user = wp_get_current_user();

/** This filter is documented in wp-admin/includes/post.php */
$show_locked_dialog = apply_filters( 'show_post_locked_dialog', true, $post, $user );
$nonce = wp_create_nonce( 'wp_rest' );
$mime_types = $this->types->get_allowed_mime_types();
$image_mime_types = $this->types->get_allowed_image_mime_types();
$audio_mime_types = $this->types->get_allowed_audio_mime_types();
$show_locked_dialog = apply_filters( 'show_post_locked_dialog', true, $post, $user );
$nonce = wp_create_nonce( 'wp_rest' );
$mime_types = $this->types->get_allowed_mime_types();
$mime_types['ws_image'] = $this->types->get_allowed_image_mime_types();
spacedmonkey marked this conversation as resolved.
Show resolved Hide resolved
$mime_types['audio'] = $this->types->get_allowed_audio_mime_types();

$story = new Story();
$story->load_from_post( $post );
Expand All @@ -357,11 +357,6 @@ public function get_editor_settings(): array {
'autoSaveInterval' => \defined( 'AUTOSAVE_INTERVAL' ) ? AUTOSAVE_INTERVAL : null,
'isRTL' => is_rtl(),
'locale' => $this->locale->get_locale_settings(),
'allowedFileTypes' => $this->types->get_allowed_file_types(),
'allowedImageFileTypes' => $this->types->get_file_type_exts( $image_mime_types ),
'allowedImageMimeTypes' => $image_mime_types,
'allowedAudioFileTypes' => $this->types->get_file_type_exts( $audio_mime_types ),
'allowedAudioMimeTypes' => $audio_mime_types,
'allowedMimeTypes' => $mime_types,
'postType' => $this->story_post_type->get_slug(),
'storyId' => $story_id,
Expand Down
21 changes: 0 additions & 21 deletions includes/Media/Types.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,6 @@
* Class Types
*/
class Types {
/**
* Returns a list of allowed file types.
*
* @since 1.0.0
*
* @return array List of allowed file types.
*/
public function get_allowed_file_types(): array {
$allowed_mime_types = $this->get_allowed_mime_types();
$mime_types = [];

foreach ( $allowed_mime_types as $mimes ) {
// Otherwise this throws a warning on PHP < 7.3.
if ( ! empty( $mimes ) ) {
array_push( $mime_types, ...$mimes );
}
}

return $this->get_file_type_exts( $mime_types );
}

/**
* Returns a list of allowed file types.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,6 @@ describe('useQuickActions', () => {
useStoryTriggersDispatch.mockReturnValue(mockDispatchStoryEvent);

mockUseConfig.mockReturnValue({
allowedFileTypes: [],
allowedMimeTypes: {
image: [],
video: [],
Expand Down Expand Up @@ -1004,7 +1003,6 @@ describe('MediaPicker', () => {
});

mockUseConfig.mockReturnValue({
allowedFileTypes: ['pepperoni', 'cheese'],
allowedMimeTypes: {
image: ['image/gif'],
video: ['muted'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ import {
Icons,
} from '@googleforcreators/design-system';
import { trackEvent } from '@googleforcreators/tracking';
import { resourceList } from '@googleforcreators/media';
import {
resourceList,
getExtensionFromMimeType,
} from '@googleforcreators/media';

/**
* Internal dependencies
Expand Down Expand Up @@ -68,7 +71,6 @@ const {

export const MediaPicker = ({ render, ...props }) => {
const {
allowedFileTypes,
allowedMimeTypes: {
image: allowedImageMimeTypes,
video: allowedVideoMimeTypes,
Expand Down Expand Up @@ -110,7 +112,17 @@ export const MediaPicker = ({ render, ...props }) => {
const { showSnackbar } = useSnackbar();

// Media Upload Props
let allowedMimeTypes = [...allowedImageMimeTypes, ...allowedVideoMimeTypes];
let allowedMimeTypes = useMemo(
() => [...allowedImageMimeTypes, ...allowedVideoMimeTypes],
[allowedImageMimeTypes, allowedVideoMimeTypes]
);
const allowedFileTypes = useMemo(
() =>
allowedMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedMimeTypes]
);
if (isTranscodingEnabled) {
allowedMimeTypes = allowedMimeTypes.concat(TRANSCODABLE_MIME_TYPES);
}
Expand Down
15 changes: 4 additions & 11 deletions packages/story-editor/src/app/uploader/test/useUploader.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,9 @@ function setup(args) {
'image/gif',
'image/webp',
],
ws_image: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
video: ['video/mp4', 'video/webm'],
},
allowedFileTypes: ['png', 'jpeg', 'jpg', 'gif', 'mp4', 'webp', 'webm'],
allowedImageFileTypes: ['gif', 'jpe', 'jpeg', 'jpg', 'png'],
allowedImageMimeTypes: [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
],
maxUpload: 104857600,
capabilities: {
hasUploadMediaAction: true,
Expand Down Expand Up @@ -118,7 +111,7 @@ describe('useUploader', () => {
await expect(() =>
validateFileForUpload({ size: 20000, type: 'video/quicktime' })
).toThrow(
'Please choose only png, jpeg, jpg, gif, mp4, webp, or webm to upload.'
'Please choose only png, jpeg, gif, webp, mp4, or webm to upload.'
);
});

Expand Down Expand Up @@ -206,7 +199,7 @@ describe('useUploader', () => {
it('formats the error message correctly if there is only one file type supported', async () => {
const {
actions: { validateFileForUpload },
} = setup({ allowedFileTypes: ['mp4'] });
} = setup({ allowedMimeTypes: { image: [], video: ['video/mp4'] } });

await expect(() =>
validateFileForUpload({ size: 20000, type: 'video/quicktime' })
Expand All @@ -216,7 +209,7 @@ describe('useUploader', () => {
it('formats the error message correctly if no file types are supported', async () => {
const {
actions: { validateFileForUpload },
} = setup({ allowedFileTypes: [] });
} = setup({ allowedMimeTypes: { image: [], video: [] } });

await expect(() =>
validateFileForUpload({ size: 20000, type: 'video/quicktime' })
Expand Down
13 changes: 11 additions & 2 deletions packages/story-editor/src/app/uploader/useUploader.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
*/
import { useCallback, useMemo } from '@googleforcreators/react';
import { __, sprintf, translateToExclusiveList } from '@googleforcreators/i18n';
import { getFileName } from '@googleforcreators/media';
import {
getFileName,
getExtensionFromMimeType,
} from '@googleforcreators/media';

/**
* Internal dependencies
Expand All @@ -42,13 +45,19 @@ function useUploader() {
image: allowedImageMimeTypes,
video: allowedVideoMimeTypes,
},
allowedFileTypes,
capabilities: { hasUploadMediaAction },
} = useConfig();
const allowedMimeTypes = useMemo(
() => [...allowedImageMimeTypes, ...allowedVideoMimeTypes],
[allowedImageMimeTypes, allowedVideoMimeTypes]
);
const allowedFileTypes = useMemo(
() =>
allowedMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedMimeTypes]
);

const isValidType = useCallback(
({ type }) => {
Expand Down
13 changes: 11 additions & 2 deletions packages/story-editor/src/components/form/linkIcon.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/
import styled from 'styled-components';
import { useMemo } from '@googleforcreators/react';
import { getExtensionFromMimeType } from '@googleforcreators/media';
import PropTypes from 'prop-types';

/**
Expand All @@ -36,10 +37,18 @@ const StyledMedia = styled(Media)`

function LinkIcon({ handleChange, icon, isLoading = false, ...rest }) {
const {
allowedImageMimeTypes,
allowedImageFileTypes,
allowedMimeTypes: { ws_image: allowedImageMimeTypes },
capabilities: { hasUploadMediaAction },
} = useConfig();

const allowedImageFileTypes = useMemo(
() =>
allowedImageMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedImageMimeTypes]
);

const iconErrorMessage = useMemo(() => {
let message = __(
'No image file types are currently supported.',
Expand Down
14 changes: 13 additions & 1 deletion packages/story-editor/src/components/form/mediaUploadButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
*/
import { useSnackbar } from '@googleforcreators/design-system';
import { useCallback, useMemo } from '@googleforcreators/react';
import { getExtensionFromMimeType } from '@googleforcreators/media';
import { __, sprintf, translateToExclusiveList } from '@googleforcreators/i18n';
import PropTypes from 'prop-types';

Expand All @@ -31,14 +32,25 @@ import { TRANSCODABLE_MIME_TYPES } from '../../app/media';

function MediaUploadButton({ onInsert, renderButton, buttonInsertText }) {
const {
allowedFileTypes,
allowedMimeTypes: {
image: allowedImageMimeTypes,
video: allowedVideoMimeTypes,
},
MediaUpload,
} = useConfig();

const allowedUploadMimeTypes = useMemo(
() => [...allowedImageMimeTypes, ...allowedVideoMimeTypes],
[allowedImageMimeTypes, allowedVideoMimeTypes]
);
const allowedFileTypes = useMemo(
() =>
allowedUploadMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedUploadMimeTypes]
);

const {
canTranscodeResource,
resetWithFetch,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@
* External dependencies
*/
import { __, sprintf, translateToExclusiveList } from '@googleforcreators/i18n';
import { getExtensionFromMimeType } from '@googleforcreators/media';
import { Input, withProtocol } from '@googleforcreators/design-system';
import {
useState,
useRef,
useLayoutEffect,
useCallback,
useMemo,
} from '@googleforcreators/react';
import styled from 'styled-components';
import PropTypes from 'prop-types';
Expand All @@ -42,10 +44,26 @@ const InputWrapper = styled.form`
`;

function HotlinkModal({ isOpen, onClose }) {
const { allowedFileTypes } = useConfig();
const {
allowedMimeTypes: {
image: allowedImageMimeTypes,
video: allowedVideoMimeTypes,
},
} = useConfig();
const [errorMsg, setErrorMsg] = useState(false);
const inputRef = useRef(null);

const allowedMimeTypes = useMemo(
() => [...allowedImageMimeTypes, ...allowedVideoMimeTypes],
[allowedImageMimeTypes, allowedVideoMimeTypes]
);
const allowedFileTypes = useMemo(
() =>
allowedMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedMimeTypes]
);
useLayoutEffect(() => {
// Wait one tick to ensure the input has been loaded.
const timeout = setTimeout(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,15 @@
/**
* External dependencies
*/
import { useCallback, useState } from '@googleforcreators/react';
import { useCallback, useState, useMemo } from '@googleforcreators/react';
import { __, sprintf, translateToExclusiveList } from '@googleforcreators/i18n';
import {
getImageFromVideo,
seekVideo,
getVideoLength,
preloadVideo,
hasVideoGotAudio,
getExtensionFromMimeType,
} from '@googleforcreators/media';
import { v4 as uuidv4 } from 'uuid';
import { trackError, trackEvent } from '@googleforcreators/tracking';
Expand Down Expand Up @@ -69,8 +70,23 @@ function useInsert({ link, setLink, setErrorMsg, onClose }) {
}));
const {
capabilities: { hasUploadMediaAction },
allowedFileTypes,
allowedMimeTypes: {
image: allowedImageMimeTypes,
video: allowedVideoMimeTypes,
},
} = useConfig();

const allowedMimeTypes = useMemo(
() => [...allowedImageMimeTypes, ...allowedVideoMimeTypes],
[allowedImageMimeTypes, allowedVideoMimeTypes]
);
const allowedFileTypes = useMemo(
() =>
allowedMimeTypes
.map((type) => getExtensionFromMimeType(type))
.filter((a) => a),
[allowedMimeTypes]
);
const {
actions: { getHotlinkInfo },
} = useAPI();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ export const _default = ({ insertElement, ...args }) => {
audio: [],
video: ['video/mp4', 'video/webm'],
},
allowedFileTypes: ['png', 'jpeg', 'jpg', 'gif', 'mp4', 'webp', 'webm'],
capabilities: { hasUploadMediaAction: true },
};
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,9 @@ export async function arrange({ mediaResponse = [] }) {
'image/gif',
'image/webp',
],
ws_image: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
video: ['video/mp4', 'video/webm'],
},
allowedFileTypes: ['png', 'jpeg', 'jpg', 'gif', 'mp4', 'webp', 'webm'],
allowedImageFileTypes: ['gif', 'jpe', 'jpeg', 'jpg', 'png'],
allowedImageMimeTypes: [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
],
capabilities: {
hasUploadMediaAction: true,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,9 @@ function arrange(selectedElements) {
capabilities: {
hasUploadMediaAction: true,
},
allowedImageFileTypes: ['gif', 'jpe', 'jpeg', 'jpg', 'png'],
allowedImageMimeTypes: [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
],
allowedMimeTypes: {
ws_image: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
},
MediaUpload,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,9 @@ function MediaUpload({ render, onSelect }) {

function arrange(selectedElements) {
const configValue = {
allowedImageFileTypes: ['gif', 'jpe', 'jpeg', 'jpg', 'png'],
allowedFileTypes: ['gif', 'jpe', 'jpeg', 'jpg', 'png'],
allowedImageMimeTypes: [
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
],
allowedMimeTypes: {
image: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
ws_image: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
video: [],
},
capabilities: {
Expand Down
Loading