wp-editor.bundle.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // The module cache
  3. /******/ var installedModules = {};
  4. /******/
  5. /******/ // The require function
  6. /******/ function __webpack_require__(moduleId) {
  7. /******/
  8. /******/ // Check if module is in cache
  9. /******/ if(installedModules[moduleId]) {
  10. /******/ return installedModules[moduleId].exports;
  11. /******/ }
  12. /******/ // Create a new module (and put it into the cache)
  13. /******/ var module = installedModules[moduleId] = {
  14. /******/ i: moduleId,
  15. /******/ l: false,
  16. /******/ exports: {}
  17. /******/ };
  18. /******/
  19. /******/ // Execute the module function
  20. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  21. /******/
  22. /******/ // Flag the module as loaded
  23. /******/ module.l = true;
  24. /******/
  25. /******/ // Return the exports of the module
  26. /******/ return module.exports;
  27. /******/ }
  28. /******/
  29. /******/
  30. /******/ // expose the modules object (__webpack_modules__)
  31. /******/ __webpack_require__.m = modules;
  32. /******/
  33. /******/ // expose the module cache
  34. /******/ __webpack_require__.c = installedModules;
  35. /******/
  36. /******/ // define getter function for harmony exports
  37. /******/ __webpack_require__.d = function(exports, name, getter) {
  38. /******/ if(!__webpack_require__.o(exports, name)) {
  39. /******/ Object.defineProperty(exports, name, {
  40. /******/ configurable: false,
  41. /******/ enumerable: true,
  42. /******/ get: getter
  43. /******/ });
  44. /******/ }
  45. /******/ };
  46. /******/
  47. /******/ // getDefaultExport function for compatibility with non-harmony modules
  48. /******/ __webpack_require__.n = function(module) {
  49. /******/ var getter = module && module.__esModule ?
  50. /******/ function getDefault() { return module['default']; } :
  51. /******/ function getModuleExports() { return module; };
  52. /******/ __webpack_require__.d(getter, 'a', getter);
  53. /******/ return getter;
  54. /******/ };
  55. /******/
  56. /******/ // Object.prototype.hasOwnProperty.call
  57. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  58. /******/
  59. /******/ // __webpack_public_path__
  60. /******/ __webpack_require__.p = "";
  61. /******/
  62. /******/ // Load entry module and return exports
  63. /******/ return __webpack_require__(__webpack_require__.s = 34);
  64. /******/ })
  65. /************************************************************************/
  66. /******/ ({
  67. /***/ 34:
  68. /***/ (function(module, exports, __webpack_require__) {
  69. "use strict";
  70. __webpack_require__(35);
  71. __webpack_require__(36);
  72. /***/ }),
  73. /***/ 35:
  74. /***/ (function(module, exports, __webpack_require__) {
  75. "use strict";
  76. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  77. function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
  78. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  79. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  80. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  81. var _FLBuilderConfig = FLBuilderConfig,
  82. strings = _FLBuilderConfig.strings;
  83. var _wp$blocks = wp.blocks,
  84. createBlock = _wp$blocks.createBlock,
  85. serialize = _wp$blocks.serialize;
  86. var Button = wp.components.Button;
  87. var compose = wp.compose.compose;
  88. var _wp$data = wp.data,
  89. withDispatch = _wp$data.withDispatch,
  90. withSelect = _wp$data.withSelect;
  91. var Component = wp.element.Component;
  92. var addFilter = wp.hooks.addFilter;
  93. /**
  94. * Convert to builder button component.
  95. */
  96. var ConvertToBuilderButton = function (_Component) {
  97. _inherits(ConvertToBuilderButton, _Component);
  98. function ConvertToBuilderButton() {
  99. _classCallCheck(this, ConvertToBuilderButton);
  100. return _possibleConstructorReturn(this, (ConvertToBuilderButton.__proto__ || Object.getPrototypeOf(ConvertToBuilderButton)).apply(this, arguments));
  101. }
  102. _createClass(ConvertToBuilderButton, [{
  103. key: 'render',
  104. value: function render() {
  105. if (this.hasBuilderBlock()) {
  106. return null;
  107. }
  108. return React.createElement(
  109. 'span',
  110. null,
  111. React.createElement(
  112. Button,
  113. {
  114. className: 'components-menu-item__button',
  115. onClick: this.convertToBuilder.bind(this)
  116. },
  117. strings.convert
  118. )
  119. );
  120. }
  121. }, {
  122. key: 'hasBuilderBlock',
  123. value: function hasBuilderBlock() {
  124. var getBlocks = this.props.getBlocks;
  125. var blocks = getBlocks();
  126. var builder = blocks.filter(function (block) {
  127. return 'fl-builder/layout' === block.name;
  128. });
  129. return !!builder.length;
  130. }
  131. }, {
  132. key: 'convertToBuilder',
  133. value: function convertToBuilder() {
  134. var _props = this.props,
  135. getBlocks = _props.getBlocks,
  136. insertBlock = _props.insertBlock,
  137. removeBlocks = _props.removeBlocks;
  138. var blocks = getBlocks();
  139. var clientIds = blocks.map(function (block) {
  140. return block.clientId;
  141. });
  142. var content = serialize(blocks).replace(/<!--(.*?)-->/g, '');
  143. var block = createBlock('fl-builder/layout', { content: content });
  144. removeBlocks(clientIds);
  145. insertBlock(block, 0);
  146. }
  147. }]);
  148. return ConvertToBuilderButton;
  149. }(Component);
  150. /**
  151. * Connect the button to editor data.
  152. */
  153. var ConvertToBuilderButtonConnected = compose(withDispatch(function (dispatch, ownProps) {
  154. var editor = dispatch('core/editor');
  155. return {
  156. insertBlock: editor.insertBlock,
  157. removeBlocks: editor.removeBlocks
  158. };
  159. }), withSelect(function (select) {
  160. var editor = select('core/editor');
  161. return {
  162. getBlocks: editor.getBlocks
  163. };
  164. }))(ConvertToBuilderButton);
  165. /**
  166. * Register the button.
  167. */
  168. addFilter('editPost.MoreMenu.tools', 'fl-builder/convert-to-builder/button', function (children) {
  169. return [].concat(_toConsumableArray(children), [React.createElement(ConvertToBuilderButtonConnected, { key: 'convert-to-builder' })]);
  170. });
  171. /***/ }),
  172. /***/ 36:
  173. /***/ (function(module, exports, __webpack_require__) {
  174. "use strict";
  175. var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
  176. __webpack_require__(37);
  177. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  178. function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
  179. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  180. var _FLBuilderConfig = FLBuilderConfig,
  181. builder = _FLBuilderConfig.builder,
  182. strings = _FLBuilderConfig.strings,
  183. urls = _FLBuilderConfig.urls;
  184. var _wp$blocks = wp.blocks,
  185. registerBlockType = _wp$blocks.registerBlockType,
  186. rawHandler = _wp$blocks.rawHandler,
  187. serialize = _wp$blocks.serialize;
  188. var _wp$components = wp.components,
  189. Button = _wp$components.Button,
  190. Placeholder = _wp$components.Placeholder,
  191. Spinner = _wp$components.Spinner;
  192. var compose = wp.compose.compose;
  193. var _wp$data = wp.data,
  194. subscribe = _wp$data.subscribe,
  195. withDispatch = _wp$data.withDispatch,
  196. withSelect = _wp$data.withSelect;
  197. var _wp$element = wp.element,
  198. Component = _wp$element.Component,
  199. RawHTML = _wp$element.RawHTML;
  200. /**
  201. * Edit Component
  202. */
  203. var LayoutBlockEdit = function (_Component) {
  204. _inherits(LayoutBlockEdit, _Component);
  205. function LayoutBlockEdit() {
  206. _classCallCheck(this, LayoutBlockEdit);
  207. var _this = _possibleConstructorReturn(this, (LayoutBlockEdit.__proto__ || Object.getPrototypeOf(LayoutBlockEdit)).apply(this, arguments));
  208. _this.state = {
  209. launching: false
  210. };
  211. _this.unsubscribe = subscribe(_this.storeDidUpdate.bind(_this));
  212. return _this;
  213. }
  214. _createClass(LayoutBlockEdit, [{
  215. key: 'storeDidUpdate',
  216. value: function storeDidUpdate() {
  217. var isSavingPost = this.props.isSavingPost;
  218. var launching = this.state.launching;
  219. if (launching && !isSavingPost()) {
  220. this.unsubscribe();
  221. this.redirectToBuilder();
  222. }
  223. }
  224. }, {
  225. key: 'componentDidMount',
  226. value: function componentDidMount() {
  227. var getBlockCount = this.props.getBlockCount;
  228. if (1 === getBlockCount()) {
  229. this.toggleEditor('disable');
  230. }
  231. }
  232. }, {
  233. key: 'componentWillUnmount',
  234. value: function componentWillUnmount() {
  235. this.unsubscribe();
  236. this.toggleEditor('enable');
  237. }
  238. }, {
  239. key: 'render',
  240. value: function render() {
  241. var _props = this.props,
  242. getBlockCount = _props.getBlockCount,
  243. onReplace = _props.onReplace;
  244. var launching = this.state.launching;
  245. var label = void 0,
  246. callback = void 0,
  247. description = void 0;
  248. if (1 === getBlockCount()) {
  249. label = builder.access ? strings.launch : strings.view;
  250. callback = this.launchBuilder.bind(this);
  251. } else {
  252. label = strings.convert;
  253. callback = this.convertToBuilder.bind(this);
  254. }
  255. if (builder.enabled) {
  256. description = strings.active;
  257. } else {
  258. description = strings.description;
  259. }
  260. return React.createElement(
  261. Placeholder,
  262. {
  263. key: 'placeholder',
  264. instructions: description,
  265. icon: 'welcome-widgets-menus',
  266. label: strings.title,
  267. className: 'fl-builder-layout-launch-view'
  268. },
  269. launching && React.createElement(Spinner, null),
  270. !launching && React.createElement(
  271. Button,
  272. {
  273. isLarge: true,
  274. isPrimary: true,
  275. type: 'submit',
  276. onClick: callback
  277. },
  278. label
  279. ),
  280. !launching && React.createElement(
  281. Button,
  282. {
  283. isLarge: true,
  284. type: 'submit',
  285. onClick: this.convertToBlocks.bind(this)
  286. },
  287. strings.editor
  288. )
  289. );
  290. }
  291. }, {
  292. key: 'toggleEditor',
  293. value: function toggleEditor() {
  294. var method = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'enable';
  295. var classList = document.body.classList;
  296. var enabledClass = 'fl-builder-layout-enabled';
  297. if ('enable' === method) {
  298. if (classList.contains(enabledClass)) {
  299. classList.remove(enabledClass);
  300. }
  301. } else {
  302. if (!classList.contains(enabledClass)) {
  303. classList.add(enabledClass);
  304. }
  305. }
  306. }
  307. }, {
  308. key: 'redirectToBuilder',
  309. value: function redirectToBuilder() {
  310. window.location.href = builder.access ? urls.edit : urls.view;
  311. }
  312. }, {
  313. key: 'launchBuilder',
  314. value: function launchBuilder() {
  315. var savePost = this.props.savePost;
  316. this.setState({ launching: true });
  317. savePost();
  318. }
  319. }, {
  320. key: 'convertToBuilder',
  321. value: function convertToBuilder() {
  322. var _props2 = this.props,
  323. clientId = _props2.clientId,
  324. getBlocks = _props2.getBlocks,
  325. setAttributes = _props2.setAttributes,
  326. removeBlocks = _props2.removeBlocks;
  327. var blocks = getBlocks();
  328. var content = serialize(blocks);
  329. var clientIds = blocks.map(function (block) {
  330. return block.clientId;
  331. }).filter(function (id) {
  332. return id !== clientId;
  333. });
  334. setAttributes({ content: content.replace(/<!--(.*?)-->/g, '') });
  335. removeBlocks(clientIds);
  336. this.launchBuilder();
  337. }
  338. }, {
  339. key: 'convertToBlocks',
  340. value: function convertToBlocks() {
  341. var _props3 = this.props,
  342. attributes = _props3.attributes,
  343. clientId = _props3.clientId,
  344. replaceBlocks = _props3.replaceBlocks,
  345. onReplace = _props3.onReplace;
  346. if (attributes.content && !confirm(strings.warning)) {
  347. return;
  348. } else if (attributes.content) {
  349. replaceBlocks([clientId], rawHandler({
  350. HTML: attributes.content,
  351. mode: 'BLOCKS'
  352. }));
  353. } else {
  354. onReplace([]);
  355. }
  356. }
  357. }]);
  358. return LayoutBlockEdit;
  359. }(Component);
  360. /**
  361. * Connect the edit component to editor data.
  362. */
  363. var LayoutBlockEditConnected = compose(withDispatch(function (dispatch, ownProps) {
  364. var editor = dispatch('core/editor');
  365. return {
  366. savePost: editor.savePost,
  367. removeBlocks: editor.removeBlocks,
  368. replaceBlocks: editor.replaceBlocks
  369. };
  370. }), withSelect(function (select) {
  371. var editor = select('core/editor');
  372. return {
  373. getBlockCount: editor.getBlockCount,
  374. getBlocks: editor.getBlocks,
  375. isSavingPost: editor.isSavingPost
  376. };
  377. }))(LayoutBlockEdit);
  378. /**
  379. * Register the block.
  380. */
  381. if (builder.access && builder.unrestricted || builder.enabled) {
  382. registerBlockType('fl-builder/layout', {
  383. title: strings.title,
  384. description: strings.description,
  385. icon: 'welcome-widgets-menus',
  386. category: 'layout',
  387. useOnce: true,
  388. supports: {
  389. customClassName: false,
  390. className: false,
  391. html: false
  392. },
  393. attributes: {
  394. content: {
  395. type: 'string',
  396. source: 'html'
  397. }
  398. },
  399. edit: LayoutBlockEditConnected,
  400. save: function save(_ref) {
  401. var attributes = _ref.attributes;
  402. return React.createElement(
  403. RawHTML,
  404. null,
  405. attributes.content
  406. );
  407. }
  408. });
  409. }
  410. /***/ }),
  411. /***/ 37:
  412. /***/ (function(module, exports) {
  413. // removed by extract-text-webpack-plugin
  414. /***/ })
  415. /******/ });