@cocreate/elements 1.34.5 → 1.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [1.35.1](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.35.0...v1.35.1) (2024-04-26)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * convert base64 segments to to arrayBuffer ([710c55e](https://github.com/CoCreate-app/CoCreate-elements/commit/710c55e6402fffc65cf1a633c67c7499766964e8))
7
+ * export setValueType ([bcc717c](https://github.com/CoCreate-app/CoCreate-elements/commit/bcc717caa541f406f1cb74fa97be6d651898f808))
8
+
9
+ # [1.35.0](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.34.5...v1.35.0) (2024-03-18)
10
+
11
+
12
+ ### Features
13
+
14
+ * observe form for new inputs and setAttribute ([527d1bd](https://github.com/CoCreate-app/CoCreate-elements/commit/527d1bd490ae28655006918fe8d8a99fb210cbde))
15
+
1
16
  ## [1.34.5](https://github.com/CoCreate-app/CoCreate-elements/compare/v1.34.4...v1.34.5) (2024-02-20)
2
17
 
3
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/elements",
3
- "version": "1.34.5",
3
+ "version": "1.35.1",
4
4
  "description": "Fetch content into any html element by using html5 attributes to query data stored in CoCreate headless CMS. If data is changed it will instantly reflect in html tags as changes are broadcasted in realtime",
5
5
  "keywords": [
6
6
  "elements",
package/src/fetchSrc.js CHANGED
@@ -33,27 +33,44 @@ async function initElements(elements) {
33
33
  let sourceBuffer;
34
34
 
35
35
  const mediaSource = new MediaSource();
36
- video.src = URL.createObjectURL(mediaSource);
36
+ element.src = URL.createObjectURL(mediaSource);
37
37
  mediaSource.addEventListener('sourceopen', async () => {
38
- const contentType = response.headers.get("Content-Type");
39
- sourceBuffer = mediaSource.addSourceBuffer(contentType);
38
+ sourceBuffer = mediaSource.addSourceBuffer(`${mediaConfig['content-type']}; codecs="${mediaConfig.codecs}"`);
40
39
 
41
40
  sourceBuffer.addEventListener('updateend', () => {
41
+ console.log('Update ended, buffered ranges:', sourceBuffer.buffered)
42
42
  if (!sourceBuffer.updating && mediaSource.readyState === 'open') {
43
43
  mediaSource.endOfStream();
44
44
 
45
- video.addEventListener('ended', () => {
46
- URL.revokeObjectURL(video.src);
45
+ element.addEventListener('ended', () => {
46
+ URL.revokeObjectURL(element.src);
47
47
  });
48
48
  }
49
49
  });
50
+ sourceBuffer.addEventListener('error', (e) => {
51
+ console.error('SourceBuffer error event:', e);
52
+ console.log('MediaSource readyState:', mediaSource.readyState);
53
+ console.log('SourceBuffer updating:', sourceBuffer.updating);
54
+ console.log('SourceBuffer buffered ranges:', sourceBuffer.buffered);
55
+ // Any other state information you can log
56
+ });
57
+
58
+
59
+ getSegment(sourceBuffer, mediaConfig.segments[0])
60
+ });
61
+
62
+ mediaSource.addEventListener('sourceended', () => {
63
+ console.log('MediaSource ended event fired');
64
+ });
65
+
66
+ mediaSource.addEventListener('sourceclose', () => {
67
+ console.log('MediaSource close event fired');
50
68
  });
51
69
 
52
70
  // Event listener for seeking
53
71
  element.addEventListener('seeking', () => {
54
72
  let currentTime = element.currentTime;
55
73
  let chunkIndex = Math.floor(currentTime / chunkDuration);
56
-
57
74
  });
58
75
 
59
76
  // Event listener for seeked
@@ -74,8 +91,8 @@ async function initElements(elements) {
74
91
  });
75
92
 
76
93
  element.addEventListener('timeupdate', function () {
77
- const bufferEnd = video.buffered.end(0);
78
- const currentTime = video.currentTime;
94
+ const bufferEnd = element.buffered.end(0);
95
+ const currentTime = element.currentTime;
79
96
  const threshold = 10; // seconds before buffer end to fetch the next segment
80
97
 
81
98
  if (bufferEnd - currentTime < threshold) {
@@ -83,8 +100,9 @@ async function initElements(elements) {
83
100
  getSegment(sourceBuffer, mediaConfig)
84
101
  }
85
102
  });
103
+
86
104
  } catch (error) {
87
- video.src = src
105
+ element.src = src
88
106
  // let blob = await response.json();
89
107
  // URL.createObjectURL(blob);
90
108
  }
@@ -106,14 +124,14 @@ async function initElements(elements) {
106
124
  }
107
125
  };
108
126
 
109
- async function getSegment(sourceBuffer, segmentConfig) {
127
+ async function getSegment(sourceBuffer, segment) {
110
128
  // TODO: use socket/crud/file with room using the url to get one or more segments and append
111
129
  let segments = []
112
-
113
- if (segmentConfig.array && segmentConfig.object) {
114
- let data = { method: 'object.read', ...segmentConfig }
130
+ let data
131
+ if (segment.array && segment.object) {
132
+ data = { method: 'object.read', ...segment }
115
133
  data = await crud.send(data)
116
- if (segmentConfig.key) {
134
+ if (segment.key) {
117
135
  // TODO: utils.getValuefromObject
118
136
  if (Array.isArray(data.object[0][key]))
119
137
  segments.push(...data.object[0][key])
@@ -121,9 +139,15 @@ async function getSegment(sourceBuffer, segmentConfig) {
121
139
  segments.push(data.object[0][key])
122
140
  } else
123
141
  segments.push(...data.object)
124
- } else if (segmentConfig.src) {
125
- data = await fetch(src);
142
+ segment.src = segments[0]
143
+ segment.src = await segment.src.text();
144
+ // TODO: handle segment array as
145
+ } else if (segment.src) {
146
+ // TODO: handle 404, or whether src was fetched or not
147
+ segment.src = await fetch(segment.src);
148
+ segment.src = await segment.src.text();
126
149
  }
150
+
127
151
  appendSegment(sourceBuffer, segment)
128
152
  }
129
153
 
@@ -140,13 +164,16 @@ async function appendSegment(sourceBuffer, segment) {
140
164
  } else if (segment.src instanceof Blob) {
141
165
  arrayBuffer = await segment.src.arrayBuffer();
142
166
  } else {
143
- console.error("Unhandled segment data type");
167
+ arrayBuffer = base64ToArrayBuffer(segment.src);
168
+
169
+ // arrayBuffer = await segment.src.arrayBuffer();
144
170
  }
145
171
 
146
172
  // Wait for the source buffer to be ready for updates
147
173
  if (sourceBuffer.updating) await new Promise(resolve => sourceBuffer.addEventListener('updateend', resolve, { once: true }));
148
174
 
149
175
  sourceBuffer.appendBuffer(arrayBuffer);
176
+ console.log(sourceBuffer)
150
177
  }
151
178
 
152
179
  function isBuffered(element, currentTime) {
@@ -178,32 +205,6 @@ function base64ToArrayBuffer(base64) {
178
205
  return bytes.buffer; // Return ArrayBuffer
179
206
  }
180
207
 
181
- const videoStreamConfig = {
182
- title: "Video Title",
183
- totalDuration: 3600, // Total duration of the video in seconds
184
- 'content-type': "video/mp4",
185
- segments: [
186
- {
187
- _id: 1,
188
- src: "http://example.com/video/chunk1.mp4", // src stored using file path
189
- storage: '', // src stored using crud path
190
- array: '', // src stored using crud path
191
- object: '', // src stored using crud path
192
- key: '', // src stored using crud path
193
- start: 0, // Start time of this chunk in seconds
194
- end: 10, // End time of this chunk in seconds
195
- duration: 10,
196
- codec: "h.264",
197
- resolution: {
198
- width: 1920,
199
- height: 1080
200
- },
201
- bitrate: "5000kbps",
202
- },
203
- // Repeat for each chunk
204
- ]
205
- }
206
-
207
208
  observer.init({
208
209
  name: 'CoCreateSrc',
209
210
  observe: ['addedNodes'],
package/src/form.js CHANGED
@@ -18,7 +18,18 @@ function init(elements) {
18
18
  elements = document.querySelectorAll('form');
19
19
  else if (!Array.isArray(elements))
20
20
  elements = [elements]
21
+
21
22
  for (let element of elements) {
23
+ Observer.init({
24
+ name: 'CoCreateFormElements',
25
+ observe: ['addedNodes'],
26
+ target: '[storage], [database], [array], [index], [object], [key]',
27
+ callback: function (mutation) {
28
+ if (element == mutation.target.form)
29
+ setAttribute(element, [mutation.target])
30
+ }
31
+ });
32
+
22
33
  runObjectId(element);
23
34
  setAttribute(element);
24
35
  disableAutoFill(element);
@@ -43,7 +54,6 @@ function runObjectId(form) {
43
54
  // Add a array to the array list.
44
55
  if (array && !arrays.includes(array))
45
56
  arrays.push(array)
46
-
47
57
  }
48
58
  // Sets the object id for each array in the array.
49
59
  for (let i = 0; i < arrays.length; i++) {
@@ -55,8 +65,9 @@ function runObjectId(form) {
55
65
  /**
56
66
  * @param form
57
67
  */
58
- function setAttribute(form) {
59
- let elements = form.querySelectorAll('[storage], [database], [array], [index], [object], [key]');
68
+ function setAttribute(form, elements) {
69
+ if (!elements)
70
+ elements = form.querySelectorAll('[storage], [database], [array], [index], [object], [key]');
60
71
 
61
72
  for (let attribute of form.attributes) {
62
73
  let variable = window.CoCreateConfig.attributes[attribute.name]
package/src/index.js CHANGED
@@ -1295,4 +1295,4 @@ Actions.init([
1295
1295
 
1296
1296
  init();
1297
1297
 
1298
- export default { init, read, save, getData, getObject, reset, elements, keys, forms, debounce, getAttributes };
1298
+ export default { init, read, save, getData, getObject, reset, elements, keys, forms, debounce, getAttributes, setTypeValue };