PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 / chapters / index.js
presto-player / src / admin / blocks / shared / chapters Last commit date
components 2 years ago ChaptersPanel.js 5 years ago index.js 5 years ago
index.js
118 lines
1 /**
2 * WordPress dependencies
3 */
4 const { __ } = wp.i18n;
5 const { useState } = wp.element;
6 const { dispatch } = wp.data;
7 import Chapter from "./components/Chapter";
8
9 const VideoSettings = ({ setAttributes, attributes }) => {
10 const showNotice = () => {
11 dispatch("presto-player/player").setProModal(true);
12 };
13 if (!prestoPlayer?.isPremium) {
14 return (
15 <Chapter
16 disabled={true}
17 className="ph-chapter is-new"
18 time={""}
19 title={""}
20 update={() => {}}
21 showNotice={showNotice}
22 add={showNotice}
23 />
24 );
25 }
26
27 const { chapters } = attributes;
28
29 let [draft, setDraft] = useState({
30 title: "",
31 time: "",
32 });
33
34 const updateChapter = (chapter, data = {}) => {
35 let itemIndex = chapters.indexOf(chapter);
36 let updated = chapters.map((item, index) => {
37 // This isn't the item we care about - keep it as-is
38 if (index !== itemIndex) {
39 return item;
40 }
41 // Otherwise, this is the one we want - return an updated value
42 return {
43 ...item,
44 ...data,
45 };
46 });
47 setAttributes({ chapters: updated });
48 };
49
50 const removeChapter = (chapter) => {
51 let index = chapters.indexOf(chapter);
52 setAttributes({ chapters: chapters.filter((_, i) => i !== index) });
53 };
54
55 const addChapter = () => {
56 if (!draft.time || !draft.title) {
57 return;
58 }
59 setAttributes({
60 chapters: [
61 ...(chapters || []),
62 ...[{ time: draft.time, title: draft.title }],
63 ],
64 });
65 setDraft({
66 title: "",
67 time: "",
68 });
69 };
70
71 const sorted = () => {
72 return (chapters || []).sort(function (a, b) {
73 if (
74 parseInt(a.time.split(":")[0]) - parseInt(b.time.split(":")[0]) ===
75 0
76 ) {
77 return parseInt(a.time.split(":")[1]) - parseInt(b.time.split(":")[1]);
78 } else {
79 return parseInt(a.time.split(":")[0]) - parseInt(b.time.split(":")[0]);
80 }
81 });
82 };
83
84 return (
85 <>
86 {sorted().map((chapter, i) => {
87 return (
88 <Chapter
89 key={`${i}-${chapter.time}`}
90 className="ph-chapter"
91 time={chapter.time}
92 title={chapter.title}
93 chapter={chapter}
94 update={(data) => {
95 updateChapter(chapter, data);
96 }}
97 remove={() => {
98 removeChapter(chapter);
99 }}
100 />
101 );
102 })}
103
104 <Chapter
105 className="ph-chapter is-new"
106 time={draft.time}
107 title={draft.title}
108 update={(data) => {
109 setDraft({ ...draft, ...data });
110 }}
111 add={addChapter}
112 />
113 </>
114 );
115 };
116
117 export default VideoSettings;
118