UNPKG

@wordpress/block-library

Version:
302 lines (278 loc) 9.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = TracksEditor; var _element = require("@wordpress/element"); var _i18n = require("@wordpress/i18n"); var _components = require("@wordpress/components"); var _blockEditor = require("@wordpress/block-editor"); var _icons = require("@wordpress/icons"); var _data = require("@wordpress/data"); var _url = require("@wordpress/url"); /** * WordPress dependencies */ const ALLOWED_TYPES = ['text/vtt']; const DEFAULT_KIND = 'subtitles'; const KIND_OPTIONS = [{ label: (0, _i18n.__)('Subtitles'), value: 'subtitles' }, { label: (0, _i18n.__)('Captions'), value: 'captions' }, { label: (0, _i18n.__)('Descriptions'), value: 'descriptions' }, { label: (0, _i18n.__)('Chapters'), value: 'chapters' }, { label: (0, _i18n.__)('Metadata'), value: 'metadata' }]; const captionIcon = (0, _element.createElement)(_components.SVG, { width: "18", height: "14", viewBox: "0 0 18 14", role: "img", fill: "none" }, (0, _element.createElement)(_components.Rect, { x: "0.75", y: "0.75", width: "16.5", height: "12.5", rx: "1.25", stroke: "black", strokeWidth: "1.5", fill: "none" }), (0, _element.createElement)(_components.Path, { d: "M3 7H15", stroke: "black", strokeWidth: "1.5" }), (0, _element.createElement)(_components.Path, { d: "M3 10L15 10", stroke: "black", strokeWidth: "1.5" })); function TrackList(_ref) { let { tracks, onEditPress } = _ref; let content; if (tracks.length === 0) { content = (0, _element.createElement)("p", { className: "block-library-video-tracks-editor__tracks-informative-message" }, (0, _i18n.__)('Tracks can be subtitles, captions, chapters, or descriptions. They help make your content more accessible to a wider range of users.')); } else { content = tracks.map((track, index) => { return (0, _element.createElement)("div", { key: index, className: "block-library-video-tracks-editor__track-list-track" }, (0, _element.createElement)("span", null, track.label, " "), (0, _element.createElement)(_components.Button, { variant: "tertiary", onClick: () => onEditPress(index), "aria-label": (0, _i18n.sprintf)( /* translators: %s: Label of the video text track e.g: "French subtitles" */ (0, _i18n.__)('Edit %s'), track.label) }, (0, _i18n.__)('Edit'))); }); } return (0, _element.createElement)(_components.MenuGroup, { label: (0, _i18n.__)('Text tracks'), className: "block-library-video-tracks-editor__track-list" }, content); } function SingleTrackEditor(_ref2) { let { track, onChange, onClose, onRemove } = _ref2; const { src = '', label = '', srcLang = '', kind = DEFAULT_KIND } = track; const fileName = src.startsWith('blob:') ? '' : (0, _url.getFilename)(src) || ''; return (0, _element.createElement)(_components.NavigableMenu, null, (0, _element.createElement)("div", { className: "block-library-video-tracks-editor__single-track-editor" }, (0, _element.createElement)("span", { className: "block-library-video-tracks-editor__single-track-editor-edit-track-label" }, (0, _i18n.__)('Edit track')), (0, _element.createElement)("span", null, (0, _i18n.__)('File'), ": ", (0, _element.createElement)("b", null, fileName)), (0, _element.createElement)("div", { className: "block-library-video-tracks-editor__single-track-editor-label-language" }, (0, _element.createElement)(_components.TextControl /* eslint-disable jsx-a11y/no-autofocus */ , { autoFocus: true /* eslint-enable jsx-a11y/no-autofocus */ , onChange: newLabel => onChange({ ...track, label: newLabel }), label: (0, _i18n.__)('Label'), value: label, help: (0, _i18n.__)('Title of track') }), (0, _element.createElement)(_components.TextControl, { onChange: newSrcLang => onChange({ ...track, srcLang: newSrcLang }), label: (0, _i18n.__)('Source language'), value: srcLang, help: (0, _i18n.__)('Language tag (en, fr, etc.)') })), (0, _element.createElement)(_components.SelectControl, { className: "block-library-video-tracks-editor__single-track-editor-kind-select", options: KIND_OPTIONS, value: kind, label: (0, _i18n.__)('Kind'), onChange: newKind => { onChange({ ...track, kind: newKind }); } }), (0, _element.createElement)("div", { className: "block-library-video-tracks-editor__single-track-editor-buttons-container" }, (0, _element.createElement)(_components.Button, { variant: "secondary", onClick: () => { const changes = {}; let hasChanges = false; if (label === '') { changes.label = (0, _i18n.__)('English'); hasChanges = true; } if (srcLang === '') { changes.srcLang = 'en'; hasChanges = true; } if (track.kind === undefined) { changes.kind = DEFAULT_KIND; hasChanges = true; } if (hasChanges) { onChange({ ...track, ...changes }); } onClose(); } }, (0, _i18n.__)('Close')), (0, _element.createElement)(_components.Button, { isDestructive: true, variant: "link", onClick: onRemove }, (0, _i18n.__)('Remove track'))))); } function TracksEditor(_ref3) { let { tracks = [], onChange } = _ref3; const mediaUpload = (0, _data.useSelect)(select => { return select(_blockEditor.store).getSettings().mediaUpload; }, []); const [trackBeingEdited, setTrackBeingEdited] = (0, _element.useState)(null); if (!mediaUpload) { return null; } return (0, _element.createElement)(_components.Dropdown, { contentClassName: "block-library-video-tracks-editor", renderToggle: _ref4 => { let { isOpen, onToggle } = _ref4; return (0, _element.createElement)(_components.ToolbarButton, { label: (0, _i18n.__)('Text tracks'), showTooltip: true, "aria-expanded": isOpen, "aria-haspopup": "true", onClick: onToggle, icon: captionIcon }); }, renderContent: () => { if (trackBeingEdited !== null) { return (0, _element.createElement)(SingleTrackEditor, { track: tracks[trackBeingEdited], onChange: newTrack => { const newTracks = [...tracks]; newTracks[trackBeingEdited] = newTrack; onChange(newTracks); }, onClose: () => setTrackBeingEdited(null), onRemove: () => { onChange(tracks.filter((_track, index) => index !== trackBeingEdited)); setTrackBeingEdited(null); } }); } return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_components.NavigableMenu, null, (0, _element.createElement)(TrackList, { tracks: tracks, onEditPress: setTrackBeingEdited }), (0, _element.createElement)(_components.MenuGroup, { className: "block-library-video-tracks-editor__add-tracks-container", label: (0, _i18n.__)('Add tracks') }, (0, _element.createElement)(_blockEditor.MediaUpload, { onSelect: _ref5 => { let { url } = _ref5; const trackIndex = tracks.length; onChange([...tracks, { src: url }]); setTrackBeingEdited(trackIndex); }, allowedTypes: ALLOWED_TYPES, render: _ref6 => { let { open } = _ref6; return (0, _element.createElement)(_components.MenuItem, { icon: _icons.media, onClick: open }, (0, _i18n.__)('Open Media Library')); } }), (0, _element.createElement)(_blockEditor.MediaUploadCheck, null, (0, _element.createElement)(_components.FormFileUpload, { onChange: event => { const files = event.target.files; const trackIndex = tracks.length; mediaUpload({ allowedTypes: ALLOWED_TYPES, filesList: files, onFileChange: _ref7 => { let [{ url }] = _ref7; const newTracks = [...tracks]; if (!newTracks[trackIndex]) { newTracks[trackIndex] = {}; } newTracks[trackIndex] = { ...tracks[trackIndex], src: url }; onChange(newTracks); setTrackBeingEdited(trackIndex); } }); }, accept: ".vtt,text/vtt", render: _ref8 => { let { openFileDialog } = _ref8; return (0, _element.createElement)(_components.MenuItem, { icon: _icons.upload, onClick: () => { openFileDialog(); } }, (0, _i18n.__)('Upload')); } }))))); } }); } //# sourceMappingURL=tracks-editor.js.map