@wordpress/widgets 3.16.0 → 3.17.0

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/blocks/legacy-widget/edit/control.js +31 -63
  3. package/build/blocks/legacy-widget/edit/control.js.map +1 -1
  4. package/build/blocks/legacy-widget/edit/convert-to-blocks-button.js +1 -7
  5. package/build/blocks/legacy-widget/edit/convert-to-blocks-button.js.map +1 -1
  6. package/build/blocks/legacy-widget/edit/form.js +5 -22
  7. package/build/blocks/legacy-widget/edit/form.js.map +1 -1
  8. package/build/blocks/legacy-widget/edit/index.js +7 -24
  9. package/build/blocks/legacy-widget/edit/index.js.map +1 -1
  10. package/build/blocks/legacy-widget/edit/inspector-card.js +0 -2
  11. package/build/blocks/legacy-widget/edit/inspector-card.js.map +1 -1
  12. package/build/blocks/legacy-widget/edit/no-preview.js +1 -3
  13. package/build/blocks/legacy-widget/edit/no-preview.js.map +1 -1
  14. package/build/blocks/legacy-widget/edit/preview.js +11 -21
  15. package/build/blocks/legacy-widget/edit/preview.js.map +1 -1
  16. package/build/blocks/legacy-widget/edit/widget-type-selector.js +1 -11
  17. package/build/blocks/legacy-widget/edit/widget-type-selector.js.map +1 -1
  18. package/build/blocks/legacy-widget/index.js +0 -6
  19. package/build/blocks/legacy-widget/index.js.map +1 -1
  20. package/build/blocks/legacy-widget/transforms.js +1 -4
  21. package/build/blocks/legacy-widget/transforms.js.map +1 -1
  22. package/build/blocks/widget-group/deprecated.js +1 -5
  23. package/build/blocks/widget-group/deprecated.js.map +1 -1
  24. package/build/blocks/widget-group/edit.js +7 -13
  25. package/build/blocks/widget-group/edit.js.map +1 -1
  26. package/build/blocks/widget-group/index.js +7 -16
  27. package/build/blocks/widget-group/index.js.map +1 -1
  28. package/build/blocks/widget-group/save.js +1 -3
  29. package/build/blocks/widget-group/save.js.map +1 -1
  30. package/build/components/index.js +0 -2
  31. package/build/components/index.js.map +1 -1
  32. package/build/components/move-to-widget-area/index.js +1 -5
  33. package/build/components/move-to-widget-area/index.js.map +1 -1
  34. package/build/index.js +9 -18
  35. package/build/index.js.map +1 -1
  36. package/build/register-legacy-widget-variations.js +1 -6
  37. package/build/register-legacy-widget-variations.js.map +1 -1
  38. package/build/utils.js +5 -5
  39. package/build/utils.js.map +1 -1
  40. package/build-module/blocks/legacy-widget/edit/control.js +32 -58
  41. package/build-module/blocks/legacy-widget/edit/control.js.map +1 -1
  42. package/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js +0 -1
  43. package/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js.map +1 -1
  44. package/build-module/blocks/legacy-widget/edit/form.js +4 -15
  45. package/build-module/blocks/legacy-widget/edit/form.js.map +1 -1
  46. package/build-module/blocks/legacy-widget/edit/index.js +8 -11
  47. package/build-module/blocks/legacy-widget/edit/index.js.map +1 -1
  48. package/build-module/blocks/legacy-widget/edit/inspector-card.js.map +1 -1
  49. package/build-module/blocks/legacy-widget/edit/no-preview.js +0 -1
  50. package/build-module/blocks/legacy-widget/edit/no-preview.js.map +1 -1
  51. package/build-module/blocks/legacy-widget/edit/preview.js +11 -15
  52. package/build-module/blocks/legacy-widget/edit/preview.js.map +1 -1
  53. package/build-module/blocks/legacy-widget/edit/widget-type-selector.js +0 -5
  54. package/build-module/blocks/legacy-widget/edit/widget-type-selector.js.map +1 -1
  55. package/build-module/blocks/legacy-widget/index.js +1 -1
  56. package/build-module/blocks/legacy-widget/index.js.map +1 -1
  57. package/build-module/blocks/legacy-widget/transforms.js +0 -2
  58. package/build-module/blocks/legacy-widget/transforms.js.map +1 -1
  59. package/build-module/blocks/widget-group/deprecated.js +0 -3
  60. package/build-module/blocks/widget-group/deprecated.js.map +1 -1
  61. package/build-module/blocks/widget-group/edit.js +6 -7
  62. package/build-module/blocks/widget-group/edit.js.map +1 -1
  63. package/build-module/blocks/widget-group/index.js +8 -8
  64. package/build-module/blocks/widget-group/index.js.map +1 -1
  65. package/build-module/blocks/widget-group/save.js +0 -1
  66. package/build-module/blocks/widget-group/save.js.map +1 -1
  67. package/build-module/components/index.js.map +1 -1
  68. package/build-module/components/move-to-widget-area/index.js +0 -1
  69. package/build-module/components/move-to-widget-area/index.js.map +1 -1
  70. package/build-module/index.js +11 -7
  71. package/build-module/index.js.map +1 -1
  72. package/build-module/register-legacy-widget-variations.js +0 -2
  73. package/build-module/register-legacy-widget-variations.js.map +1 -1
  74. package/build-module/utils.js +5 -3
  75. package/build-module/utils.js.map +1 -1
  76. package/package.json +13 -13
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 3.17.0 (2023-08-16)
6
+
5
7
  ## 3.16.0 (2023-08-10)
6
8
 
7
9
  ## 3.15.0 (2023-07-20)
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _apiFetch = _interopRequireDefault(require("@wordpress/api-fetch"));
11
-
12
9
  var _compose = require("@wordpress/compose");
13
-
14
10
  var _i18n = require("@wordpress/i18n");
15
-
16
11
  /**
17
12
  * WordPress dependencies
18
13
  */
@@ -53,10 +48,11 @@ class Control {
53
48
  this._hasPreview = null;
54
49
  this.onChangeInstance = onChangeInstance;
55
50
  this.onChangeHasPreview = onChangeHasPreview;
56
- this.onError = onError; // We can't use the real widget number as this is calculated by the
51
+ this.onError = onError;
52
+
53
+ // We can't use the real widget number as this is calculated by the
57
54
  // server and we may not ever *actually* save this widget. Instead, use
58
55
  // a fake but unique number.
59
-
60
56
  this.number = ++lastNumber;
61
57
  this.handleFormChange = (0, _compose.debounce)(this.handleFormChange.bind(this), 200);
62
58
  this.handleFormSubmit = this.handleFormSubmit.bind(this);
@@ -64,28 +60,26 @@ class Control {
64
60
  this.bindEvents();
65
61
  this.loadContent();
66
62
  }
63
+
67
64
  /**
68
65
  * Clean up the control so that it can be garabge collected.
69
66
  *
70
67
  * @access public
71
68
  */
72
-
73
-
74
69
  destroy() {
75
70
  this.unbindEvents();
76
- this.element.remove(); // TODO: How do we make third party widget scripts remove their event
71
+ this.element.remove();
72
+ // TODO: How do we make third party widget scripts remove their event
77
73
  // listeners?
78
74
  }
75
+
79
76
  /**
80
77
  * Creates the control's DOM structure.
81
78
  *
82
79
  * @access private
83
80
  */
84
-
85
-
86
81
  initDOM() {
87
82
  var _this$id, _this$idBase;
88
-
89
83
  this.element = el('div', {
90
84
  class: 'widget open'
91
85
  }, [el('div', {
@@ -93,7 +87,8 @@ class Control {
93
87
  }, [this.form = el('form', {
94
88
  class: 'form',
95
89
  method: 'post'
96
- }, [// These hidden form inputs are what most widgets' scripts
90
+ }, [
91
+ // These hidden form inputs are what most widgets' scripts
97
92
  // use to access data about the widget.
98
93
  el('input', {
99
94
  class: 'widget-id',
@@ -122,19 +117,19 @@ class Control {
122
117
  value: this.idBase ? this.number.toString() : ''
123
118
  }), this.content = el('div', {
124
119
  class: 'widget-content'
125
- }), // Non-multi widgets can be saved via a Save button.
120
+ }),
121
+ // Non-multi widgets can be saved via a Save button.
126
122
  this.id && el('button', {
127
123
  class: 'button is-primary',
128
124
  type: 'submit'
129
125
  }, (0, _i18n.__)('Save'))])])]);
130
126
  }
127
+
131
128
  /**
132
129
  * Adds the control's event listeners.
133
130
  *
134
131
  * @access private
135
132
  */
136
-
137
-
138
133
  bindEvents() {
139
134
  // Prefer jQuery 'change' event instead of the native 'change' event
140
135
  // because many widgets use jQuery's event bus to trigger an update.
@@ -151,13 +146,12 @@ class Control {
151
146
  this.form.addEventListener('submit', this.handleFormSubmit);
152
147
  }
153
148
  }
149
+
154
150
  /**
155
151
  * Removes the control's event listeners.
156
152
  *
157
153
  * @access private
158
154
  */
159
-
160
-
161
155
  unbindEvents() {
162
156
  if (window.jQuery) {
163
157
  const {
@@ -172,14 +166,13 @@ class Control {
172
166
  this.form.removeEventListener('submit', this.handleFormSubmit);
173
167
  }
174
168
  }
169
+
175
170
  /**
176
171
  * Fetches the widget's form HTML from the REST API and loads it into the
177
172
  * control's form.
178
173
  *
179
174
  * @access private
180
175
  */
181
-
182
-
183
176
  async loadContent() {
184
177
  try {
185
178
  if (this.id) {
@@ -197,9 +190,10 @@ class Control {
197
190
  number: this.number
198
191
  });
199
192
  this.content.innerHTML = form;
200
- this.hasPreview = !isEmptyHTML(preview); // If we don't have an instance, perform a save right away. This
201
- // happens when creating a new Legacy Widget block.
193
+ this.hasPreview = !isEmptyHTML(preview);
202
194
 
195
+ // If we don't have an instance, perform a save right away. This
196
+ // happens when creating a new Legacy Widget block.
203
197
  if (!this.instance.hash) {
204
198
  const {
205
199
  instance
@@ -211,13 +205,13 @@ class Control {
211
205
  });
212
206
  this.instance = instance;
213
207
  }
214
- } // Trigger 'widget-added' when widget is ready. This event is what
208
+ }
209
+
210
+ // Trigger 'widget-added' when widget is ready. This event is what
215
211
  // widgets' scripts use to initialize, attach events, etc. The event
216
212
  // must be fired using jQuery's event bus as this is what widget
217
213
  // scripts expect. If jQuery is not loaded, do nothing - some
218
214
  // widgets will still work regardless.
219
-
220
-
221
215
  if (window.jQuery) {
222
216
  const {
223
217
  jQuery: $
@@ -228,49 +222,44 @@ class Control {
228
222
  this.onError(error);
229
223
  }
230
224
  }
225
+
231
226
  /**
232
227
  * Perform a save when a multi widget's form is changed. Non-multi widgets
233
228
  * are saved manually.
234
229
  *
235
230
  * @access private
236
231
  */
237
-
238
-
239
232
  handleFormChange() {
240
233
  if (this.idBase) {
241
234
  this.saveForm();
242
235
  }
243
236
  }
237
+
244
238
  /**
245
239
  * Perform a save when the control's form is manually submitted.
246
240
  *
247
241
  * @access private
248
242
  * @param {Event} event
249
243
  */
250
-
251
-
252
244
  handleFormSubmit(event) {
253
245
  event.preventDefault();
254
246
  this.saveForm();
255
247
  }
248
+
256
249
  /**
257
250
  * Serialize the control's form, send it to the REST API, and update the
258
251
  * instance with the encoded instance that the REST API returns.
259
252
  *
260
253
  * @access private
261
254
  */
262
-
263
-
264
255
  async saveForm() {
265
256
  const formData = serializeForm(this.form);
266
-
267
257
  try {
268
258
  if (this.id) {
269
259
  const {
270
260
  form
271
261
  } = await saveWidget(this.id, formData);
272
262
  this.content.innerHTML = form;
273
-
274
263
  if (window.jQuery) {
275
264
  const {
276
265
  jQuery: $
@@ -294,65 +283,56 @@ class Control {
294
283
  this.onError(error);
295
284
  }
296
285
  }
286
+
297
287
  /**
298
288
  * The widget's instance object.
299
289
  *
300
290
  * @access private
301
291
  */
302
-
303
-
304
292
  get instance() {
305
293
  return this._instance;
306
294
  }
295
+
307
296
  /**
308
297
  * The widget's instance object.
309
298
  *
310
299
  * @access private
311
300
  */
312
-
313
-
314
301
  set instance(instance) {
315
302
  if (this._instance !== instance) {
316
303
  this._instance = instance;
317
304
  this.onChangeInstance(instance);
318
305
  }
319
306
  }
307
+
320
308
  /**
321
309
  * Whether or not the widget can be previewed.
322
310
  *
323
311
  * @access public
324
312
  */
325
-
326
-
327
313
  get hasPreview() {
328
314
  return this._hasPreview;
329
315
  }
316
+
330
317
  /**
331
318
  * Whether or not the widget can be previewed.
332
319
  *
333
320
  * @access private
334
321
  */
335
-
336
-
337
322
  set hasPreview(hasPreview) {
338
323
  if (this._hasPreview !== hasPreview) {
339
324
  this._hasPreview = hasPreview;
340
325
  this.onChangeHasPreview(hasPreview);
341
326
  }
342
327
  }
343
-
344
328
  }
345
-
346
329
  exports.default = Control;
347
330
  let lastNumber = 0;
348
-
349
331
  function el(tagName, attributes = {}, content = null) {
350
332
  const element = document.createElement(tagName);
351
-
352
333
  for (const [attribute, value] of Object.entries(attributes)) {
353
334
  element.setAttribute(attribute, value);
354
335
  }
355
-
356
336
  if (Array.isArray(content)) {
357
337
  for (const child of content) {
358
338
  if (child) {
@@ -362,13 +342,10 @@ function el(tagName, attributes = {}, content = null) {
362
342
  } else if (typeof content === 'string') {
363
343
  element.innerText = content;
364
344
  }
365
-
366
345
  return element;
367
346
  }
368
-
369
347
  async function saveWidget(id, formData = null) {
370
348
  let widget;
371
-
372
349
  if (formData) {
373
350
  widget = await (0, _apiFetch.default)({
374
351
  path: `/wp/v2/widgets/${id}?context=edit`,
@@ -383,12 +360,10 @@ async function saveWidget(id, formData = null) {
383
360
  method: 'GET'
384
361
  });
385
362
  }
386
-
387
363
  return {
388
364
  form: widget.rendered_form
389
365
  };
390
366
  }
391
-
392
367
  async function encodeWidget({
393
368
  idBase,
394
369
  instance,
@@ -410,39 +385,32 @@ async function encodeWidget({
410
385
  preview: response.preview
411
386
  };
412
387
  }
413
-
414
388
  function isEmptyHTML(html) {
415
389
  const element = document.createElement('div');
416
390
  element.innerHTML = html;
417
391
  return isEmptyNode(element);
418
392
  }
419
-
420
393
  function isEmptyNode(node) {
421
394
  switch (node.nodeType) {
422
395
  case node.TEXT_NODE:
423
396
  // Text nodes are empty if it's entirely whitespace.
424
397
  return node.nodeValue.trim() === '';
425
-
426
398
  case node.ELEMENT_NODE:
427
399
  // Elements that are "embedded content" are not empty.
428
400
  // https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0
429
401
  if (['AUDIO', 'CANVAS', 'EMBED', 'IFRAME', 'IMG', 'MATH', 'OBJECT', 'SVG', 'VIDEO'].includes(node.tagName)) {
430
402
  return false;
431
- } // Elements with no children are empty.
432
-
433
-
403
+ }
404
+ // Elements with no children are empty.
434
405
  if (!node.hasChildNodes()) {
435
406
  return true;
436
- } // Elements with children are empty if all their children are empty.
437
-
438
-
407
+ }
408
+ // Elements with children are empty if all their children are empty.
439
409
  return Array.from(node.childNodes).every(isEmptyNode);
440
-
441
410
  default:
442
411
  return true;
443
412
  }
444
413
  }
445
-
446
414
  function serializeForm(form) {
447
415
  return new window.URLSearchParams(Array.from(new window.FormData(form))).toString();
448
416
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/control.js"],"names":["Control","constructor","id","idBase","instance","onChangeInstance","onChangeHasPreview","onError","_instance","_hasPreview","number","lastNumber","handleFormChange","bind","handleFormSubmit","initDOM","bindEvents","loadContent","destroy","unbindEvents","element","remove","el","class","form","method","type","name","value","toString","content","window","jQuery","$","on","addEventListener","off","removeEventListener","saveWidget","innerHTML","preview","encodeWidget","hasPreview","isEmptyHTML","hash","formData","serializeForm","document","trigger","error","saveForm","event","preventDefault","tagName","attributes","createElement","attribute","Object","entries","setAttribute","Array","isArray","child","appendChild","innerText","widget","path","data","form_data","rendered_form","response","html","isEmptyNode","node","nodeType","TEXT_NODE","nodeValue","trim","ELEMENT_NODE","includes","hasChildNodes","from","childNodes","every","URLSearchParams","FormData"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { debounce } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * An API for creating and loading a widget control (a <div class=\"widget\">\n * element) that is compatible with most third party widget scripts. By not\n * using React for this, we ensure that we have complete contorl over the DOM\n * and do not accidentally remove any elements that a third party widget script\n * has attached an event listener to.\n *\n * @property {Element} element The control's DOM element.\n */\nexport default class Control {\n\t/**\n\t * Creates and loads a new control.\n\t *\n\t * @access public\n\t * @param {Object} params\n\t * @param {string} params.id\n\t * @param {string} params.idBase\n\t * @param {Object} params.instance\n\t * @param {Function} params.onChangeInstance\n\t * @param {Function} params.onChangeHasPreview\n\t * @param {Function} params.onError\n\t */\n\tconstructor( {\n\t\tid,\n\t\tidBase,\n\t\tinstance,\n\t\tonChangeInstance,\n\t\tonChangeHasPreview,\n\t\tonError,\n\t} ) {\n\t\tthis.id = id;\n\t\tthis.idBase = idBase;\n\t\tthis._instance = instance;\n\t\tthis._hasPreview = null;\n\t\tthis.onChangeInstance = onChangeInstance;\n\t\tthis.onChangeHasPreview = onChangeHasPreview;\n\t\tthis.onError = onError;\n\n\t\t// We can't use the real widget number as this is calculated by the\n\t\t// server and we may not ever *actually* save this widget. Instead, use\n\t\t// a fake but unique number.\n\t\tthis.number = ++lastNumber;\n\n\t\tthis.handleFormChange = debounce(\n\t\t\tthis.handleFormChange.bind( this ),\n\t\t\t200\n\t\t);\n\t\tthis.handleFormSubmit = this.handleFormSubmit.bind( this );\n\n\t\tthis.initDOM();\n\t\tthis.bindEvents();\n\t\tthis.loadContent();\n\t}\n\n\t/**\n\t * Clean up the control so that it can be garabge collected.\n\t *\n\t * @access public\n\t */\n\tdestroy() {\n\t\tthis.unbindEvents();\n\t\tthis.element.remove();\n\t\t// TODO: How do we make third party widget scripts remove their event\n\t\t// listeners?\n\t}\n\n\t/**\n\t * Creates the control's DOM structure.\n\t *\n\t * @access private\n\t */\n\tinitDOM() {\n\t\tthis.element = el( 'div', { class: 'widget open' }, [\n\t\t\tel( 'div', { class: 'widget-inside' }, [\n\t\t\t\t( this.form = el( 'form', { class: 'form', method: 'post' }, [\n\t\t\t\t\t// These hidden form inputs are what most widgets' scripts\n\t\t\t\t\t// use to access data about the widget.\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-id',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-id',\n\t\t\t\t\t\tvalue: this.id ?? `${ this.idBase }-${ this.number }`,\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'id_base',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'id_base',\n\t\t\t\t\t\tvalue: this.idBase ?? this.id,\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-width',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-width',\n\t\t\t\t\t\tvalue: '250',\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-height',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-height',\n\t\t\t\t\t\tvalue: '200',\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget_number',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget_number',\n\t\t\t\t\t\tvalue: this.idBase ? this.number.toString() : '',\n\t\t\t\t\t} ),\n\t\t\t\t\t( this.content = el( 'div', { class: 'widget-content' } ) ),\n\t\t\t\t\t// Non-multi widgets can be saved via a Save button.\n\t\t\t\t\tthis.id &&\n\t\t\t\t\t\tel(\n\t\t\t\t\t\t\t'button',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclass: 'button is-primary',\n\t\t\t\t\t\t\t\ttype: 'submit',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t__( 'Save' )\n\t\t\t\t\t\t),\n\t\t\t\t] ) ),\n\t\t\t] ),\n\t\t] );\n\t}\n\n\t/**\n\t * Adds the control's event listeners.\n\t *\n\t * @access private\n\t */\n\tbindEvents() {\n\t\t// Prefer jQuery 'change' event instead of the native 'change' event\n\t\t// because many widgets use jQuery's event bus to trigger an update.\n\t\tif ( window.jQuery ) {\n\t\t\tconst { jQuery: $ } = window;\n\t\t\t$( this.form ).on( 'change', null, this.handleFormChange );\n\t\t\t$( this.form ).on( 'input', null, this.handleFormChange );\n\t\t\t$( this.form ).on( 'submit', this.handleFormSubmit );\n\t\t} else {\n\t\t\tthis.form.addEventListener( 'change', this.handleFormChange );\n\t\t\tthis.form.addEventListener( 'input', this.handleFormChange );\n\t\t\tthis.form.addEventListener( 'submit', this.handleFormSubmit );\n\t\t}\n\t}\n\n\t/**\n\t * Removes the control's event listeners.\n\t *\n\t * @access private\n\t */\n\tunbindEvents() {\n\t\tif ( window.jQuery ) {\n\t\t\tconst { jQuery: $ } = window;\n\t\t\t$( this.form ).off( 'change', null, this.handleFormChange );\n\t\t\t$( this.form ).off( 'input', null, this.handleFormChange );\n\t\t\t$( this.form ).off( 'submit', this.handleFormSubmit );\n\t\t} else {\n\t\t\tthis.form.removeEventListener( 'change', this.handleFormChange );\n\t\t\tthis.form.removeEventListener( 'input', this.handleFormChange );\n\t\t\tthis.form.removeEventListener( 'submit', this.handleFormSubmit );\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the widget's form HTML from the REST API and loads it into the\n\t * control's form.\n\t *\n\t * @access private\n\t */\n\tasync loadContent() {\n\t\ttry {\n\t\t\tif ( this.id ) {\n\t\t\t\tconst { form } = await saveWidget( this.id );\n\t\t\t\tthis.content.innerHTML = form;\n\t\t\t} else if ( this.idBase ) {\n\t\t\t\tconst { form, preview } = await encodeWidget( {\n\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\tnumber: this.number,\n\t\t\t\t} );\n\t\t\t\tthis.content.innerHTML = form;\n\t\t\t\tthis.hasPreview = ! isEmptyHTML( preview );\n\n\t\t\t\t// If we don't have an instance, perform a save right away. This\n\t\t\t\t// happens when creating a new Legacy Widget block.\n\t\t\t\tif ( ! this.instance.hash ) {\n\t\t\t\t\tconst { instance } = await encodeWidget( {\n\t\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\t\tnumber: this.number,\n\t\t\t\t\t\tformData: serializeForm( this.form ),\n\t\t\t\t\t} );\n\t\t\t\t\tthis.instance = instance;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Trigger 'widget-added' when widget is ready. This event is what\n\t\t\t// widgets' scripts use to initialize, attach events, etc. The event\n\t\t\t// must be fired using jQuery's event bus as this is what widget\n\t\t\t// scripts expect. If jQuery is not loaded, do nothing - some\n\t\t\t// widgets will still work regardless.\n\t\t\tif ( window.jQuery ) {\n\t\t\t\tconst { jQuery: $ } = window;\n\t\t\t\t$( document ).trigger( 'widget-added', [ $( this.element ) ] );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tthis.onError( error );\n\t\t}\n\t}\n\n\t/**\n\t * Perform a save when a multi widget's form is changed. Non-multi widgets\n\t * are saved manually.\n\t *\n\t * @access private\n\t */\n\thandleFormChange() {\n\t\tif ( this.idBase ) {\n\t\t\tthis.saveForm();\n\t\t}\n\t}\n\n\t/**\n\t * Perform a save when the control's form is manually submitted.\n\t *\n\t * @access private\n\t * @param {Event} event\n\t */\n\thandleFormSubmit( event ) {\n\t\tevent.preventDefault();\n\t\tthis.saveForm();\n\t}\n\n\t/**\n\t * Serialize the control's form, send it to the REST API, and update the\n\t * instance with the encoded instance that the REST API returns.\n\t *\n\t * @access private\n\t */\n\tasync saveForm() {\n\t\tconst formData = serializeForm( this.form );\n\n\t\ttry {\n\t\t\tif ( this.id ) {\n\t\t\t\tconst { form } = await saveWidget( this.id, formData );\n\t\t\t\tthis.content.innerHTML = form;\n\n\t\t\t\tif ( window.jQuery ) {\n\t\t\t\t\tconst { jQuery: $ } = window;\n\t\t\t\t\t$( document ).trigger( 'widget-updated', [\n\t\t\t\t\t\t$( this.element ),\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t} else if ( this.idBase ) {\n\t\t\t\tconst { instance, preview } = await encodeWidget( {\n\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\tnumber: this.number,\n\t\t\t\t\tformData,\n\t\t\t\t} );\n\t\t\t\tthis.instance = instance;\n\t\t\t\tthis.hasPreview = ! isEmptyHTML( preview );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tthis.onError( error );\n\t\t}\n\t}\n\n\t/**\n\t * The widget's instance object.\n\t *\n\t * @access private\n\t */\n\tget instance() {\n\t\treturn this._instance;\n\t}\n\n\t/**\n\t * The widget's instance object.\n\t *\n\t * @access private\n\t */\n\tset instance( instance ) {\n\t\tif ( this._instance !== instance ) {\n\t\t\tthis._instance = instance;\n\t\t\tthis.onChangeInstance( instance );\n\t\t}\n\t}\n\n\t/**\n\t * Whether or not the widget can be previewed.\n\t *\n\t * @access public\n\t */\n\tget hasPreview() {\n\t\treturn this._hasPreview;\n\t}\n\n\t/**\n\t * Whether or not the widget can be previewed.\n\t *\n\t * @access private\n\t */\n\tset hasPreview( hasPreview ) {\n\t\tif ( this._hasPreview !== hasPreview ) {\n\t\t\tthis._hasPreview = hasPreview;\n\t\t\tthis.onChangeHasPreview( hasPreview );\n\t\t}\n\t}\n}\n\nlet lastNumber = 0;\n\nfunction el( tagName, attributes = {}, content = null ) {\n\tconst element = document.createElement( tagName );\n\tfor ( const [ attribute, value ] of Object.entries( attributes ) ) {\n\t\telement.setAttribute( attribute, value );\n\t}\n\tif ( Array.isArray( content ) ) {\n\t\tfor ( const child of content ) {\n\t\t\tif ( child ) {\n\t\t\t\telement.appendChild( child );\n\t\t\t}\n\t\t}\n\t} else if ( typeof content === 'string' ) {\n\t\telement.innerText = content;\n\t}\n\treturn element;\n}\n\nasync function saveWidget( id, formData = null ) {\n\tlet widget;\n\tif ( formData ) {\n\t\twidget = await apiFetch( {\n\t\t\tpath: `/wp/v2/widgets/${ id }?context=edit`,\n\t\t\tmethod: 'PUT',\n\t\t\tdata: {\n\t\t\t\tform_data: formData,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\twidget = await apiFetch( {\n\t\t\tpath: `/wp/v2/widgets/${ id }?context=edit`,\n\t\t\tmethod: 'GET',\n\t\t} );\n\t}\n\treturn { form: widget.rendered_form };\n}\n\nasync function encodeWidget( { idBase, instance, number, formData = null } ) {\n\tconst response = await apiFetch( {\n\t\tpath: `/wp/v2/widget-types/${ idBase }/encode`,\n\t\tmethod: 'POST',\n\t\tdata: {\n\t\t\tinstance,\n\t\t\tnumber,\n\t\t\tform_data: formData,\n\t\t},\n\t} );\n\treturn {\n\t\tinstance: response.instance,\n\t\tform: response.form,\n\t\tpreview: response.preview,\n\t};\n}\n\nfunction isEmptyHTML( html ) {\n\tconst element = document.createElement( 'div' );\n\telement.innerHTML = html;\n\treturn isEmptyNode( element );\n}\n\nfunction isEmptyNode( node ) {\n\tswitch ( node.nodeType ) {\n\t\tcase node.TEXT_NODE:\n\t\t\t// Text nodes are empty if it's entirely whitespace.\n\t\t\treturn node.nodeValue.trim() === '';\n\t\tcase node.ELEMENT_NODE:\n\t\t\t// Elements that are \"embedded content\" are not empty.\n\t\t\t// https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\t'AUDIO',\n\t\t\t\t\t'CANVAS',\n\t\t\t\t\t'EMBED',\n\t\t\t\t\t'IFRAME',\n\t\t\t\t\t'IMG',\n\t\t\t\t\t'MATH',\n\t\t\t\t\t'OBJECT',\n\t\t\t\t\t'SVG',\n\t\t\t\t\t'VIDEO',\n\t\t\t\t].includes( node.tagName )\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Elements with no children are empty.\n\t\t\tif ( ! node.hasChildNodes() ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// Elements with children are empty if all their children are empty.\n\t\t\treturn Array.from( node.childNodes ).every( isEmptyNode );\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nfunction serializeForm( form ) {\n\treturn new window.URLSearchParams(\n\t\tArray.from( new window.FormData( form ) )\n\t).toString();\n}\n"]}
1
+ {"version":3,"names":["_apiFetch","_interopRequireDefault","require","_compose","_i18n","Control","constructor","id","idBase","instance","onChangeInstance","onChangeHasPreview","onError","_instance","_hasPreview","number","lastNumber","handleFormChange","debounce","bind","handleFormSubmit","initDOM","bindEvents","loadContent","destroy","unbindEvents","element","remove","_this$id","_this$idBase","el","class","form","method","type","name","value","toString","content","__","window","jQuery","$","on","addEventListener","off","removeEventListener","saveWidget","innerHTML","preview","encodeWidget","hasPreview","isEmptyHTML","hash","formData","serializeForm","document","trigger","error","saveForm","event","preventDefault","exports","default","tagName","attributes","createElement","attribute","Object","entries","setAttribute","Array","isArray","child","appendChild","innerText","widget","apiFetch","path","data","form_data","rendered_form","response","html","isEmptyNode","node","nodeType","TEXT_NODE","nodeValue","trim","ELEMENT_NODE","includes","hasChildNodes","from","childNodes","every","URLSearchParams","FormData"],"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/control.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport apiFetch from '@wordpress/api-fetch';\nimport { debounce } from '@wordpress/compose';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * An API for creating and loading a widget control (a <div class=\"widget\">\n * element) that is compatible with most third party widget scripts. By not\n * using React for this, we ensure that we have complete contorl over the DOM\n * and do not accidentally remove any elements that a third party widget script\n * has attached an event listener to.\n *\n * @property {Element} element The control's DOM element.\n */\nexport default class Control {\n\t/**\n\t * Creates and loads a new control.\n\t *\n\t * @access public\n\t * @param {Object} params\n\t * @param {string} params.id\n\t * @param {string} params.idBase\n\t * @param {Object} params.instance\n\t * @param {Function} params.onChangeInstance\n\t * @param {Function} params.onChangeHasPreview\n\t * @param {Function} params.onError\n\t */\n\tconstructor( {\n\t\tid,\n\t\tidBase,\n\t\tinstance,\n\t\tonChangeInstance,\n\t\tonChangeHasPreview,\n\t\tonError,\n\t} ) {\n\t\tthis.id = id;\n\t\tthis.idBase = idBase;\n\t\tthis._instance = instance;\n\t\tthis._hasPreview = null;\n\t\tthis.onChangeInstance = onChangeInstance;\n\t\tthis.onChangeHasPreview = onChangeHasPreview;\n\t\tthis.onError = onError;\n\n\t\t// We can't use the real widget number as this is calculated by the\n\t\t// server and we may not ever *actually* save this widget. Instead, use\n\t\t// a fake but unique number.\n\t\tthis.number = ++lastNumber;\n\n\t\tthis.handleFormChange = debounce(\n\t\t\tthis.handleFormChange.bind( this ),\n\t\t\t200\n\t\t);\n\t\tthis.handleFormSubmit = this.handleFormSubmit.bind( this );\n\n\t\tthis.initDOM();\n\t\tthis.bindEvents();\n\t\tthis.loadContent();\n\t}\n\n\t/**\n\t * Clean up the control so that it can be garabge collected.\n\t *\n\t * @access public\n\t */\n\tdestroy() {\n\t\tthis.unbindEvents();\n\t\tthis.element.remove();\n\t\t// TODO: How do we make third party widget scripts remove their event\n\t\t// listeners?\n\t}\n\n\t/**\n\t * Creates the control's DOM structure.\n\t *\n\t * @access private\n\t */\n\tinitDOM() {\n\t\tthis.element = el( 'div', { class: 'widget open' }, [\n\t\t\tel( 'div', { class: 'widget-inside' }, [\n\t\t\t\t( this.form = el( 'form', { class: 'form', method: 'post' }, [\n\t\t\t\t\t// These hidden form inputs are what most widgets' scripts\n\t\t\t\t\t// use to access data about the widget.\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-id',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-id',\n\t\t\t\t\t\tvalue: this.id ?? `${ this.idBase }-${ this.number }`,\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'id_base',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'id_base',\n\t\t\t\t\t\tvalue: this.idBase ?? this.id,\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-width',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-width',\n\t\t\t\t\t\tvalue: '250',\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget-height',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget-height',\n\t\t\t\t\t\tvalue: '200',\n\t\t\t\t\t} ),\n\t\t\t\t\tel( 'input', {\n\t\t\t\t\t\tclass: 'widget_number',\n\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\tname: 'widget_number',\n\t\t\t\t\t\tvalue: this.idBase ? this.number.toString() : '',\n\t\t\t\t\t} ),\n\t\t\t\t\t( this.content = el( 'div', { class: 'widget-content' } ) ),\n\t\t\t\t\t// Non-multi widgets can be saved via a Save button.\n\t\t\t\t\tthis.id &&\n\t\t\t\t\t\tel(\n\t\t\t\t\t\t\t'button',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclass: 'button is-primary',\n\t\t\t\t\t\t\t\ttype: 'submit',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t__( 'Save' )\n\t\t\t\t\t\t),\n\t\t\t\t] ) ),\n\t\t\t] ),\n\t\t] );\n\t}\n\n\t/**\n\t * Adds the control's event listeners.\n\t *\n\t * @access private\n\t */\n\tbindEvents() {\n\t\t// Prefer jQuery 'change' event instead of the native 'change' event\n\t\t// because many widgets use jQuery's event bus to trigger an update.\n\t\tif ( window.jQuery ) {\n\t\t\tconst { jQuery: $ } = window;\n\t\t\t$( this.form ).on( 'change', null, this.handleFormChange );\n\t\t\t$( this.form ).on( 'input', null, this.handleFormChange );\n\t\t\t$( this.form ).on( 'submit', this.handleFormSubmit );\n\t\t} else {\n\t\t\tthis.form.addEventListener( 'change', this.handleFormChange );\n\t\t\tthis.form.addEventListener( 'input', this.handleFormChange );\n\t\t\tthis.form.addEventListener( 'submit', this.handleFormSubmit );\n\t\t}\n\t}\n\n\t/**\n\t * Removes the control's event listeners.\n\t *\n\t * @access private\n\t */\n\tunbindEvents() {\n\t\tif ( window.jQuery ) {\n\t\t\tconst { jQuery: $ } = window;\n\t\t\t$( this.form ).off( 'change', null, this.handleFormChange );\n\t\t\t$( this.form ).off( 'input', null, this.handleFormChange );\n\t\t\t$( this.form ).off( 'submit', this.handleFormSubmit );\n\t\t} else {\n\t\t\tthis.form.removeEventListener( 'change', this.handleFormChange );\n\t\t\tthis.form.removeEventListener( 'input', this.handleFormChange );\n\t\t\tthis.form.removeEventListener( 'submit', this.handleFormSubmit );\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the widget's form HTML from the REST API and loads it into the\n\t * control's form.\n\t *\n\t * @access private\n\t */\n\tasync loadContent() {\n\t\ttry {\n\t\t\tif ( this.id ) {\n\t\t\t\tconst { form } = await saveWidget( this.id );\n\t\t\t\tthis.content.innerHTML = form;\n\t\t\t} else if ( this.idBase ) {\n\t\t\t\tconst { form, preview } = await encodeWidget( {\n\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\tnumber: this.number,\n\t\t\t\t} );\n\t\t\t\tthis.content.innerHTML = form;\n\t\t\t\tthis.hasPreview = ! isEmptyHTML( preview );\n\n\t\t\t\t// If we don't have an instance, perform a save right away. This\n\t\t\t\t// happens when creating a new Legacy Widget block.\n\t\t\t\tif ( ! this.instance.hash ) {\n\t\t\t\t\tconst { instance } = await encodeWidget( {\n\t\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\t\tnumber: this.number,\n\t\t\t\t\t\tformData: serializeForm( this.form ),\n\t\t\t\t\t} );\n\t\t\t\t\tthis.instance = instance;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Trigger 'widget-added' when widget is ready. This event is what\n\t\t\t// widgets' scripts use to initialize, attach events, etc. The event\n\t\t\t// must be fired using jQuery's event bus as this is what widget\n\t\t\t// scripts expect. If jQuery is not loaded, do nothing - some\n\t\t\t// widgets will still work regardless.\n\t\t\tif ( window.jQuery ) {\n\t\t\t\tconst { jQuery: $ } = window;\n\t\t\t\t$( document ).trigger( 'widget-added', [ $( this.element ) ] );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tthis.onError( error );\n\t\t}\n\t}\n\n\t/**\n\t * Perform a save when a multi widget's form is changed. Non-multi widgets\n\t * are saved manually.\n\t *\n\t * @access private\n\t */\n\thandleFormChange() {\n\t\tif ( this.idBase ) {\n\t\t\tthis.saveForm();\n\t\t}\n\t}\n\n\t/**\n\t * Perform a save when the control's form is manually submitted.\n\t *\n\t * @access private\n\t * @param {Event} event\n\t */\n\thandleFormSubmit( event ) {\n\t\tevent.preventDefault();\n\t\tthis.saveForm();\n\t}\n\n\t/**\n\t * Serialize the control's form, send it to the REST API, and update the\n\t * instance with the encoded instance that the REST API returns.\n\t *\n\t * @access private\n\t */\n\tasync saveForm() {\n\t\tconst formData = serializeForm( this.form );\n\n\t\ttry {\n\t\t\tif ( this.id ) {\n\t\t\t\tconst { form } = await saveWidget( this.id, formData );\n\t\t\t\tthis.content.innerHTML = form;\n\n\t\t\t\tif ( window.jQuery ) {\n\t\t\t\t\tconst { jQuery: $ } = window;\n\t\t\t\t\t$( document ).trigger( 'widget-updated', [\n\t\t\t\t\t\t$( this.element ),\n\t\t\t\t\t] );\n\t\t\t\t}\n\t\t\t} else if ( this.idBase ) {\n\t\t\t\tconst { instance, preview } = await encodeWidget( {\n\t\t\t\t\tidBase: this.idBase,\n\t\t\t\t\tinstance: this.instance,\n\t\t\t\t\tnumber: this.number,\n\t\t\t\t\tformData,\n\t\t\t\t} );\n\t\t\t\tthis.instance = instance;\n\t\t\t\tthis.hasPreview = ! isEmptyHTML( preview );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\tthis.onError( error );\n\t\t}\n\t}\n\n\t/**\n\t * The widget's instance object.\n\t *\n\t * @access private\n\t */\n\tget instance() {\n\t\treturn this._instance;\n\t}\n\n\t/**\n\t * The widget's instance object.\n\t *\n\t * @access private\n\t */\n\tset instance( instance ) {\n\t\tif ( this._instance !== instance ) {\n\t\t\tthis._instance = instance;\n\t\t\tthis.onChangeInstance( instance );\n\t\t}\n\t}\n\n\t/**\n\t * Whether or not the widget can be previewed.\n\t *\n\t * @access public\n\t */\n\tget hasPreview() {\n\t\treturn this._hasPreview;\n\t}\n\n\t/**\n\t * Whether or not the widget can be previewed.\n\t *\n\t * @access private\n\t */\n\tset hasPreview( hasPreview ) {\n\t\tif ( this._hasPreview !== hasPreview ) {\n\t\t\tthis._hasPreview = hasPreview;\n\t\t\tthis.onChangeHasPreview( hasPreview );\n\t\t}\n\t}\n}\n\nlet lastNumber = 0;\n\nfunction el( tagName, attributes = {}, content = null ) {\n\tconst element = document.createElement( tagName );\n\tfor ( const [ attribute, value ] of Object.entries( attributes ) ) {\n\t\telement.setAttribute( attribute, value );\n\t}\n\tif ( Array.isArray( content ) ) {\n\t\tfor ( const child of content ) {\n\t\t\tif ( child ) {\n\t\t\t\telement.appendChild( child );\n\t\t\t}\n\t\t}\n\t} else if ( typeof content === 'string' ) {\n\t\telement.innerText = content;\n\t}\n\treturn element;\n}\n\nasync function saveWidget( id, formData = null ) {\n\tlet widget;\n\tif ( formData ) {\n\t\twidget = await apiFetch( {\n\t\t\tpath: `/wp/v2/widgets/${ id }?context=edit`,\n\t\t\tmethod: 'PUT',\n\t\t\tdata: {\n\t\t\t\tform_data: formData,\n\t\t\t},\n\t\t} );\n\t} else {\n\t\twidget = await apiFetch( {\n\t\t\tpath: `/wp/v2/widgets/${ id }?context=edit`,\n\t\t\tmethod: 'GET',\n\t\t} );\n\t}\n\treturn { form: widget.rendered_form };\n}\n\nasync function encodeWidget( { idBase, instance, number, formData = null } ) {\n\tconst response = await apiFetch( {\n\t\tpath: `/wp/v2/widget-types/${ idBase }/encode`,\n\t\tmethod: 'POST',\n\t\tdata: {\n\t\t\tinstance,\n\t\t\tnumber,\n\t\t\tform_data: formData,\n\t\t},\n\t} );\n\treturn {\n\t\tinstance: response.instance,\n\t\tform: response.form,\n\t\tpreview: response.preview,\n\t};\n}\n\nfunction isEmptyHTML( html ) {\n\tconst element = document.createElement( 'div' );\n\telement.innerHTML = html;\n\treturn isEmptyNode( element );\n}\n\nfunction isEmptyNode( node ) {\n\tswitch ( node.nodeType ) {\n\t\tcase node.TEXT_NODE:\n\t\t\t// Text nodes are empty if it's entirely whitespace.\n\t\t\treturn node.nodeValue.trim() === '';\n\t\tcase node.ELEMENT_NODE:\n\t\t\t// Elements that are \"embedded content\" are not empty.\n\t\t\t// https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\t'AUDIO',\n\t\t\t\t\t'CANVAS',\n\t\t\t\t\t'EMBED',\n\t\t\t\t\t'IFRAME',\n\t\t\t\t\t'IMG',\n\t\t\t\t\t'MATH',\n\t\t\t\t\t'OBJECT',\n\t\t\t\t\t'SVG',\n\t\t\t\t\t'VIDEO',\n\t\t\t\t].includes( node.tagName )\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Elements with no children are empty.\n\t\t\tif ( ! node.hasChildNodes() ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// Elements with children are empty if all their children are empty.\n\t\t\treturn Array.from( node.childNodes ).every( isEmptyNode );\n\t\tdefault:\n\t\t\treturn true;\n\t}\n}\n\nfunction serializeForm( form ) {\n\treturn new window.URLSearchParams(\n\t\tArray.from( new window.FormData( form ) )\n\t).toString();\n}\n"],"mappings":"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"}
@@ -4,22 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = ConvertToBlocksButton;
7
-
8
7
  var _element = require("@wordpress/element");
9
-
10
8
  var _data = require("@wordpress/data");
11
-
12
9
  var _blockEditor = require("@wordpress/block-editor");
13
-
14
10
  var _components = require("@wordpress/components");
15
-
16
11
  var _blocks = require("@wordpress/blocks");
17
-
18
12
  var _i18n = require("@wordpress/i18n");
19
-
20
13
  /**
21
14
  * WordPress dependencies
22
15
  */
16
+
23
17
  function ConvertToBlocksButton({
24
18
  clientId,
25
19
  rawInstance
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/convert-to-blocks-button.js"],"names":["ConvertToBlocksButton","clientId","rawInstance","replaceBlocks","blockEditorStore","title","content","HTML","text"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAPA;AACA;AACA;AAOe,SAASA,qBAAT,CAAgC;AAAEC,EAAAA,QAAF;AAAYC,EAAAA;AAAZ,CAAhC,EAA4D;AAC1E,QAAM;AAAEC,IAAAA;AAAF,MAAoB,uBAAaC,kBAAb,CAA1B;AAEA,SACC,4BAAC,yBAAD;AACC,IAAA,OAAO,EAAG,MAAM;AACf,UAAKF,WAAW,CAACG,KAAjB,EAAyB;AACxBF,QAAAA,aAAa,CAAEF,QAAF,EAAY,CACxB,yBAAa,cAAb,EAA6B;AAC5BK,UAAAA,OAAO,EAAEJ,WAAW,CAACG;AADO,SAA7B,CADwB,EAIxB,GAAG,wBAAY;AAAEE,UAAAA,IAAI,EAAEL,WAAW,CAACM;AAApB,SAAZ,CAJqB,CAAZ,CAAb;AAMA,OAPD,MAOO;AACNL,QAAAA,aAAa,CACZF,QADY,EAEZ,wBAAY;AAAEM,UAAAA,IAAI,EAAEL,WAAW,CAACM;AAApB,SAAZ,CAFY,CAAb;AAIA;AACD;AAfF,KAiBG,cAAI,mBAAJ,CAjBH,CADD;AAqBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { createBlock, rawHandler } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\nexport default function ConvertToBlocksButton( { clientId, rawInstance } ) {\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tonClick={ () => {\n\t\t\t\tif ( rawInstance.title ) {\n\t\t\t\t\treplaceBlocks( clientId, [\n\t\t\t\t\t\tcreateBlock( 'core/heading', {\n\t\t\t\t\t\t\tcontent: rawInstance.title,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t...rawHandler( { HTML: rawInstance.text } ),\n\t\t\t\t\t] );\n\t\t\t\t} else {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\trawHandler( { HTML: rawInstance.text } )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t{ __( 'Convert to blocks' ) }\n\t\t</ToolbarButton>\n\t);\n}\n"]}
1
+ {"version":3,"names":["_data","require","_blockEditor","_components","_blocks","_i18n","ConvertToBlocksButton","clientId","rawInstance","replaceBlocks","useDispatch","blockEditorStore","_element","createElement","ToolbarButton","onClick","title","createBlock","content","rawHandler","HTML","text","__"],"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/convert-to-blocks-button.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useDispatch } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { ToolbarButton } from '@wordpress/components';\nimport { createBlock, rawHandler } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\nexport default function ConvertToBlocksButton( { clientId, rawInstance } ) {\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\n\treturn (\n\t\t<ToolbarButton\n\t\t\tonClick={ () => {\n\t\t\t\tif ( rawInstance.title ) {\n\t\t\t\t\treplaceBlocks( clientId, [\n\t\t\t\t\t\tcreateBlock( 'core/heading', {\n\t\t\t\t\t\t\tcontent: rawInstance.title,\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\t...rawHandler( { HTML: rawInstance.text } ),\n\t\t\t\t\t] );\n\t\t\t\t} else {\n\t\t\t\t\treplaceBlocks(\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t\trawHandler( { HTML: rawInstance.text } )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} }\n\t\t>\n\t\t\t{ __( 'Convert to blocks' ) }\n\t\t</ToolbarButton>\n\t);\n}\n"],"mappings":";;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAPA;AACA;AACA;;AAOe,SAASK,qBAAqBA,CAAE;EAAEC,QAAQ;EAAEC;AAAY,CAAC,EAAG;EAC1E,MAAM;IAAEC;EAAc,CAAC,GAAG,IAAAC,iBAAW,EAAEC,kBAAiB,CAAC;EAEzD,OACC,IAAAC,QAAA,CAAAC,aAAA,EAACV,WAAA,CAAAW,aAAa;IACbC,OAAO,EAAGA,CAAA,KAAM;MACf,IAAKP,WAAW,CAACQ,KAAK,EAAG;QACxBP,aAAa,CAAEF,QAAQ,EAAE,CACxB,IAAAU,mBAAW,EAAE,cAAc,EAAE;UAC5BC,OAAO,EAAEV,WAAW,CAACQ;QACtB,CAAE,CAAC,EACH,GAAG,IAAAG,kBAAU,EAAE;UAAEC,IAAI,EAAEZ,WAAW,CAACa;QAAK,CAAE,CAAC,CAC1C,CAAC;MACJ,CAAC,MAAM;QACNZ,aAAa,CACZF,QAAQ,EACR,IAAAY,kBAAU,EAAE;UAAEC,IAAI,EAAEZ,WAAW,CAACa;QAAK,CAAE,CACxC,CAAC;MACF;IACD;EAAG,GAED,IAAAC,QAAE,EAAE,mBAAoB,CACZ,CAAC;AAElB"}
@@ -1,28 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = Form;
9
-
10
8
  var _element = require("@wordpress/element");
11
-
12
9
  var _classnames = _interopRequireDefault(require("classnames"));
13
-
14
10
  var _data = require("@wordpress/data");
15
-
16
11
  var _notices = require("@wordpress/notices");
17
-
18
12
  var _i18n = require("@wordpress/i18n");
19
-
20
13
  var _components = require("@wordpress/components");
21
-
22
14
  var _compose = require("@wordpress/compose");
23
-
24
15
  var _control = _interopRequireDefault(require("./control"));
25
-
26
16
  /**
27
17
  * External dependencies
28
18
  */
@@ -34,6 +24,7 @@ var _control = _interopRequireDefault(require("./control"));
34
24
  /**
35
25
  * Internal dependencies
36
26
  */
27
+
37
28
  function Form({
38
29
  title,
39
30
  isVisible,
@@ -45,11 +36,12 @@ function Form({
45
36
  onChangeHasPreview
46
37
  }) {
47
38
  const ref = (0, _element.useRef)();
48
- const isMediumLargeViewport = (0, _compose.useViewportMatch)('small'); // We only want to remount the control when the instance changes
39
+ const isMediumLargeViewport = (0, _compose.useViewportMatch)('small');
40
+
41
+ // We only want to remount the control when the instance changes
49
42
  // *externally*. For example, if the user performs an undo. To do this, we
50
43
  // keep track of changes made to instance by the control itself and then
51
44
  // ignore those.
52
-
53
45
  const outgoingInstances = (0, _element.useRef)(new Set());
54
46
  const incomingInstances = (0, _element.useRef)(new Set());
55
47
  const {
@@ -60,27 +52,21 @@ function Form({
60
52
  incomingInstances.current.delete(instance);
61
53
  return;
62
54
  }
63
-
64
55
  const control = new _control.default({
65
56
  id,
66
57
  idBase,
67
58
  instance,
68
-
69
59
  onChangeInstance(nextInstance) {
70
60
  outgoingInstances.current.add(instance);
71
61
  incomingInstances.current.add(nextInstance);
72
62
  onChangeInstance(nextInstance);
73
63
  },
74
-
75
64
  onChangeHasPreview,
76
-
77
65
  onError(error) {
78
66
  window.console.error(error);
79
- createNotice('error', (0, _i18n.sprintf)(
80
- /* translators: %s: the name of the affected block. */
67
+ createNotice('error', (0, _i18n.sprintf)( /* translators: %s: the name of the affected block. */
81
68
  (0, _i18n.__)('The "%s" block was affected by errors and may not function properly. Check the developer tools for more details.'), idBase || id));
82
69
  }
83
-
84
70
  });
85
71
  ref.current.appendChild(control.element);
86
72
  return () => {
@@ -88,11 +74,9 @@ function Form({
88
74
  outgoingInstances.current.delete(instance);
89
75
  return;
90
76
  }
91
-
92
77
  control.destroy();
93
78
  };
94
79
  }, [id, idBase, instance, onChangeInstance, onChangeHasPreview, isMediumLargeViewport]);
95
-
96
80
  if (isWide && isMediumLargeViewport) {
97
81
  return (0, _element.createElement)("div", {
98
82
  className: (0, _classnames.default)({
@@ -113,7 +97,6 @@ function Form({
113
97
  hidden: !isVisible
114
98
  })));
115
99
  }
116
-
117
100
  return (0, _element.createElement)("div", {
118
101
  ref: ref,
119
102
  className: "wp-block-legacy-widget__edit-form",
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/form.js"],"names":["Form","title","isVisible","id","idBase","instance","isWide","onChangeInstance","onChangeHasPreview","ref","isMediumLargeViewport","outgoingInstances","Set","incomingInstances","createNotice","noticesStore","current","has","delete","control","Control","nextInstance","add","onError","error","window","console","appendChild","element","destroy"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n/**\n * WordPress dependencies\n */\nimport { useRef, useEffect } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Popover } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\n/**\n * Internal dependencies\n */\nimport Control from './control';\n\nexport default function Form( {\n\ttitle,\n\tisVisible,\n\tid,\n\tidBase,\n\tinstance,\n\tisWide,\n\tonChangeInstance,\n\tonChangeHasPreview,\n} ) {\n\tconst ref = useRef();\n\n\tconst isMediumLargeViewport = useViewportMatch( 'small' );\n\n\t// We only want to remount the control when the instance changes\n\t// *externally*. For example, if the user performs an undo. To do this, we\n\t// keep track of changes made to instance by the control itself and then\n\t// ignore those.\n\tconst outgoingInstances = useRef( new Set() );\n\tconst incomingInstances = useRef( new Set() );\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\n\tuseEffect( () => {\n\t\tif ( incomingInstances.current.has( instance ) ) {\n\t\t\tincomingInstances.current.delete( instance );\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = new Control( {\n\t\t\tid,\n\t\t\tidBase,\n\t\t\tinstance,\n\t\t\tonChangeInstance( nextInstance ) {\n\t\t\t\toutgoingInstances.current.add( instance );\n\t\t\t\tincomingInstances.current.add( nextInstance );\n\t\t\t\tonChangeInstance( nextInstance );\n\t\t\t},\n\t\t\tonChangeHasPreview,\n\t\t\tonError( error ) {\n\t\t\t\twindow.console.error( error );\n\t\t\t\tcreateNotice(\n\t\t\t\t\t'error',\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: the name of the affected block. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'The \"%s\" block was affected by errors and may not function properly. Check the developer tools for more details.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tidBase || id\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t},\n\t\t} );\n\n\t\tref.current.appendChild( control.element );\n\n\t\treturn () => {\n\t\t\tif ( outgoingInstances.current.has( instance ) ) {\n\t\t\t\toutgoingInstances.current.delete( instance );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontrol.destroy();\n\t\t};\n\t}, [\n\t\tid,\n\t\tidBase,\n\t\tinstance,\n\t\tonChangeInstance,\n\t\tonChangeHasPreview,\n\t\tisMediumLargeViewport,\n\t] );\n\n\tif ( isWide && isMediumLargeViewport ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t'wp-block-legacy-widget__container': isVisible,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t{ isVisible && (\n\t\t\t\t\t<h3 className=\"wp-block-legacy-widget__edit-form-title\">\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</h3>\n\t\t\t\t) }\n\t\t\t\t<Popover\n\t\t\t\t\tfocusOnMount={ false }\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t\toffset={ 32 }\n\t\t\t\t\tresize={ false }\n\t\t\t\t\tflip={ false }\n\t\t\t\t\tshift\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\tclassName=\"wp-block-legacy-widget__edit-form\"\n\t\t\t\t\t\thidden={ ! isVisible }\n\t\t\t\t\t></div>\n\t\t\t\t</Popover>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={ ref }\n\t\t\tclassName=\"wp-block-legacy-widget__edit-form\"\n\t\t\thidden={ ! isVisible }\n\t\t>\n\t\t\t<h3 className=\"wp-block-legacy-widget__edit-form-title\">\n\t\t\t\t{ title }\n\t\t\t</h3>\n\t\t</div>\n\t);\n}\n"]}
1
+ {"version":3,"names":["_element","require","_classnames","_interopRequireDefault","_data","_notices","_i18n","_components","_compose","_control","Form","title","isVisible","id","idBase","instance","isWide","onChangeInstance","onChangeHasPreview","ref","useRef","isMediumLargeViewport","useViewportMatch","outgoingInstances","Set","incomingInstances","createNotice","useDispatch","noticesStore","useEffect","current","has","delete","control","Control","nextInstance","add","onError","error","window","console","sprintf","__","appendChild","element","destroy","createElement","className","classnames","Popover","focusOnMount","placement","offset","resize","flip","shift","hidden"],"sources":["@wordpress/widgets/src/blocks/legacy-widget/edit/form.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n/**\n * WordPress dependencies\n */\nimport { useRef, useEffect } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { Popover } from '@wordpress/components';\nimport { useViewportMatch } from '@wordpress/compose';\n/**\n * Internal dependencies\n */\nimport Control from './control';\n\nexport default function Form( {\n\ttitle,\n\tisVisible,\n\tid,\n\tidBase,\n\tinstance,\n\tisWide,\n\tonChangeInstance,\n\tonChangeHasPreview,\n} ) {\n\tconst ref = useRef();\n\n\tconst isMediumLargeViewport = useViewportMatch( 'small' );\n\n\t// We only want to remount the control when the instance changes\n\t// *externally*. For example, if the user performs an undo. To do this, we\n\t// keep track of changes made to instance by the control itself and then\n\t// ignore those.\n\tconst outgoingInstances = useRef( new Set() );\n\tconst incomingInstances = useRef( new Set() );\n\n\tconst { createNotice } = useDispatch( noticesStore );\n\n\tuseEffect( () => {\n\t\tif ( incomingInstances.current.has( instance ) ) {\n\t\t\tincomingInstances.current.delete( instance );\n\t\t\treturn;\n\t\t}\n\n\t\tconst control = new Control( {\n\t\t\tid,\n\t\t\tidBase,\n\t\t\tinstance,\n\t\t\tonChangeInstance( nextInstance ) {\n\t\t\t\toutgoingInstances.current.add( instance );\n\t\t\t\tincomingInstances.current.add( nextInstance );\n\t\t\t\tonChangeInstance( nextInstance );\n\t\t\t},\n\t\t\tonChangeHasPreview,\n\t\t\tonError( error ) {\n\t\t\t\twindow.console.error( error );\n\t\t\t\tcreateNotice(\n\t\t\t\t\t'error',\n\t\t\t\t\tsprintf(\n\t\t\t\t\t\t/* translators: %s: the name of the affected block. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'The \"%s\" block was affected by errors and may not function properly. Check the developer tools for more details.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tidBase || id\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t},\n\t\t} );\n\n\t\tref.current.appendChild( control.element );\n\n\t\treturn () => {\n\t\t\tif ( outgoingInstances.current.has( instance ) ) {\n\t\t\t\toutgoingInstances.current.delete( instance );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontrol.destroy();\n\t\t};\n\t}, [\n\t\tid,\n\t\tidBase,\n\t\tinstance,\n\t\tonChangeInstance,\n\t\tonChangeHasPreview,\n\t\tisMediumLargeViewport,\n\t] );\n\n\tif ( isWide && isMediumLargeViewport ) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={ classnames( {\n\t\t\t\t\t'wp-block-legacy-widget__container': isVisible,\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t{ isVisible && (\n\t\t\t\t\t<h3 className=\"wp-block-legacy-widget__edit-form-title\">\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</h3>\n\t\t\t\t) }\n\t\t\t\t<Popover\n\t\t\t\t\tfocusOnMount={ false }\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t\toffset={ 32 }\n\t\t\t\t\tresize={ false }\n\t\t\t\t\tflip={ false }\n\t\t\t\t\tshift\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={ ref }\n\t\t\t\t\t\tclassName=\"wp-block-legacy-widget__edit-form\"\n\t\t\t\t\t\thidden={ ! isVisible }\n\t\t\t\t\t></div>\n\t\t\t\t</Popover>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={ ref }\n\t\t\tclassName=\"wp-block-legacy-widget__edit-form\"\n\t\t\thidden={ ! isVisible }\n\t\t>\n\t\t\t<h3 className=\"wp-block-legacy-widget__edit-form-title\">\n\t\t\t\t{ title }\n\t\t\t</h3>\n\t\t</div>\n\t);\n}\n"],"mappings":"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"}