[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/dist/ -> list-reusable-blocks.js (source)

   1  this["wp"] = this["wp"] || {}; this["wp"]["listReusableBlocks"] =
   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 = "SdGz");
  86  /******/ })
  87  /************************************************************************/
  88  /******/ ({
  89  
  90  /***/ "GRId":
  91  /***/ (function(module, exports) {
  92  
  93  (function() { module.exports = window["wp"]["element"]; }());
  94  
  95  /***/ }),
  96  
  97  /***/ "K9lf":
  98  /***/ (function(module, exports) {
  99  
 100  (function() { module.exports = window["wp"]["compose"]; }());
 101  
 102  /***/ }),
 103  
 104  /***/ "SdGz":
 105  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 106  
 107  "use strict";
 108  // ESM COMPAT FLAG
 109  __webpack_require__.r(__webpack_exports__);
 110  
 111  // EXTERNAL MODULE: external ["wp","element"]
 112  var external_wp_element_ = __webpack_require__("GRId");
 113  
 114  // EXTERNAL MODULE: external ["wp","i18n"]
 115  var external_wp_i18n_ = __webpack_require__("l3Sj");
 116  
 117  // EXTERNAL MODULE: external "lodash"
 118  var external_lodash_ = __webpack_require__("YLtl");
 119  
 120  // EXTERNAL MODULE: external ["wp","apiFetch"]
 121  var external_wp_apiFetch_ = __webpack_require__("ywyh");
 122  var external_wp_apiFetch_default = /*#__PURE__*/__webpack_require__.n(external_wp_apiFetch_);
 123  
 124  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/utils/file.js
 125  /**
 126   * Downloads a file.
 127   *
 128   * @param {string} fileName    File Name.
 129   * @param {string} content     File Content.
 130   * @param {string} contentType File mime type.
 131   */
 132  function download(fileName, content, contentType) {
 133    const file = new window.Blob([content], {
 134      type: contentType
 135    }); // IE11 can't use the click to download technique
 136    // we use a specific IE11 technique instead.
 137  
 138    if (window.navigator.msSaveOrOpenBlob) {
 139      window.navigator.msSaveOrOpenBlob(file, fileName);
 140    } else {
 141      const a = document.createElement('a');
 142      a.href = URL.createObjectURL(file);
 143      a.download = fileName;
 144      a.style.display = 'none';
 145      document.body.appendChild(a);
 146      a.click();
 147      document.body.removeChild(a);
 148    }
 149  }
 150  /**
 151   * Reads the textual content of the given file.
 152   *
 153   * @param  {File} file        File.
 154   * @return {Promise<string>}  Content of the file.
 155   */
 156  
 157  function readTextFile(file) {
 158    const reader = new window.FileReader();
 159    return new Promise(resolve => {
 160      reader.onload = () => {
 161        resolve(reader.result);
 162      };
 163  
 164      reader.readAsText(file);
 165    });
 166  }
 167  
 168  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/utils/export.js
 169  /**
 170   * External dependencies
 171   */
 172  
 173  /**
 174   * WordPress dependencies
 175   */
 176  
 177  
 178  /**
 179   * Internal dependencies
 180   */
 181  
 182  
 183  /**
 184   * Export a reusable block as a JSON file.
 185   *
 186   * @param {number} id
 187   */
 188  
 189  async function exportReusableBlock(id) {
 190    const postType = await external_wp_apiFetch_default()({
 191      path: `/wp/v2/types/wp_block`
 192    });
 193    const post = await external_wp_apiFetch_default()({
 194      path: `/wp/v2/$postType.rest_base}/$id}?context=edit`
 195    });
 196    const title = post.title.raw;
 197    const content = post.content.raw;
 198    const fileContent = JSON.stringify({
 199      __file: 'wp_block',
 200      title,
 201      content
 202    }, null, 2);
 203    const fileName = Object(external_lodash_["kebabCase"])(title) + '.json';
 204    download(fileName, fileContent, 'application/json');
 205  }
 206  
 207  /* harmony default export */ var utils_export = (exportReusableBlock);
 208  
 209  // EXTERNAL MODULE: external ["wp","components"]
 210  var external_wp_components_ = __webpack_require__("tI+e");
 211  
 212  // EXTERNAL MODULE: external ["wp","compose"]
 213  var external_wp_compose_ = __webpack_require__("K9lf");
 214  
 215  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/utils/import.js
 216  /**
 217   * External dependencies
 218   */
 219  
 220  /**
 221   * WordPress dependencies
 222   */
 223  
 224  
 225  /**
 226   * Internal dependencies
 227   */
 228  
 229  
 230  /**
 231   * Import a reusable block from a JSON file.
 232   *
 233   * @param {File}     file File.
 234   * @return {Promise} Promise returning the imported reusable block.
 235   */
 236  
 237  async function importReusableBlock(file) {
 238    const fileContent = await readTextFile(file);
 239    let parsedContent;
 240  
 241    try {
 242      parsedContent = JSON.parse(fileContent);
 243    } catch (e) {
 244      throw new Error('Invalid JSON file');
 245    }
 246  
 247    if (parsedContent.__file !== 'wp_block' || !parsedContent.title || !parsedContent.content || !Object(external_lodash_["isString"])(parsedContent.title) || !Object(external_lodash_["isString"])(parsedContent.content)) {
 248      throw new Error('Invalid Reusable block JSON file');
 249    }
 250  
 251    const postType = await external_wp_apiFetch_default()({
 252      path: `/wp/v2/types/wp_block`
 253    });
 254    const reusableBlock = await external_wp_apiFetch_default()({
 255      path: `/wp/v2/$postType.rest_base}`,
 256      data: {
 257        title: parsedContent.title,
 258        content: parsedContent.content,
 259        status: 'publish'
 260      },
 261      method: 'POST'
 262    });
 263    return reusableBlock;
 264  }
 265  
 266  /* harmony default export */ var utils_import = (importReusableBlock);
 267  
 268  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/components/import-form/index.js
 269  
 270  
 271  /**
 272   * WordPress dependencies
 273   */
 274  
 275  
 276  
 277  
 278  /**
 279   * Internal dependencies
 280   */
 281  
 282  
 283  
 284  class import_form_ImportForm extends external_wp_element_["Component"] {
 285    constructor() {
 286      super(...arguments);
 287      this.state = {
 288        isLoading: false,
 289        error: null,
 290        file: null
 291      };
 292      this.isStillMounted = true;
 293      this.onChangeFile = this.onChangeFile.bind(this);
 294      this.onSubmit = this.onSubmit.bind(this);
 295    }
 296  
 297    componentWillUnmount() {
 298      this.isStillMounted = false;
 299    }
 300  
 301    onChangeFile(event) {
 302      this.setState({
 303        file: event.target.files[0],
 304        error: null
 305      });
 306    }
 307  
 308    onSubmit(event) {
 309      event.preventDefault();
 310      const {
 311        file
 312      } = this.state;
 313      const {
 314        onUpload
 315      } = this.props;
 316  
 317      if (!file) {
 318        return;
 319      }
 320  
 321      this.setState({
 322        isLoading: true
 323      });
 324      utils_import(file).then(reusableBlock => {
 325        if (!this.isStillMounted) {
 326          return;
 327        }
 328  
 329        this.setState({
 330          isLoading: false
 331        });
 332        onUpload(reusableBlock);
 333      }).catch(error => {
 334        if (!this.isStillMounted) {
 335          return;
 336        }
 337  
 338        let uiMessage;
 339  
 340        switch (error.message) {
 341          case 'Invalid JSON file':
 342            uiMessage = Object(external_wp_i18n_["__"])('Invalid JSON file');
 343            break;
 344  
 345          case 'Invalid Reusable block JSON file':
 346            uiMessage = Object(external_wp_i18n_["__"])('Invalid Reusable block JSON file');
 347            break;
 348  
 349          default:
 350            uiMessage = Object(external_wp_i18n_["__"])('Unknown error');
 351        }
 352  
 353        this.setState({
 354          isLoading: false,
 355          error: uiMessage
 356        });
 357      });
 358    }
 359  
 360    onDismissError() {
 361      this.setState({
 362        error: null
 363      });
 364    }
 365  
 366    render() {
 367      const {
 368        instanceId
 369      } = this.props;
 370      const {
 371        file,
 372        isLoading,
 373        error
 374      } = this.state;
 375      const inputId = 'list-reusable-blocks-import-form-' + instanceId;
 376      return Object(external_wp_element_["createElement"])("form", {
 377        className: "list-reusable-blocks-import-form",
 378        onSubmit: this.onSubmit
 379      }, error && Object(external_wp_element_["createElement"])(external_wp_components_["Notice"], {
 380        status: "error",
 381        onRemove: () => this.onDismissError()
 382      }, error), Object(external_wp_element_["createElement"])("label", {
 383        htmlFor: inputId,
 384        className: "list-reusable-blocks-import-form__label"
 385      }, Object(external_wp_i18n_["__"])('File')), Object(external_wp_element_["createElement"])("input", {
 386        id: inputId,
 387        type: "file",
 388        onChange: this.onChangeFile
 389      }), Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
 390        type: "submit",
 391        isBusy: isLoading,
 392        disabled: !file || isLoading,
 393        isSecondary: true,
 394        className: "list-reusable-blocks-import-form__button"
 395      }, Object(external_wp_i18n_["_x"])('Import', 'button label')));
 396    }
 397  
 398  }
 399  
 400  /* harmony default export */ var import_form = (Object(external_wp_compose_["withInstanceId"])(import_form_ImportForm));
 401  
 402  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/components/import-dropdown/index.js
 403  
 404  
 405  /**
 406   * External dependencies
 407   */
 408  
 409  /**
 410   * WordPress dependencies
 411   */
 412  
 413  
 414  
 415  /**
 416   * Internal dependencies
 417   */
 418  
 419  
 420  
 421  function ImportDropdown({
 422    onUpload
 423  }) {
 424    return Object(external_wp_element_["createElement"])(external_wp_components_["Dropdown"], {
 425      position: "bottom right",
 426      contentClassName: "list-reusable-blocks-import-dropdown__content",
 427      renderToggle: ({
 428        isOpen,
 429        onToggle
 430      }) => Object(external_wp_element_["createElement"])(external_wp_components_["Button"], {
 431        "aria-expanded": isOpen,
 432        onClick: onToggle,
 433        isPrimary: true
 434      }, Object(external_wp_i18n_["__"])('Import from JSON')),
 435      renderContent: ({
 436        onClose
 437      }) => Object(external_wp_element_["createElement"])(import_form, {
 438        onUpload: Object(external_lodash_["flow"])(onClose, onUpload)
 439      })
 440    });
 441  }
 442  
 443  /* harmony default export */ var import_dropdown = (ImportDropdown);
 444  
 445  // CONCATENATED MODULE: ./node_modules/@wordpress/list-reusable-blocks/build-module/index.js
 446  
 447  
 448  /**
 449   * WordPress dependencies
 450   */
 451  
 452  
 453  /**
 454   * Internal dependencies
 455   */
 456  
 457  
 458   // Setup Export Links
 459  
 460  document.body.addEventListener('click', event => {
 461    if (!event.target.classList.contains('wp-list-reusable-blocks__export')) {
 462      return;
 463    }
 464  
 465    event.preventDefault();
 466    utils_export(event.target.dataset.id);
 467  }); // Setup Import Form
 468  
 469  document.addEventListener('DOMContentLoaded', () => {
 470    const button = document.querySelector('.page-title-action');
 471  
 472    if (!button) {
 473      return;
 474    }
 475  
 476    const showNotice = () => {
 477      const notice = document.createElement('div');
 478      notice.className = 'notice notice-success is-dismissible';
 479      notice.innerHTML = `<p>$Object(external_wp_i18n_["__"])('Reusable block imported successfully!')}</p>`;
 480      const headerEnd = document.querySelector('.wp-header-end');
 481  
 482      if (!headerEnd) {
 483        return;
 484      }
 485  
 486      headerEnd.parentNode.insertBefore(notice, headerEnd);
 487    };
 488  
 489    const container = document.createElement('div');
 490    container.className = 'list-reusable-blocks__container';
 491    button.parentNode.insertBefore(container, button);
 492    Object(external_wp_element_["render"])(Object(external_wp_element_["createElement"])(import_dropdown, {
 493      onUpload: showNotice
 494    }), container);
 495  });
 496  
 497  
 498  /***/ }),
 499  
 500  /***/ "YLtl":
 501  /***/ (function(module, exports) {
 502  
 503  (function() { module.exports = window["lodash"]; }());
 504  
 505  /***/ }),
 506  
 507  /***/ "l3Sj":
 508  /***/ (function(module, exports) {
 509  
 510  (function() { module.exports = window["wp"]["i18n"]; }());
 511  
 512  /***/ }),
 513  
 514  /***/ "tI+e":
 515  /***/ (function(module, exports) {
 516  
 517  (function() { module.exports = window["wp"]["components"]; }());
 518  
 519  /***/ }),
 520  
 521  /***/ "ywyh":
 522  /***/ (function(module, exports) {
 523  
 524  (function() { module.exports = window["wp"]["apiFetch"]; }());
 525  
 526  /***/ })
 527  
 528  /******/ });


Generated: Sat Sep 18 01:00:04 2021 Cross-referenced by PHPXref 0.7.1