Bez popisu

widgets.js 46KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671
  1. this["wp"] = this["wp"] || {}; this["wp"]["widgets"] =
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = "4g8P");
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ({
  89. /***/ "1ZqX":
  90. /***/ (function(module, exports) {
  91. (function() { module.exports = window["wp"]["data"]; }());
  92. /***/ }),
  93. /***/ "4g8P":
  94. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  95. "use strict";
  96. // ESM COMPAT FLAG
  97. __webpack_require__.r(__webpack_exports__);
  98. // EXPORTS
  99. __webpack_require__.d(__webpack_exports__, "MoveToWidgetArea", function() { return /* reexport */ MoveToWidgetArea; });
  100. __webpack_require__.d(__webpack_exports__, "getWidgetIdFromBlock", function() { return /* reexport */ getWidgetIdFromBlock; });
  101. __webpack_require__.d(__webpack_exports__, "addWidgetIdToBlock", function() { return /* reexport */ addWidgetIdToBlock; });
  102. __webpack_require__.d(__webpack_exports__, "registerLegacyWidgetBlock", function() { return /* binding */ registerLegacyWidgetBlock; });
  103. __webpack_require__.d(__webpack_exports__, "registerLegacyWidgetVariations", function() { return /* reexport */ registerLegacyWidgetVariations; });
  104. // NAMESPACE OBJECT: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
  105. var legacy_widget_namespaceObject = {};
  106. __webpack_require__.r(legacy_widget_namespaceObject);
  107. __webpack_require__.d(legacy_widget_namespaceObject, "metadata", function() { return legacy_widget_metadata; });
  108. __webpack_require__.d(legacy_widget_namespaceObject, "name", function() { return legacy_widget_name; });
  109. __webpack_require__.d(legacy_widget_namespaceObject, "settings", function() { return legacy_widget_settings; });
  110. // EXTERNAL MODULE: external ["wp","blocks"]
  111. var external_wp_blocks_ = __webpack_require__("HSyU");
  112. // EXTERNAL MODULE: external ["wp","element"]
  113. var external_wp_element_ = __webpack_require__("GRId");
  114. // EXTERNAL MODULE: external ["wp","primitives"]
  115. var external_wp_primitives_ = __webpack_require__("Tqx9");
  116. // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/widget.js
  117. /**
  118. * WordPress dependencies
  119. */
  120. const widget_widget = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], {
  121. xmlns: "http://www.w3.org/2000/svg",
  122. viewBox: "0 0 24 24"
  123. }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], {
  124. d: "M6 3H8V5H16V3H18V5C19.1046 5 20 5.89543 20 7V19C20 20.1046 19.1046 21 18 21H6C4.89543 21 4 20.1046 4 19V7C4 5.89543 4.89543 5 6 5V3ZM18 6.5H6C5.72386 6.5 5.5 6.72386 5.5 7V8H18.5V7C18.5 6.72386 18.2761 6.5 18 6.5ZM18.5 9.5H5.5V19C5.5 19.2761 5.72386 19.5 6 19.5H18C18.2761 19.5 18.5 19.2761 18.5 19V9.5ZM11 11H13V13H11V11ZM7 11V13H9V11H7ZM15 13V11H17V13H15Z"
  125. }));
  126. /* harmony default export */ var library_widget = (widget_widget);
  127. // EXTERNAL MODULE: ./node_modules/classnames/index.js
  128. var classnames = __webpack_require__("TSYQ");
  129. var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
  130. // EXTERNAL MODULE: external ["wp","blockEditor"]
  131. var external_wp_blockEditor_ = __webpack_require__("axFQ");
  132. // EXTERNAL MODULE: external ["wp","components"]
  133. var external_wp_components_ = __webpack_require__("tI+e");
  134. // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/brush.js
  135. /**
  136. * WordPress dependencies
  137. */
  138. const brush = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], {
  139. xmlns: "http://www.w3.org/2000/svg",
  140. viewBox: "0 0 24 24"
  141. }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], {
  142. d: "M4 20h8v-1.5H4V20zM18.9 3.5c-.6-.6-1.5-.6-2.1 0l-7.2 7.2c-.4-.1-.7 0-1.1.1-.5.2-1.5.7-1.9 2.2-.4 1.7-.8 2.2-1.1 2.7-.1.1-.2.3-.3.4l-.6 1.1H6c2 0 3.4-.4 4.7-1.4.8-.6 1.2-1.4 1.3-2.3 0-.3 0-.5-.1-.7L19 5.7c.5-.6.5-1.6-.1-2.2zM9.7 14.7c-.7.5-1.5.8-2.4 1 .2-.5.5-1.2.8-2.3.2-.6.4-1 .8-1.1.5-.1 1 .1 1.3.3.2.2.3.5.2.8 0 .3-.1.9-.7 1.3z"
  143. }));
  144. /* harmony default export */ var library_brush = (brush);
  145. // EXTERNAL MODULE: external ["wp","i18n"]
  146. var external_wp_i18n_ = __webpack_require__("l3Sj");
  147. // EXTERNAL MODULE: external ["wp","data"]
  148. var external_wp_data_ = __webpack_require__("1ZqX");
  149. // EXTERNAL MODULE: external ["wp","coreData"]
  150. var external_wp_coreData_ = __webpack_require__("jZUy");
  151. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/widget-type-selector.js
  152. /**
  153. * WordPress dependencies
  154. */
  155. function WidgetTypeSelector({
  156. selectedId,
  157. onSelect
  158. }) {
  159. const widgetTypes = Object(external_wp_data_["useSelect"])(select => {
  160. var _select$getSettings$w, _select$getSettings, _select$getWidgetType;
  161. const hiddenIds = (_select$getSettings$w = (_select$getSettings = select(external_wp_blockEditor_["store"]).getSettings()) === null || _select$getSettings === void 0 ? void 0 : _select$getSettings.widgetTypesToHideFromLegacyWidgetBlock) !== null && _select$getSettings$w !== void 0 ? _select$getSettings$w : [];
  162. return (_select$getWidgetType = select(external_wp_coreData_["store"]).getWidgetTypes({
  163. per_page: -1
  164. })) === null || _select$getWidgetType === void 0 ? void 0 : _select$getWidgetType.filter(widgetType => !hiddenIds.includes(widgetType.id));
  165. }, []);
  166. if (!widgetTypes) {
  167. return Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null);
  168. }
  169. if (widgetTypes.length === 0) {
  170. return Object(external_wp_i18n_["__"])('There are no widgets available.');
  171. }
  172. return Object(external_wp_element_["createElement"])(external_wp_components_["SelectControl"], {
  173. label: Object(external_wp_i18n_["__"])('Select a legacy widget to display:'),
  174. value: selectedId !== null && selectedId !== void 0 ? selectedId : '',
  175. options: [{
  176. value: '',
  177. label: Object(external_wp_i18n_["__"])('Select widget')
  178. }, ...widgetTypes.map(widgetType => ({
  179. value: widgetType.id,
  180. label: widgetType.name
  181. }))],
  182. onChange: value => {
  183. if (value) {
  184. const selected = widgetTypes.find(widgetType => widgetType.id === value);
  185. onSelect({
  186. selectedId: selected.id,
  187. isMulti: selected.is_multi
  188. });
  189. } else {
  190. onSelect({
  191. selectedId: null
  192. });
  193. }
  194. }
  195. });
  196. }
  197. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/inspector-card.js
  198. function InspectorCard({
  199. name,
  200. description
  201. }) {
  202. return Object(external_wp_element_["createElement"])("div", {
  203. className: "wp-block-legacy-widget-inspector-card"
  204. }, Object(external_wp_element_["createElement"])("h3", {
  205. className: "wp-block-legacy-widget-inspector-card__name"
  206. }, name), Object(external_wp_element_["createElement"])("span", null, description));
  207. }
  208. // EXTERNAL MODULE: external ["wp","notices"]
  209. var external_wp_notices_ = __webpack_require__("onLe");
  210. // EXTERNAL MODULE: external ["wp","compose"]
  211. var external_wp_compose_ = __webpack_require__("K9lf");
  212. // EXTERNAL MODULE: external "lodash"
  213. var external_lodash_ = __webpack_require__("YLtl");
  214. // EXTERNAL MODULE: external ["wp","apiFetch"]
  215. var external_wp_apiFetch_ = __webpack_require__("ywyh");
  216. var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_);
  217. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/control.js
  218. /**
  219. * External dependencies
  220. */
  221. /**
  222. * WordPress dependencies
  223. */
  224. /**
  225. * An API for creating and loading a widget control (a <div class="widget">
  226. * element) that is compatible with most third party widget scripts. By not
  227. * using React for this, we ensure that we have complete contorl over the DOM
  228. * and do not accidentally remove any elements that a third party widget script
  229. * has attached an event listener to.
  230. *
  231. * @property {Element} element The control's DOM element.
  232. */
  233. class control_Control {
  234. /**
  235. * Creates and loads a new control.
  236. *
  237. * @access public
  238. * @param {Object} params
  239. * @param {string} params.id
  240. * @param {string} params.idBase
  241. * @param {Object} params.instance
  242. * @param {Function} params.onChangeInstance
  243. * @param {Function} params.onChangeHasPreview
  244. * @param {Function} params.onError
  245. */
  246. constructor({
  247. id,
  248. idBase,
  249. instance,
  250. onChangeInstance,
  251. onChangeHasPreview,
  252. onError
  253. }) {
  254. this.id = id;
  255. this.idBase = idBase;
  256. this._instance = instance;
  257. this._hasPreview = null;
  258. this.onChangeInstance = onChangeInstance;
  259. this.onChangeHasPreview = onChangeHasPreview;
  260. this.onError = onError; // We can't use the real widget number as this is calculated by the
  261. // server and we may not ever *actually* save this widget. Instead, use
  262. // a fake but unique number.
  263. this.number = ++lastNumber;
  264. this.handleFormChange = Object(external_lodash_["debounce"])(this.handleFormChange.bind(this), 200);
  265. this.handleFormSubmit = this.handleFormSubmit.bind(this);
  266. this.initDOM();
  267. this.bindEvents();
  268. this.loadContent();
  269. }
  270. /**
  271. * Clean up the control so that it can be garabge collected.
  272. *
  273. * @access public
  274. */
  275. destroy() {
  276. this.unbindEvents();
  277. this.element.remove(); // TODO: How do we make third party widget scripts remove their event
  278. // listeners?
  279. }
  280. /**
  281. * Creates the control's DOM structure.
  282. *
  283. * @access private
  284. */
  285. initDOM() {
  286. var _this$id, _this$idBase;
  287. this.element = el('div', {
  288. class: 'widget open'
  289. }, [el('div', {
  290. class: 'widget-inside'
  291. }, [this.form = el('form', {
  292. class: 'form',
  293. method: 'post'
  294. }, [// These hidden form inputs are what most widgets' scripts
  295. // use to access data about the widget.
  296. el('input', {
  297. class: 'widget-id',
  298. type: 'hidden',
  299. name: 'widget-id',
  300. value: (_this$id = this.id) !== null && _this$id !== void 0 ? _this$id : `${this.idBase}-${this.number}`
  301. }), el('input', {
  302. class: 'id_base',
  303. type: 'hidden',
  304. name: 'id_base',
  305. value: (_this$idBase = this.idBase) !== null && _this$idBase !== void 0 ? _this$idBase : this.id
  306. }), el('input', {
  307. class: 'widget-width',
  308. type: 'hidden',
  309. name: 'widget-width',
  310. value: '250'
  311. }), el('input', {
  312. class: 'widget-height',
  313. type: 'hidden',
  314. name: 'widget-height',
  315. value: '200'
  316. }), el('input', {
  317. class: 'widget_number',
  318. type: 'hidden',
  319. name: 'widget_number',
  320. value: this.idBase ? this.number.toString() : ''
  321. }), this.content = el('div', {
  322. class: 'widget-content'
  323. }), // Non-multi widgets can be saved via a Save button.
  324. this.id && el('button', {
  325. class: 'button is-primary',
  326. type: 'submit'
  327. }, Object(external_wp_i18n_["__"])('Save'))])])]);
  328. }
  329. /**
  330. * Adds the control's event listeners.
  331. *
  332. * @access private
  333. */
  334. bindEvents() {
  335. // Prefer jQuery 'change' event instead of the native 'change' event
  336. // because many widgets use jQuery's event bus to trigger an update.
  337. if (window.jQuery) {
  338. const {
  339. jQuery: $
  340. } = window;
  341. $(this.form).on('change', null, this.handleFormChange);
  342. $(this.form).on('input', null, this.handleFormChange);
  343. $(this.form).on('submit', this.handleFormSubmit);
  344. } else {
  345. this.form.addEventListener('change', this.handleFormChange);
  346. this.form.addEventListener('input', this.handleFormChange);
  347. this.form.addEventListener('submit', this.handleFormSubmit);
  348. }
  349. }
  350. /**
  351. * Removes the control's event listeners.
  352. *
  353. * @access private
  354. */
  355. unbindEvents() {
  356. if (window.jQuery) {
  357. const {
  358. jQuery: $
  359. } = window;
  360. $(this.form).off('change', null, this.handleFormChange);
  361. $(this.form).off('input', null, this.handleFormChange);
  362. $(this.form).off('submit', this.handleFormSubmit);
  363. } else {
  364. this.form.removeEventListener('change', this.handleFormChange);
  365. this.form.removeEventListener('input', this.handleFormChange);
  366. this.form.removeEventListener('submit', this.handleFormSubmit);
  367. }
  368. }
  369. /**
  370. * Fetches the widget's form HTML from the REST API and loads it into the
  371. * control's form.
  372. *
  373. * @access private
  374. */
  375. async loadContent() {
  376. try {
  377. if (this.id) {
  378. const {
  379. form
  380. } = await saveWidget(this.id);
  381. this.content.innerHTML = form;
  382. } else if (this.idBase) {
  383. const {
  384. form,
  385. preview
  386. } = await encodeWidget({
  387. idBase: this.idBase,
  388. instance: this.instance,
  389. number: this.number
  390. });
  391. this.content.innerHTML = form;
  392. this.hasPreview = !isEmptyHTML(preview); // If we don't have an instance, perform a save right away. This
  393. // happens when creating a new Legacy Widget block.
  394. if (!this.instance.hash) {
  395. const {
  396. instance
  397. } = await encodeWidget({
  398. idBase: this.idBase,
  399. instance: this.instance,
  400. number: this.number,
  401. formData: serializeForm(this.form)
  402. });
  403. this.instance = instance;
  404. }
  405. } // Trigger 'widget-added' when widget is ready. This event is what
  406. // widgets' scripts use to initialize, attach events, etc. The event
  407. // must be fired using jQuery's event bus as this is what widget
  408. // scripts expect. If jQuery is not loaded, do nothing - some
  409. // widgets will still work regardless.
  410. if (window.jQuery) {
  411. const {
  412. jQuery: $
  413. } = window;
  414. $(document).trigger('widget-added', [$(this.element)]);
  415. }
  416. } catch (error) {
  417. this.onError(error);
  418. }
  419. }
  420. /**
  421. * Perform a save when a multi widget's form is changed. Non-multi widgets
  422. * are saved manually.
  423. *
  424. * @access private
  425. */
  426. handleFormChange() {
  427. if (this.idBase) {
  428. this.saveForm();
  429. }
  430. }
  431. /**
  432. * Perform a save when the control's form is manually submitted.
  433. *
  434. * @access private
  435. * @param {Event} event
  436. */
  437. handleFormSubmit(event) {
  438. event.preventDefault();
  439. this.saveForm();
  440. }
  441. /**
  442. * Serialize the control's form, send it to the REST API, and update the
  443. * instance with the encoded instance that the REST API returns.
  444. *
  445. * @access private
  446. */
  447. async saveForm() {
  448. const formData = serializeForm(this.form);
  449. try {
  450. if (this.id) {
  451. const {
  452. form
  453. } = await saveWidget(this.id, formData);
  454. this.content.innerHTML = form;
  455. if (window.jQuery) {
  456. const {
  457. jQuery: $
  458. } = window;
  459. $(document).trigger('widget-updated', [$(this.element)]);
  460. }
  461. } else if (this.idBase) {
  462. const {
  463. instance,
  464. preview
  465. } = await encodeWidget({
  466. idBase: this.idBase,
  467. instance: this.instance,
  468. number: this.number,
  469. formData
  470. });
  471. this.instance = instance;
  472. this.hasPreview = !isEmptyHTML(preview);
  473. }
  474. } catch (error) {
  475. this.onError(error);
  476. }
  477. }
  478. /**
  479. * The widget's instance object.
  480. *
  481. * @access private
  482. */
  483. get instance() {
  484. return this._instance;
  485. }
  486. /**
  487. * The widget's instance object.
  488. *
  489. * @access private
  490. */
  491. set instance(instance) {
  492. if (this._instance !== instance) {
  493. this._instance = instance;
  494. this.onChangeInstance(instance);
  495. }
  496. }
  497. /**
  498. * Whether or not the widget can be previewed.
  499. *
  500. * @access public
  501. */
  502. get hasPreview() {
  503. return this._hasPreview;
  504. }
  505. /**
  506. * Whether or not the widget can be previewed.
  507. *
  508. * @access private
  509. */
  510. set hasPreview(hasPreview) {
  511. if (this._hasPreview !== hasPreview) {
  512. this._hasPreview = hasPreview;
  513. this.onChangeHasPreview(hasPreview);
  514. }
  515. }
  516. }
  517. let lastNumber = 0;
  518. function el(tagName, attributes = {}, content = null) {
  519. const element = document.createElement(tagName);
  520. for (const [attribute, value] of Object.entries(attributes)) {
  521. element.setAttribute(attribute, value);
  522. }
  523. if (Array.isArray(content)) {
  524. for (const child of content) {
  525. if (child) {
  526. element.appendChild(child);
  527. }
  528. }
  529. } else if (typeof content === 'string') {
  530. element.innerText = content;
  531. }
  532. return element;
  533. }
  534. async function saveWidget(id, formData = null) {
  535. let widget;
  536. if (formData) {
  537. widget = await external_wp_apiFetch_default()({
  538. path: `/wp/v2/widgets/${id}?context=edit`,
  539. method: 'PUT',
  540. data: {
  541. form_data: formData
  542. }
  543. });
  544. } else {
  545. widget = await external_wp_apiFetch_default()({
  546. path: `/wp/v2/widgets/${id}?context=edit`,
  547. method: 'GET'
  548. });
  549. }
  550. return {
  551. form: widget.rendered_form
  552. };
  553. }
  554. async function encodeWidget({
  555. idBase,
  556. instance,
  557. number,
  558. formData = null
  559. }) {
  560. const response = await external_wp_apiFetch_default()({
  561. path: `/wp/v2/widget-types/${idBase}/encode`,
  562. method: 'POST',
  563. data: {
  564. instance,
  565. number,
  566. form_data: formData
  567. }
  568. });
  569. return {
  570. instance: response.instance,
  571. form: response.form,
  572. preview: response.preview
  573. };
  574. }
  575. function isEmptyHTML(html) {
  576. const element = document.createElement('div');
  577. element.innerHTML = html;
  578. return isEmptyNode(element);
  579. }
  580. function isEmptyNode(node) {
  581. switch (node.nodeType) {
  582. case node.TEXT_NODE:
  583. // Text nodes are empty if it's entirely whitespace.
  584. return node.nodeValue.trim() === '';
  585. case node.ELEMENT_NODE:
  586. // Elements that are "embedded content" are not empty.
  587. // https://dev.w3.org/html5/spec-LC/content-models.html#embedded-content-0
  588. if (['AUDIO', 'CANVAS', 'EMBED', 'IFRAME', 'IMG', 'MATH', 'OBJECT', 'SVG', 'VIDEO'].includes(node.tagName)) {
  589. return false;
  590. } // Elements with no children are empty.
  591. if (!node.hasChildNodes()) {
  592. return true;
  593. } // Elements with children are empty if all their children are empty.
  594. return Array.from(node.childNodes).every(isEmptyNode);
  595. default:
  596. return true;
  597. }
  598. }
  599. function serializeForm(form) {
  600. return new window.URLSearchParams(Array.from(new window.FormData(form))).toString();
  601. }
  602. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/form.js
  603. /**
  604. * External dependencies
  605. */
  606. /**
  607. * WordPress dependencies
  608. */
  609. /**
  610. * Internal dependencies
  611. */
  612. function Form({
  613. title,
  614. isVisible,
  615. id,
  616. idBase,
  617. instance,
  618. isWide,
  619. onChangeInstance,
  620. onChangeHasPreview
  621. }) {
  622. const ref = Object(external_wp_element_["useRef"])();
  623. const isMediumLargeViewport = Object(external_wp_compose_["useViewportMatch"])('small'); // We only want to remount the control when the instance changes
  624. // *externally*. For example, if the user performs an undo. To do this, we
  625. // keep track of changes made to instance by the control itself and then
  626. // ignore those.
  627. const outgoingInstances = Object(external_wp_element_["useRef"])(new Set());
  628. const incomingInstances = Object(external_wp_element_["useRef"])(new Set());
  629. const {
  630. createNotice
  631. } = Object(external_wp_data_["useDispatch"])(external_wp_notices_["store"]);
  632. Object(external_wp_element_["useEffect"])(() => {
  633. if (incomingInstances.current.has(instance)) {
  634. incomingInstances.current.delete(instance);
  635. return;
  636. }
  637. const control = new control_Control({
  638. id,
  639. idBase,
  640. instance,
  641. onChangeInstance(nextInstance) {
  642. outgoingInstances.current.add(instance);
  643. incomingInstances.current.add(nextInstance);
  644. onChangeInstance(nextInstance);
  645. },
  646. onChangeHasPreview,
  647. onError(error) {
  648. window.console.error(error);
  649. createNotice('error', Object(external_wp_i18n_["sprintf"])(
  650. /* translators: %s: the name of the affected block. */
  651. Object(external_wp_i18n_["__"])('The "%s" block was affected by errors and may not function properly. Check the developer tools for more details.'), idBase || id));
  652. }
  653. });
  654. ref.current.appendChild(control.element);
  655. return () => {
  656. if (outgoingInstances.current.has(instance)) {
  657. outgoingInstances.current.delete(instance);
  658. return;
  659. }
  660. control.destroy();
  661. };
  662. }, [id, idBase, instance, onChangeInstance, onChangeHasPreview, isMediumLargeViewport]);
  663. if (isWide && isMediumLargeViewport) {
  664. return Object(external_wp_element_["createElement"])("div", {
  665. className: classnames_default()({
  666. 'wp-block-legacy-widget__container': isVisible
  667. })
  668. }, isVisible && Object(external_wp_element_["createElement"])("h3", {
  669. className: "wp-block-legacy-widget__edit-form-title"
  670. }, title), Object(external_wp_element_["createElement"])(external_wp_components_["Popover"], {
  671. focusOnMount: false,
  672. position: "middle right",
  673. __unstableForceXAlignment: true
  674. }, Object(external_wp_element_["createElement"])("div", {
  675. ref: ref,
  676. className: "wp-block-legacy-widget__edit-form",
  677. hidden: !isVisible
  678. })));
  679. }
  680. return Object(external_wp_element_["createElement"])("div", {
  681. ref: ref,
  682. className: "wp-block-legacy-widget__edit-form",
  683. hidden: !isVisible
  684. }, Object(external_wp_element_["createElement"])("h3", {
  685. className: "wp-block-legacy-widget__edit-form-title"
  686. }, title));
  687. }
  688. // EXTERNAL MODULE: external ["wp","url"]
  689. var external_wp_url_ = __webpack_require__("Mmq9");
  690. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/preview.js
  691. /**
  692. * External dependencies
  693. */
  694. /**
  695. * WordPress dependencies
  696. */
  697. function Preview({
  698. idBase,
  699. instance,
  700. isVisible
  701. }) {
  702. const [isLoaded, setIsLoaded] = Object(external_wp_element_["useState"])(false); // Resize the iframe on either the load event, or when the iframe becomes visible.
  703. const ref = Object(external_wp_compose_["useRefEffect"])(iframe => {
  704. // Only set height if the iframe is loaded,
  705. // or it will grow to an unexpected large height in Safari if it's hidden initially.
  706. if (isLoaded) {
  707. // If the preview frame has another origin then this won't work.
  708. // One possible solution is to add custom script to call `postMessage` in the preview frame.
  709. // Or, better yet, we migrate away from iframe.
  710. function setHeight() {
  711. // Pick the maximum of these two values to account for margin collapsing.
  712. const height = Math.max(iframe.contentDocument.documentElement.offsetHeight, iframe.contentDocument.body.offsetHeight);
  713. iframe.style.height = `${height}px`;
  714. }
  715. const {
  716. IntersectionObserver
  717. } = iframe.ownerDocument.defaultView; // Observe for intersections that might cause a change in the height of
  718. // the iframe, e.g. a Widget Area becoming expanded.
  719. const intersectionObserver = new IntersectionObserver(([entry]) => {
  720. if (entry.isIntersecting) {
  721. setHeight();
  722. }
  723. }, {
  724. threshold: 1
  725. });
  726. intersectionObserver.observe(iframe);
  727. iframe.addEventListener('load', setHeight);
  728. return () => {
  729. intersectionObserver.disconnect();
  730. iframe.removeEventListener('load', setHeight);
  731. };
  732. }
  733. }, [isLoaded]);
  734. return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, isVisible && !isLoaded && Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], null, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null)), Object(external_wp_element_["createElement"])("div", {
  735. className: classnames_default()('wp-block-legacy-widget__edit-preview', {
  736. 'is-offscreen': !isVisible || !isLoaded
  737. })
  738. }, Object(external_wp_element_["createElement"])(external_wp_components_["Disabled"], null, Object(external_wp_element_["createElement"])("iframe", {
  739. ref: ref,
  740. className: "wp-block-legacy-widget__edit-preview-iframe",
  741. title: Object(external_wp_i18n_["__"])('Legacy Widget Preview') // TODO: This chokes when the query param is too big.
  742. // Ideally, we'd render a <ServerSideRender>. Maybe by
  743. // rendering one in an iframe via a portal.
  744. ,
  745. src: Object(external_wp_url_["addQueryArgs"])('widgets.php', {
  746. 'legacy-widget-preview': {
  747. idBase,
  748. instance
  749. }
  750. }),
  751. onLoad: event => {
  752. // To hide the scrollbars of the preview frame for some edge cases,
  753. // such as negative margins in the Gallery Legacy Widget.
  754. // It can't be scrolled anyway.
  755. // TODO: Ideally, this should be fixed in core.
  756. event.target.contentDocument.body.style.overflow = 'hidden';
  757. setIsLoaded(true);
  758. },
  759. height: 100
  760. }))));
  761. }
  762. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/no-preview.js
  763. /**
  764. * WordPress dependencies
  765. */
  766. function NoPreview({
  767. name
  768. }) {
  769. return Object(external_wp_element_["createElement"])("div", {
  770. className: "wp-block-legacy-widget__edit-no-preview"
  771. }, name && Object(external_wp_element_["createElement"])("h3", null, name), Object(external_wp_element_["createElement"])("p", null, Object(external_wp_i18n_["__"])('No preview available.')));
  772. }
  773. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/convert-to-blocks-button.js
  774. /**
  775. * WordPress dependencies
  776. */
  777. function ConvertToBlocksButton({
  778. clientId,
  779. rawInstance
  780. }) {
  781. const {
  782. replaceBlocks
  783. } = Object(external_wp_data_["useDispatch"])(external_wp_blockEditor_["store"]);
  784. return Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarButton"], {
  785. onClick: () => {
  786. if (rawInstance.title) {
  787. replaceBlocks(clientId, [Object(external_wp_blocks_["createBlock"])('core/heading', {
  788. content: rawInstance.title
  789. }), ...Object(external_wp_blocks_["rawHandler"])({
  790. HTML: rawInstance.text
  791. })]);
  792. } else {
  793. replaceBlocks(clientId, Object(external_wp_blocks_["rawHandler"])({
  794. HTML: rawInstance.text
  795. }));
  796. }
  797. }
  798. }, Object(external_wp_i18n_["__"])('Convert to blocks'));
  799. }
  800. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/edit/index.js
  801. /**
  802. * External dependencies
  803. */
  804. /**
  805. * WordPress dependencies
  806. */
  807. /**
  808. * Internal dependencies
  809. */
  810. function Edit(props) {
  811. const {
  812. id,
  813. idBase
  814. } = props.attributes;
  815. const {
  816. isWide = false
  817. } = props;
  818. const blockProps = Object(external_wp_blockEditor_["useBlockProps"])({
  819. className: classnames_default()({
  820. 'is-wide-widget': isWide
  821. })
  822. });
  823. return Object(external_wp_element_["createElement"])("div", blockProps, !id && !idBase ? Object(external_wp_element_["createElement"])(Empty, props) : Object(external_wp_element_["createElement"])(NotEmpty, props));
  824. }
  825. function Empty({
  826. attributes: {
  827. id,
  828. idBase
  829. },
  830. setAttributes
  831. }) {
  832. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], {
  833. icon: Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockIcon"], {
  834. icon: library_brush
  835. }),
  836. label: Object(external_wp_i18n_["__"])('Legacy Widget')
  837. }, Object(external_wp_element_["createElement"])(WidgetTypeSelector, {
  838. selectedId: id !== null && id !== void 0 ? id : idBase,
  839. onSelect: ({
  840. selectedId,
  841. isMulti
  842. }) => {
  843. if (!selectedId) {
  844. setAttributes({
  845. id: null,
  846. idBase: null,
  847. instance: null
  848. });
  849. } else if (isMulti) {
  850. setAttributes({
  851. id: null,
  852. idBase: selectedId,
  853. instance: {}
  854. });
  855. } else {
  856. setAttributes({
  857. id: selectedId,
  858. idBase: null,
  859. instance: null
  860. });
  861. }
  862. }
  863. }));
  864. }
  865. function NotEmpty({
  866. attributes: {
  867. id,
  868. idBase,
  869. instance
  870. },
  871. setAttributes,
  872. clientId,
  873. isSelected,
  874. isWide = false
  875. }) {
  876. const [hasPreview, setHasPreview] = Object(external_wp_element_["useState"])(null);
  877. const {
  878. widgetType,
  879. hasResolvedWidgetType,
  880. isNavigationMode
  881. } = Object(external_wp_data_["useSelect"])(select => {
  882. const widgetTypeId = id !== null && id !== void 0 ? id : idBase;
  883. return {
  884. widgetType: select(external_wp_coreData_["store"]).getWidgetType(widgetTypeId),
  885. hasResolvedWidgetType: select(external_wp_coreData_["store"]).hasFinishedResolution('getWidgetType', [widgetTypeId]),
  886. isNavigationMode: select(external_wp_blockEditor_["store"]).isNavigationMode()
  887. };
  888. }, [id, idBase]);
  889. const setInstance = Object(external_wp_element_["useCallback"])(nextInstance => {
  890. setAttributes({
  891. instance: nextInstance
  892. });
  893. }, []);
  894. if (!widgetType && hasResolvedWidgetType) {
  895. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], {
  896. icon: Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockIcon"], {
  897. icon: library_brush
  898. }),
  899. label: Object(external_wp_i18n_["__"])('Legacy Widget')
  900. }, Object(external_wp_i18n_["__"])('Widget is missing.'));
  901. }
  902. if (!hasResolvedWidgetType) {
  903. return Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], null, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null));
  904. }
  905. const mode = idBase && (isNavigationMode || !isSelected) ? 'preview' : 'edit';
  906. return Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, idBase === 'text' && Object(external_wp_element_["createElement"])(external_wp_blockEditor_["BlockControls"], {
  907. group: "other"
  908. }, Object(external_wp_element_["createElement"])(ConvertToBlocksButton, {
  909. clientId: clientId,
  910. rawInstance: instance.raw
  911. })), Object(external_wp_element_["createElement"])(external_wp_blockEditor_["InspectorControls"], null, Object(external_wp_element_["createElement"])(InspectorCard, {
  912. name: widgetType.name,
  913. description: widgetType.description
  914. })), Object(external_wp_element_["createElement"])(Form, {
  915. title: widgetType.name,
  916. isVisible: mode === 'edit',
  917. id: id,
  918. idBase: idBase,
  919. instance: instance,
  920. isWide: isWide,
  921. onChangeInstance: setInstance,
  922. onChangeHasPreview: setHasPreview
  923. }), idBase && Object(external_wp_element_["createElement"])(external_wp_element_["Fragment"], null, hasPreview === null && mode === 'preview' && Object(external_wp_element_["createElement"])(external_wp_components_["Placeholder"], null, Object(external_wp_element_["createElement"])(external_wp_components_["Spinner"], null)), hasPreview === true && Object(external_wp_element_["createElement"])(Preview, {
  924. idBase: idBase,
  925. instance: instance,
  926. isVisible: mode === 'preview'
  927. }), hasPreview === false && mode === 'preview' && Object(external_wp_element_["createElement"])(NoPreview, {
  928. name: widgetType.name
  929. })));
  930. }
  931. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/transforms.js
  932. /**
  933. * WordPress dependencies
  934. */
  935. const legacyWidgetTransforms = [{
  936. block: 'core/calendar',
  937. widget: 'calendar'
  938. }, {
  939. block: 'core/search',
  940. widget: 'search'
  941. }, {
  942. block: 'core/html',
  943. widget: 'custom_html',
  944. transform: ({
  945. content
  946. }) => ({
  947. content
  948. })
  949. }, {
  950. block: 'core/archives',
  951. widget: 'archives',
  952. transform: ({
  953. count,
  954. dropdown
  955. }) => {
  956. return {
  957. displayAsDropdown: !!dropdown,
  958. showPostCounts: !!count
  959. };
  960. }
  961. }, {
  962. block: 'core/latest-posts',
  963. widget: 'recent-posts',
  964. transform: ({
  965. show_date: displayPostDate,
  966. number
  967. }) => {
  968. return {
  969. displayPostDate: !!displayPostDate,
  970. postsToShow: number
  971. };
  972. }
  973. }, {
  974. block: 'core/latest-comments',
  975. widget: 'recent-comments',
  976. transform: ({
  977. number
  978. }) => {
  979. return {
  980. commentsToShow: number
  981. };
  982. }
  983. }, {
  984. block: 'core/tag-cloud',
  985. widget: 'tag_cloud',
  986. transform: ({
  987. taxonomy,
  988. count
  989. }) => {
  990. return {
  991. showTagCounts: !!count,
  992. taxonomy
  993. };
  994. }
  995. }, {
  996. block: 'core/categories',
  997. widget: 'categories',
  998. transform: ({
  999. count,
  1000. dropdown,
  1001. hierarchical
  1002. }) => {
  1003. return {
  1004. displayAsDropdown: !!dropdown,
  1005. showPostCounts: !!count,
  1006. showHierarchy: !!hierarchical
  1007. };
  1008. }
  1009. }, {
  1010. block: 'core/audio',
  1011. widget: 'media_audio',
  1012. transform: ({
  1013. url,
  1014. preload,
  1015. loop,
  1016. attachment_id: id
  1017. }) => {
  1018. return {
  1019. src: url,
  1020. id,
  1021. preload,
  1022. loop
  1023. };
  1024. }
  1025. }, {
  1026. block: 'core/video',
  1027. widget: 'media_video',
  1028. transform: ({
  1029. url,
  1030. preload,
  1031. loop,
  1032. attachment_id: id
  1033. }) => {
  1034. return {
  1035. src: url,
  1036. id,
  1037. preload,
  1038. loop
  1039. };
  1040. }
  1041. }, {
  1042. block: 'core/image',
  1043. widget: 'media_image',
  1044. transform: ({
  1045. alt,
  1046. attachment_id: id,
  1047. caption,
  1048. height,
  1049. link_classes: linkClass,
  1050. link_rel: rel,
  1051. link_target_blank: targetBlack,
  1052. link_type: linkDestination,
  1053. link_url: link,
  1054. size: sizeSlug,
  1055. url,
  1056. width
  1057. }) => {
  1058. return {
  1059. alt,
  1060. caption,
  1061. height,
  1062. id,
  1063. link,
  1064. linkClass,
  1065. linkDestination,
  1066. linkTarget: targetBlack ? '_blank' : undefined,
  1067. rel,
  1068. sizeSlug,
  1069. url,
  1070. width
  1071. };
  1072. }
  1073. }, {
  1074. block: 'core/gallery',
  1075. widget: 'media_gallery',
  1076. transform: ({
  1077. ids,
  1078. link_type: linkTo,
  1079. size,
  1080. number
  1081. }) => {
  1082. return {
  1083. ids,
  1084. columns: number,
  1085. linkTo,
  1086. sizeSlug: size,
  1087. images: ids.map(id => ({
  1088. id
  1089. }))
  1090. };
  1091. }
  1092. }, {
  1093. block: 'core/rss',
  1094. widget: 'rss',
  1095. transform: ({
  1096. url,
  1097. show_author: displayAuthor,
  1098. show_date: displayDate,
  1099. show_summary: displayExcerpt,
  1100. items
  1101. }) => {
  1102. return {
  1103. feedURL: url,
  1104. displayAuthor: !!displayAuthor,
  1105. displayDate: !!displayDate,
  1106. displayExcerpt: !!displayExcerpt,
  1107. itemsToShow: items
  1108. };
  1109. }
  1110. }].map(({
  1111. block,
  1112. widget,
  1113. transform
  1114. }) => {
  1115. return {
  1116. type: 'block',
  1117. blocks: [block],
  1118. isMatch: ({
  1119. idBase,
  1120. instance
  1121. }) => {
  1122. return idBase === widget && !!(instance !== null && instance !== void 0 && instance.raw);
  1123. },
  1124. transform: ({
  1125. instance
  1126. }) => {
  1127. var _instance$raw;
  1128. const transformedBlock = Object(external_wp_blocks_["createBlock"])(block, transform ? transform(instance.raw) : undefined);
  1129. if (!((_instance$raw = instance.raw) !== null && _instance$raw !== void 0 && _instance$raw.title)) {
  1130. return transformedBlock;
  1131. }
  1132. return [Object(external_wp_blocks_["createBlock"])('core/heading', {
  1133. content: instance.raw.title
  1134. }), transformedBlock];
  1135. }
  1136. };
  1137. });
  1138. const transforms = {
  1139. to: legacyWidgetTransforms
  1140. };
  1141. /* harmony default export */ var legacy_widget_transforms = (transforms);
  1142. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/blocks/legacy-widget/index.js
  1143. /**
  1144. * WordPress dependencies
  1145. */
  1146. /**
  1147. * Internal dependencies
  1148. */
  1149. const legacy_widget_metadata = {
  1150. apiVersion: 2,
  1151. name: "core/legacy-widget",
  1152. title: "Legacy Widget",
  1153. category: "widgets",
  1154. description: "Display a legacy widget.",
  1155. textdomain: "default",
  1156. attributes: {
  1157. id: {
  1158. type: "string",
  1159. "default": null
  1160. },
  1161. idBase: {
  1162. type: "string",
  1163. "default": null
  1164. },
  1165. instance: {
  1166. type: "object",
  1167. "default": null
  1168. }
  1169. },
  1170. supports: {
  1171. html: false,
  1172. customClassName: false,
  1173. reusable: false
  1174. },
  1175. editorStyle: "wp-block-legacy-widget-editor"
  1176. };
  1177. const {
  1178. name: legacy_widget_name
  1179. } = legacy_widget_metadata;
  1180. const legacy_widget_settings = {
  1181. icon: library_widget,
  1182. edit: Edit,
  1183. transforms: legacy_widget_transforms
  1184. };
  1185. // CONCATENATED MODULE: ./node_modules/@wordpress/icons/build-module/library/move-to.js
  1186. /**
  1187. * WordPress dependencies
  1188. */
  1189. const moveTo = Object(external_wp_element_["createElement"])(external_wp_primitives_["SVG"], {
  1190. xmlns: "http://www.w3.org/2000/svg",
  1191. viewBox: "0 0 24 24"
  1192. }, Object(external_wp_element_["createElement"])(external_wp_primitives_["Path"], {
  1193. d: "M19.75 9c0-1.257-.565-2.197-1.39-2.858-.797-.64-1.827-1.017-2.815-1.247-1.802-.42-3.703-.403-4.383-.396L11 4.5V6l.177-.001c.696-.006 2.416-.02 4.028.356.887.207 1.67.518 2.216.957.52.416.829.945.829 1.688 0 .592-.167.966-.407 1.23-.255.281-.656.508-1.236.674-1.19.34-2.82.346-4.607.346h-.077c-1.692 0-3.527 0-4.942.404-.732.209-1.424.545-1.935 1.108-.526.579-.796 1.33-.796 2.238 0 1.257.565 2.197 1.39 2.858.797.64 1.827 1.017 2.815 1.247 1.802.42 3.703.403 4.383.396L13 19.5h.714V22L18 18.5 13.714 15v3H13l-.177.001c-.696.006-2.416.02-4.028-.356-.887-.207-1.67-.518-2.216-.957-.52-.416-.829-.945-.829-1.688 0-.592.167-.966.407-1.23.255-.281.656-.508 1.237-.674 1.189-.34 2.819-.346 4.606-.346h.077c1.692 0 3.527 0 4.941-.404.732-.209 1.425-.545 1.936-1.108.526-.579.796-1.33.796-2.238z"
  1194. }));
  1195. /* harmony default export */ var move_to = (moveTo);
  1196. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/move-to-widget-area/index.js
  1197. /**
  1198. * WordPress dependencies
  1199. */
  1200. function MoveToWidgetArea({
  1201. currentWidgetAreaId,
  1202. widgetAreas,
  1203. onSelect
  1204. }) {
  1205. return Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarGroup"], null, Object(external_wp_element_["createElement"])(external_wp_components_["ToolbarItem"], null, toggleProps => Object(external_wp_element_["createElement"])(external_wp_components_["DropdownMenu"], {
  1206. icon: move_to,
  1207. label: Object(external_wp_i18n_["__"])('Move to widget area'),
  1208. toggleProps: toggleProps
  1209. }, ({
  1210. onClose
  1211. }) => Object(external_wp_element_["createElement"])(external_wp_components_["MenuGroup"], {
  1212. label: Object(external_wp_i18n_["__"])('Move to')
  1213. }, Object(external_wp_element_["createElement"])(external_wp_components_["MenuItemsChoice"], {
  1214. choices: widgetAreas.map(widgetArea => ({
  1215. value: widgetArea.id,
  1216. label: widgetArea.name,
  1217. info: widgetArea.description
  1218. })),
  1219. value: currentWidgetAreaId,
  1220. onSelect: value => {
  1221. onSelect(value);
  1222. onClose();
  1223. }
  1224. })))));
  1225. }
  1226. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/components/index.js
  1227. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/utils.js
  1228. // @ts-check
  1229. /**
  1230. * Get the internal widget id from block.
  1231. *
  1232. * @typedef {Object} Attributes
  1233. * @property {string} __internalWidgetId The internal widget id.
  1234. * @typedef {Object} Block
  1235. * @property {Attributes} attributes The attributes of the block.
  1236. *
  1237. * @param {Block} block The block.
  1238. * @return {string} The internal widget id.
  1239. */
  1240. function getWidgetIdFromBlock(block) {
  1241. return block.attributes.__internalWidgetId;
  1242. }
  1243. /**
  1244. * Add internal widget id to block's attributes.
  1245. *
  1246. * @param {Block} block The block.
  1247. * @param {string} widgetId The widget id.
  1248. * @return {Block} The updated block.
  1249. */
  1250. function addWidgetIdToBlock(block, widgetId) {
  1251. return { ...block,
  1252. attributes: { ...(block.attributes || {}),
  1253. __internalWidgetId: widgetId
  1254. }
  1255. };
  1256. }
  1257. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/register-legacy-widget-variations.js
  1258. /**
  1259. * WordPress dependencies
  1260. */
  1261. function registerLegacyWidgetVariations(settings) {
  1262. const unsubscribe = Object(external_wp_data_["subscribe"])(() => {
  1263. var _settings$widgetTypes, _select$getWidgetType;
  1264. const hiddenIds = (_settings$widgetTypes = settings === null || settings === void 0 ? void 0 : settings.widgetTypesToHideFromLegacyWidgetBlock) !== null && _settings$widgetTypes !== void 0 ? _settings$widgetTypes : [];
  1265. const widgetTypes = (_select$getWidgetType = Object(external_wp_data_["select"])(external_wp_coreData_["store"]).getWidgetTypes({
  1266. per_page: -1
  1267. })) === null || _select$getWidgetType === void 0 ? void 0 : _select$getWidgetType.filter(widgetType => !hiddenIds.includes(widgetType.id));
  1268. if (widgetTypes) {
  1269. unsubscribe();
  1270. Object(external_wp_data_["dispatch"])(external_wp_blocks_["store"]).addBlockVariations('core/legacy-widget', widgetTypes.map(widgetType => ({
  1271. name: widgetType.id,
  1272. title: widgetType.name,
  1273. description: widgetType.description,
  1274. attributes: widgetType.is_multi ? {
  1275. idBase: widgetType.id,
  1276. instance: {}
  1277. } : {
  1278. id: widgetType.id
  1279. }
  1280. })));
  1281. }
  1282. });
  1283. }
  1284. // CONCATENATED MODULE: ./node_modules/@wordpress/widgets/build-module/index.js
  1285. /**
  1286. * WordPress dependencies
  1287. */
  1288. /**
  1289. * Internal dependencies
  1290. */
  1291. /**
  1292. * Registers the Legacy Widget block.
  1293. *
  1294. * Note that for the block to be useful, any scripts required by a widget must
  1295. * be loaded into the page.
  1296. *
  1297. * @see https://developer.wordpress.org/block-editor/how-to-guides/widgets/legacy-widget-block/
  1298. */
  1299. function registerLegacyWidgetBlock() {
  1300. const {
  1301. metadata,
  1302. settings,
  1303. name
  1304. } = legacy_widget_namespaceObject;
  1305. Object(external_wp_blocks_["registerBlockType"])({
  1306. name,
  1307. ...metadata
  1308. }, settings);
  1309. }
  1310. /***/ }),
  1311. /***/ "GRId":
  1312. /***/ (function(module, exports) {
  1313. (function() { module.exports = window["wp"]["element"]; }());
  1314. /***/ }),
  1315. /***/ "HSyU":
  1316. /***/ (function(module, exports) {
  1317. (function() { module.exports = window["wp"]["blocks"]; }());
  1318. /***/ }),
  1319. /***/ "K9lf":
  1320. /***/ (function(module, exports) {
  1321. (function() { module.exports = window["wp"]["compose"]; }());
  1322. /***/ }),
  1323. /***/ "Mmq9":
  1324. /***/ (function(module, exports) {
  1325. (function() { module.exports = window["wp"]["url"]; }());
  1326. /***/ }),
  1327. /***/ "TSYQ":
  1328. /***/ (function(module, exports, __webpack_require__) {
  1329. var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
  1330. Copyright (c) 2018 Jed Watson.
  1331. Licensed under the MIT License (MIT), see
  1332. http://jedwatson.github.io/classnames
  1333. */
  1334. /* global define */
  1335. (function () {
  1336. 'use strict';
  1337. var hasOwn = {}.hasOwnProperty;
  1338. function classNames() {
  1339. var classes = [];
  1340. for (var i = 0; i < arguments.length; i++) {
  1341. var arg = arguments[i];
  1342. if (!arg) continue;
  1343. var argType = typeof arg;
  1344. if (argType === 'string' || argType === 'number') {
  1345. classes.push(arg);
  1346. } else if (Array.isArray(arg)) {
  1347. if (arg.length) {
  1348. var inner = classNames.apply(null, arg);
  1349. if (inner) {
  1350. classes.push(inner);
  1351. }
  1352. }
  1353. } else if (argType === 'object') {
  1354. if (arg.toString === Object.prototype.toString) {
  1355. for (var key in arg) {
  1356. if (hasOwn.call(arg, key) && arg[key]) {
  1357. classes.push(key);
  1358. }
  1359. }
  1360. } else {
  1361. classes.push(arg.toString());
  1362. }
  1363. }
  1364. }
  1365. return classes.join(' ');
  1366. }
  1367. if ( true && module.exports) {
  1368. classNames.default = classNames;
  1369. module.exports = classNames;
  1370. } else if (true) {
  1371. // register as 'classnames', consistent with npm package name
  1372. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
  1373. return classNames;
  1374. }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
  1375. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  1376. } else {}
  1377. }());
  1378. /***/ }),
  1379. /***/ "Tqx9":
  1380. /***/ (function(module, exports) {
  1381. (function() { module.exports = window["wp"]["primitives"]; }());
  1382. /***/ }),
  1383. /***/ "YLtl":
  1384. /***/ (function(module, exports) {
  1385. (function() { module.exports = window["lodash"]; }());
  1386. /***/ }),
  1387. /***/ "axFQ":
  1388. /***/ (function(module, exports) {
  1389. (function() { module.exports = window["wp"]["blockEditor"]; }());
  1390. /***/ }),
  1391. /***/ "jZUy":
  1392. /***/ (function(module, exports) {
  1393. (function() { module.exports = window["wp"]["coreData"]; }());
  1394. /***/ }),
  1395. /***/ "l3Sj":
  1396. /***/ (function(module, exports) {
  1397. (function() { module.exports = window["wp"]["i18n"]; }());
  1398. /***/ }),
  1399. /***/ "onLe":
  1400. /***/ (function(module, exports) {
  1401. (function() { module.exports = window["wp"]["notices"]; }());
  1402. /***/ }),
  1403. /***/ "tI+e":
  1404. /***/ (function(module, exports) {
  1405. (function() { module.exports = window["wp"]["components"]; }());
  1406. /***/ }),
  1407. /***/ "ywyh":
  1408. /***/ (function(module, exports) {
  1409. (function() { module.exports = window["wp"]["apiFetch"]; }());
  1410. /***/ })
  1411. /******/ });