wp/wp-includes/js/dist/autop.js
changeset 9 177826044cd9
child 16 a86126ab1dd4
equal deleted inserted replaced
8:c7c34916027a 9:177826044cd9
       
     1 this["wp"] = this["wp"] || {}; this["wp"]["autop"] =
       
     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 = 254);
       
    86 /******/ })
       
    87 /************************************************************************/
       
    88 /******/ ({
       
    89 
       
    90 /***/ 254:
       
    91 /***/ (function(module, __webpack_exports__, __webpack_require__) {
       
    92 
       
    93 "use strict";
       
    94 __webpack_require__.r(__webpack_exports__);
       
    95 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "autop", function() { return autop; });
       
    96 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removep", function() { return removep; });
       
    97 /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28);
       
    98 
       
    99 
       
   100 /**
       
   101  * The regular expression for an HTML element.
       
   102  *
       
   103  * @type {String}
       
   104  */
       
   105 var htmlSplitRegex = function () {
       
   106   /* eslint-disable no-multi-spaces */
       
   107   var comments = '!' + // Start of comment, after the <.
       
   108   '(?:' + // Unroll the loop: Consume everything until --> is found.
       
   109   '-(?!->)' + // Dash not followed by end of comment.
       
   110   '[^\\-]*' + // Consume non-dashes.
       
   111   ')*' + // Loop possessively.
       
   112   '(?:-->)?'; // End of comment. If not found, match all input.
       
   113 
       
   114   var cdata = '!\\[CDATA\\[' + // Start of comment, after the <.
       
   115   '[^\\]]*' + // Consume non-].
       
   116   '(?:' + // Unroll the loop: Consume everything until ]]> is found.
       
   117   '](?!]>)' + // One ] not followed by end of comment.
       
   118   '[^\\]]*' + // Consume non-].
       
   119   ')*?' + // Loop possessively.
       
   120   '(?:]]>)?'; // End of comment. If not found, match all input.
       
   121 
       
   122   var escaped = '(?=' + // Is the element escaped?
       
   123   '!--' + '|' + '!\\[CDATA\\[' + ')' + '((?=!-)' + // If yes, which type?
       
   124   comments + '|' + cdata + ')';
       
   125   var regex = '(' + // Capture the entire match.
       
   126   '<' + // Find start of element.
       
   127   '(' + // Conditional expression follows.
       
   128   escaped + // Find end of escaped element.
       
   129   '|' + // ... else ...
       
   130   '[^>]*>?' + // Find end of normal element.
       
   131   ')' + ')';
       
   132   return new RegExp(regex);
       
   133   /* eslint-enable no-multi-spaces */
       
   134 }();
       
   135 /**
       
   136  * Separate HTML elements and comments from the text.
       
   137  *
       
   138  * @param  {string} input The text which has to be formatted.
       
   139  * @return {Array}        The formatted text.
       
   140  */
       
   141 
       
   142 
       
   143 function htmlSplit(input) {
       
   144   var parts = [];
       
   145   var workingInput = input;
       
   146   var match;
       
   147 
       
   148   while (match = workingInput.match(htmlSplitRegex)) {
       
   149     parts.push(workingInput.slice(0, match.index));
       
   150     parts.push(match[0]);
       
   151     workingInput = workingInput.slice(match.index + match[0].length);
       
   152   }
       
   153 
       
   154   if (workingInput.length) {
       
   155     parts.push(workingInput);
       
   156   }
       
   157 
       
   158   return parts;
       
   159 }
       
   160 /**
       
   161  * Replace characters or phrases within HTML elements only.
       
   162  *
       
   163  * @param  {string} haystack     The text which has to be formatted.
       
   164  * @param  {Object} replacePairs In the form {from: 'to', ...}.
       
   165  * @return {string}              The formatted text.
       
   166  */
       
   167 
       
   168 
       
   169 function replaceInHtmlTags(haystack, replacePairs) {
       
   170   // Find all elements.
       
   171   var textArr = htmlSplit(haystack);
       
   172   var changed = false; // Extract all needles.
       
   173 
       
   174   var needles = Object.keys(replacePairs); // Loop through delimiters (elements) only.
       
   175 
       
   176   for (var i = 1; i < textArr.length; i += 2) {
       
   177     for (var j = 0; j < needles.length; j++) {
       
   178       var needle = needles[j];
       
   179 
       
   180       if (-1 !== textArr[i].indexOf(needle)) {
       
   181         textArr[i] = textArr[i].replace(new RegExp(needle, 'g'), replacePairs[needle]);
       
   182         changed = true; // After one strtr() break out of the foreach loop and look at next element.
       
   183 
       
   184         break;
       
   185       }
       
   186     }
       
   187   }
       
   188 
       
   189   if (changed) {
       
   190     haystack = textArr.join('');
       
   191   }
       
   192 
       
   193   return haystack;
       
   194 }
       
   195 /**
       
   196  * Replaces double line-breaks with paragraph elements.
       
   197  *
       
   198  * A group of regex replaces used to identify text formatted with newlines and
       
   199  * replace double line-breaks with HTML paragraph tags. The remaining line-
       
   200  * breaks after conversion become `<br />` tags, unless br is set to 'false'.
       
   201  *
       
   202  * @param  {string}    text The text which has to be formatted.
       
   203  * @param  {boolean}   br   Optional. If set, will convert all remaining line-
       
   204  *                          breaks after paragraphing. Default true.
       
   205  *
       
   206  * @example
       
   207  *```js
       
   208  * import { autop } from '@wordpress/autop';
       
   209  * autop( 'my text' ); // "<p>my text</p>"
       
   210  * ```
       
   211  *
       
   212  * @return {string}         Text which has been converted into paragraph tags.
       
   213  */
       
   214 
       
   215 
       
   216 function autop(text) {
       
   217   var br = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
       
   218   var preTags = [];
       
   219 
       
   220   if (text.trim() === '') {
       
   221     return '';
       
   222   } // Just to make things a little easier, pad the end.
       
   223 
       
   224 
       
   225   text = text + '\n';
       
   226   /*
       
   227    * Pre tags shouldn't be touched by autop.
       
   228    * Replace pre tags with placeholders and bring them back after autop.
       
   229    */
       
   230 
       
   231   if (text.indexOf('<pre') !== -1) {
       
   232     var textParts = text.split('</pre>');
       
   233     var lastText = textParts.pop();
       
   234     text = '';
       
   235 
       
   236     for (var i = 0; i < textParts.length; i++) {
       
   237       var textPart = textParts[i];
       
   238       var start = textPart.indexOf('<pre'); // Malformed html?
       
   239 
       
   240       if (start === -1) {
       
   241         text += textPart;
       
   242         continue;
       
   243       }
       
   244 
       
   245       var name = '<pre wp-pre-tag-' + i + '></pre>';
       
   246       preTags.push([name, textPart.substr(start) + '</pre>']);
       
   247       text += textPart.substr(0, start) + name;
       
   248     }
       
   249 
       
   250     text += lastText;
       
   251   } // Change multiple <br>s into two line breaks, which will turn into paragraphs.
       
   252 
       
   253 
       
   254   text = text.replace(/<br\s*\/?>\s*<br\s*\/?>/g, '\n\n');
       
   255   var allBlocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)'; // Add a double line break above block-level opening tags.
       
   256 
       
   257   text = text.replace(new RegExp('(<' + allBlocks + '[\\s\/>])', 'g'), '\n\n$1'); // Add a double line break below block-level closing tags.
       
   258 
       
   259   text = text.replace(new RegExp('(<\/' + allBlocks + '>)', 'g'), '$1\n\n'); // Standardize newline characters to "\n".
       
   260 
       
   261   text = text.replace(/\r\n|\r/g, '\n'); // Find newlines in all elements and add placeholders.
       
   262 
       
   263   text = replaceInHtmlTags(text, {
       
   264     '\n': ' <!-- wpnl --> '
       
   265   }); // Collapse line breaks before and after <option> elements so they don't get autop'd.
       
   266 
       
   267   if (text.indexOf('<option') !== -1) {
       
   268     text = text.replace(/\s*<option/g, '<option');
       
   269     text = text.replace(/<\/option>\s*/g, '</option>');
       
   270   }
       
   271   /*
       
   272    * Collapse line breaks inside <object> elements, before <param> and <embed> elements
       
   273    * so they don't get autop'd.
       
   274    */
       
   275 
       
   276 
       
   277   if (text.indexOf('</object>') !== -1) {
       
   278     text = text.replace(/(<object[^>]*>)\s*/g, '$1');
       
   279     text = text.replace(/\s*<\/object>/g, '</object>');
       
   280     text = text.replace(/\s*(<\/?(?:param|embed)[^>]*>)\s*/g, '$1');
       
   281   }
       
   282   /*
       
   283    * Collapse line breaks inside <audio> and <video> elements,
       
   284    * before and after <source> and <track> elements.
       
   285    */
       
   286 
       
   287 
       
   288   if (text.indexOf('<source') !== -1 || text.indexOf('<track') !== -1) {
       
   289     text = text.replace(/([<\[](?:audio|video)[^>\]]*[>\]])\s*/g, '$1');
       
   290     text = text.replace(/\s*([<\[]\/(?:audio|video)[>\]])/g, '$1');
       
   291     text = text.replace(/\s*(<(?:source|track)[^>]*>)\s*/g, '$1');
       
   292   } // Collapse line breaks before and after <figcaption> elements.
       
   293 
       
   294 
       
   295   if (text.indexOf('<figcaption') !== -1) {
       
   296     text = text.replace(/\s*(<figcaption[^>]*>)/, '$1');
       
   297     text = text.replace(/<\/figcaption>\s*/, '</figcaption>');
       
   298   } // Remove more than two contiguous line breaks.
       
   299 
       
   300 
       
   301   text = text.replace(/\n\n+/g, '\n\n'); // Split up the contents into an array of strings, separated by double line breaks.
       
   302 
       
   303   var texts = text.split(/\n\s*\n/).filter(Boolean); // Reset text prior to rebuilding.
       
   304 
       
   305   text = ''; // Rebuild the content as a string, wrapping every bit with a <p>.
       
   306 
       
   307   texts.forEach(function (textPiece) {
       
   308     text += '<p>' + textPiece.replace(/^\n*|\n*$/g, '') + '</p>\n';
       
   309   }); // Under certain strange conditions it could create a P of entirely whitespace.
       
   310 
       
   311   text = text.replace(/<p>\s*<\/p>/g, ''); // Add a closing <p> inside <div>, <address>, or <form> tag if missing.
       
   312 
       
   313   text = text.replace(/<p>([^<]+)<\/(div|address|form)>/g, '<p>$1</p></$2>'); // If an opening or closing block element tag is wrapped in a <p>, unwrap it.
       
   314 
       
   315   text = text.replace(new RegExp('<p>\\s*(<\/?' + allBlocks + '[^>]*>)\\s*<\/p>', 'g'), '$1'); // In some cases <li> may get wrapped in <p>, fix them.
       
   316 
       
   317   text = text.replace(/<p>(<li.+?)<\/p>/g, '$1'); // If a <blockquote> is wrapped with a <p>, move it inside the <blockquote>.
       
   318 
       
   319   text = text.replace(/<p><blockquote([^>]*)>/gi, '<blockquote$1><p>');
       
   320   text = text.replace(/<\/blockquote><\/p>/g, '</p></blockquote>'); // If an opening or closing block element tag is preceded by an opening <p> tag, remove it.
       
   321 
       
   322   text = text.replace(new RegExp('<p>\\s*(<\/?' + allBlocks + '[^>]*>)', 'g'), '$1'); // If an opening or closing block element tag is followed by a closing <p> tag, remove it.
       
   323 
       
   324   text = text.replace(new RegExp('(<\/?' + allBlocks + '[^>]*>)\\s*<\/p>', 'g'), '$1'); // Optionally insert line breaks.
       
   325 
       
   326   if (br) {
       
   327     // Replace newlines that shouldn't be touched with a placeholder.
       
   328     text = text.replace(/<(script|style).*?<\/\\1>/g, function (match) {
       
   329       return match[0].replace(/\n/g, '<WPPreserveNewline />');
       
   330     }); // Normalize <br>
       
   331 
       
   332     text = text.replace(/<br>|<br\/>/g, '<br />'); // Replace any new line characters that aren't preceded by a <br /> with a <br />.
       
   333 
       
   334     text = text.replace(/(<br \/>)?\s*\n/g, function (a, b) {
       
   335       return b ? a : '<br />\n';
       
   336     }); // Replace newline placeholders with newlines.
       
   337 
       
   338     text = text.replace(/<WPPreserveNewline \/>/g, '\n');
       
   339   } // If a <br /> tag is after an opening or closing block tag, remove it.
       
   340 
       
   341 
       
   342   text = text.replace(new RegExp('(<\/?' + allBlocks + '[^>]*>)\\s*<br \/>', 'g'), '$1'); // If a <br /> tag is before a subset of opening or closing block tags, remove it.
       
   343 
       
   344   text = text.replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)/g, '$1');
       
   345   text = text.replace(/\n<\/p>$/g, '</p>'); // Replace placeholder <pre> tags with their original content.
       
   346 
       
   347   preTags.forEach(function (preTag) {
       
   348     var _preTag = Object(_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(preTag, 2),
       
   349         name = _preTag[0],
       
   350         original = _preTag[1];
       
   351 
       
   352     text = text.replace(name, original);
       
   353   }); // Restore newlines in all elements.
       
   354 
       
   355   if (-1 !== text.indexOf('<!-- wpnl -->')) {
       
   356     text = text.replace(/\s?<!-- wpnl -->\s?/g, '\n');
       
   357   }
       
   358 
       
   359   return text;
       
   360 }
       
   361 /**
       
   362  * Replaces `<p>` tags with two line breaks. "Opposite" of autop().
       
   363  *
       
   364  * Replaces `<p>` tags with two line breaks except where the `<p>` has attributes.
       
   365  * Unifies whitespace. Indents `<li>`, `<dt>` and `<dd>` for better readability.
       
   366  *
       
   367  * @param  {string} html The content from the editor.
       
   368  *
       
   369  * @example
       
   370  * ```js
       
   371  * import { removep } from '@wordpress/autop';
       
   372  * removep( '<p>my text</p>' ); // "my text"
       
   373  * ```
       
   374  *
       
   375  * @return {string}      The content with stripped paragraph tags.
       
   376  */
       
   377 
       
   378 function removep(html) {
       
   379   var blocklist = 'blockquote|ul|ol|li|dl|dt|dd|table|thead|tbody|tfoot|tr|th|td|h[1-6]|fieldset|figure';
       
   380   var blocklist1 = blocklist + '|div|p';
       
   381   var blocklist2 = blocklist + '|pre';
       
   382   var preserve = [];
       
   383   var preserveLinebreaks = false;
       
   384   var preserveBr = false;
       
   385 
       
   386   if (!html) {
       
   387     return '';
       
   388   } // Protect script and style tags.
       
   389 
       
   390 
       
   391   if (html.indexOf('<script') !== -1 || html.indexOf('<style') !== -1) {
       
   392     html = html.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/g, function (match) {
       
   393       preserve.push(match);
       
   394       return '<wp-preserve>';
       
   395     });
       
   396   } // Protect pre tags.
       
   397 
       
   398 
       
   399   if (html.indexOf('<pre') !== -1) {
       
   400     preserveLinebreaks = true;
       
   401     html = html.replace(/<pre[^>]*>[\s\S]+?<\/pre>/g, function (a) {
       
   402       a = a.replace(/<br ?\/?>(\r\n|\n)?/g, '<wp-line-break>');
       
   403       a = a.replace(/<\/?p( [^>]*)?>(\r\n|\n)?/g, '<wp-line-break>');
       
   404       return a.replace(/\r?\n/g, '<wp-line-break>');
       
   405     });
       
   406   } // Remove line breaks but keep <br> tags inside image captions.
       
   407 
       
   408 
       
   409   if (html.indexOf('[caption') !== -1) {
       
   410     preserveBr = true;
       
   411     html = html.replace(/\[caption[\s\S]+?\[\/caption\]/g, function (a) {
       
   412       return a.replace(/<br([^>]*)>/g, '<wp-temp-br$1>').replace(/[\r\n\t]+/, '');
       
   413     });
       
   414   } // Normalize white space characters before and after block tags.
       
   415 
       
   416 
       
   417   html = html.replace(new RegExp('\\s*</(' + blocklist1 + ')>\\s*', 'g'), '</$1>\n');
       
   418   html = html.replace(new RegExp('\\s*<((?:' + blocklist1 + ')(?: [^>]*)?)>', 'g'), '\n<$1>'); // Mark </p> if it has any attributes.
       
   419 
       
   420   html = html.replace(/(<p [^>]+>.*?)<\/p>/g, '$1</p#>'); // Preserve the first <p> inside a <div>.
       
   421 
       
   422   html = html.replace(/<div( [^>]*)?>\s*<p>/gi, '<div$1>\n\n'); // Remove paragraph tags.
       
   423 
       
   424   html = html.replace(/\s*<p>/gi, '');
       
   425   html = html.replace(/\s*<\/p>\s*/gi, '\n\n'); // Normalize white space chars and remove multiple line breaks.
       
   426 
       
   427   html = html.replace(/\n[\s\u00a0]+\n/g, '\n\n'); // Replace <br> tags with line breaks.
       
   428 
       
   429   html = html.replace(/(\s*)<br ?\/?>\s*/gi, function (match, space) {
       
   430     if (space && space.indexOf('\n') !== -1) {
       
   431       return '\n\n';
       
   432     }
       
   433 
       
   434     return '\n';
       
   435   }); // Fix line breaks around <div>.
       
   436 
       
   437   html = html.replace(/\s*<div/g, '\n<div');
       
   438   html = html.replace(/<\/div>\s*/g, '</div>\n'); // Fix line breaks around caption shortcodes.
       
   439 
       
   440   html = html.replace(/\s*\[caption([^\[]+)\[\/caption\]\s*/gi, '\n\n[caption$1[/caption]\n\n');
       
   441   html = html.replace(/caption\]\n\n+\[caption/g, 'caption]\n\n[caption'); // Pad block elements tags with a line break.
       
   442 
       
   443   html = html.replace(new RegExp('\\s*<((?:' + blocklist2 + ')(?: [^>]*)?)\\s*>', 'g'), '\n<$1>');
       
   444   html = html.replace(new RegExp('\\s*</(' + blocklist2 + ')>\\s*', 'g'), '</$1>\n'); // Indent <li>, <dt> and <dd> tags.
       
   445 
       
   446   html = html.replace(/<((li|dt|dd)[^>]*)>/g, ' \t<$1>'); // Fix line breaks around <select> and <option>.
       
   447 
       
   448   if (html.indexOf('<option') !== -1) {
       
   449     html = html.replace(/\s*<option/g, '\n<option');
       
   450     html = html.replace(/\s*<\/select>/g, '\n</select>');
       
   451   } // Pad <hr> with two line breaks.
       
   452 
       
   453 
       
   454   if (html.indexOf('<hr') !== -1) {
       
   455     html = html.replace(/\s*<hr( [^>]*)?>\s*/g, '\n\n<hr$1>\n\n');
       
   456   } // Remove line breaks in <object> tags.
       
   457 
       
   458 
       
   459   if (html.indexOf('<object') !== -1) {
       
   460     html = html.replace(/<object[\s\S]+?<\/object>/g, function (a) {
       
   461       return a.replace(/[\r\n]+/g, '');
       
   462     });
       
   463   } // Unmark special paragraph closing tags.
       
   464 
       
   465 
       
   466   html = html.replace(/<\/p#>/g, '</p>\n'); // Pad remaining <p> tags whit a line break.
       
   467 
       
   468   html = html.replace(/\s*(<p [^>]+>[\s\S]*?<\/p>)/g, '\n$1'); // Trim.
       
   469 
       
   470   html = html.replace(/^\s+/, '');
       
   471   html = html.replace(/[\s\u00a0]+$/, '');
       
   472 
       
   473   if (preserveLinebreaks) {
       
   474     html = html.replace(/<wp-line-break>/g, '\n');
       
   475   }
       
   476 
       
   477   if (preserveBr) {
       
   478     html = html.replace(/<wp-temp-br([^>]*)>/g, '<br$1>');
       
   479   } // Restore preserved tags.
       
   480 
       
   481 
       
   482   if (preserve.length) {
       
   483     html = html.replace(/<wp-preserve>/g, function () {
       
   484       return preserve.shift();
       
   485     });
       
   486   }
       
   487 
       
   488   return html;
       
   489 }
       
   490 
       
   491 
       
   492 /***/ }),
       
   493 
       
   494 /***/ 28:
       
   495 /***/ (function(module, __webpack_exports__, __webpack_require__) {
       
   496 
       
   497 "use strict";
       
   498 
       
   499 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
       
   500 var arrayWithHoles = __webpack_require__(37);
       
   501 
       
   502 // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
       
   503 function _iterableToArrayLimit(arr, i) {
       
   504   var _arr = [];
       
   505   var _n = true;
       
   506   var _d = false;
       
   507   var _e = undefined;
       
   508 
       
   509   try {
       
   510     for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
       
   511       _arr.push(_s.value);
       
   512 
       
   513       if (i && _arr.length === i) break;
       
   514     }
       
   515   } catch (err) {
       
   516     _d = true;
       
   517     _e = err;
       
   518   } finally {
       
   519     try {
       
   520       if (!_n && _i["return"] != null) _i["return"]();
       
   521     } finally {
       
   522       if (_d) throw _e;
       
   523     }
       
   524   }
       
   525 
       
   526   return _arr;
       
   527 }
       
   528 // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
       
   529 var nonIterableRest = __webpack_require__(38);
       
   530 
       
   531 // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js
       
   532 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _slicedToArray; });
       
   533 
       
   534 
       
   535 
       
   536 function _slicedToArray(arr, i) {
       
   537   return Object(arrayWithHoles["a" /* default */])(arr) || _iterableToArrayLimit(arr, i) || Object(nonIterableRest["a" /* default */])();
       
   538 }
       
   539 
       
   540 /***/ }),
       
   541 
       
   542 /***/ 37:
       
   543 /***/ (function(module, __webpack_exports__, __webpack_require__) {
       
   544 
       
   545 "use strict";
       
   546 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _arrayWithHoles; });
       
   547 function _arrayWithHoles(arr) {
       
   548   if (Array.isArray(arr)) return arr;
       
   549 }
       
   550 
       
   551 /***/ }),
       
   552 
       
   553 /***/ 38:
       
   554 /***/ (function(module, __webpack_exports__, __webpack_require__) {
       
   555 
       
   556 "use strict";
       
   557 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _nonIterableRest; });
       
   558 function _nonIterableRest() {
       
   559   throw new TypeError("Invalid attempt to destructure non-iterable instance");
       
   560 }
       
   561 
       
   562 /***/ })
       
   563 
       
   564 /******/ });