PluginProbe ʕ •ᴥ•ʔ
Presto Player / 1.5.13
Presto Player v1.5.13
4.5.0 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / blocks / shared / settings / index.js
presto-player / src / admin / blocks / shared / settings Last commit date
MutedPreviewOptions.js 5 years ago index.js 5 years ago settings-styles.css 5 years ago
index.js
274 lines
1 /**
2 * WordPress dependencies
3 */
4 const { __ } = wp.i18n;
5 const {
6 ToggleControl,
7 SelectControl,
8 BaseControl,
9 Button,
10 PanelRow,
11 Icon,
12 Flex,
13 } = wp.components;
14 const { dispatch } = wp.data;
15 import { isHLS } from "@/shared/util";
16
17 const { MediaUpload, MediaUploadCheck } = wp.blockEditor;
18 import ProBadge from "@/admin/blocks/shared/components/ProBadge";
19 import MutedPreviewOptions from "./MutedPreviewOptions";
20
21 const VIDEO_POSTER_ALLOWED_MEDIA_TYPES = ["image"];
22
23 const VideoSettings = ({ setAttributes, attributes, instanceId }) => {
24 const {
25 mutedPreview,
26 autoplay,
27 playsInline,
28 preload,
29 poster,
30 mutedOverlay,
31 } = attributes;
32
33 const videoPosterDescription = `video-block__poster-image-description-${instanceId}`;
34
35 const getAutoplayHelp = (checked) => {
36 return checked
37 ? __(
38 "Note: Autoplaying videos may cause usability issues for some visitors.",
39 "presto-player"
40 )
41 : null;
42 };
43
44 const posterRecommended = () => {
45 // if is hls and we've selected metadata or none, recommend a poster
46 if (
47 attributes?.src &&
48 isHLS(attributes?.src) &&
49 ["metadata", "none"].includes(preload)
50 ) {
51 return true;
52 }
53
54 return preload === "none" && !poster;
55 };
56
57 const toggleAttribute = (attribute) => {
58 return (newValue) => {
59 setAttributes({ [attribute]: newValue });
60 };
61 };
62
63 // handle poster select
64 function onSelectPoster(image) {
65 setAttributes({ poster: image.url });
66 }
67
68 function onRemovePoster() {
69 setAttributes({ poster: "" });
70 }
71
72 const mutedPreviewControls = () => {
73 return (
74 <>
75 <ToggleControl
76 label={
77 <>
78 {__("Muted Autoplay Preview", "presto-player")}{" "}
79 {!prestoPlayer?.isPremium && <ProBadge />}
80 </>
81 }
82 onChange={(value) => {
83 if (!prestoPlayer?.isPremium) {
84 dispatch("presto-player/player").setProModal(true);
85 return;
86 }
87 setAttributes({
88 mutedPreview: {
89 ...mutedPreview,
90 ...{ enabled: value },
91 },
92 });
93 }}
94 checked={mutedPreview?.enabled}
95 className="presto-setting__mutedPreview"
96 help={__("Shows a muted preview of the video.", "presto-player")}
97 />
98 {!!mutedPreview?.enabled && !attributes?.video_id && (
99 <PanelRow>
100 <ToggleControl
101 label={__("Muted Preview Captions", "presto-player")}
102 onChange={(value) => {
103 setAttributes({
104 mutedPreview: {
105 ...mutedPreview,
106 ...{ captions: value },
107 },
108 });
109 }}
110 checked={mutedPreview?.captions}
111 className="presto-setting__mutedPreviewCaptions"
112 help={__("Play captions during muted autoplay", "presto-player")}
113 />
114 </PanelRow>
115 )}
116
117 {!!mutedPreview.enabled && (
118 <PanelRow>
119 <ToggleControl
120 label={
121 <>
122 {__("Muted Preview Overlay", "presto-player")}{" "}
123 {!prestoPlayer?.isPremium && <ProBadge />}
124 </>
125 }
126 onChange={(value) => {
127 if (!prestoPlayer?.isPremium) {
128 dispatch("presto-player/player").setProModal(true);
129 return;
130 }
131 setAttributes({
132 mutedOverlay: {
133 ...mutedOverlay,
134 ...{ enabled: value },
135 },
136 });
137 }}
138 checked={mutedOverlay?.enabled}
139 className="presto-setting__mutedOverlay"
140 help={__(
141 "Show an image over the top of the video either before or after the video.",
142 "presto-player"
143 )}
144 />
145 </PanelRow>
146 )}
147 {mutedOverlay?.enabled && mutedPreview?.enabled && (
148 <MutedPreviewOptions
149 attributes={attributes}
150 setAttributes={setAttributes}
151 />
152 )}
153 </>
154 );
155 };
156
157 return (
158 <>
159 {!autoplay && mutedPreviewControls()}
160
161 {!mutedPreview?.enabled && (
162 <ToggleControl
163 label={__("Autoplay", "presto-player")}
164 className="presto-setting__autoplay"
165 onChange={toggleAttribute("autoplay")}
166 checked={autoplay}
167 help={getAutoplayHelp}
168 />
169 )}
170 <PanelRow>
171 <ToggleControl
172 label={__("Play inline", "presto-player")}
173 className="presto-setting__playsInline"
174 data-cy={"playsInline"}
175 onChange={toggleAttribute("playsInline")}
176 checked={playsInline}
177 help={__(
178 "On mobile browsers, play the video on the page instead of opening it up fullscreen.",
179 "presto-player"
180 )}
181 />
182 </PanelRow>
183 {!attributes?.video_id && (
184 <PanelRow>
185 <SelectControl
186 label={
187 <Flex>
188 <div>{__("Performance Preference", "presto-player")}</div>
189 <a
190 href="https://prestoplayer.com/docs/performance-preferences-explained"
191 target="_blank"
192 style={{ textDecoration: "none" }}
193 >
194 <Icon icon="editor-help" />
195 </a>
196 </Flex>
197 }
198 className="presto-setting__preload"
199 value={preload}
200 onChange={(value) => setAttributes({ preload: value })}
201 help={
202 posterRecommended() &&
203 __(
204 "A poster image is recommended for this setting.",
205 "presto-player"
206 )
207 }
208 options={[
209 {
210 value: "auto",
211 label: __("Video Playback Speed", "presto-player"),
212 },
213 {
214 value: "metadata",
215 label: __("Page Load Speed", "presto-player"),
216 },
217 {
218 value: "none",
219 label: __("Page Load Speed (Extreme)", "presto-player"),
220 },
221 ]}
222 />
223 </PanelRow>
224 )}
225 <MediaUploadCheck>
226 <BaseControl className="editor-video-poster-control">
227 <BaseControl.VisualLabel>
228 <p>{__("Poster image", "presto-player")}</p>
229 </BaseControl.VisualLabel>
230 <MediaUpload
231 title={__("Select poster image", "presto-player")}
232 onSelect={onSelectPoster}
233 allowedTypes={VIDEO_POSTER_ALLOWED_MEDIA_TYPES}
234 render={({ open }) => (
235 <Button
236 className="presto-setting__poster"
237 isPrimary
238 onClick={open}
239 aria-describedby={videoPosterDescription}
240 >
241 {!poster
242 ? __("Select", "presto-player")
243 : __("Replace", "presto-player")}
244 </Button>
245 )}
246 />
247 <p id={videoPosterDescription} hidden>
248 {poster
249 ? sprintf(
250 __("The current poster image url is %s", "presto-player"),
251 poster
252 )
253 : __(
254 "There is no poster image currently selected",
255 "presto-player"
256 )}
257 </p>
258 {!!poster && (
259 <Button
260 onClick={onRemovePoster}
261 className="presto-setting__remove-poster"
262 isTertiary
263 >
264 {__("Remove", "presto-player")}
265 </Button>
266 )}
267 </BaseControl>
268 </MediaUploadCheck>
269 </>
270 );
271 };
272
273 export default VideoSettings;
274