ThirstyAffiliates Affiliate Link Manager - Version 3.9

Version Description

  • Bug Fix: Gutenberg Input affiliate link as shortcode should show the error to admin only
  • Bug Fix: Convert to blocks converts images on posts as ThirstyAffiliates Image block
  • Bug Fix: UTC-2 and UTC+11 Timezone produces Fatal Error when activating the plugin
  • Bug Fix: TA button style for block editor changes in WP 5.2.1
Download this release

Release Info

Developer jkohlbach
Plugin Icon 128x128 ThirstyAffiliates Affiliate Link Manager
Version 3.9
Comparing to
See all releases

Code changes from version 3.8 to 3.9

Helpers/Helper_Functions.php CHANGED
@@ -188,7 +188,7 @@ class Helper_Functions {
188
 
189
  foreach ( timezone_abbreviations_list() as $abbr )
190
  foreach ( $abbr as $city )
191
- if ( $city[ 'dst' ] == $is_dst && $city[ 'offset' ] == $utc_offset )
192
  return $city[ 'timezone_id' ];
193
 
194
  // fallback to UTC
188
 
189
  foreach ( timezone_abbreviations_list() as $abbr )
190
  foreach ( $abbr as $city )
191
+ if ( $city[ 'dst' ] == $is_dst && $city[ 'offset' ] == $utc_offset && isset( $city[ 'timezone_id' ] ) )
192
  return $city[ 'timezone_id' ];
193
 
194
  // fallback to UTC
Helpers/Plugin_Constants.php CHANGED
@@ -27,7 +27,7 @@ class Plugin_Constants {
27
  // Plugin configuration constants
28
  const TOKEN = 'ta';
29
  const INSTALLED_VERSION = 'ta_installed_version';
30
- const VERSION = '3.8';
31
  const TEXT_DOMAIN = 'thirstyaffiliates';
32
  const THEME_TEMPLATE_PATH = 'thirstyaffiliates';
33
  const META_DATA_PREFIX = '_ta_';
27
  // Plugin configuration constants
28
  const TOKEN = 'ta';
29
  const INSTALLED_VERSION = 'ta_installed_version';
30
+ const VERSION = '3.9';
31
  const TEXT_DOMAIN = 'thirstyaffiliates';
32
  const THEME_TEMPLATE_PATH = 'thirstyaffiliates';
33
  const META_DATA_PREFIX = '_ta_';
Models/Shortcodes.php CHANGED
@@ -260,8 +260,10 @@ class Shortcodes implements Model_Interface {
260
  $output .= ' data-shortcode="true">' . do_shortcode( $content ) . '</a>';
261
 
262
 
263
- } else
264
  $output .= '<span style="color: #0000ff;">' . __( 'SHORTCODE ERROR: ThirstyAffiliates did not detect a valid link id, please check your short code!' , 'thirstyaffiliates' ) . '</span>';
 
 
265
 
266
  return $output;
267
  }
260
  $output .= ' data-shortcode="true">' . do_shortcode( $content ) . '</a>';
261
 
262
 
263
+ } elseif ( current_user_can( 'edit_published_posts' ) )
264
  $output .= '<span style="color: #0000ff;">' . __( 'SHORTCODE ERROR: ThirstyAffiliates did not detect a valid link id, please check your short code!' , 'thirstyaffiliates' ) . '</span>';
265
+ else
266
+ $output = $content;
267
 
268
  return $output;
269
  }
js/app/gutenberg_support/dist/gutenberg-support.js CHANGED
@@ -3,5 +3,5 @@
3
  Licensed under the MIT License (MIT), see
4
  http://jedwatson.github.io/classnames
5
  */
6
- !function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var i=arguments[t];if(i){var o=typeof i;if("string"===o||"number"===o)e.push(i);else if(Array.isArray(i)&&i.length){var a=n.apply(null,i);a&&e.push(a)}else if("object"===o)for(var l in i)r.call(i,l)&&i[l]&&e.push(l)}}return e.join(" ")}var r={}.hasOwnProperty;void 0!==e&&e.exports?(n.default=n,e.exports=n):(i=[],void 0!==(o=function(){return n}.apply(t,i))&&(e.exports=o))}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(2),o=n(8),r=n(18);n.n(r);Object(i.a)(),Object(o.a)()},function(e,t,n){"use strict";function i(){[o].forEach(function(e){if(e){var t=e.name,n=e.settings;r(t,n)}})}t.a=i;var o=n(3),r=wp.blocks.registerBlockType},function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"name",function(){return v}),n.d(t,"settings",function(){return k});var o=n(0),r=n.n(o),a=n(4),l=wp.element.Fragment,s=wp.i18n.__,u=wp.blocks,c=u.createBlock,p=u.getBlockAttributes,f=u.getPhrasingContentSchema,d=wp.editor.RichText,h=wp.components,m=h.Path,g=h.SVG,v="ta/image",w={url:{type:"string",source:"attribute",selector:"img",attribute:"src"},alt:{type:"string",source:"attribute",selector:"img",attribute:"alt",default:""},caption:{type:"string",source:"html",selector:"figcaption"},id:{type:"number"},align:{type:"string"},width:{type:"number"},height:{type:"number"},linkid:{type:"number"},href:{type:"string",source:"attribute",selector:"ta",attribute:"href"},affiliateLink:{type:"object"}},b={img:{attributes:["src","alt"],classes:["alignleft","aligncenter","alignright","alignnone",/^wp-image-\d+$/]}},y={figure:{require:["ta","img"],children:{ta:{attributes:["href","linkid"],children:b},figcaption:{children:f()}}}},k={title:s("ThirstyAffiliates Image"),description:s("Insert an image with an affiliate link to make a visual statement."),icon:wp.element.createElement(g,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement(m,{d:"M0,0h24v24H0V0z",fill:"none"}),wp.element.createElement(m,{d:"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"}),wp.element.createElement(m,{d:"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"})),category:"common",keywords:["img",s("photo"),s("affiliate")],attributes:w,transforms:{from:[{type:"raw",isMatch:function(e){return"FIGURE"===e.nodeName&&!!e.querySelector("img")},schema:y,transform:function(e){var t=e.className+" "+e.querySelector("img").className,n=/(?:^|\s)align(left|center|right)(?:$|\s)/.exec(t),i=n?n[1]:void 0,o=/(?:^|\s)wp-image-(\d+)(?:$|\s)/.exec(t),r=o?Number(o[1]):void 0,a=e.querySelector("a"),l=a&&a.href?"custom":void 0,s=a&&a.linkid?a.linkid:void 0,u=a&&a.href?a.href:void 0,f=a&&a.rel?a.rel:void 0,d=a&&a.className?a.className:void 0,h=p("ta/image",e.outerHTML,{align:i,id:r,linkDestination:l,linkid:s,href:u,rel:f,linkClass:d});return c("ta/image",h)}},{type:"files",isMatch:function(e){return 1===e.length&&0===e[0].type.indexOf("image/")},transform:function(e){var t=e[0];return c("ta/image",{url:createBlobURL(t)})}},{type:"shortcode",tag:"caption",attributes:{url:{type:"string",source:"attribute",attribute:"src",selector:"img"},alt:{type:"string",source:"attribute",attribute:"alt",selector:"img"},caption:{shortcode:function(e,t){var n=t.shortcode,i=document.implementation.createHTMLDocument(""),o=i.body;return o.innerHTML=n.content,o.removeChild(o.firstElementChild),o.innerHTML.trim()}},id:{type:"number",shortcode:function(e){var t=e.named.id;if(t)return parseInt(t.replace("attachment_",""),10)}},align:{type:"string",shortcode:function(e){var t=e.named.align;return(void 0===t?"alignnone":t).replace("align","")}},linkid:{type:"string",source:"attribute",selector:"wp-block-ta-image > ta",attribute:"linkid"},href:{type:"string",source:"attribute",selector:"ta",attribute:"href"}}}]},getEditWrapperProps:function(e){var t=e.align,n=e.width;if("left"===t||"center"===t||"right"===t||"wide"===t||"full"===t)return{"data-align":t,"data-resized":!!n}},edit:a.a,save:function(e){var t,n=e.attributes,o=n.url,a=n.alt,s=n.caption,u=n.align,c=n.width,p=n.height,f=n.id,h=n.linkid,m=n.href,g=r()((t={},i(t,"align"+u,u),i(t,"is-resized",c||p),t)),v=wp.element.createElement("img",{src:o,alt:a,className:f?"wp-image-"+f:null,width:c,height:p}),w=wp.element.createElement(l,null,wp.element.createElement("ta",{linkid:h,href:m},v),wp.element.createElement(d.Content,{tagName:"figcaption",value:s}));return"left"===u||"right"===u||"center"===u?wp.element.createElement("div",{className:"wp-block-image"},wp.element.createElement("figure",{className:g},w)):wp.element.createElement("figure",{className:"wp-block-image "+g},w)}}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=n(5),u=n(6),c=n(7),p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},f=function(){function e(e,t){var n=[],i=!0,o=!1,r=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{!i&&l.return&&l.return()}finally{if(o)throw r}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),h=lodash,m=h.get,g=h.isEmpty,v=h.map,w=h.last,b=h.pick,y=h.compact,k=wp.url.getPath,S=wp.i18n,E=S.__,_=S.sprintf,L=wp.element,O=L.Component,C=L.Fragment,I=L.createRef,T=wp.blob,R=T.getBlobByURL,P=T.revokeBlobURL,x=T.isBlobURL,A=wp.components,j=A.Placeholder,N=A.Button,F=A.ButtonGroup,W=A.IconButton,D=A.PanelBody,V=A.ResizableBox,H=A.SelectControl,z=A.Spinner,M=A.TextControl,B=A.TextareaControl,U=A.Toolbar,K=A.withNotices,q=(A.ToggleControl,A.Popover,wp.data.withSelect),G=wp.editor,$=G.RichText,Q=G.BlockControls,Z=G.InspectorControls,X=(G.MediaUpload,G.MediaUploadCheck,G.MediaPlaceholder,G.BlockAlignmentToolbar),Y=G.mediaUpload,J=wp.viewport.withViewportMatch,ee=wp.compose.compose,te=["image"],ne=function(e){var t=b(e,["alt","id","link","caption"]);return t.url=m(e,["sizes","large","url"])||m(e,["media_details","sizes","large","source_url"])||e.url,t},ie=function(e,t){return!e&&x(t)},oe=function(e){function t(e){var n=e.attributes;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.updateAlt=r.updateAlt.bind(r),r.updateAlignment=r.updateAlignment.bind(r),r.onFocusCaption=r.onFocusCaption.bind(r),r.onImageClick=r.onImageClick.bind(r),r.onSelectImage=r.onSelectImage.bind(r),r.updateImageURL=r.updateImageURL.bind(r),r.updateWidth=r.updateWidth.bind(r),r.updateHeight=r.updateHeight.bind(r),r.updateDimensions=r.updateDimensions.bind(r),r.getFilename=r.getFilename.bind(r),r.toggleIsEditing=r.toggleIsEditing.bind(r),r.onImageError=r.onImageError.bind(r),r.onChangeInputValue=r.onChangeInputValue.bind(r),r.autocompleteRef=I(),r.resetInvalidLink=r.resetInvalidLink.bind(r),r.updateImageSelection=r.updateImageSelection.bind(r),r.onSelectAffiliateImage=r.onSelectAffiliateImage.bind(r),r.editAFfiliateImage=r.editAFfiliateImage.bind(r),r.state={captionFocused:!1,isEditing:!n.url,inputValue:"",linkid:0,post:null,showSuggestions:!1,imageSelection:[],affiliateLink:null},r}return r(t,e),d(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.attributes,i=t.setAttributes,o=t.noticeOperations,r=n.id,a=n.url,l=void 0===a?"":a;if(ie(r,l)){var s=R(l);s&&Y({filesList:[s],onFileChange:function(e){var t=f(e,1),n=t[0];i(ne(n))},allowedTypes:te,onError:function(t){o.createErrorNotice(t),e.setState({isEditing:!0})}})}}},{key:"componentDidUpdate",value:function(e){var t=e.attributes,n=t.id,i=t.url,o=void 0===i?"":i,r=this.props.attributes,a=r.id,l=r.url,s=void 0===l?"":l;ie(n,o)&&!ie(a,s)&&P(s),!this.props.isSelected&&e.isSelected&&this.state.captionFocused&&this.setState({captionFocused:!1})}},{key:"onSelectImage",value:function(e){if(!e||!e.url)return void this.props.setAttributes({url:void 0,alt:void 0,id:void 0,caption:void 0});var t=this.state.affiliateLink;this.setState({isEditing:!1}),this.props.setAttributes(p({},ne(e),{linkid:t.id,href:t.link,affiliateLink:t,width:void 0,height:void 0}))}},{key:"onImageError",value:function(e){var t=Object(s.a)({attributes:{url:e}});void 0!==t&&this.props.onReplace(t)}},{key:"onFocusCaption",value:function(){this.state.captionFocused||this.setState({captionFocused:!0})}},{key:"onImageClick",value:function(){this.state.captionFocused&&this.setState({captionFocused:!1})}},{key:"updateAlt",value:function(e){this.props.setAttributes({alt:e})}},{key:"updateAlignment",value:function(e){var t=-1!==["wide","full"].indexOf(e)?{width:void 0,height:void 0}:{};this.props.setAttributes(p({},t,{align:e}))}},{key:"updateImageURL",value:function(e){this.props.setAttributes({url:e,width:void 0,height:void 0})}},{key:"updateWidth",value:function(e){this.props.setAttributes({width:parseInt(e,10)})}},{key:"updateHeight",value:function(e){this.props.setAttributes({height:parseInt(e,10)})}},{key:"updateDimensions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return function(){e.props.setAttributes({width:t,height:n})}}},{key:"getFilename",value:function(e){var t=k(e);if(t)return w(t.split("/"))}},{key:"getLinkDestinationOptions",value:function(){return[{value:"none",label:E("None")},{value:"media",label:E("Media File")},{value:"attachment",label:E("Attachment Page")},{value:"custom",label:E("Custom URL")}]}},{key:"toggleIsEditing",value:function(){this.setState({isEditing:!this.state.isEditing})}},{key:"getImageSizeOptions",value:function(){var e=this.props,t=e.imageSizes,n=e.image;return y(v(t,function(e){var t=e.name,i=e.slug,o=m(n,["media_details","sizes",i,"source_url"]);return o?{value:o,label:t}:null}))}},{key:"onChangeInputValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t?t.id:0;this.setState({inputValue:e,linkid:n,post:t})}},{key:"resetInvalidLink",value:function(){this.setState({invalidLink:!1})}},{key:"updateImageSelection",value:function(e,t){this.setState({imageSelection:e,affiliateLink:t})}},{key:"onSelectAffiliateImage",value:function(e){var t=this;wp.apiFetch({path:wp.url.addQueryArgs("wp/v2/media/"+e.id,{context:"edit",_locale:"user"})}).then(function(e){e.url=e.source_url,t.onSelectImage(e)})}},{key:"editAFfiliateImage",value:function(){var e=this.props.attributes,t=e.affiliateLink;this.setState({isEditing:!0,imageSelection:t.images,affiliateLink:t})}},{key:"render",value:function(){var e=this,t=this.state,n=t.isEditing,i=t.imageSelection,o=t.affiliateLink,r=this.props,a=r.attributes,s=r.setAttributes,p=r.isLargeViewport,f=r.isSelected,d=r.className,h=r.maxWidth,m=r.toggleSelection,v=r.isRTL,w=a.url,b=a.alt,y=a.caption,k=a.align,S=(a.linkDestination,a.width),L=a.height,O=a.linkid,I=a.href,T=wp.element.createElement(U,null,wp.element.createElement(W,{className:"ta-edit-image-button components-icon-button components-toolbar__control",label:E("Edit ThirstyAffiliates Image"),icon:"edit",onClick:this.editAFfiliateImage})),R=wp.element.createElement(Q,null,wp.element.createElement(X,{value:k,onChange:this.updateAlignment}),T);if(n)return wp.element.createElement(C,null,R,wp.element.createElement(j,{icon:"format-image",label:E("ThirstyAffiliates Image"),instructions:E("Search for an affiliate link and select image to insert.")},wp.element.createElement(c.a,{updateImageSelection:this.updateImageSelection}),!!i.length&&wp.element.createElement("div",{className:"ta-image-sel-wrap"},wp.element.createElement("h3",null,o.title+" "+E("attached images:")),wp.element.createElement("div",{className:"ta-image-selection"},i.map(function(t,n){return wp.element.createElement("button",{onClick:function(){return e.onSelectAffiliateImage(t)}},wp.element.createElement("img",{src:t.src}))})))));var P=l()(d,{"wp-block-image":!0,"is-transient":x(w),"is-resized":!!S||!!L,"is-focused":f}),A=-1===["wide","full"].indexOf(k)&&p,K=this.getImageSizeOptions(),q=function(t,n){return wp.element.createElement(Z,null,wp.element.createElement(D,{title:E("Image Settings")},wp.element.createElement(B,{label:E("Alt Text (Alternative Text)"),value:b,onChange:e.updateAlt,help:E("Alternative text describes your image to people who can’t see it. Add a short description with its key details.")}),!g(K)&&wp.element.createElement(H,{label:E("Image Size"),value:w,options:K,onChange:e.updateImageURL}),A&&wp.element.createElement("div",{className:"block-library-image__dimensions"},wp.element.createElement("p",{className:"block-library-image__dimensions__row"},E("Image Dimensions")),wp.element.createElement("div",{className:"block-library-image__dimensions__row"},wp.element.createElement(M,{type:"number",className:"block-library-image__dimensions__width",label:E("Width"),value:void 0!==S?S:"",placeholder:t,min:1,onChange:e.updateWidth}),wp.element.createElement(M,{type:"number",className:"block-library-image__dimensions__height",label:E("Height"),value:void 0!==L?L:"",placeholder:n,min:1,onChange:e.updateHeight})),wp.element.createElement("div",{className:"block-library-image__dimensions__row"},wp.element.createElement(F,{"aria-label":E("Image Size")},[25,50,75,100].map(function(i){var o=Math.round(t*(i/100)),r=Math.round(n*(i/100)),a=S===o&&L===r;return wp.element.createElement(N,{key:i,isSmall:!0,isPrimary:a,"aria-pressed":a,onClick:e.updateDimensions(o,r)},i,"%")})),wp.element.createElement(N,{isSmall:!0,onClick:e.updateDimensions()},E("Reset"))))))};return wp.element.createElement(C,null,R,wp.element.createElement("figure",{className:P},wp.element.createElement(u.a,{src:w,dirtynessTrigger:k},function(t){var n=t.imageWidthWithinContainer,i=t.imageHeightWithinContainer,o=t.imageWidth,r=t.imageHeight,a=e.getFilename(w),l=void 0;l=b||(a?_(E("This image has an empty alt attribute; its file name is %s"),a):E("This image has an empty alt attribute"));var u=wp.element.createElement(C,null,wp.element.createElement("ta",{linkid:O,href:I},wp.element.createElement("img",{src:w,alt:l,onClick:e.onImageClick,onError:function(){return e.onImageError(w)}})),x(w)&&wp.element.createElement(z,null));if(!A||!n)return wp.element.createElement(C,null,q(o,r),wp.element.createElement("div",{style:{width:S,height:L}},u));var c=S||n,p=L||i,f=o/r,d=o<r?20:20*f,g=r<o?20:20/f,y=2.5*h,T=!1,R=!1;return"center"===k?(T=!0,R=!0):v?"left"===k?T=!0:R=!0:"right"===k?R=!0:T=!0,wp.element.createElement(C,null,q(o,r),wp.element.createElement(V,{size:S&&L?{width:S,height:L}:void 0,minWidth:d,maxWidth:y,minHeight:g,maxHeight:y/f,lockAspectRatio:!0,enable:{top:!1,right:T,bottom:!0,left:R},onResizeStart:function(){m(!1)},onResizeStop:function(e,t,n,i){s({width:parseInt(c+i.width,10),height:parseInt(p+i.height,10)}),m(!0)}},u))}),(!$.isEmpty(y)||f)&&wp.element.createElement($,{tagName:"figcaption",placeholder:E("Write caption…"),value:y,unstableOnFocus:this.onFocusCaption,onChange:function(e){return s({caption:e})},isSelected:this.state.captionFocused,inlineToolbar:!0})))}}]),t}(O);t.a=ee([q(function(e,t){var n=e("core"),i=n.getMedia,o=e("core/editor"),r=o.getEditorSettings,a=t.attributes.id,l=r(),s=l.maxWidth,u=l.isRTL,c=l.imageSizes;return{image:a?i(a):null,maxWidth:s,isRTL:u,imageSizes:c}}),J({isLargeViewport:"medium"}),K])(oe)},function(e,t,n){"use strict";n.d(t,"a",function(){return l});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=lodash,r=o.includes,a=(wp.element.renderToString,wp.blocks.createBlock),l=function(e,t){var n=e.preview,o=e.name,r=e.attributes.url;if(r){var l=findBlock(r);if("core-embed/wordpress"!==o&&DEFAULT_EMBED_BLOCK!==l&&o!==l)return a(l,{url:r});if(n){var u=n.html;if(s(u)&&"core-embed/wordpress"!==o)return a("core-embed/wordpress",i({url:r},t))}}},s=function(e){return r(e,'class="wp-embedded-content" data-secret')}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),l=lodash,s=l.noop,u=wp.compose.withGlobalEvents,c=wp.element.Component,p=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.state={width:void 0,height:void 0},e.bindContainer=e.bindContainer.bind(e),e.calculateSize=e.calculateSize.bind(e),e}return r(t,e),a(t,[{key:"bindContainer",value:function(e){this.container=e}},{key:"componentDidUpdate",value:function(e){this.props.src!==e.src&&(this.setState({width:void 0,height:void 0}),this.fetchImageSize()),this.props.dirtynessTrigger!==e.dirtynessTrigger&&this.calculateSize()}},{key:"componentDidMount",value:function(){this.fetchImageSize()}},{key:"componentWillUnmount",value:function(){this.image&&(this.image.onload=s)}},{key:"fetchImageSize",value:function(){this.image=new window.Image,this.image.onload=this.calculateSize,this.image.src=this.props.src}},{key:"calculateSize",value:function(){var e=this.container.clientWidth,t=this.image.width>e,n=this.image.height/this.image.width,i=t?e:this.image.width,o=t?e*n:this.image.height;this.setState({width:i,height:o})}},{key:"render",value:function(){var e={imageWidth:this.image&&this.image.width,imageHeight:this.image&&this.image.height,containerWidth:this.container&&this.container.clientWidth,containerHeight:this.container&&this.container.clientHeight,imageWidthWithinContainer:this.state.width,imageHeightWithinContainer:this.state.height};return wp.element.createElement("div",{ref:this.bindContainer},this.props.children(e))}}]),t}(c);t.a=u({resize:"calculateSize"})(p)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),u=wp.i18n.__,c=wp.element,p=c.Component,f=c.createRef,d=wp.components,h=d.Spinner,m=d.withSpokenMessages,g=d.Popover,v=d.TextControl,w=wp.compose.withInstanceId,b=function(e){function t(e){var n=e.autocompleteRef;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.autocompleteRef=n||f(),r.inputRef=f(),r.searchAffiliateLinks=r.searchAffiliateLinks.bind(r),r.suggestionNodes=[],r.state={posts:[],showSuggestions:!1,selectedSuggestion:null,loading:!1},r}return r(t,e),s(t,[{key:"componentDidUpdate",value:function(){var e=this,t=this.state,n=t.showSuggestions,i=t.selectedSuggestion;n&&null!==i&&!this.scrollingIntoView&&(this.scrollingIntoView=!0,scrollIntoView(this.suggestionNodes[i],this.autocompleteRef.current,{onlyScrollIfNeeded:!0}),setTimeout(function(){e.scrollingIntoView=!1},100))}},{key:"componentWillUnmount",value:function(){delete this.suggestionsRequest}},{key:"bindSuggestionNode",value:function(e){var t=this;return function(n){t.suggestionNodes[e]=n}}},{key:"searchAffiliateLinks",value:function(e){var t=this;if(e.length<2)return void this.setState({showSuggestions:!1,selectedSuggestion:null,loading:!1});this.setState({showSuggestions:!0,selectedSuggestion:null,loading:!0});var n=new FormData;n.append("action","search_affiliate_links_query"),n.append("keyword",e),n.append("paged",1),n.append("gutenberg",!0),n.append("with_images",!0);var i=fetch(ajaxurl,{method:"POST",body:n});i.then(function(e){return e.json()}).then(function(e){if(e.affiliate_links){var n=e.affiliate_links;t.suggestionsRequest===i&&(t.setState({posts:n,loading:!1}),n.length?t.props.debouncedSpeak(sprintf(_n("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",n.length),n.length),"assertive"):t.props.debouncedSpeak(u("No results."),"assertive"))}}).catch(function(){t.suggestionsRequest===i&&t.setState({loading:!1})}),this.suggestionsRequest=i}},{key:"selectLink",value:function(e){this.setState({selectedSuggestion:e,showSuggestions:!1}),this.props.updateImageSelection(e.images,e)}},{key:"handleOnClick",value:function(e){this.selectLink(e)}},{key:"render",value:function(){var e=this,t=this.props,n=(t.value,t.autoFocus,t.instanceId),i=this.state,o=i.showSuggestions,r=i.posts,a=i.selectedSuggestion,s=i.loading;return wp.element.createElement("div",{class:"edit-search-affiliate-links"},wp.element.createElement("form",{className:"editor-format-toolbar__link-container-content ta-link-search-popover",onSubmit:this.displayAffiliateImages},wp.element.createElement(v,{type:"text",className:"ta-search-affiliate-links",placeholder:u("Type to search affiliate links"),onChange:this.searchAffiliateLinks,autocomplete:"off"}),s&&wp.element.createElement(h,null),o&&!!r.length&&wp.element.createElement(g,{position:"bottom",focusOnMount:!1},wp.element.createElement("div",{class:"affilate-links-suggestions"},r.map(function(t,i){return wp.element.createElement("button",{key:t.id,role:"option",tabIndex:"-1",id:"editor-url-input-suggestion-"+n+"-"+i,ref:e.bindSuggestionNode(i),className:l()("editor-url-input__suggestion",{"is-selected":i===a}),onClick:function(){return e.handleOnClick(t)},"aria-selected":i===a},t.title||u("(no title)"))})))))}}]),t}(p);t.a=m(w(b))},function(e,t,n){"use strict";function i(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}function o(){[r.a].forEach(function(e){var t=e.name,n=i(e,["name"]);return a(t,n)})}t.a=o;var r=n(9),a=wp.richText.registerFormatType},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}n.d(t,"a",function(){return L});var a=n(10),l=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),s=wp.i18n.__,u=wp.element,c=u.Component,p=u.Fragment,f=wp.components.withSpokenMessages,d=wp.richText,h=d.getTextContent,m=d.applyFormat,g=d.removeFormat,v=d.slice,w=wp.url.isURL,b=wp.editor,y=b.RichTextToolbarButton,k=b.RichTextShortcut,S=wp.components,E=S.Path,_=S.SVG,L={name:"ta/link",title:s("Affiliate Link"),tagName:"ta",className:null,attributes:{url:"href",target:"target"},edit:f(function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.addLink=e.addLink.bind(e),e.stopAddingLink=e.stopAddingLink.bind(e),e.onRemoveFormat=e.onRemoveFormat.bind(e),e.state={addingLink:!1},e}return r(t,e),l(t,[{key:"addLink",value:function(){var e=this.props,t=e.value,n=e.onChange,i=h(v(t));i&&w(i)?n(m(t,{type:"ta/link",attributes:{url:i}})):this.setState({addingLink:!0})}},{key:"stopAddingLink",value:function(){this.setState({addingLink:!1})}},{key:"onRemoveFormat",value:function(){var e=this.props,t=e.value,n=e.onChange,i=e.speak;n(g(t,"ta/link")),i(s("Affiliate Link removed."),"assertive")}},{key:"render",value:function(){var e=this.props,t=e.isActive,n=e.activeAttributes,i=e.value,o=e.onChange;return wp.element.createElement(p,null,wp.element.createElement(k,{type:"access",character:"s",onUse:this.onRemoveFormat}),wp.element.createElement(k,{type:"primary",character:"l",onUse:this.addLink}),wp.element.createElement(k,{type:"primaryShift",character:"l",onUse:this.onRemoveFormat}),t&&wp.element.createElement(y,{icon:"editor-unlink",title:s("Remove Affiliate Link"),className:"ta-unlink-button",onClick:this.onRemoveFormat,isActive:t,shortcutType:"primaryShift",shortcutCharacter:"l"}),!t&&wp.element.createElement(y,{icon:wp.element.createElement(_,{xmlns:"http://www.w3.org/2000/svg",width:"16.688",height:"9.875",viewBox:"0 0 16.688 9.875"},wp.element.createElement(E,{id:"TA.svg",fill:"black",class:"cls-1",d:"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z",transform:"translate(-1.188 -5.25)"})),title:s("Affiliate Link"),className:"ta-link-button",onClick:this.addLink,shortcutType:"primary",shortcutCharacter:"l"}),wp.element.createElement(a.a,{addingLink:this.state.addingLink,stopAddingLink:this.stopAddingLink,isActive:t,activeAttributes:n,value:i,onChange:o}))}}]),t}(c))}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){var t=e.url,n=e.linkid;e.text;return{type:"ta/link",attributes:{url:t,linkid:n.toString()}}}function l(e,t){return e.addingLink||t.editLink}var s=n(0),u=n.n(s),c=n(11),p=n(12),f=n(13),d=n(14),h=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),m=wp.i18n.__,g=wp.element,v=g.Component,w=g.createRef,b=wp.components,y=b.ExternalLink,k=(b.ToggleControl,b.IconButton),S=b.withSpokenMessages,E=wp.keycodes,_=E.LEFT,L=E.RIGHT,O=E.UP,C=E.DOWN,I=E.BACKSPACE,T=E.ENTER,R=wp.url,P=R.prependHTTP,x=R.safeDecodeURI,A=R.filterURLForDisplay,j=wp.richText,N=j.create,F=j.insert,W=j.isCollapsed,D=j.applyFormat,V=j.getTextContent,H=j.slice,z=function(e){return e.stopPropagation()},M=function(e){var t=e.value,n=e.onChangeInputValue,i=e.onKeyDown,o=e.submitLink,r=e.invalidLink,a=e.resetInvalidLink,l=e.autocompleteRef;return wp.element.createElement("form",{className:"editor-format-toolbar__link-container-content ta-link-search-popover",onKeyPress:z,onKeyDown:i,onSubmit:o},wp.element.createElement(d.a,{value:t,onChange:n,autocompleteRef:l,invalidLink:r,resetInvalidLink:a}),wp.element.createElement(k,{icon:"editor-break",label:m("Apply"),type:"submit"}))},B=function(e){var t=e.url,n=P(t),i=u()("editor-format-toolbar__link-container-value",{"has-invalid-link":!Object(p.a)(n)});return t?wp.element.createElement(y,{className:i,href:t},A(x(t))):wp.element.createElement("span",{className:i})},U=function(e){var t=e.url,n=e.editLink;return wp.element.createElement("div",{className:"editor-format-toolbar__link-container-content",onKeyPress:z},wp.element.createElement(B,{url:t}),wp.element.createElement(k,{icon:"edit",label:m("Edit"),onClick:n}))},K=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.editLink=e.editLink.bind(e),e.submitLink=e.submitLink.bind(e),e.onKeyDown=e.onKeyDown.bind(e),e.onChangeInputValue=e.onChangeInputValue.bind(e),e.onClickOutside=e.onClickOutside.bind(e),e.resetState=e.resetState.bind(e),e.autocompleteRef=w(),e.resetInvalidLink=e.resetInvalidLink.bind(e),e.state={inputValue:"",linkid:0,post:null,invalidLink:!1},e}return r(t,e),h(t,[{key:"onKeyDown",value:function(e){[_,C,L,O,I,T].indexOf(e.keyCode)>-1&&e.stopPropagation()}},{key:"onChangeInputValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t?t.id:0;this.setState({inputValue:e,linkid:n,post:t})}},{key:"editLink",value:function(e){this.setState({editLink:!0}),e.preventDefault()}},{key:"submitLink",value:function(e){var t=this.props,n=t.isActive,i=t.value,o=t.onChange,r=t.speak,l=this.state,s=l.inputValue,u=l.linkid,c=l.post,f=P(s),d=V(H(i)),h=a({url:f,linkid:u,text:d});if(e.preventDefault(),!u||!c)return void this.setState({invalidLink:!0});if(W(i)&&!n){var g=D(N({text:c.title}),h,0,f.length);o(F(i,g))}else o(D(i,h));this.resetState(),Object(p.a)(f)?n?r(m("Link edited."),"assertive"):r(m("Link inserted"),"assertive"):r(m("Warning: the link has been inserted but may have errors. Please test it."),"assertive")}},{key:"onClickOutside",value:function(e){var t=this.autocompleteRef.current;t&&t.contains(e.target)||this.resetState()}},{key:"resetState",value:function(){this.props.stopAddingLink(),this.setState({inputValue:"",editLink:!1}),this.resetInvalidLink()}},{key:"resetInvalidLink",value:function(){this.setState({invalidLink:!1})}},{key:"render",value:function(){var e=this.props,t=e.isActive,n=e.activeAttributes,i=n.url,o=(n.linkid,e.addingLink),r=e.value;e.onChange;if(!t&&!o)return null;var a=this.state,s=a.inputValue,u=a.invalidLink,p=l(this.props,this.state);return wp.element.createElement(c.a,{key:""+r.start+r.end},wp.element.createElement(f.a,{onClickOutside:this.onClickOutside,onClose:this.resetState,focusOnMount:!!p&&"firstElement",invalidLink:u},p?wp.element.createElement(M,{value:s,onChangeInputValue:this.onChangeInputValue,onKeyDown:this.onKeyDown,submitLink:this.submitLink,autocompleteRef:this.autocompleteRef,updateLinkId:this.updateLinkId,invalidLink:u,resetInvalidLink:this.resetInvalidLink}):wp.element.createElement(U,{url:i,editLink:this.editLink})))}}]),t}(v);t.a=S(K)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(){var e=window.getSelection();if(0===e.rangeCount)return{};var t=p(e.getRangeAt(0)),n=t.top+t.height,i=t.left+t.width/2,o=c(e.anchorNode);if(o){var r=o.getBoundingClientRect();n-=r.top,i-=r.left}return{top:n,left:i}}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),s=wp.element.Component,u=wp.dom,c=u.getOffsetParent,p=u.getRectangleFromRange,f=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.state={style:a()},e}return r(t,e),l(t,[{key:"render",value:function(){var e=this.props.children,t=this.state.style;return wp.element.createElement("div",{className:"editor-format-toolbar__selection-position",style:t},e)}}]),t}(s);t.a=f},function(e,t,n){"use strict";function i(e){if(!e)return!1;var t=e.trim();if(!t)return!1;if(/^\S+:/.test(t)){var n=l(t);if(!s(n))return!1;if(r(n,"http")&&!/^https?:\/\/[^\/\s]/i.test(t))return!1;var i=u(t);if(!c(i))return!1;var o=p(t);if(o&&!f(o))return!1;var a=d(t);if(a&&!h(a))return!1;var v=m(t);if(v&&!g(v))return!1}return!(r(t,"#")&&!g(t))}t.a=i;var o=lodash,r=o.startsWith,a=wp.url,l=a.getProtocol,s=a.isValidProtocol,u=a.getAuthority,c=a.isValidAuthority,p=a.getPath,f=a.isValidPath,d=a.getQueryString,h=a.isValidQueryString,m=a.getFragment,g=a.isValidFragment},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),l=wp.i18n.__,s=wp.element.Component,u=wp.components,c=u.Popover,p=u.IconButton,f=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.toggleSettingsVisibility=e.toggleSettingsVisibility.bind(e),e.state={isSettingsExpanded:!1},e}return r(t,e),a(t,[{key:"toggleSettingsVisibility",value:function(){this.setState({isSettingsExpanded:!this.state.isSettingsExpanded})}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.renderSettings,i=e.onClose,o=e.onClickOutside,r=e.invalidLink,a=e.position,s=void 0===a?"bottom center":a,u=e.focusOnMount,f=void 0===u?"firstElement":u,d=this.state.isSettingsExpanded,h=!!n&&d;return wp.element.createElement(c,{className:"ta-url-popover editor-url-popover",focusOnMount:f,position:s,onClose:i,onClickOutside:o},wp.element.createElement("div",{className:"editor-url-popover__row"},t,!!n&&wp.element.createElement(p,{className:"editor-url-popover__settings-toggle",icon:"ellipsis",label:l("Link Settings"),onClick:this.toggleSettingsVisibility,"aria-expanded":d})),h&&wp.element.createElement("div",{className:"editor-url-popover__row editor-url-popover__settings"},n()),r&&wp.element.createElement("div",{class:"ta-invalid-link"},l("Invalid affiliate link")))}}]),t}(s);t.a=f},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=n(15),u=n.n(s),c=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),p=wp.i18n.__,f=lodash,d=f.throttle,h=wp.element,m=h.Component,g=h.createRef,v=wp.keycodes,w=v.UP,b=v.DOWN,y=v.ENTER,k=v.TAB,S=wp.components,E=S.Spinner,_=S.withSpokenMessages,L=S.Popover,O=wp.compose.withInstanceId,C=function(e){return e.stopPropagation()},I=function(e){function t(e){var n=e.autocompleteRef;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.onChange=r.onChange.bind(r),r.onKeyDown=r.onKeyDown.bind(r),r.autocompleteRef=n||g(),r.inputRef=g(),r.updateSuggestions=d(r.updateSuggestions.bind(r),200),r.suggestionNodes=[],r.state={posts:[],showSuggestions:!1,selectedSuggestion:null},r}return r(t,e),c(t,[{key:"componentDidUpdate",value:function(){var e=this,t=this.state,n=t.showSuggestions,i=t.selectedSuggestion;n&&null!==i&&!this.scrollingIntoView&&(this.scrollingIntoView=!0,u()(this.suggestionNodes[i],this.autocompleteRef.current,{onlyScrollIfNeeded:!0}),setTimeout(function(){e.scrollingIntoView=!1},100))}},{key:"componentWillUnmount",value:function(){delete this.suggestionsRequest}},{key:"bindSuggestionNode",value:function(e){var t=this;return function(n){t.suggestionNodes[e]=n}}},{key:"updateSuggestions",value:function(e){var t=this;if(e.length<2||/^https?:/.test(e))return void this.setState({showSuggestions:!1,selectedSuggestion:null,loading:!1});this.setState({showSuggestions:!0,selectedSuggestion:null,loading:!0});var n=new FormData;n.append("action","search_affiliate_links_query"),n.append("keyword",e),n.append("paged",1),n.append("gutenberg",!0);var i=fetch(ajaxurl,{method:"POST",body:n});i.then(function(e){return e.json()}).then(function(e){if(e.affiliate_links){var n=e.affiliate_links;t.suggestionsRequest===i&&(t.setState({posts:n,loading:!1}),n.length?t.props.debouncedSpeak(sprintf(_n("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",n.length),n.length),"assertive"):t.props.debouncedSpeak(p("No results."),"assertive"))}}).catch(function(){t.suggestionsRequest===i&&t.setState({loading:!1})}),this.suggestionsRequest=i}},{key:"onChange",value:function(e){this.props.resetInvalidLink();var t=e.target.value;this.props.onChange(t),this.updateSuggestions(t)}},{key:"onKeyDown",value:function(e){var t=this.state,n=t.showSuggestions,i=t.selectedSuggestion,o=t.posts,r=t.loading;if(n&&o.length&&!r){var a=this.state.posts[this.state.selectedSuggestion];switch(e.keyCode){case w:e.stopPropagation(),e.preventDefault();var l=i?i-1:o.length-1;this.setState({selectedSuggestion:l});break;case b:e.stopPropagation(),e.preventDefault();var s=null===i||i===o.length-1?0:i+1;this.setState({selectedSuggestion:s});break;case k:null!==this.state.selectedSuggestion&&(this.selectLink(a),this.props.speak(p("Link selected")));break;case y:null!==this.state.selectedSuggestion&&(e.stopPropagation(),this.selectLink(a))}}else switch(e.keyCode){case w:0!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(0,0));break;case b:this.props.value.length!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(this.props.value.length,this.props.value.length))}}},{key:"selectLink",value:function(e){this.props.onChange(e.link,e),this.setState({selectedSuggestion:null,showSuggestions:!1})}},{key:"handleOnClick",value:function(e){this.selectLink(e),this.inputRef.current.focus()}},{key:"render",value:function(){var e=this,t=this.props,n=t.value,i=void 0===n?"":n,o=t.autoFocus,r=void 0===o||o,a=t.instanceId,s=t.invalidLink,u=this.state,c=u.showSuggestions,f=u.posts,d=u.selectedSuggestion,h=u.loading;return wp.element.createElement("div",{className:"editor-url-input"},wp.element.createElement("input",{autoFocus:r,type:"text","aria-label":p("URL"),required:!0,value:i,onChange:this.onChange,onInput:C,placeholder:p("Paste URL or type to search"),onKeyDown:this.onKeyDown,role:"combobox","aria-expanded":c,"aria-autocomplete":"list","aria-owns":"editor-url-input-suggestions-"+a,"aria-activedescendant":null!==d?"editor-url-input-suggestion-"+a+"-"+d:void 0,ref:this.inputRef}),h&&wp.element.createElement(E,null),c&&!!f.length&&!s&&wp.element.createElement(L,{position:"bottom",noArrow:!0,focusOnMount:!1},wp.element.createElement("div",{className:"editor-url-input__suggestions",id:"editor-url-input-suggestions-"+a,ref:this.autocompleteRef,role:"listbox"},f.map(function(t,n){return wp.element.createElement("button",{key:t.id,role:"option",tabIndex:"-1",id:"editor-url-input-suggestion-"+a+"-"+n,ref:e.bindSuggestionNode(n),className:l()("editor-url-input__suggestion",{"is-selected":n===d}),onClick:function(){return e.handleOnClick(t)},"aria-selected":n===d},t.title||p("(no title)"))}))))}}]),t}(m);t.a=_(O(I))},function(e,t,n){"use strict";e.exports=n(16)},function(e,t,n){"use strict";function i(e,t,n){n=n||{},9===t.nodeType&&(t=o.getWindow(t));var i=n.allowHorizontalScroll,r=n.onlyScrollIfNeeded,a=n.alignWithTop,l=n.alignWithLeft,s=n.offsetTop||0,u=n.offsetLeft||0,c=n.offsetBottom||0,p=n.offsetRight||0;i=void 0===i||i;var f=o.isWindow(t),d=o.offset(e),h=o.outerHeight(e),m=o.outerWidth(e),g=void 0,v=void 0,w=void 0,b=void 0,y=void 0,k=void 0,S=void 0,E=void 0,_=void 0,L=void 0;f?(S=t,L=o.height(S),_=o.width(S),E={left:o.scrollLeft(S),top:o.scrollTop(S)},y={left:d.left-E.left-u,top:d.top-E.top-s},k={left:d.left+m-(E.left+_)+p,top:d.top+h-(E.top+L)+c},b=E):(g=o.offset(t),v=t.clientHeight,w=t.clientWidth,b={left:t.scrollLeft,top:t.scrollTop},y={left:d.left-(g.left+(parseFloat(o.css(t,"borderLeftWidth"))||0))-u,top:d.top-(g.top+(parseFloat(o.css(t,"borderTopWidth"))||0))-s},k={left:d.left+m-(g.left+w+(parseFloat(o.css(t,"borderRightWidth"))||0))+p,top:d.top+h-(g.top+v+(parseFloat(o.css(t,"borderBottomWidth"))||0))+c}),y.top<0||k.top>0?!0===a?o.scrollTop(t,b.top+y.top):!1===a?o.scrollTop(t,b.top+k.top):y.top<0?o.scrollTop(t,b.top+y.top):o.scrollTop(t,b.top+k.top):r||(a=void 0===a||!!a,a?o.scrollTop(t,b.top+y.top):o.scrollTop(t,b.top+k.top)),i&&(y.left<0||k.left>0?!0===l?o.scrollLeft(t,b.left+y.left):!1===l?o.scrollLeft(t,b.left+k.left):y.left<0?o.scrollLeft(t,b.left+y.left):o.scrollLeft(t,b.left+k.left):r||(l=void 0===l||!!l,l?o.scrollLeft(t,b.left+y.left):o.scrollLeft(t,b.left+k.left)))}var o=n(17);e.exports=i},function(e,t,n){"use strict";function i(e){var t=void 0,n=void 0,i=void 0,o=e.ownerDocument,r=o.body,a=o&&o.documentElement;return t=e.getBoundingClientRect(),n=t.left,i=t.top,n-=a.clientLeft||r.clientLeft||0,i-=a.clientTop||r.clientTop||0,{left:n,top:i}}function o(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],i="scroll"+(t?"Top":"Left");if("number"!=typeof n){var o=e.document;n=o.documentElement[i],"number"!=typeof n&&(n=o.body[i])}return n}function r(e){return o(e)}function a(e){return o(e,!0)}function l(e){var t=i(e),n=e.ownerDocument,o=n.defaultView||n.parentWindow;return t.left+=r(o),t.top+=a(o),t}function s(e,t,n){var i="",o=e.ownerDocument,r=n||o.defaultView.getComputedStyle(e,null);return r&&(i=r.getPropertyValue(t)||r[t]),i}function u(e,t){var n=e[_]&&e[_][t];if(S.test(n)&&!E.test(t)){var i=e.style,o=i[O],r=e[L][O];e[L][O]=e[_][O],i[O]="fontSize"===t?"1em":n||0,n=i.pixelLeft+C,i[O]=o,e[L][O]=r}return""===n?"auto":n}function c(e,t){for(var n=0;n<e.length;n++)t(e[n])}function p(e){return"border-box"===I(e,"boxSizing")}function f(e,t,n){var i={},o=e.style,r=void 0;for(r in t)t.hasOwnProperty(r)&&(i[r]=o[r],o[r]=t[r]);n.call(e);for(r in t)t.hasOwnProperty(r)&&(o[r]=i[r])}function d(e,t,n){var i=0,o=void 0,r=void 0,a=void 0;for(r=0;r<t.length;r++)if(o=t[r])for(a=0;a<n.length;a++){var l=void 0;l="border"===o?o+n[a]+"Width":o+n[a],i+=parseFloat(I(e,l))||0}return i}function h(e){return null!=e&&e==e.window}function m(e,t,n){if(h(e))return"width"===t?A.viewportWidth(e):A.viewportHeight(e);if(9===e.nodeType)return"width"===t?A.docWidth(e):A.docHeight(e);var i="width"===t?["Left","Right"]:["Top","Bottom"],o="width"===t?e.offsetWidth:e.offsetHeight,r=I(e),a=p(e,r),l=0;(null==o||o<=0)&&(o=void 0,l=I(e,t),(null==l||Number(l)<0)&&(l=e.style[t]||0),l=parseFloat(l)||0),void 0===n&&(n=a?x:R);var s=void 0!==o||a,u=o||l;if(n===R)return s?u-d(e,["border","padding"],i,r):l;if(s){var c=n===P?-d(e,["border"],i,r):d(e,["margin"],i,r);return u+(n===x?0:c)}return l+d(e,T.slice(n),i,r)}function g(e){var t=void 0,n=arguments;return 0!==e.offsetWidth?t=m.apply(void 0,n):f(e,j,function(){t=m.apply(void 0,n)}),t}function v(e,t,n){var i=n;{if("object"!==(void 0===t?"undefined":y(t)))return void 0!==i?("number"==typeof i&&(i+="px"),void(e.style[t]=i)):I(e,t);for(var o in t)t.hasOwnProperty(o)&&v(e,o,t[o])}}function w(e,t){"static"===v(e,"position")&&(e.style.position="relative");var n=l(e),i={},o=void 0,r=void 0;for(r in t)t.hasOwnProperty(r)&&(o=parseFloat(v(e,r))||0,i[r]=o+t[r]-n[r]);v(e,i)}var b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},k=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,S=new RegExp("^("+k+")(?!px)[a-z%]+$","i"),E=/^(top|right|bottom|left)$/,_="currentStyle",L="runtimeStyle",O="left",C="px",I=void 0;"undefined"!=typeof window&&(I=window.getComputedStyle?s:u);var T=["margin","border","padding"],R=-1,P=2,x=1,A={};c(["Width","Height"],function(e){A["doc"+e]=function(t){var n=t.document;return Math.max(n.documentElement["scroll"+e],n.body["scroll"+e],A["viewport"+e](n))},A["viewport"+e]=function(t){var n="client"+e,i=t.document,o=i.body,r=i.documentElement,a=r[n];return"CSS1Compat"===i.compatMode&&a||o&&o[n]||a}});var j={position:"absolute",visibility:"hidden",display:"block"};c(["width","height"],function(e){var t=e.charAt(0).toUpperCase()+e.slice(1);A["outer"+t]=function(t,n){return t&&g(t,e,n?0:x)};var n="width"===e?["Left","Right"]:["Top","Bottom"];A[e]=function(t,i){if(void 0===i)return t&&g(t,e,R);if(t){var o=I(t);return p(t)&&(i+=d(t,["padding","border"],n,o)),v(t,e,i)}}}),e.exports=b({getWindow:function(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow},offset:function(e,t){if(void 0===t)return l(e);w(e,t)},isWindow:h,each:c,css:v,clone:function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);if(e.overflow)for(var n in e)e.hasOwnProperty(n)&&(t.overflow[n]=e.overflow[n]);return t},scrollLeft:function(e,t){if(h(e)){if(void 0===t)return r(e);window.scrollTo(t,a(e))}else{if(void 0===t)return e.scrollLeft;e.scrollLeft=t}},scrollTop:function(e,t){if(h(e)){if(void 0===t)return a(e);window.scrollTo(r(e),t)}else{if(void 0===t)return e.scrollTop;e.scrollTop=t}},viewportWidth:0,viewportHeight:0},A)},function(e,t){}]);
7
  //# sourceMappingURL=gutenberg-support.js.map
3
  Licensed under the MIT License (MIT), see
4
  http://jedwatson.github.io/classnames
5
  */
6
+ !function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var i=arguments[t];if(i){var o=typeof i;if("string"===o||"number"===o)e.push(i);else if(Array.isArray(i)&&i.length){var a=n.apply(null,i);a&&e.push(a)}else if("object"===o)for(var l in i)r.call(i,l)&&i[l]&&e.push(l)}}return e.join(" ")}var r={}.hasOwnProperty;void 0!==e&&e.exports?(n.default=n,e.exports=n):(i=[],void 0!==(o=function(){return n}.apply(t,i))&&(e.exports=o))}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(2),o=n(8),r=n(17);n.n(r);Object(i.a)(),Object(o.a)()},function(e,t,n){"use strict";function i(){[o].forEach(function(e){if(e){var t=e.name,n=e.settings;r(t,n)}})}t.a=i;var o=n(3),r=wp.blocks.registerBlockType},function(e,t,n){"use strict";function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),n.d(t,"name",function(){return g}),n.d(t,"settings",function(){return w});var o=n(0),r=n.n(o),a=n(4),l=wp.element.Fragment,s=wp.i18n.__,u=wp.blocks,c=(u.createBlock,u.getBlockAttributes,u.getPhrasingContentSchema),p=wp.editor.RichText,d=wp.components,f=d.Path,h=d.SVG,g="ta/image",m={url:{type:"string",source:"attribute",selector:"img",attribute:"src"},alt:{type:"string",source:"attribute",selector:"img",attribute:"alt",default:""},caption:{type:"string",source:"html",selector:"figcaption"},id:{type:"number"},align:{type:"string"},width:{type:"number"},height:{type:"number"},linkid:{type:"number"},href:{type:"string",source:"attribute",selector:"ta",attribute:"href"},affiliateLink:{type:"object"}},v={img:{attributes:["src","alt"],classes:["alignleft","aligncenter","alignright","alignnone",/^wp-image-\d+$/]}},w=(c(),{title:s("ThirstyAffiliates Image"),description:s("Insert an image with an affiliate link to make a visual statement."),icon:wp.element.createElement(h,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},wp.element.createElement(f,{d:"M0,0h24v24H0V0z",fill:"none"}),wp.element.createElement(f,{d:"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z"}),wp.element.createElement(f,{d:"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z"})),category:"common",keywords:["img",s("photo"),s("affiliate")],attributes:m,getEditWrapperProps:function(e){var t=e.align,n=e.width;if("left"===t||"center"===t||"right"===t||"wide"===t||"full"===t)return{"data-align":t,"data-resized":!!n}},edit:a.a,save:function(e){var t,n=e.attributes,o=n.url,a=n.alt,s=n.caption,u=n.align,c=n.width,d=n.height,f=n.id,h=n.linkid,g=n.href,m=r()((t={},i(t,"align"+u,u),i(t,"is-resized",c||d),t)),v=wp.element.createElement("img",{src:o,alt:a,className:f?"wp-image-"+f:null,width:c,height:d}),w=wp.element.createElement(l,null,wp.element.createElement("ta",{linkid:h,href:g},v),wp.element.createElement(p.Content,{tagName:"figcaption",value:s}));return"left"===u||"right"===u||"center"===u?wp.element.createElement("div",{className:"wp-block-image"},wp.element.createElement("figure",{className:m},w)):wp.element.createElement("figure",{className:"wp-block-image "+m},w)}})},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=n(5),u=n(6),c=n(7),p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},d=function(){function e(e,t){var n=[],i=!0,o=!1,r=void 0;try{for(var a,l=e[Symbol.iterator]();!(i=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){o=!0,r=e}finally{try{!i&&l.return&&l.return()}finally{if(o)throw r}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),f=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),h=lodash,g=h.get,m=h.isEmpty,v=h.map,w=h.last,b=h.pick,y=h.compact,k=wp.url.getPath,S=wp.i18n,E=S.__,_=S.sprintf,L=wp.element,O=L.Component,C=L.Fragment,I=L.createRef,T=wp.blob,R=T.getBlobByURL,P=T.revokeBlobURL,A=T.isBlobURL,x=wp.components,j=x.Placeholder,N=x.Button,F=x.ButtonGroup,W=x.IconButton,D=x.PanelBody,V=x.ResizableBox,z=x.SelectControl,B=x.Spinner,H=x.TextControl,U=x.TextareaControl,M=x.Toolbar,K=x.withNotices,q=(x.ToggleControl,x.Popover,wp.data.withSelect),G=wp.editor,Q=G.RichText,Z=G.BlockControls,$=G.InspectorControls,X=(G.MediaUpload,G.MediaUploadCheck,G.MediaPlaceholder,G.BlockAlignmentToolbar),Y=G.mediaUpload,J=wp.viewport.withViewportMatch,ee=wp.compose.compose,te=["image"],ne=function(e){var t=b(e,["alt","id","link","caption"]);return t.url=g(e,["sizes","large","url"])||g(e,["media_details","sizes","large","source_url"])||e.url,t},ie=function(e,t){return!e&&A(t)},oe=function(e){function t(e){var n=e.attributes;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.updateAlt=r.updateAlt.bind(r),r.updateAlignment=r.updateAlignment.bind(r),r.onFocusCaption=r.onFocusCaption.bind(r),r.onImageClick=r.onImageClick.bind(r),r.onSelectImage=r.onSelectImage.bind(r),r.updateImageURL=r.updateImageURL.bind(r),r.updateWidth=r.updateWidth.bind(r),r.updateHeight=r.updateHeight.bind(r),r.updateDimensions=r.updateDimensions.bind(r),r.getFilename=r.getFilename.bind(r),r.toggleIsEditing=r.toggleIsEditing.bind(r),r.onImageError=r.onImageError.bind(r),r.onChangeInputValue=r.onChangeInputValue.bind(r),r.autocompleteRef=I(),r.resetInvalidLink=r.resetInvalidLink.bind(r),r.updateImageSelection=r.updateImageSelection.bind(r),r.onSelectAffiliateImage=r.onSelectAffiliateImage.bind(r),r.editAFfiliateImage=r.editAFfiliateImage.bind(r),r.state={captionFocused:!1,isEditing:!n.url,inputValue:"",linkid:0,post:null,showSuggestions:!1,imageSelection:[],affiliateLink:null},r}return r(t,e),f(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.attributes,i=t.setAttributes,o=t.noticeOperations,r=n.id,a=n.url,l=void 0===a?"":a;if(ie(r,l)){var s=R(l);s&&Y({filesList:[s],onFileChange:function(e){var t=d(e,1),n=t[0];i(ne(n))},allowedTypes:te,onError:function(t){o.createErrorNotice(t),e.setState({isEditing:!0})}})}}},{key:"componentDidUpdate",value:function(e){var t=e.attributes,n=t.id,i=t.url,o=void 0===i?"":i,r=this.props.attributes,a=r.id,l=r.url,s=void 0===l?"":l;ie(n,o)&&!ie(a,s)&&P(s),!this.props.isSelected&&e.isSelected&&this.state.captionFocused&&this.setState({captionFocused:!1})}},{key:"onSelectImage",value:function(e){if(!e||!e.url)return void this.props.setAttributes({url:void 0,alt:void 0,id:void 0,caption:void 0});var t=this.state.affiliateLink;this.setState({isEditing:!1}),this.props.setAttributes(p({},ne(e),{linkid:t.id,href:t.link,affiliateLink:t,width:void 0,height:void 0}))}},{key:"onImageError",value:function(e){var t=Object(s.a)({attributes:{url:e}});void 0!==t&&this.props.onReplace(t)}},{key:"onFocusCaption",value:function(){this.state.captionFocused||this.setState({captionFocused:!0})}},{key:"onImageClick",value:function(){this.state.captionFocused&&this.setState({captionFocused:!1})}},{key:"updateAlt",value:function(e){this.props.setAttributes({alt:e})}},{key:"updateAlignment",value:function(e){var t=-1!==["wide","full"].indexOf(e)?{width:void 0,height:void 0}:{};this.props.setAttributes(p({},t,{align:e}))}},{key:"updateImageURL",value:function(e){this.props.setAttributes({url:e,width:void 0,height:void 0})}},{key:"updateWidth",value:function(e){this.props.setAttributes({width:parseInt(e,10)})}},{key:"updateHeight",value:function(e){this.props.setAttributes({height:parseInt(e,10)})}},{key:"updateDimensions",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return function(){e.props.setAttributes({width:t,height:n})}}},{key:"getFilename",value:function(e){var t=k(e);if(t)return w(t.split("/"))}},{key:"getLinkDestinationOptions",value:function(){return[{value:"none",label:E("None")},{value:"media",label:E("Media File")},{value:"attachment",label:E("Attachment Page")},{value:"custom",label:E("Custom URL")}]}},{key:"toggleIsEditing",value:function(){this.setState({isEditing:!this.state.isEditing})}},{key:"getImageSizeOptions",value:function(){var e=this.props,t=e.imageSizes,n=e.image;return y(v(t,function(e){var t=e.name,i=e.slug,o=g(n,["media_details","sizes",i,"source_url"]);return o?{value:o,label:t}:null}))}},{key:"onChangeInputValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t?t.id:0;this.setState({inputValue:e,linkid:n,post:t})}},{key:"resetInvalidLink",value:function(){this.setState({invalidLink:!1})}},{key:"updateImageSelection",value:function(e,t){this.setState({imageSelection:e,affiliateLink:t})}},{key:"onSelectAffiliateImage",value:function(e){var t=this;wp.apiFetch({path:wp.url.addQueryArgs("wp/v2/media/"+e.id,{context:"edit",_locale:"user"})}).then(function(e){e.url=e.source_url,t.onSelectImage(e)})}},{key:"editAFfiliateImage",value:function(){var e=this.props.attributes,t=e.affiliateLink;this.setState({isEditing:!0,imageSelection:t.images,affiliateLink:t})}},{key:"render",value:function(){var e=this,t=this.state,n=t.isEditing,i=t.imageSelection,o=t.affiliateLink,r=this.props,a=r.attributes,s=r.setAttributes,p=r.isLargeViewport,d=r.isSelected,f=r.className,h=r.maxWidth,g=r.toggleSelection,v=r.isRTL,w=a.url,b=a.alt,y=a.caption,k=a.align,S=(a.linkDestination,a.width),L=a.height,O=a.linkid,I=a.href,T=wp.element.createElement(M,null,wp.element.createElement(W,{className:"ta-edit-image-button components-icon-button components-toolbar__control",label:E("Edit ThirstyAffiliates Image"),icon:"edit",onClick:this.editAFfiliateImage})),R=wp.element.createElement(Z,null,wp.element.createElement(X,{value:k,onChange:this.updateAlignment}),T);if(n)return wp.element.createElement(C,null,R,wp.element.createElement(j,{icon:"format-image",label:E("ThirstyAffiliates Image"),instructions:E("Search for an affiliate link and select image to insert.")},wp.element.createElement(c.a,{updateImageSelection:this.updateImageSelection}),!!i.length&&wp.element.createElement("div",{className:"ta-image-sel-wrap"},wp.element.createElement("h3",null,o.title+" "+E("attached images:")),wp.element.createElement("div",{className:"ta-image-selection"},i.map(function(t,n){return wp.element.createElement("button",{onClick:function(){return e.onSelectAffiliateImage(t)}},wp.element.createElement("img",{src:t.src}))})))));var P=l()(f,{"wp-block-image":!0,"is-transient":A(w),"is-resized":!!S||!!L,"is-focused":d}),x=-1===["wide","full"].indexOf(k)&&p,K=this.getImageSizeOptions(),q=function(t,n){return wp.element.createElement($,null,wp.element.createElement(D,{title:E("Image Settings")},wp.element.createElement(U,{label:E("Alt Text (Alternative Text)"),value:b,onChange:e.updateAlt,help:E("Alternative text describes your image to people who can’t see it. Add a short description with its key details.")}),!m(K)&&wp.element.createElement(z,{label:E("Image Size"),value:w,options:K,onChange:e.updateImageURL}),x&&wp.element.createElement("div",{className:"block-library-image__dimensions"},wp.element.createElement("p",{className:"block-library-image__dimensions__row"},E("Image Dimensions")),wp.element.createElement("div",{className:"block-library-image__dimensions__row"},wp.element.createElement(H,{type:"number",className:"block-library-image__dimensions__width",label:E("Width"),value:void 0!==S?S:"",placeholder:t,min:1,onChange:e.updateWidth}),wp.element.createElement(H,{type:"number",className:"block-library-image__dimensions__height",label:E("Height"),value:void 0!==L?L:"",placeholder:n,min:1,onChange:e.updateHeight})),wp.element.createElement("div",{className:"block-library-image__dimensions__row"},wp.element.createElement(F,{"aria-label":E("Image Size")},[25,50,75,100].map(function(i){var o=Math.round(t*(i/100)),r=Math.round(n*(i/100)),a=S===o&&L===r;return wp.element.createElement(N,{key:i,isSmall:!0,isPrimary:a,"aria-pressed":a,onClick:e.updateDimensions(o,r)},i,"%")})),wp.element.createElement(N,{isSmall:!0,onClick:e.updateDimensions()},E("Reset"))))))};return wp.element.createElement(C,null,R,wp.element.createElement("figure",{className:P},wp.element.createElement(u.a,{src:w,dirtynessTrigger:k},function(t){var n=t.imageWidthWithinContainer,i=t.imageHeightWithinContainer,o=t.imageWidth,r=t.imageHeight,a=e.getFilename(w),l=void 0;l=b||(a?_(E("This image has an empty alt attribute; its file name is %s"),a):E("This image has an empty alt attribute"));var u=wp.element.createElement(C,null,wp.element.createElement("ta",{linkid:O,href:I},wp.element.createElement("img",{src:w,alt:l,onClick:e.onImageClick,onError:function(){return e.onImageError(w)}})),A(w)&&wp.element.createElement(B,null));if(!x||!n)return wp.element.createElement(C,null,q(o,r),wp.element.createElement("div",{style:{width:S,height:L}},u));var c=S||n,p=L||i,d=o/r,f=o<r?20:20*d,m=r<o?20:20/d,y=2.5*h,T=!1,R=!1;return"center"===k?(T=!0,R=!0):v?"left"===k?T=!0:R=!0:"right"===k?R=!0:T=!0,wp.element.createElement(C,null,q(o,r),wp.element.createElement(V,{size:S&&L?{width:S,height:L}:void 0,minWidth:f,maxWidth:y,minHeight:m,maxHeight:y/d,lockAspectRatio:!0,enable:{top:!1,right:T,bottom:!0,left:R},onResizeStart:function(){g(!1)},onResizeStop:function(e,t,n,i){s({width:parseInt(c+i.width,10),height:parseInt(p+i.height,10)}),g(!0)}},u))}),(!Q.isEmpty(y)||d)&&wp.element.createElement(Q,{tagName:"figcaption",placeholder:E("Write caption…"),value:y,unstableOnFocus:this.onFocusCaption,onChange:function(e){return s({caption:e})},isSelected:this.state.captionFocused,inlineToolbar:!0})))}}]),t}(O);t.a=ee([q(function(e,t){var n=e("core"),i=n.getMedia,o=e("core/editor"),r=o.getEditorSettings,a=t.attributes.id,l=r(),s=l.maxWidth,u=l.isRTL,c=l.imageSizes;return{image:a?i(a):null,maxWidth:s,isRTL:u,imageSizes:c}}),J({isLargeViewport:"medium"}),K])(oe)},function(e,t,n){"use strict";n.d(t,"a",function(){return l});var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},o=lodash,r=o.includes,a=(wp.element.renderToString,wp.blocks.createBlock),l=function(e,t){var n=e.preview,o=e.name,r=e.attributes.url;if(r){var l=findBlock(r);if("core-embed/wordpress"!==o&&DEFAULT_EMBED_BLOCK!==l&&o!==l)return a(l,{url:r});if(n){var u=n.html;if(s(u)&&"core-embed/wordpress"!==o)return a("core-embed/wordpress",i({url:r},t))}}},s=function(e){return r(e,'class="wp-embedded-content" data-secret')}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),l=lodash,s=l.noop,u=wp.compose.withGlobalEvents,c=wp.element.Component,p=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.state={width:void 0,height:void 0},e.bindContainer=e.bindContainer.bind(e),e.calculateSize=e.calculateSize.bind(e),e}return r(t,e),a(t,[{key:"bindContainer",value:function(e){this.container=e}},{key:"componentDidUpdate",value:function(e){this.props.src!==e.src&&(this.setState({width:void 0,height:void 0}),this.fetchImageSize()),this.props.dirtynessTrigger!==e.dirtynessTrigger&&this.calculateSize()}},{key:"componentDidMount",value:function(){this.fetchImageSize()}},{key:"componentWillUnmount",value:function(){this.image&&(this.image.onload=s)}},{key:"fetchImageSize",value:function(){this.image=new window.Image,this.image.onload=this.calculateSize,this.image.src=this.props.src}},{key:"calculateSize",value:function(){var e=this.container.clientWidth,t=this.image.width>e,n=this.image.height/this.image.width,i=t?e:this.image.width,o=t?e*n:this.image.height;this.setState({width:i,height:o})}},{key:"render",value:function(){var e={imageWidth:this.image&&this.image.width,imageHeight:this.image&&this.image.height,containerWidth:this.container&&this.container.clientWidth,containerHeight:this.container&&this.container.clientHeight,imageWidthWithinContainer:this.state.width,imageHeightWithinContainer:this.state.height};return wp.element.createElement("div",{ref:this.bindContainer},this.props.children(e))}}]),t}(c);t.a=u({resize:"calculateSize"})(p)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),u=wp.i18n.__,c=wp.element,p=c.Component,d=c.createRef,f=wp.components,h=f.Spinner,g=f.withSpokenMessages,m=f.Popover,v=f.TextControl,w=wp.compose.withInstanceId,b=function(e){function t(e){var n=e.autocompleteRef;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.autocompleteRef=n||d(),r.inputRef=d(),r.searchAffiliateLinks=r.searchAffiliateLinks.bind(r),r.suggestionNodes=[],r.state={posts:[],showSuggestions:!1,selectedSuggestion:null,loading:!1},r}return r(t,e),s(t,[{key:"componentDidUpdate",value:function(){var e=this,t=this.state,n=t.showSuggestions,i=t.selectedSuggestion;n&&null!==i&&!this.scrollingIntoView&&(this.scrollingIntoView=!0,scrollIntoView(this.suggestionNodes[i],this.autocompleteRef.current,{onlyScrollIfNeeded:!0}),setTimeout(function(){e.scrollingIntoView=!1},100))}},{key:"componentWillUnmount",value:function(){delete this.suggestionsRequest}},{key:"bindSuggestionNode",value:function(e){var t=this;return function(n){t.suggestionNodes[e]=n}}},{key:"searchAffiliateLinks",value:function(e){var t=this;if(e.length<2)return void this.setState({showSuggestions:!1,selectedSuggestion:null,loading:!1});this.setState({showSuggestions:!0,selectedSuggestion:null,loading:!0});var n=new FormData;n.append("action","search_affiliate_links_query"),n.append("keyword",e),n.append("paged",1),n.append("gutenberg",!0),n.append("with_images",!0);var i=fetch(ajaxurl,{method:"POST",body:n});i.then(function(e){return e.json()}).then(function(e){if(e.affiliate_links){var n=e.affiliate_links;t.suggestionsRequest===i&&(t.setState({posts:n,loading:!1}),n.length?t.props.debouncedSpeak(sprintf(_n("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",n.length),n.length),"assertive"):t.props.debouncedSpeak(u("No results."),"assertive"))}}).catch(function(){t.suggestionsRequest===i&&t.setState({loading:!1})}),this.suggestionsRequest=i}},{key:"selectLink",value:function(e){this.setState({selectedSuggestion:e,showSuggestions:!1}),this.props.updateImageSelection(e.images,e)}},{key:"handleOnClick",value:function(e){this.selectLink(e)}},{key:"render",value:function(){var e=this,t=this.props,n=(t.value,t.autoFocus,t.instanceId),i=this.state,o=i.showSuggestions,r=i.posts,a=i.selectedSuggestion,s=i.loading;return wp.element.createElement("div",{class:"edit-search-affiliate-links"},wp.element.createElement("form",{className:"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover",onSubmit:this.displayAffiliateImages},wp.element.createElement(v,{type:"text",className:"ta-search-affiliate-links",placeholder:u("Type to search affiliate links"),onChange:this.searchAffiliateLinks,autocomplete:"off"}),s&&wp.element.createElement(h,null),o&&!!r.length&&wp.element.createElement(m,{position:"bottom",focusOnMount:!1},wp.element.createElement("div",{class:"affilate-links-suggestions"},r.map(function(t,i){return wp.element.createElement("button",{key:t.id,role:"option",tabIndex:"-1",id:"editor-url-input-suggestion-"+n+"-"+i,ref:e.bindSuggestionNode(i),className:l()("editor-url-input__suggestion block-editor-url-input__suggestion",{"is-selected":i===a}),onClick:function(){return e.handleOnClick(t)},"aria-selected":i===a},t.title||u("(no title)"))})))))}}]),t}(p);t.a=g(w(b))},function(e,t,n){"use strict";function i(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}function o(){[r.a].forEach(function(e){var t=e.name,n=i(e,["name"]);return a(t,n)})}t.a=o;var r=n(9),a=wp.richText.registerFormatType},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}n.d(t,"a",function(){return O});var a=n(10),l=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),s=wp.i18n.__,u=wp.element,c=u.Component,p=u.Fragment,d=wp.components.withSpokenMessages,f=wp.richText,h=f.getTextContent,g=f.applyFormat,m=f.removeFormat,v=f.slice,w=wp.url.isURL,b=wp.editor,y=b.RichTextToolbarButton,k=b.RichTextShortcut,S=wp.components,E=S.Path,_=S.SVG,L=wp.dom.getRectangleFromRange,O={name:"ta/link",title:s("Affiliate Link"),tagName:"ta",className:null,attributes:{url:"href",target:"target"},edit:d(function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.addLink=e.addLink.bind(e),e.stopAddingLink=e.stopAddingLink.bind(e),e.onRemoveFormat=e.onRemoveFormat.bind(e),e.state={addingLink:!1},e}return r(t,e),l(t,[{key:"addLink",value:function(){var e=this.props,t=e.value,n=e.onChange,i=h(v(t));i&&w(i)?n(g(t,{type:"ta/link",attributes:{url:i}})):this.setState({addingLink:!0})}},{key:"stopAddingLink",value:function(){this.setState({addingLink:!1})}},{key:"onRemoveFormat",value:function(){var e=this.props,t=e.value,n=e.onChange,i=e.speak;n(m(t,"ta/link")),i(s("Affiliate Link removed."),"assertive")}},{key:"getAnchorRect",value:function(){var e=window.getSelection(),t=e.rangeCount>0?e.getRangeAt(0):null;if(t){var n=null;if(this.state.addingLink)n=L(t);else{var i=t.startContainer;for(i=i.nextElementSibling||i;i.nodeType!==window.Node.ELEMENT_NODE;)i=i.parentNode;var o=i.closest("ta");o&&(n=o.getBoundingClientRect())}return n}}},{key:"render",value:function(){var e=this.props,t=e.isActive,n=e.activeAttributes,i=e.value,o=e.onChange,r=this.getAnchorRect();return wp.element.createElement(p,null,wp.element.createElement(k,{type:"access",character:"s",onUse:this.onRemoveFormat}),wp.element.createElement(k,{type:"primary",character:"l",onUse:this.addLink}),wp.element.createElement(k,{type:"primaryShift",character:"l",onUse:this.onRemoveFormat}),t&&wp.element.createElement(y,{icon:"editor-unlink",title:s("Remove Affiliate Link"),className:"ta-unlink-button",onClick:this.onRemoveFormat,isActive:t,shortcutType:"primaryShift",shortcutCharacter:"l"}),!t&&wp.element.createElement(y,{icon:wp.element.createElement(_,{xmlns:"http://www.w3.org/2000/svg",width:"16.688",height:"9.875",viewBox:"0 0 16.688 9.875"},wp.element.createElement(E,{id:"TA.svg",fill:"black",class:"cls-1",d:"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z",transform:"translate(-1.188 -5.25)"})),title:s("Affiliate Link"),className:"ta-link-button",onClick:this.addLink,shortcutType:"primary",shortcutCharacter:"l"}),wp.element.createElement(a.a,{addingLink:this.state.addingLink,stopAddingLink:this.stopAddingLink,isActive:t,activeAttributes:n,anchorRect:r,value:i,onChange:o}))}}]),t}(c))}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){var t=e.url,n=e.linkid;e.text;return{type:"ta/link",attributes:{url:t,linkid:n.toString()}}}function l(e,t){return e.addingLink||t.editLink}var s=n(0),u=n.n(s),c=n(11),p=n(12),d=n(13),f=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),h=wp.i18n.__,g=wp.element,m=g.Component,v=g.createRef,w=wp.components,b=w.ExternalLink,y=(w.ToggleControl,w.IconButton),k=w.withSpokenMessages,S=wp.keycodes,E=S.LEFT,_=S.RIGHT,L=S.UP,O=S.DOWN,C=S.BACKSPACE,I=S.ENTER,T=wp.url,R=T.prependHTTP,P=T.safeDecodeURI,A=T.filterURLForDisplay,x=wp.richText,j=x.create,N=x.insert,F=x.isCollapsed,W=x.applyFormat,D=x.getTextContent,V=x.slice,z=function(e){return e.stopPropagation()},B=function(e){var t=e.value,n=e.onChangeInputValue,i=e.onKeyDown,o=e.submitLink,r=e.invalidLink,a=e.resetInvalidLink,l=e.autocompleteRef;return wp.element.createElement("form",{className:"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover",onKeyPress:z,onKeyDown:i,onSubmit:o},wp.element.createElement(d.a,{value:t,onChange:n,autocompleteRef:l,invalidLink:r,resetInvalidLink:a}),wp.element.createElement(y,{icon:"editor-break",label:h("Apply"),type:"submit"}))},H=function(e){var t=e.url,n=R(t),i=u()("editor-format-toolbar__link-container-value block-editor-format-toolbar__link-container-value",{"has-invalid-link":!Object(c.a)(n)});return t?wp.element.createElement(b,{className:i,href:t},A(P(t))):wp.element.createElement("span",{className:i})},U=function(e){var t=e.url,n=e.editLink;return wp.element.createElement("div",{className:"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content",onKeyPress:z},wp.element.createElement(H,{url:t}),wp.element.createElement(y,{icon:"edit",label:h("Edit"),onClick:n}))},M=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.editLink=e.editLink.bind(e),e.submitLink=e.submitLink.bind(e),e.onKeyDown=e.onKeyDown.bind(e),e.onChangeInputValue=e.onChangeInputValue.bind(e),e.onClickOutside=e.onClickOutside.bind(e),e.resetState=e.resetState.bind(e),e.autocompleteRef=v(),e.resetInvalidLink=e.resetInvalidLink.bind(e),e.state={inputValue:"",linkid:0,post:null,invalidLink:!1},e}return r(t,e),f(t,[{key:"onKeyDown",value:function(e){[E,O,_,L,C,I].indexOf(e.keyCode)>-1&&e.stopPropagation()}},{key:"onChangeInputValue",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t?t.id:0;this.setState({inputValue:e,linkid:n,post:t})}},{key:"editLink",value:function(e){this.setState({editLink:!0}),e.preventDefault()}},{key:"submitLink",value:function(e){var t=this.props,n=t.isActive,i=t.value,o=t.onChange,r=t.speak,l=this.state,s=l.inputValue,u=l.linkid,p=l.post,d=R(s),f=D(V(i)),g=a({url:d,linkid:u,text:f});if(e.preventDefault(),!u||!p)return void this.setState({invalidLink:!0});if(F(i)&&!n){var m=W(j({text:p.title}),g,0,d.length);o(N(i,m))}else o(W(i,g));this.resetState(),Object(c.a)(d)?n?r(h("Link edited."),"assertive"):r(h("Link inserted"),"assertive"):r(h("Warning: the link has been inserted but may have errors. Please test it."),"assertive")}},{key:"onClickOutside",value:function(e){var t=this.autocompleteRef.current;t&&t.contains(e.target)||this.resetState()}},{key:"resetState",value:function(){this.props.stopAddingLink(),this.setState({inputValue:"",editLink:!1}),this.resetInvalidLink()}},{key:"resetInvalidLink",value:function(){this.setState({invalidLink:!1})}},{key:"render",value:function(){var e=this.props,t=e.isActive,n=e.activeAttributes,i=n.url,o=(n.linkid,e.addingLink),r=e.anchorRect;e.value,e.onChange;if(!t&&!o)return null;var a=this.state,s=a.inputValue,u=a.invalidLink,c=l(this.props,this.state);return wp.element.createElement(p.a,{onClickOutside:this.onClickOutside,onClose:this.resetState,focusOnMount:!!c&&"firstElement",invalidLink:u,anchorRect:r},c?wp.element.createElement(B,{value:s,onChangeInputValue:this.onChangeInputValue,onKeyDown:this.onKeyDown,submitLink:this.submitLink,autocompleteRef:this.autocompleteRef,updateLinkId:this.updateLinkId,invalidLink:u,resetInvalidLink:this.resetInvalidLink}):wp.element.createElement(U,{url:i,editLink:this.editLink}))}}]),t}(m);t.a=k(M)},function(e,t,n){"use strict";function i(e){if(!e)return!1;var t=e.trim();if(!t)return!1;if(/^\S+:/.test(t)){var n=l(t);if(!s(n))return!1;if(r(n,"http")&&!/^https?:\/\/[^\/\s]/i.test(t))return!1;var i=u(t);if(!c(i))return!1;var o=p(t);if(o&&!d(o))return!1;var a=f(t);if(a&&!h(a))return!1;var v=g(t);if(v&&!m(v))return!1}return!(r(t,"#")&&!m(t))}t.a=i;var o=lodash,r=o.startsWith,a=wp.url,l=a.getProtocol,s=a.isValidProtocol,u=a.getAuthority,c=a.isValidAuthority,p=a.getPath,d=a.isValidPath,f=a.getQueryString,h=a.isValidQueryString,g=a.getFragment,m=a.isValidFragment},function(e,t,n){"use strict";function i(e,t){var n={};for(var i in e)t.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i]);return n}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),u=wp.i18n.__,c=wp.element.Component,p=wp.components,d=p.Popover,f=p.IconButton,h=function(e){function t(){o(this,t);var e=r(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.toggleSettingsVisibility=e.toggleSettingsVisibility.bind(e),e.state={isSettingsExpanded:!1},e}return a(t,e),s(t,[{key:"toggleSettingsVisibility",value:function(){this.setState({isSettingsExpanded:!this.state.isSettingsExpanded})}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.renderSettings,o=e.invalidLink,r=e.position,a=void 0===r?"bottom center":r,s=e.focusOnMount,c=void 0===s?"firstElement":s,p=i(e,["children","renderSettings","invalidLink","position","focusOnMount"]),h=this.state.isSettingsExpanded,g=!!n&&h;return wp.element.createElement(d,l({className:"ta-url-popover editor-url-popover block-editor-url-popover",focusOnMount:c,position:a},p),wp.element.createElement("div",{className:"editor-url-popover__row"},t,!!n&&wp.element.createElement(f,{className:"editor-url-popover__settings-toggle",icon:"ellipsis",label:u("Link Settings"),onClick:this.toggleSettingsVisibility,"aria-expanded":h})),g&&wp.element.createElement("div",{className:"editor-url-popover__row editor-url-popover__settings"},n()),o&&wp.element.createElement("div",{class:"ta-invalid-link"},u("Invalid affiliate link")))}}]),t}(c);t.a=h},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(0),l=n.n(a),s=n(14),u=n.n(s),c=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),p=wp.i18n.__,d=lodash,f=d.throttle,h=wp.element,g=h.Component,m=h.createRef,v=wp.keycodes,w=v.UP,b=v.DOWN,y=v.ENTER,k=v.TAB,S=wp.components,E=S.Spinner,_=S.withSpokenMessages,L=S.Popover,O=wp.compose.withInstanceId,C=function(e){return e.stopPropagation()},I=function(e){function t(e){var n=e.autocompleteRef;i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return r.onChange=r.onChange.bind(r),r.onKeyDown=r.onKeyDown.bind(r),r.autocompleteRef=n||m(),r.inputRef=m(),r.updateSuggestions=f(r.updateSuggestions.bind(r),200),r.suggestionNodes=[],r.state={posts:[],showSuggestions:!1,selectedSuggestion:null},r}return r(t,e),c(t,[{key:"componentDidUpdate",value:function(){var e=this,t=this.state,n=t.showSuggestions,i=t.selectedSuggestion;n&&null!==i&&!this.scrollingIntoView&&(this.scrollingIntoView=!0,u()(this.suggestionNodes[i],this.autocompleteRef.current,{onlyScrollIfNeeded:!0}),setTimeout(function(){e.scrollingIntoView=!1},100))}},{key:"componentWillUnmount",value:function(){delete this.suggestionsRequest}},{key:"bindSuggestionNode",value:function(e){var t=this;return function(n){t.suggestionNodes[e]=n}}},{key:"updateSuggestions",value:function(e){var t=this;if(e.length<2||/^https?:/.test(e))return void this.setState({showSuggestions:!1,selectedSuggestion:null,loading:!1});this.setState({showSuggestions:!0,selectedSuggestion:null,loading:!0});var n=new FormData;n.append("action","search_affiliate_links_query"),n.append("keyword",e),n.append("paged",1),n.append("gutenberg",!0);var i=fetch(ajaxurl,{method:"POST",body:n});i.then(function(e){return e.json()}).then(function(e){if(e.affiliate_links){var n=e.affiliate_links;t.suggestionsRequest===i&&(t.setState({posts:n,loading:!1}),n.length?t.props.debouncedSpeak(sprintf(_n("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",n.length),n.length),"assertive"):t.props.debouncedSpeak(p("No results."),"assertive"))}}).catch(function(){t.suggestionsRequest===i&&t.setState({loading:!1})}),this.suggestionsRequest=i}},{key:"onChange",value:function(e){this.props.resetInvalidLink();var t=e.target.value;this.props.onChange(t),this.updateSuggestions(t)}},{key:"onKeyDown",value:function(e){var t=this.state,n=t.showSuggestions,i=t.selectedSuggestion,o=t.posts,r=t.loading;if(n&&o.length&&!r){var a=this.state.posts[this.state.selectedSuggestion];switch(e.keyCode){case w:e.stopPropagation(),e.preventDefault();var l=i?i-1:o.length-1;this.setState({selectedSuggestion:l});break;case b:e.stopPropagation(),e.preventDefault();var s=null===i||i===o.length-1?0:i+1;this.setState({selectedSuggestion:s});break;case k:null!==this.state.selectedSuggestion&&(this.selectLink(a),this.props.speak(p("Link selected")));break;case y:null!==this.state.selectedSuggestion&&(e.stopPropagation(),this.selectLink(a))}}else switch(e.keyCode){case w:0!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(0,0));break;case b:this.props.value.length!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(this.props.value.length,this.props.value.length))}}},{key:"selectLink",value:function(e){this.props.onChange(e.link,e),this.setState({selectedSuggestion:null,showSuggestions:!1})}},{key:"handleOnClick",value:function(e){this.selectLink(e),this.inputRef.current.focus()}},{key:"render",value:function(){var e=this,t=this.props,n=t.value,i=void 0===n?"":n,o=t.autoFocus,r=void 0===o||o,a=t.instanceId,s=t.invalidLink,u=this.state,c=u.showSuggestions,d=u.posts,f=u.selectedSuggestion,h=u.loading;return wp.element.createElement("div",{className:"editor-url-input block-editor-url-input"},wp.element.createElement("input",{autoFocus:r,type:"text","aria-label":p("URL"),required:!0,value:i,onChange:this.onChange,onInput:C,placeholder:p("Paste URL or type to search"),onKeyDown:this.onKeyDown,role:"combobox","aria-expanded":c,"aria-autocomplete":"list","aria-owns":"editor-url-input-suggestions-"+a,"aria-activedescendant":null!==f?"editor-url-input-suggestion-"+a+"-"+f:void 0,ref:this.inputRef}),h&&wp.element.createElement(E,null),c&&!!d.length&&!s&&wp.element.createElement(L,{position:"bottom",noArrow:!0,focusOnMount:!1},wp.element.createElement("div",{className:"editor-url-input__suggestions block-editor-url-input__suggestions",id:"editor-url-input-suggestions-"+a,ref:this.autocompleteRef,role:"listbox"},d.map(function(t,n){return wp.element.createElement("button",{key:t.id,role:"option",tabIndex:"-1",id:"block-editor-url-input-suggestion-"+a+"-"+n,ref:e.bindSuggestionNode(n),className:l()("editor-url-input__suggestion block-editor-url-input__suggestion",{"is-selected":n===f}),onClick:function(){return e.handleOnClick(t)},"aria-selected":n===f},t.title||p("(no title)"))}))))}}]),t}(g);t.a=_(O(I))},function(e,t,n){"use strict";e.exports=n(15)},function(e,t,n){"use strict";function i(e,t,n){n=n||{},9===t.nodeType&&(t=o.getWindow(t));var i=n.allowHorizontalScroll,r=n.onlyScrollIfNeeded,a=n.alignWithTop,l=n.alignWithLeft,s=n.offsetTop||0,u=n.offsetLeft||0,c=n.offsetBottom||0,p=n.offsetRight||0;i=void 0===i||i;var d=o.isWindow(t),f=o.offset(e),h=o.outerHeight(e),g=o.outerWidth(e),m=void 0,v=void 0,w=void 0,b=void 0,y=void 0,k=void 0,S=void 0,E=void 0,_=void 0,L=void 0;d?(S=t,L=o.height(S),_=o.width(S),E={left:o.scrollLeft(S),top:o.scrollTop(S)},y={left:f.left-E.left-u,top:f.top-E.top-s},k={left:f.left+g-(E.left+_)+p,top:f.top+h-(E.top+L)+c},b=E):(m=o.offset(t),v=t.clientHeight,w=t.clientWidth,b={left:t.scrollLeft,top:t.scrollTop},y={left:f.left-(m.left+(parseFloat(o.css(t,"borderLeftWidth"))||0))-u,top:f.top-(m.top+(parseFloat(o.css(t,"borderTopWidth"))||0))-s},k={left:f.left+g-(m.left+w+(parseFloat(o.css(t,"borderRightWidth"))||0))+p,top:f.top+h-(m.top+v+(parseFloat(o.css(t,"borderBottomWidth"))||0))+c}),y.top<0||k.top>0?!0===a?o.scrollTop(t,b.top+y.top):!1===a?o.scrollTop(t,b.top+k.top):y.top<0?o.scrollTop(t,b.top+y.top):o.scrollTop(t,b.top+k.top):r||(a=void 0===a||!!a,a?o.scrollTop(t,b.top+y.top):o.scrollTop(t,b.top+k.top)),i&&(y.left<0||k.left>0?!0===l?o.scrollLeft(t,b.left+y.left):!1===l?o.scrollLeft(t,b.left+k.left):y.left<0?o.scrollLeft(t,b.left+y.left):o.scrollLeft(t,b.left+k.left):r||(l=void 0===l||!!l,l?o.scrollLeft(t,b.left+y.left):o.scrollLeft(t,b.left+k.left)))}var o=n(16);e.exports=i},function(e,t,n){"use strict";function i(e){var t=void 0,n=void 0,i=void 0,o=e.ownerDocument,r=o.body,a=o&&o.documentElement;return t=e.getBoundingClientRect(),n=t.left,i=t.top,n-=a.clientLeft||r.clientLeft||0,i-=a.clientTop||r.clientTop||0,{left:n,top:i}}function o(e,t){var n=e["page"+(t?"Y":"X")+"Offset"],i="scroll"+(t?"Top":"Left");if("number"!=typeof n){var o=e.document;n=o.documentElement[i],"number"!=typeof n&&(n=o.body[i])}return n}function r(e){return o(e)}function a(e){return o(e,!0)}function l(e){var t=i(e),n=e.ownerDocument,o=n.defaultView||n.parentWindow;return t.left+=r(o),t.top+=a(o),t}function s(e,t,n){var i="",o=e.ownerDocument,r=n||o.defaultView.getComputedStyle(e,null);return r&&(i=r.getPropertyValue(t)||r[t]),i}function u(e,t){var n=e[_]&&e[_][t];if(S.test(n)&&!E.test(t)){var i=e.style,o=i[O],r=e[L][O];e[L][O]=e[_][O],i[O]="fontSize"===t?"1em":n||0,n=i.pixelLeft+C,i[O]=o,e[L][O]=r}return""===n?"auto":n}function c(e,t){for(var n=0;n<e.length;n++)t(e[n])}function p(e){return"border-box"===I(e,"boxSizing")}function d(e,t,n){var i={},o=e.style,r=void 0;for(r in t)t.hasOwnProperty(r)&&(i[r]=o[r],o[r]=t[r]);n.call(e);for(r in t)t.hasOwnProperty(r)&&(o[r]=i[r])}function f(e,t,n){var i=0,o=void 0,r=void 0,a=void 0;for(r=0;r<t.length;r++)if(o=t[r])for(a=0;a<n.length;a++){var l=void 0;l="border"===o?o+n[a]+"Width":o+n[a],i+=parseFloat(I(e,l))||0}return i}function h(e){return null!=e&&e==e.window}function g(e,t,n){if(h(e))return"width"===t?x.viewportWidth(e):x.viewportHeight(e);if(9===e.nodeType)return"width"===t?x.docWidth(e):x.docHeight(e);var i="width"===t?["Left","Right"]:["Top","Bottom"],o="width"===t?e.offsetWidth:e.offsetHeight,r=I(e),a=p(e,r),l=0;(null==o||o<=0)&&(o=void 0,l=I(e,t),(null==l||Number(l)<0)&&(l=e.style[t]||0),l=parseFloat(l)||0),void 0===n&&(n=a?A:R);var s=void 0!==o||a,u=o||l;if(n===R)return s?u-f(e,["border","padding"],i,r):l;if(s){var c=n===P?-f(e,["border"],i,r):f(e,["margin"],i,r);return u+(n===A?0:c)}return l+f(e,T.slice(n),i,r)}function m(e){var t=void 0,n=arguments;return 0!==e.offsetWidth?t=g.apply(void 0,n):d(e,j,function(){t=g.apply(void 0,n)}),t}function v(e,t,n){var i=n;{if("object"!==(void 0===t?"undefined":y(t)))return void 0!==i?("number"==typeof i&&(i+="px"),void(e.style[t]=i)):I(e,t);for(var o in t)t.hasOwnProperty(o)&&v(e,o,t[o])}}function w(e,t){"static"===v(e,"position")&&(e.style.position="relative");var n=l(e),i={},o=void 0,r=void 0;for(r in t)t.hasOwnProperty(r)&&(o=parseFloat(v(e,r))||0,i[r]=o+t[r]-n[r]);v(e,i)}var b=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},k=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,S=new RegExp("^("+k+")(?!px)[a-z%]+$","i"),E=/^(top|right|bottom|left)$/,_="currentStyle",L="runtimeStyle",O="left",C="px",I=void 0;"undefined"!=typeof window&&(I=window.getComputedStyle?s:u);var T=["margin","border","padding"],R=-1,P=2,A=1,x={};c(["Width","Height"],function(e){x["doc"+e]=function(t){var n=t.document;return Math.max(n.documentElement["scroll"+e],n.body["scroll"+e],x["viewport"+e](n))},x["viewport"+e]=function(t){var n="client"+e,i=t.document,o=i.body,r=i.documentElement,a=r[n];return"CSS1Compat"===i.compatMode&&a||o&&o[n]||a}});var j={position:"absolute",visibility:"hidden",display:"block"};c(["width","height"],function(e){var t=e.charAt(0).toUpperCase()+e.slice(1);x["outer"+t]=function(t,n){return t&&m(t,e,n?0:A)};var n="width"===e?["Left","Right"]:["Top","Bottom"];x[e]=function(t,i){if(void 0===i)return t&&m(t,e,R);if(t){var o=I(t);return p(t)&&(i+=f(t,["padding","border"],n,o)),v(t,e,i)}}}),e.exports=b({getWindow:function(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow},offset:function(e,t){if(void 0===t)return l(e);w(e,t)},isWindow:h,each:c,css:v,clone:function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);if(e.overflow)for(var n in e)e.hasOwnProperty(n)&&(t.overflow[n]=e.overflow[n]);return t},scrollLeft:function(e,t){if(h(e)){if(void 0===t)return r(e);window.scrollTo(t,a(e))}else{if(void 0===t)return e.scrollLeft;e.scrollLeft=t}},scrollTop:function(e,t){if(h(e)){if(void 0===t)return a(e);window.scrollTo(r(e),t)}else{if(void 0===t)return e.scrollTop;e.scrollTop=t}},viewportWidth:0,viewportHeight:0},x)},function(e,t){}]);
7
  //# sourceMappingURL=gutenberg-support.js.map
js/app/gutenberg_support/dist/gutenberg-support.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///gutenberg-support.js","webpack:///webpack/bootstrap c9935c87e3e022ad59ba","webpack:///./node_modules/classnames/index.js","webpack:///./src/index.js","webpack:///./src/blocks/index.js","webpack:///./src/blocks/ta-image/index.js","webpack:///./src/blocks/ta-image/edit.js","webpack:///./src/blocks/ta-image/util.js","webpack:///./src/blocks/ta-image/image-size.js","webpack:///./src/blocks/ta-image/search-input.js","webpack:///./src/formats/index.js","webpack:///./src/formats/ta-link/index.js","webpack:///./src/formats/ta-link/inline.js","webpack:///./src/formats/ta-link/positioned-at-selection.js","webpack:///./src/formats/ta-link/utils.js","webpack:///./src/formats/ta-link/url-popover.js","webpack:///./src/formats/ta-link/url-input.js","webpack:///./node_modules/dom-scroll-into-view/lib/index.js","webpack:///./node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js","webpack:///./node_modules/dom-scroll-into-view/lib/util.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","classNames","classes","arguments","length","arg","argType","push","Array","isArray","inner","apply","key","hasOwn","join","default","undefined","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__blocks__","__WEBPACK_IMPORTED_MODULE_1__formats__","__WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__","registerBlocks","registerFormats","taimage","forEach","block","settings","registerBlockType","__WEBPACK_IMPORTED_MODULE_0__ta_image__","wp","blocks","_defineProperty","obj","writable","__WEBPACK_IMPORTED_MODULE_0_classnames__","__WEBPACK_IMPORTED_MODULE_0_classnames___default","__WEBPACK_IMPORTED_MODULE_1__edit__","Fragment","element","__","i18n","_wp$blocks","createBlock","getBlockAttributes","getPhrasingContentSchema","RichText","editor","_wp$components","components","Path","SVG","blockAttributes","url","type","source","selector","attribute","alt","caption","id","align","width","height","linkid","href","affiliateLink","imageSchema","img","attributes","schema","figure","require","children","ta","figcaption","title","description","icon","createElement","viewBox","xmlns","fill","category","keywords","transforms","from","isMatch","node","nodeName","querySelector","transform","className","alignMatches","exec","idMatches","Number","anchorElement","linkDestination","rel","linkClass","outerHTML","files","indexOf","file","createBlobURL","tag","shortcode","_ref","_document$implementat2","document","implementation","createHTMLDocument","body","innerHTML","content","removeChild","firstElementChild","trim","_ref2","named","parseInt","replace","_ref3","_ref3$named$align","getEditWrapperProps","data-align","data-resized","edit","save","_ref4","_classnames","classnames","image","src","Content","tagName","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","__WEBPACK_IMPORTED_MODULE_1__util__","__WEBPACK_IMPORTED_MODULE_2__image_size__","__WEBPACK_IMPORTED_MODULE_3__search_input__","_extends","assign","target","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","_createClass","defineProperties","props","descriptor","protoProps","staticProps","_lodash","lodash","isEmpty","map","last","pick","compact","getPath","_wp$i18n","sprintf","_wp$element","Component","createRef","_wp$blob","blob","getBlobByURL","revokeBlobURL","isBlobURL","Placeholder","Button","ButtonGroup","IconButton","PanelBody","ResizableBox","SelectControl","Spinner","TextControl","TextareaControl","Toolbar","withNotices","withSelect","ToggleControl","Popover","data","_wp$editor","BlockControls","InspectorControls","BlockAlignmentToolbar","MediaUpload","MediaUploadCheck","MediaPlaceholder","mediaUpload","withViewportMatch","viewport","compose","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","imageProps","isTemporaryImage","ImageEdit","_Component","this","_this","getPrototypeOf","updateAlt","bind","updateAlignment","onFocusCaption","onImageClick","onSelectImage","updateImageURL","updateWidth","updateHeight","updateDimensions","getFilename","toggleIsEditing","onImageError","onChangeInputValue","autocompleteRef","resetInvalidLink","updateImageSelection","onSelectAffiliateImage","editAFfiliateImage","state","captionFocused","isEditing","inputValue","post","showSuggestions","imageSelection","_this2","_props","setAttributes","noticeOperations","_attributes$url","filesList","onFileChange","allowedTypes","onError","message","createErrorNotice","setState","prevProps","_prevProps$attributes","prevID","_prevProps$attributes2","prevURL","_props$attributes","_props$attributes$url","isSelected","media","link","embedBlock","createUpgradedEmbedBlock","onReplace","newAlt","nextAlign","extraUpdatedAttributes","_this3","path","split","label","_props2","imageSizes","slug","sizeUrl","invalidLink","_this4","apiFetch","addQueryArgs","context","_locale","then","source_url","images","_this5","_state","_props3","isLargeViewport","maxWidth","toggleSelection","isRTL","toolbarEditButton","onClick","controls","onChange","instructions","index","wp-block-image","is-transient","is-resized","is-focused","isResizable","imageSizeOptions","getImageSizeOptions","getInspectorControls","imageWidth","imageHeight","help","options","placeholder","min","aria-label","scale","scaledWidth","Math","round","scaledHeight","isCurrent","isSmall","isPrimary","aria-pressed","dirtynessTrigger","sizes","imageWidthWithinContainer","imageHeightWithinContainer","filename","defaultedAlt","style","currentWidth","currentHeight","ratio","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","size","maxHeight","lockAspectRatio","enable","top","right","bottom","left","onResizeStart","onResizeStop","event","direction","elt","delta","unstableOnFocus","inlineToolbar","select","_select","getMedia","_select2","getEditorSettings","_getEditorSettings","includes","renderToString","attributesFromPreview","preview","matchingBlock","findBlock","DEFAULT_EMBED_BLOCK","html","isFromWordPress","noop","withGlobalEvents","ImageSize","bindContainer","calculateSize","ref","container","fetchImageSize","onload","window","Image","clientWidth","exceedMaxWidth","containerWidth","containerHeight","clientHeight","resize","withSpokenMessages","withInstanceId","ThirstyURLInput","inputRef","searchAffiliateLinks","suggestionNodes","posts","selectedSuggestion","loading","scrollingIntoView","scrollIntoView","current","onlyScrollIfNeeded","setTimeout","suggestionsRequest","formData","FormData","append","request","fetch","ajaxurl","method","response","json","affiliate_links","debouncedSpeak","catch","selectLink","instanceId","autoFocus","_state2","class","onSubmit","displayAffiliateImages","autocomplete","position","focusOnMount","role","tabIndex","bindSuggestionNode","is-selected","handleOnClick","aria-selected","_objectWithoutProperties","keys","taLink","registerFormatType","__WEBPACK_IMPORTED_MODULE_0__ta_link__","richText","__WEBPACK_IMPORTED_MODULE_0__inline__","_wp$richText","getTextContent","applyFormat","removeFormat","slice","isURL","RichTextToolbarButton","RichTextShortcut","LinkEdit","addLink","stopAddingLink","onRemoveFormat","addingLink","text","speak","isActive","activeAttributes","character","onUse","shortcutType","shortcutCharacter","createLinkFormat","toString","isShowingInput","editLink","__WEBPACK_IMPORTED_MODULE_1__positioned_at_selection__","__WEBPACK_IMPORTED_MODULE_2__utils__","__WEBPACK_IMPORTED_MODULE_3__url_popover__","__WEBPACK_IMPORTED_MODULE_4__url_input__","ExternalLink","_wp$keycodes","keycodes","LEFT","RIGHT","UP","DOWN","BACKSPACE","ENTER","_wp$url","prependHTTP","safeDecodeURI","filterURLForDisplay","insert","isCollapsed","stopKeyPropagation","stopPropagation","LinkEditor","onKeyDown","submitLink","onKeyPress","LinkViewerUrl","prependedURL","linkClassName","has-invalid-link","isValidHref","LinkViewer","InlineAffiliateLinkUI","onClickOutside","resetState","keyCode","preventDefault","selectedText","format","toInsert","autocompleteElement","contains","_props2$activeAttribu","showInput","start","end","onClose","updateLinkId","getCurrentCaretPositionStyle","selection","getSelection","rangeCount","rect","getRectangleFromRange","getRangeAt","offsetParent","getOffsetParent","anchorNode","parentRect","getBoundingClientRect","_wp$dom","dom","ThirstyPositionedAtSelection","trimmedHref","test","protocol","getProtocol","isValidProtocol","startsWith","authority","getAuthority","isValidAuthority","isValidPath","queryString","getQueryString","isValidQueryString","fragment","getFragment","isValidFragment","ThirstyURLPopover","toggleSettingsVisibility","isSettingsExpanded","renderSettings","_props$position","_props$focusOnMount","showSettings","aria-expanded","__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__","__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default","throttle","TAB","stopEventPropagation","updateSuggestions","previousIndex","nextIndex","selectionStart","setSelectionRange","focus","_props$value","_props$autoFocus","_state3","required","onInput","aria-autocomplete","aria-owns","aria-activedescendant","noArrow","elem","config","nodeType","util","getWindow","allowHorizontalScroll","alignWithTop","alignWithLeft","offsetTop","offsetLeft","offsetBottom","offsetRight","isWin","isWindow","elemOffset","offset","eh","outerHeight","ew","outerWidth","containerOffset","ch","cw","containerScroll","diffTop","diffBottom","win","winScroll","ww","wh","scrollLeft","scrollTop","parseFloat","css","getClientPosition","box","x","y","doc","ownerDocument","docElem","documentElement","clientLeft","clientTop","getScroll","w","ret","getScrollLeft","getScrollTop","getOffset","el","pos","defaultView","parentWindow","_getComputedStyle","computedStyle_","val","computedStyle","getComputedStyle","getPropertyValue","_getComputedStyleIE","CURRENT_STYLE","_RE_NUM_NO_PX","RE_POS","rsLeft","RUNTIME_STYLE","pixelLeft","PX","each","fn","isBorderBoxFn","getComputedStyleX","swap","callback","old","getPBMWidth","which","prop","j","cssProp","getWH","extra","domUtils","viewportWidth","viewportHeight","docWidth","docHeight","borderBoxValue","offsetWidth","offsetHeight","isBorderBox","cssBoxValue","BORDER_INDEX","CONTENT_INDEX","borderBoxValueOrIsBorderBox","padding","PADDING_INDEX","BOX_MODELS","getWHIgnoreDisplay","args","cssShow","v","_typeof","setOffset","RE_NUM","RegExp","refWin","max","documentElementProp","compatMode","visibility","display","first","charAt","toUpperCase","includeMargin","clone","overflow","scrollTo"],"mappings":"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","file":"gutenberg-support.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__blocks__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__formats__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__ = __webpack_require__(18);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__);\n\n\n\n\n\nObject(__WEBPACK_IMPORTED_MODULE_0__blocks__[\"a\" /* default */])();\nObject(__WEBPACK_IMPORTED_MODULE_1__formats__[\"a\" /* default */])();\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = registerBlocks;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ta_image__ = __webpack_require__(3);\n\n\nvar registerBlockType = wp.blocks.registerBlockType;\n\n/**\r\n * Register gutenberg blocks.\r\n * \r\n * @since 3.6\r\n */\n\nfunction registerBlocks() {\n\n [__WEBPACK_IMPORTED_MODULE_0__ta_image__].forEach(function (block) {\n if (!block) return;\n\n var name = block.name,\n settings = block.settings;\n\n registerBlockType(name, settings);\n });\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"name\", function() { return name; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__edit__ = __webpack_require__(4);\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nvar Fragment = wp.element.Fragment;\nvar __ = wp.i18n.__;\nvar _wp$blocks = wp.blocks,\n createBlock = _wp$blocks.createBlock,\n getBlockAttributes = _wp$blocks.getBlockAttributes,\n getPhrasingContentSchema = _wp$blocks.getPhrasingContentSchema;\nvar RichText = wp.editor.RichText;\nvar _wp$components = wp.components,\n Path = _wp$components.Path,\n SVG = _wp$components.SVG;\n\n\n\n\nvar name = 'ta/image';\n\nvar blockAttributes = {\n\turl: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'src'\n\t},\n\talt: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'alt',\n\t\tdefault: ''\n\t},\n\tcaption: {\n\t\ttype: 'string',\n\t\tsource: 'html',\n\t\tselector: 'figcaption'\n\t},\n\tid: {\n\t\ttype: 'number'\n\t},\n\talign: {\n\t\ttype: 'string'\n\t},\n\twidth: {\n\t\ttype: 'number'\n\t},\n\theight: {\n\t\ttype: 'number'\n\t},\n\tlinkid: {\n\t\ttype: 'number'\n\t},\n\thref: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'ta',\n\t\tattribute: 'href'\n\t},\n\taffiliateLink: {\n\t\ttype: 'object'\n\t}\n};\n\nvar imageSchema = {\n\timg: {\n\t\tattributes: ['src', 'alt'],\n\t\tclasses: ['alignleft', 'aligncenter', 'alignright', 'alignnone', /^wp-image-\\d+$/]\n\t}\n};\n\nvar schema = {\n\tfigure: {\n\t\trequire: ['ta', 'img'],\n\t\tchildren: {\n\t\t\tta: {\n\t\t\t\tattributes: ['href', 'linkid'],\n\t\t\t\tchildren: imageSchema\n\t\t\t},\n\t\t\tfigcaption: {\n\t\t\t\tchildren: getPhrasingContentSchema()\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getFirstAnchorAttributeFormHTML(html, attributeName) {\n\tvar _document$implementat = document.implementation.createHTMLDocument(''),\n\t body = _document$implementat.body;\n\n\tbody.innerHTML = html;\n\n\tvar firstElementChild = body.firstElementChild;\n\n\n\tif (firstElementChild && firstElementChild.nodeName === 'A') {\n\t\treturn firstElementChild.getAttribute(attributeName) || undefined;\n\t}\n}\n\nvar settings = {\n\ttitle: __('ThirstyAffiliates Image'),\n\n\tdescription: __('Insert an image with an affiliate link to make a visual statement.'),\n\n\ticon: wp.element.createElement(\n\t\tSVG,\n\t\t{ viewBox: \"0 0 24 24\", xmlns: \"http://www.w3.org/2000/svg\" },\n\t\twp.element.createElement(Path, { d: \"M0,0h24v24H0V0z\", fill: \"none\" }),\n\t\twp.element.createElement(Path, { d: \"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z\" }),\n\t\twp.element.createElement(Path, { d: \"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z\" })\n\t),\n\n\tcategory: 'common',\n\n\tkeywords: ['img', // \"img\" is not translated as it is intended to reflect the HTML <img> tag.\n\t__('photo'), __('affiliate')],\n\n\tattributes: blockAttributes,\n\n\ttransforms: {\n\t\tfrom: [{\n\t\t\ttype: 'raw',\n\t\t\tisMatch: function isMatch(node) {\n\t\t\t\treturn node.nodeName === 'FIGURE' && !!node.querySelector('img');\n\t\t\t},\n\t\t\tschema: schema,\n\t\t\ttransform: function transform(node) {\n\n\t\t\t\t// Search both figure and image classes. Alignment could be\n\t\t\t\t// set on either. ID is set on the image.\n\t\t\t\tvar className = node.className + ' ' + node.querySelector('img').className;\n\t\t\t\tvar alignMatches = /(?:^|\\s)align(left|center|right)(?:$|\\s)/.exec(className);\n\t\t\t\tvar align = alignMatches ? alignMatches[1] : undefined;\n\t\t\t\tvar idMatches = /(?:^|\\s)wp-image-(\\d+)(?:$|\\s)/.exec(className);\n\t\t\t\tvar id = idMatches ? Number(idMatches[1]) : undefined;\n\t\t\t\tvar anchorElement = node.querySelector('a');\n\t\t\t\tvar linkDestination = anchorElement && anchorElement.href ? 'custom' : undefined;\n\t\t\t\tvar linkid = anchorElement && anchorElement.linkid ? anchorElement.linkid : undefined;\n\t\t\t\tvar href = anchorElement && anchorElement.href ? anchorElement.href : undefined;\n\t\t\t\tvar rel = anchorElement && anchorElement.rel ? anchorElement.rel : undefined;\n\t\t\t\tvar linkClass = anchorElement && anchorElement.className ? anchorElement.className : undefined;\n\t\t\t\tvar attributes = getBlockAttributes('ta/image', node.outerHTML, { align: align, id: id, linkDestination: linkDestination, linkid: linkid, href: href, rel: rel, linkClass: linkClass });\n\t\t\t\treturn createBlock('ta/image', attributes);\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'files',\n\t\t\tisMatch: function isMatch(files) {\n\t\t\t\treturn files.length === 1 && files[0].type.indexOf('image/') === 0;\n\t\t\t},\n\t\t\ttransform: function transform(files) {\n\t\t\t\tvar file = files[0];\n\t\t\t\t// We don't need to upload the media directly here\n\t\t\t\t// It's already done as part of the `componentDidMount`\n\t\t\t\t// int the image block\n\t\t\t\tvar block = createBlock('ta/image', {\n\t\t\t\t\turl: createBlobURL(file)\n\t\t\t\t});\n\n\t\t\t\treturn block;\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'shortcode',\n\t\t\ttag: 'caption',\n\t\t\tattributes: {\n\t\t\t\turl: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tsource: 'attribute',\n\t\t\t\t\tattribute: 'src',\n\t\t\t\t\tselector: 'img'\n\t\t\t\t},\n\t\t\t\talt: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tsource: 'attribute',\n\t\t\t\t\tattribute: 'alt',\n\t\t\t\t\tselector: 'img'\n\t\t\t\t},\n\t\t\t\tcaption: {\n\t\t\t\t\tshortcode: function shortcode(attributes, _ref) {\n\t\t\t\t\t\tvar _shortcode = _ref.shortcode;\n\n\t\t\t\t\t\tvar _document$implementat2 = document.implementation.createHTMLDocument(''),\n\t\t\t\t\t\t body = _document$implementat2.body;\n\n\t\t\t\t\t\tbody.innerHTML = _shortcode.content;\n\t\t\t\t\t\tbody.removeChild(body.firstElementChild);\n\n\t\t\t\t\t\treturn body.innerHTML.trim();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tid: {\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tshortcode: function shortcode(_ref2) {\n\t\t\t\t\t\tvar id = _ref2.named.id;\n\n\t\t\t\t\t\tif (!id) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn parseInt(id.replace('attachment_', ''), 10);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\talign: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tshortcode: function shortcode(_ref3) {\n\t\t\t\t\t\tvar _ref3$named$align = _ref3.named.align,\n\t\t\t\t\t\t align = _ref3$named$align === undefined ? 'alignnone' : _ref3$named$align;\n\n\t\t\t\t\t\treturn align.replace('align', '');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlinkid: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tsource: 'attribute',\n\t\t\t\t\tselector: 'wp-block-ta-image > ta',\n\t\t\t\t\tattribute: 'linkid'\n\t\t\t\t},\n\t\t\t\thref: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tsource: 'attribute',\n\t\t\t\t\tselector: 'ta',\n\t\t\t\t\tattribute: 'href'\n\t\t\t\t}\n\t\t\t}\n\t\t}]\n\t},\n\n\tgetEditWrapperProps: function getEditWrapperProps(attributes) {\n\t\tvar align = attributes.align,\n\t\t width = attributes.width;\n\n\t\tif ('left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align) {\n\t\t\treturn { 'data-align': align, 'data-resized': !!width };\n\t\t}\n\t},\n\n\n\tedit: __WEBPACK_IMPORTED_MODULE_1__edit__[\"a\" /* default */],\n\n\tsave: function save(_ref4) {\n\t\tvar _classnames;\n\n\t\tvar attributes = _ref4.attributes;\n\t\tvar url = attributes.url,\n\t\t alt = attributes.alt,\n\t\t caption = attributes.caption,\n\t\t align = attributes.align,\n\t\t width = attributes.width,\n\t\t height = attributes.height,\n\t\t id = attributes.id,\n\t\t linkid = attributes.linkid,\n\t\t href = attributes.href;\n\n\n\t\tvar classes = __WEBPACK_IMPORTED_MODULE_0_classnames___default()((_classnames = {}, _defineProperty(_classnames, \"align\" + align, align), _defineProperty(_classnames, 'is-resized', width || height), _classnames));\n\n\t\tvar image = wp.element.createElement(\"img\", {\n\t\t\tsrc: url,\n\t\t\talt: alt,\n\t\t\tclassName: id ? \"wp-image-\" + id : null,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t});\n\n\t\tvar figure = wp.element.createElement(\n\t\t\tFragment,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\t\"ta\",\n\t\t\t\t{ linkid: linkid, href: href },\n\t\t\t\timage\n\t\t\t),\n\t\t\twp.element.createElement(RichText.Content, { tagName: \"figcaption\", value: caption })\n\t\t);\n\n\t\tif ('left' === align || 'right' === align || 'center' === align) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\t\"div\",\n\t\t\t\t{ className: \"wp-block-image\" },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"figure\",\n\t\t\t\t\t{ className: classes },\n\t\t\t\t\tfigure\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn wp.element.createElement(\n\t\t\t\"figure\",\n\t\t\t{ className: \"wp-block-image \" + classes },\n\t\t\tfigure\n\t\t);\n\t}\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export pickRelevantMediaFiles */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__image_size__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__search_input__ = __webpack_require__(7);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar _lodash = lodash,\n get = _lodash.get,\n isEmpty = _lodash.isEmpty,\n map = _lodash.map,\n last = _lodash.last,\n pick = _lodash.pick,\n compact = _lodash.compact;\nvar getPath = wp.url.getPath;\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n sprintf = _wp$i18n.sprintf;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n Fragment = _wp$element.Fragment,\n createRef = _wp$element.createRef;\nvar _wp$blob = wp.blob,\n getBlobByURL = _wp$blob.getBlobByURL,\n revokeBlobURL = _wp$blob.revokeBlobURL,\n isBlobURL = _wp$blob.isBlobURL;\nvar _wp$components = wp.components,\n Placeholder = _wp$components.Placeholder,\n Button = _wp$components.Button,\n ButtonGroup = _wp$components.ButtonGroup,\n IconButton = _wp$components.IconButton,\n PanelBody = _wp$components.PanelBody,\n ResizableBox = _wp$components.ResizableBox,\n SelectControl = _wp$components.SelectControl,\n Spinner = _wp$components.Spinner,\n TextControl = _wp$components.TextControl,\n TextareaControl = _wp$components.TextareaControl,\n Toolbar = _wp$components.Toolbar,\n withNotices = _wp$components.withNotices,\n ToggleControl = _wp$components.ToggleControl,\n Popover = _wp$components.Popover;\nvar withSelect = wp.data.withSelect;\nvar _wp$editor = wp.editor,\n RichText = _wp$editor.RichText,\n BlockControls = _wp$editor.BlockControls,\n InspectorControls = _wp$editor.InspectorControls,\n MediaUpload = _wp$editor.MediaUpload,\n MediaUploadCheck = _wp$editor.MediaUploadCheck,\n MediaPlaceholder = _wp$editor.MediaPlaceholder,\n BlockAlignmentToolbar = _wp$editor.BlockAlignmentToolbar,\n mediaUpload = _wp$editor.mediaUpload;\nvar withViewportMatch = wp.viewport.withViewportMatch;\nvar compose = wp.compose.compose;\n\n\n\n\n\n\n/**\r\n * Module constants\r\n */\nvar MIN_SIZE = 20;\nvar LINK_DESTINATION_NONE = 'none';\nvar LINK_DESTINATION_MEDIA = 'media';\nvar LINK_DESTINATION_ATTACHMENT = 'attachment';\nvar LINK_DESTINATION_CUSTOM = 'custom';\nvar NEW_TAB_REL = 'noreferrer noopener';\nvar ALLOWED_MEDIA_TYPES = ['image'];\n\nvar pickRelevantMediaFiles = function pickRelevantMediaFiles(image) {\n\tvar imageProps = pick(image, ['alt', 'id', 'link', 'caption']);\n\timageProps.url = get(image, ['sizes', 'large', 'url']) || get(image, ['media_details', 'sizes', 'large', 'source_url']) || image.url;\n\treturn imageProps;\n};\n\n/**\r\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\r\n * while the image is being uploaded and will not have an id yet allocated.\r\n *\r\n * @param {number=} id The id of the image.\r\n * @param {string=} url The url of the image.\r\n *\r\n * @return {boolean} Is the URL a Blob URL\r\n */\nvar isTemporaryImage = function isTemporaryImage(id, url) {\n\treturn !id && isBlobURL(url);\n};\n\n/**\r\n * Is the url for the image hosted externally. An externally hosted image has no id\r\n * and is not a blob url.\r\n *\r\n * @param {number=} id The id of the image.\r\n * @param {string=} url The url of the image.\r\n *\r\n * @return {boolean} Is the url an externally hosted url?\r\n */\nvar isExternalImage = function isExternalImage(id, url) {\n\treturn url && !id && !isBlobURL(url);\n};\n\nvar ImageEdit = function (_Component) {\n\t_inherits(ImageEdit, _Component);\n\n\tfunction ImageEdit(_ref) {\n\t\tvar attributes = _ref.attributes;\n\n\t\t_classCallCheck(this, ImageEdit);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ImageEdit.__proto__ || Object.getPrototypeOf(ImageEdit)).apply(this, arguments));\n\n\t\t_this.updateAlt = _this.updateAlt.bind(_this);\n\t\t_this.updateAlignment = _this.updateAlignment.bind(_this);\n\t\t_this.onFocusCaption = _this.onFocusCaption.bind(_this);\n\t\t_this.onImageClick = _this.onImageClick.bind(_this);\n\t\t_this.onSelectImage = _this.onSelectImage.bind(_this);\n\t\t_this.updateImageURL = _this.updateImageURL.bind(_this);\n\t\t_this.updateWidth = _this.updateWidth.bind(_this);\n\t\t_this.updateHeight = _this.updateHeight.bind(_this);\n\t\t_this.updateDimensions = _this.updateDimensions.bind(_this);\n\t\t_this.getFilename = _this.getFilename.bind(_this);\n\t\t_this.toggleIsEditing = _this.toggleIsEditing.bind(_this);\n\t\t_this.onImageError = _this.onImageError.bind(_this);\n\t\t_this.onChangeInputValue = _this.onChangeInputValue.bind(_this);\n\t\t_this.autocompleteRef = createRef();\n\t\t_this.resetInvalidLink = _this.resetInvalidLink.bind(_this);\n\t\t_this.updateImageSelection = _this.updateImageSelection.bind(_this);\n\t\t_this.onSelectAffiliateImage = _this.onSelectAffiliateImage.bind(_this);\n\t\t_this.editAFfiliateImage = _this.editAFfiliateImage.bind(_this);\n\n\t\t_this.state = {\n\t\t\tcaptionFocused: false,\n\t\t\tisEditing: !attributes.url,\n\t\t\tinputValue: '',\n\t\t\tlinkid: 0,\n\t\t\tpost: null,\n\t\t\tshowSuggestions: false,\n\t\t\timageSelection: [],\n\t\t\taffiliateLink: null\n\t\t};\n\t\treturn _this;\n\t}\n\n\t_createClass(ImageEdit, [{\n\t\tkey: \"componentDidMount\",\n\t\tvalue: function componentDidMount() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t attributes = _props.attributes,\n\t\t\t setAttributes = _props.setAttributes,\n\t\t\t noticeOperations = _props.noticeOperations;\n\t\t\tvar id = attributes.id,\n\t\t\t _attributes$url = attributes.url,\n\t\t\t url = _attributes$url === undefined ? '' : _attributes$url;\n\n\n\t\t\tif (isTemporaryImage(id, url)) {\n\t\t\t\tvar file = getBlobByURL(url);\n\n\t\t\t\tif (file) {\n\t\t\t\t\tmediaUpload({\n\t\t\t\t\t\tfilesList: [file],\n\t\t\t\t\t\tonFileChange: function onFileChange(_ref2) {\n\t\t\t\t\t\t\tvar _ref3 = _slicedToArray(_ref2, 1),\n\t\t\t\t\t\t\t image = _ref3[0];\n\n\t\t\t\t\t\t\tsetAttributes(pickRelevantMediaFiles(image));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\t\tonError: function onError(message) {\n\t\t\t\t\t\t\tnoticeOperations.createErrorNotice(message);\n\t\t\t\t\t\t\t_this2.setState({ isEditing: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"componentDidUpdate\",\n\t\tvalue: function componentDidUpdate(prevProps) {\n\t\t\tvar _prevProps$attributes = prevProps.attributes,\n\t\t\t prevID = _prevProps$attributes.id,\n\t\t\t _prevProps$attributes2 = _prevProps$attributes.url,\n\t\t\t prevURL = _prevProps$attributes2 === undefined ? '' : _prevProps$attributes2;\n\t\t\tvar _props$attributes = this.props.attributes,\n\t\t\t id = _props$attributes.id,\n\t\t\t _props$attributes$url = _props$attributes.url,\n\t\t\t url = _props$attributes$url === undefined ? '' : _props$attributes$url;\n\n\n\t\t\tif (isTemporaryImage(prevID, prevURL) && !isTemporaryImage(id, url)) {\n\t\t\t\trevokeBlobURL(url);\n\t\t\t}\n\n\t\t\tif (!this.props.isSelected && prevProps.isSelected && this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onSelectImage\",\n\t\tvalue: function onSelectImage(media) {\n\n\t\t\tif (!media || !media.url) {\n\t\t\t\tthis.props.setAttributes({\n\t\t\t\t\turl: undefined,\n\t\t\t\t\talt: undefined,\n\t\t\t\t\tid: undefined,\n\t\t\t\t\tcaption: undefined\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar affiliateLink = this.state.affiliateLink;\n\n\n\t\t\tthis.setState({\n\t\t\t\tisEditing: false\n\t\t\t});\n\n\t\t\tthis.props.setAttributes(_extends({}, pickRelevantMediaFiles(media), {\n\t\t\t\tlinkid: affiliateLink.id,\n\t\t\t\thref: affiliateLink.link,\n\t\t\t\taffiliateLink: affiliateLink,\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"onImageError\",\n\t\tvalue: function onImageError(url) {\n\t\t\t// Check if there's an embed block that handles this URL.\n\t\t\tvar embedBlock = Object(__WEBPACK_IMPORTED_MODULE_1__util__[\"a\" /* createUpgradedEmbedBlock */])({ attributes: { url: url } });\n\t\t\tif (undefined !== embedBlock) {\n\t\t\t\tthis.props.onReplace(embedBlock);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onFocusCaption\",\n\t\tvalue: function onFocusCaption() {\n\t\t\tif (!this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onImageClick\",\n\t\tvalue: function onImageClick() {\n\t\t\tif (this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"updateAlt\",\n\t\tvalue: function updateAlt(newAlt) {\n\t\t\tthis.props.setAttributes({ alt: newAlt });\n\t\t}\n\t}, {\n\t\tkey: \"updateAlignment\",\n\t\tvalue: function updateAlignment(nextAlign) {\n\t\t\tvar extraUpdatedAttributes = ['wide', 'full'].indexOf(nextAlign) !== -1 ? { width: undefined, height: undefined } : {};\n\t\t\tthis.props.setAttributes(_extends({}, extraUpdatedAttributes, { align: nextAlign }));\n\t\t}\n\t}, {\n\t\tkey: \"updateImageURL\",\n\t\tvalue: function updateImageURL(url) {\n\t\t\tthis.props.setAttributes({ url: url, width: undefined, height: undefined });\n\t\t}\n\t}, {\n\t\tkey: \"updateWidth\",\n\t\tvalue: function updateWidth(width) {\n\t\t\tthis.props.setAttributes({ width: parseInt(width, 10) });\n\t\t}\n\t}, {\n\t\tkey: \"updateHeight\",\n\t\tvalue: function updateHeight(height) {\n\t\t\tthis.props.setAttributes({ height: parseInt(height, 10) });\n\t\t}\n\t}, {\n\t\tkey: \"updateDimensions\",\n\t\tvalue: function updateDimensions() {\n\t\t\tvar _this3 = this;\n\n\t\t\tvar width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\t\t\tvar height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\treturn function () {\n\t\t\t\t_this3.props.setAttributes({ width: width, height: height });\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"getFilename\",\n\t\tvalue: function getFilename(url) {\n\t\t\tvar path = getPath(url);\n\t\t\tif (path) {\n\t\t\t\treturn last(path.split('/'));\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"getLinkDestinationOptions\",\n\t\tvalue: function getLinkDestinationOptions() {\n\t\t\treturn [{ value: LINK_DESTINATION_NONE, label: __('None') }, { value: LINK_DESTINATION_MEDIA, label: __('Media File') }, { value: LINK_DESTINATION_ATTACHMENT, label: __('Attachment Page') }, { value: LINK_DESTINATION_CUSTOM, label: __('Custom URL') }];\n\t\t}\n\t}, {\n\t\tkey: \"toggleIsEditing\",\n\t\tvalue: function toggleIsEditing() {\n\t\t\tthis.setState({\n\t\t\t\tisEditing: !this.state.isEditing\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"getImageSizeOptions\",\n\t\tvalue: function getImageSizeOptions() {\n\t\t\tvar _props2 = this.props,\n\t\t\t imageSizes = _props2.imageSizes,\n\t\t\t image = _props2.image;\n\n\t\t\treturn compact(map(imageSizes, function (_ref4) {\n\t\t\t\tvar name = _ref4.name,\n\t\t\t\t slug = _ref4.slug;\n\n\t\t\t\tvar sizeUrl = get(image, ['media_details', 'sizes', slug, 'source_url']);\n\t\t\t\tif (!sizeUrl) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tvalue: sizeUrl,\n\t\t\t\t\tlabel: name\n\t\t\t\t};\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"onChangeInputValue\",\n\t\tvalue: function onChangeInputValue(inputValue) {\n\t\t\tvar post = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\t\tvar linkid = post ? post.id : 0;\n\t\t\tthis.setState({ inputValue: inputValue, linkid: linkid, post: post });\n\t\t}\n\t}, {\n\t\tkey: \"resetInvalidLink\",\n\t\tvalue: function resetInvalidLink() {\n\t\t\tthis.setState({ invalidLink: false });\n\t\t}\n\t}, {\n\t\tkey: \"updateImageSelection\",\n\t\tvalue: function updateImageSelection(imageSelection, affiliateLink) {\n\t\t\tthis.setState({\n\t\t\t\timageSelection: imageSelection,\n\t\t\t\taffiliateLink: affiliateLink\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"onSelectAffiliateImage\",\n\t\tvalue: function onSelectAffiliateImage(image) {\n\t\t\tvar _this4 = this;\n\n\t\t\tvar request = wp.apiFetch({\n\t\t\t\tpath: wp.url.addQueryArgs('wp/v2/media/' + image.id, {\n\t\t\t\t\tcontext: 'edit',\n\t\t\t\t\t_locale: 'user'\n\t\t\t\t})\n\t\t\t});\n\n\t\t\trequest.then(function (media) {\n\t\t\t\tmedia.url = media.source_url;\n\t\t\t\t_this4.onSelectImage(media);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"editAFfiliateImage\",\n\t\tvalue: function editAFfiliateImage() {\n\t\t\tvar attributes = this.props.attributes;\n\t\t\tvar affiliateLink = attributes.affiliateLink;\n\n\n\t\t\tthis.setState({\n\t\t\t\tisEditing: true,\n\t\t\t\timageSelection: affiliateLink.images,\n\t\t\t\taffiliateLink: affiliateLink\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t isEditing = _state.isEditing,\n\t\t\t imageSelection = _state.imageSelection,\n\t\t\t affiliateLink = _state.affiliateLink;\n\t\t\tvar _props3 = this.props,\n\t\t\t attributes = _props3.attributes,\n\t\t\t setAttributes = _props3.setAttributes,\n\t\t\t isLargeViewport = _props3.isLargeViewport,\n\t\t\t isSelected = _props3.isSelected,\n\t\t\t className = _props3.className,\n\t\t\t maxWidth = _props3.maxWidth,\n\t\t\t toggleSelection = _props3.toggleSelection,\n\t\t\t isRTL = _props3.isRTL;\n\t\t\tvar url = attributes.url,\n\t\t\t alt = attributes.alt,\n\t\t\t caption = attributes.caption,\n\t\t\t align = attributes.align,\n\t\t\t linkDestination = attributes.linkDestination,\n\t\t\t width = attributes.width,\n\t\t\t height = attributes.height,\n\t\t\t linkid = attributes.linkid,\n\t\t\t href = attributes.href;\n\n\t\t\tvar toolbarEditButton = wp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(IconButton, {\n\t\t\t\t\tclassName: \"ta-edit-image-button components-icon-button components-toolbar__control\",\n\t\t\t\t\tlabel: __('Edit ThirstyAffiliates Image'),\n\t\t\t\t\ticon: \"edit\",\n\t\t\t\t\tonClick: this.editAFfiliateImage\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tvar controls = wp.element.createElement(\n\t\t\t\tBlockControls,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(BlockAlignmentToolbar, {\n\t\t\t\t\tvalue: align,\n\t\t\t\t\tonChange: this.updateAlignment\n\t\t\t\t}),\n\t\t\t\ttoolbarEditButton\n\t\t\t);\n\n\t\t\tif (isEditing) {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\tcontrols,\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tPlaceholder,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ticon: \"format-image\",\n\t\t\t\t\t\t\tlabel: __(\"ThirstyAffiliates Image\"),\n\t\t\t\t\t\t\tinstructions: __(\"Search for an affiliate link and select image to insert.\")\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_3__search_input__[\"a\" /* default */], {\n\t\t\t\t\t\t\tupdateImageSelection: this.updateImageSelection\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t!!imageSelection.length && wp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ className: \"ta-image-sel-wrap\" },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"h3\",\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\taffiliateLink.title + \" \" + __('attached images:')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"ta-image-selection\" },\n\t\t\t\t\t\t\t\timageSelection.map(function (image, index) {\n\t\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\"button\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn _this5.onSelectAffiliateImage(image);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\twp.element.createElement(\"img\", { src: image.src })\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar classes = __WEBPACK_IMPORTED_MODULE_0_classnames___default()(className, {\n\t\t\t\t'wp-block-image': true,\n\t\t\t\t'is-transient': isBlobURL(url),\n\t\t\t\t'is-resized': !!width || !!height,\n\t\t\t\t'is-focused': isSelected\n\t\t\t});\n\n\t\t\tvar isResizable = ['wide', 'full'].indexOf(align) === -1 && isLargeViewport;\n\t\t\tvar imageSizeOptions = this.getImageSizeOptions();\n\n\t\t\tvar getInspectorControls = function getInspectorControls(imageWidth, imageHeight) {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tInspectorControls,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tPanelBody,\n\t\t\t\t\t\t{ title: __('Image Settings') },\n\t\t\t\t\t\twp.element.createElement(TextareaControl, {\n\t\t\t\t\t\t\tlabel: __('Alt Text (Alternative Text)'),\n\t\t\t\t\t\t\tvalue: alt,\n\t\t\t\t\t\t\tonChange: _this5.updateAlt,\n\t\t\t\t\t\t\thelp: __('Alternative text describes your image to people who can’t see it. Add a short description with its key details.')\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t!isEmpty(imageSizeOptions) && wp.element.createElement(SelectControl, {\n\t\t\t\t\t\t\tlabel: __('Image Size'),\n\t\t\t\t\t\t\tvalue: url,\n\t\t\t\t\t\t\toptions: imageSizeOptions,\n\t\t\t\t\t\t\tonChange: _this5.updateImageURL\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tisResizable && wp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions\" },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"p\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\t__('Image Dimensions')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\t\t\t\tclassName: \"block-library-image__dimensions__width\",\n\t\t\t\t\t\t\t\t\tlabel: __('Width'),\n\t\t\t\t\t\t\t\t\tvalue: width !== undefined ? width : '',\n\t\t\t\t\t\t\t\t\tplaceholder: imageWidth,\n\t\t\t\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\t\t\t\tonChange: _this5.updateWidth\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\t\t\t\tclassName: \"block-library-image__dimensions__height\",\n\t\t\t\t\t\t\t\t\tlabel: __('Height'),\n\t\t\t\t\t\t\t\t\tvalue: height !== undefined ? height : '',\n\t\t\t\t\t\t\t\t\tplaceholder: imageHeight,\n\t\t\t\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\t\t\t\tonChange: _this5.updateHeight\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tButtonGroup,\n\t\t\t\t\t\t\t\t\t{ \"aria-label\": __('Image Size') },\n\t\t\t\t\t\t\t\t\t[25, 50, 75, 100].map(function (scale) {\n\t\t\t\t\t\t\t\t\t\tvar scaledWidth = Math.round(imageWidth * (scale / 100));\n\t\t\t\t\t\t\t\t\t\tvar scaledHeight = Math.round(imageHeight * (scale / 100));\n\n\t\t\t\t\t\t\t\t\t\tvar isCurrent = width === scaledWidth && height === scaledHeight;\n\n\t\t\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\tButton,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tkey: scale,\n\t\t\t\t\t\t\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\t\t\t\t\t\t\tisPrimary: isCurrent,\n\t\t\t\t\t\t\t\t\t\t\t\t\"aria-pressed\": isCurrent,\n\t\t\t\t\t\t\t\t\t\t\t\tonClick: _this5.updateDimensions(scaledWidth, scaledHeight)\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\t\t\t\t\t\"%\"\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tButton,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\t\t\t\t\tonClick: _this5.updateDimensions()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t__('Reset')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Disable reason: Each block can be selected by clicking on it\n\t\t\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t\t\treturn wp.element.createElement(\n\t\t\t\tFragment,\n\t\t\t\tnull,\n\t\t\t\tcontrols,\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"figure\",\n\t\t\t\t\t{ className: classes },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2__image_size__[\"a\" /* default */],\n\t\t\t\t\t\t{ src: url, dirtynessTrigger: align },\n\t\t\t\t\t\tfunction (sizes) {\n\t\t\t\t\t\t\tvar imageWidthWithinContainer = sizes.imageWidthWithinContainer,\n\t\t\t\t\t\t\t imageHeightWithinContainer = sizes.imageHeightWithinContainer,\n\t\t\t\t\t\t\t imageWidth = sizes.imageWidth,\n\t\t\t\t\t\t\t imageHeight = sizes.imageHeight;\n\n\n\t\t\t\t\t\t\tvar filename = _this5.getFilename(url);\n\t\t\t\t\t\t\tvar defaultedAlt = void 0;\n\t\t\t\t\t\t\tif (alt) {\n\t\t\t\t\t\t\t\tdefaultedAlt = alt;\n\t\t\t\t\t\t\t} else if (filename) {\n\t\t\t\t\t\t\t\tdefaultedAlt = sprintf(__('This image has an empty alt attribute; its file name is %s'), filename);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultedAlt = __('This image has an empty alt attribute');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar img =\n\t\t\t\t\t\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t\t\t\t\t\t// should direct focus to block.\n\t\t\t\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t\"ta\",\n\t\t\t\t\t\t\t\t\t{ linkid: linkid, href: href },\n\t\t\t\t\t\t\t\t\twp.element.createElement(\"img\", { src: url, alt: defaultedAlt, onClick: _this5.onImageClick, onError: function onError() {\n\t\t\t\t\t\t\t\t\t\t\treturn _this5.onImageError(url);\n\t\t\t\t\t\t\t\t\t\t} })\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tisBlobURL(url) && wp.element.createElement(Spinner, null)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\t;\n\n\t\t\t\t\t\t\tif (!isResizable || !imageWidthWithinContainer) {\n\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\tgetInspectorControls(imageWidth, imageHeight),\n\t\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t\t\t{ style: { width: width, height: height } },\n\t\t\t\t\t\t\t\t\t\timg\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar currentWidth = width || imageWidthWithinContainer;\n\t\t\t\t\t\t\tvar currentHeight = height || imageHeightWithinContainer;\n\n\t\t\t\t\t\t\tvar ratio = imageWidth / imageHeight;\n\t\t\t\t\t\t\tvar minWidth = imageWidth < imageHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\t\t\t\t\t\tvar minHeight = imageHeight < imageWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t\t\t\t\t\t// With the current implementation of ResizableBox, an image needs an explicit pixel value for the max-width.\n\t\t\t\t\t\t\t// In absence of being able to set the content-width, this max-width is currently dictated by the vanilla editor style.\n\t\t\t\t\t\t\t// The following variable adds a buffer to this vanilla style, so 3rd party themes have some wiggleroom.\n\t\t\t\t\t\t\t// This does, in most cases, allow you to scale the image beyond the width of the main column, though not infinitely.\n\t\t\t\t\t\t\t// @todo It would be good to revisit this once a content-width variable becomes available.\n\t\t\t\t\t\t\tvar maxWidthBuffer = maxWidth * 2.5;\n\n\t\t\t\t\t\t\tvar showRightHandle = false;\n\t\t\t\t\t\t\tvar showLeftHandle = false;\n\n\t\t\t\t\t\t\t/* eslint-disable no-lonely-if */\n\t\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\t\t\t\t\t\tif (align === 'center') {\n\t\t\t\t\t\t\t\t// When the image is centered, show both handles.\n\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t} else if (isRTL) {\n\t\t\t\t\t\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t\t\t\t\t\t// Show the right handle and hide the left handle only when it is aligned left.\n\t\t\t\t\t\t\t\t// Otherwise always show the left handle.\n\t\t\t\t\t\t\t\tif (align === 'left') {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Show the left handle and hide the right handle only when the image is aligned right.\n\t\t\t\t\t\t\t\t// Otherwise always show the right handle.\n\t\t\t\t\t\t\t\tif (align === 'right') {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/* eslint-enable no-lonely-if */\n\n\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tgetInspectorControls(imageWidth, imageHeight),\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tResizableBox,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tsize: width && height ? {\n\t\t\t\t\t\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\t\t\t\t\t\theight: height\n\t\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\t\tminWidth: minWidth,\n\t\t\t\t\t\t\t\t\t\tmaxWidth: maxWidthBuffer,\n\t\t\t\t\t\t\t\t\t\tminHeight: minHeight,\n\t\t\t\t\t\t\t\t\t\tmaxHeight: maxWidthBuffer / ratio,\n\t\t\t\t\t\t\t\t\t\tlockAspectRatio: true,\n\t\t\t\t\t\t\t\t\t\tenable: {\n\t\t\t\t\t\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\t\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\t\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\t\t\t\t\t\tleft: showLeftHandle\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonResizeStart: function onResizeStart() {\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection(false);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonResizeStop: function onResizeStop(event, direction, elt, delta) {\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes({\n\t\t\t\t\t\t\t\t\t\t\t\twidth: parseInt(currentWidth + delta.width, 10),\n\t\t\t\t\t\t\t\t\t\t\t\theight: parseInt(currentHeight + delta.height, 10)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\timg\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t(!RichText.isEmpty(caption) || isSelected) && wp.element.createElement(RichText, {\n\t\t\t\t\t\ttagName: \"figcaption\",\n\t\t\t\t\t\tplaceholder: __('Write caption…'),\n\t\t\t\t\t\tvalue: caption,\n\t\t\t\t\t\tunstableOnFocus: this.onFocusCaption,\n\t\t\t\t\t\tonChange: function onChange(value) {\n\t\t\t\t\t\t\treturn setAttributes({ caption: value });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisSelected: this.state.captionFocused,\n\t\t\t\t\t\tinlineToolbar: true\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\t\t\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t\t}\n\t}]);\n\n\treturn ImageEdit;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (compose([withSelect(function (select, props) {\n\tvar _select = select('core'),\n\t getMedia = _select.getMedia;\n\n\tvar _select2 = select('core/editor'),\n\t getEditorSettings = _select2.getEditorSettings;\n\n\tvar id = props.attributes.id;\n\n\tvar _getEditorSettings = getEditorSettings(),\n\t maxWidth = _getEditorSettings.maxWidth,\n\t isRTL = _getEditorSettings.isRTL,\n\t imageSizes = _getEditorSettings.imageSizes;\n\n\treturn {\n\t\timage: id ? getMedia(id) : null,\n\t\tmaxWidth: maxWidth,\n\t\tisRTL: isRTL,\n\t\timageSizes: imageSizes\n\t};\n}), withViewportMatch({ isLargeViewport: 'medium' }), withNotices])(ImageEdit));\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return createUpgradedEmbedBlock; });\n/* unused harmony export isFromWordPress */\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar WORDPRESS_EMBED_BLOCK = 'core-embed/wordpress';\n\nvar _lodash = lodash,\n includes = _lodash.includes;\nvar renderToString = wp.element.renderToString;\nvar createBlock = wp.blocks.createBlock;\n\n/***\r\n * Creates a more suitable embed block based on the passed in props\r\n * and attributes generated from an embed block's preview.\r\n *\r\n * We require `attributesFromPreview` to be generated from the latest attributes\r\n * and preview, and because of the way the react lifecycle operates, we can't\r\n * guarantee that the attributes contained in the block's props are the latest\r\n * versions, so we require that these are generated separately.\r\n * See `getAttributesFromPreview` in the generated embed edit component.\r\n *\r\n * @param {Object} props The block's props.\r\n * @param {Object} attributesFromPreview Attributes generated from the block's most up to date preview.\r\n * @return {Object|undefined} A more suitable embed block if one exists.\r\n */\n\nvar createUpgradedEmbedBlock = function createUpgradedEmbedBlock(props, attributesFromPreview) {\n\tvar preview = props.preview,\n\t name = props.name;\n\tvar url = props.attributes.url;\n\n\n\tif (!url) {\n\t\treturn;\n\t}\n\n\tvar matchingBlock = findBlock(url);\n\n\t// WordPress blocks can work on multiple sites, and so don't have patterns,\n\t// so if we're in a WordPress block, assume the user has chosen it for a WordPress URL.\n\tif (WORDPRESS_EMBED_BLOCK !== name && DEFAULT_EMBED_BLOCK !== matchingBlock) {\n\t\t// At this point, we have discovered a more suitable block for this url, so transform it.\n\t\tif (name !== matchingBlock) {\n\t\t\treturn createBlock(matchingBlock, { url: url });\n\t\t}\n\t}\n\n\tif (preview) {\n\t\tvar html = preview.html;\n\n\t\t// We can't match the URL for WordPress embeds, we have to check the HTML instead.\n\n\t\tif (isFromWordPress(html)) {\n\t\t\t// If this is not the WordPress embed block, transform it into one.\n\t\t\tif (WORDPRESS_EMBED_BLOCK !== name) {\n\t\t\t\treturn createBlock(WORDPRESS_EMBED_BLOCK, _extends({\n\t\t\t\t\turl: url\n\t\t\t\t}, attributesFromPreview));\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar isFromWordPress = function isFromWordPress(html) {\n\treturn includes(html, 'class=\"wp-embedded-content\" data-secret');\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar _lodash = lodash,\n noop = _lodash.noop;\nvar withGlobalEvents = wp.compose.withGlobalEvents;\nvar Component = wp.element.Component;\n\nvar ImageSize = function (_Component) {\n\t_inherits(ImageSize, _Component);\n\n\tfunction ImageSize() {\n\t\t_classCallCheck(this, ImageSize);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ImageSize.__proto__ || Object.getPrototypeOf(ImageSize)).apply(this, arguments));\n\n\t\t_this.state = {\n\t\t\twidth: undefined,\n\t\t\theight: undefined\n\t\t};\n\t\t_this.bindContainer = _this.bindContainer.bind(_this);\n\t\t_this.calculateSize = _this.calculateSize.bind(_this);\n\t\treturn _this;\n\t}\n\n\t_createClass(ImageSize, [{\n\t\tkey: 'bindContainer',\n\t\tvalue: function bindContainer(ref) {\n\t\t\tthis.container = ref;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(prevProps) {\n\t\t\tif (this.props.src !== prevProps.src) {\n\t\t\t\tthis.setState({\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined\n\t\t\t\t});\n\t\t\t\tthis.fetchImageSize();\n\t\t\t}\n\n\t\t\tif (this.props.dirtynessTrigger !== prevProps.dirtynessTrigger) {\n\t\t\t\tthis.calculateSize();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\t\t\tthis.fetchImageSize();\n\t\t}\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tif (this.image) {\n\t\t\t\tthis.image.onload = noop;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'fetchImageSize',\n\t\tvalue: function fetchImageSize() {\n\t\t\tthis.image = new window.Image();\n\t\t\tthis.image.onload = this.calculateSize;\n\t\t\tthis.image.src = this.props.src;\n\t\t}\n\t}, {\n\t\tkey: 'calculateSize',\n\t\tvalue: function calculateSize() {\n\t\t\tvar maxWidth = this.container.clientWidth;\n\t\t\tvar exceedMaxWidth = this.image.width > maxWidth;\n\t\t\tvar ratio = this.image.height / this.image.width;\n\t\t\tvar width = exceedMaxWidth ? maxWidth : this.image.width;\n\t\t\tvar height = exceedMaxWidth ? maxWidth * ratio : this.image.height;\n\t\t\tthis.setState({ width: width, height: height });\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar sizes = {\n\t\t\t\timageWidth: this.image && this.image.width,\n\t\t\t\timageHeight: this.image && this.image.height,\n\t\t\t\tcontainerWidth: this.container && this.container.clientWidth,\n\t\t\t\tcontainerHeight: this.container && this.container.clientHeight,\n\t\t\t\timageWidthWithinContainer: this.state.width,\n\t\t\t\timageHeightWithinContainer: this.state.height\n\t\t\t};\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ ref: this.bindContainer },\n\t\t\t\tthis.props.children(sizes)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ImageSize;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withGlobalEvents({\n\tresize: 'calculateSize'\n})(ImageSize));\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$components = wp.components,\n Spinner = _wp$components.Spinner,\n withSpokenMessages = _wp$components.withSpokenMessages,\n Popover = _wp$components.Popover,\n TextControl = _wp$components.TextControl;\nvar withInstanceId = wp.compose.withInstanceId;\n\nvar ThirstyURLInput = function (_Component) {\n\t_inherits(ThirstyURLInput, _Component);\n\n\t/**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 \r\n */\n\tfunction ThirstyURLInput(_ref) {\n\t\tvar autocompleteRef = _ref.autocompleteRef;\n\n\t\t_classCallCheck(this, ThirstyURLInput);\n\n\t\t// this.onChange = this.onChange.bind( this );\n\t\t// this.onKeyDown = this.onKeyDown.bind( this );\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLInput.__proto__ || Object.getPrototypeOf(ThirstyURLInput)).apply(this, arguments));\n\n\t\t_this.autocompleteRef = autocompleteRef || createRef();\n\t\t_this.inputRef = createRef();\n\t\t_this.searchAffiliateLinks = _this.searchAffiliateLinks.bind(_this);\n\t\t// this.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\n\n\t\t_this.suggestionNodes = [];\n\n\t\t_this.state = {\n\t\t\tposts: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\r\n * Component did update method.\r\n * \r\n * @since 3.6\r\n */\n\n\n\t_createClass(ThirstyURLInput, [{\n\t\tkey: \"componentDidUpdate\",\n\t\tvalue: function componentDidUpdate() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t showSuggestions = _state.showSuggestions,\n\t\t\t selectedSuggestion = _state.selectedSuggestion;\n\t\t\t// only have to worry about scrolling selected suggestion into view\n\t\t\t// when already expanded\n\n\t\t\tif (showSuggestions && selectedSuggestion !== null && !this.scrollingIntoView) {\n\t\t\t\tthis.scrollingIntoView = true;\n\t\t\t\tscrollIntoView(this.suggestionNodes[selectedSuggestion], this.autocompleteRef.current, {\n\t\t\t\t\tonlyScrollIfNeeded: true\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this2.scrollingIntoView = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * Component unmount method.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: \"componentWillUnmount\",\n\t\tvalue: function componentWillUnmount() {\n\t\t\tdelete this.suggestionsRequest;\n\t\t}\n\n\t\t/**\r\n * Bind suggestion to node.\r\n * \r\n * @param {*} index \r\n */\n\n\t}, {\n\t\tkey: \"bindSuggestionNode\",\n\t\tvalue: function bindSuggestionNode(index) {\n\t\t\tvar _this3 = this;\n\n\t\t\treturn function (ref) {\n\t\t\t\t_this3.suggestionNodes[index] = ref;\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"searchAffiliateLinks\",\n\t\tvalue: function searchAffiliateLinks(value) {\n\t\t\tvar _this4 = this;\n\n\t\t\t// Show the suggestions after typing at least 2 characters=\n\t\t\tif (value.length < 2) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tshowSuggestions: false,\n\t\t\t\t\tselectedSuggestion: null,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.setState({\n\t\t\t\tshowSuggestions: true,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: true\n\t\t\t});\n\n\t\t\tvar formData = new FormData();\n\t\t\tformData.append(\"action\", \"search_affiliate_links_query\");\n\t\t\tformData.append(\"keyword\", value);\n\t\t\tformData.append(\"paged\", 1);\n\t\t\tformData.append(\"gutenberg\", true);\n\t\t\tformData.append(\"with_images\", true);\n\n\t\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\n\t\t\t// to filter results with category value. This is to prepare next update to add category filter.\n\t\t\tvar request = fetch(ajaxurl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: formData\n\t\t\t});\n\n\t\t\trequest.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t}).then(function (response) {\n\n\t\t\t\tif (!response.affiliate_links) return;\n\n\t\t\t\tvar posts = response.affiliate_links;\n\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif (_this4.suggestionsRequest !== request) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this4.setState({\n\t\t\t\t\tposts: posts,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\tif (!!posts.length) {\n\t\t\t\t\t_this4.props.debouncedSpeak(sprintf(_n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', posts.length), posts.length), 'assertive');\n\t\t\t\t} else {\n\t\t\t\t\t_this4.props.debouncedSpeak(__('No results.'), 'assertive');\n\t\t\t\t}\n\t\t\t}).catch(function () {\n\t\t\t\tif (_this4.suggestionsRequest === request) {\n\t\t\t\t\t_this4.setState({\n\t\t\t\t\t\tloading: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.suggestionsRequest = request;\n\t\t}\n\n\t\t/**\r\n * Set state when an affiliate link is selected.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} post \r\n */\n\n\t}, {\n\t\tkey: \"selectLink\",\n\t\tvalue: function selectLink(post) {\n\t\t\t// this.props.onChange( post.link, post );\n\t\t\tthis.setState({\n\t\t\t\tselectedSuggestion: post,\n\t\t\t\tshowSuggestions: false\n\t\t\t});\n\n\t\t\tthis.props.updateImageSelection(post.images, post);\n\t\t}\n\n\t\t/**\r\n * Callback handler for when affiliate link is selected.\r\n * \r\n * @param {*} post \r\n */\n\n\t}, {\n\t\tkey: \"handleOnClick\",\n\t\tvalue: function handleOnClick(post) {\n\t\t\tthis.selectLink(post);\n\t\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\t\t// this.inputRef.current.focus();\n\t\t}\n\t}, {\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t _props$value = _props.value,\n\t\t\t value = _props$value === undefined ? '' : _props$value,\n\t\t\t _props$autoFocus = _props.autoFocus,\n\t\t\t autoFocus = _props$autoFocus === undefined ? true : _props$autoFocus,\n\t\t\t instanceId = _props.instanceId;\n\t\t\tvar _state2 = this.state,\n\t\t\t showSuggestions = _state2.showSuggestions,\n\t\t\t posts = _state2.posts,\n\t\t\t selectedSuggestion = _state2.selectedSuggestion,\n\t\t\t loading = _state2.loading;\n\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t\"div\",\n\t\t\t\t{ \"class\": \"edit-search-affiliate-links\" },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"form\",\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: \"editor-format-toolbar__link-container-content ta-link-search-popover\",\n\t\t\t\t\t\tonSubmit: this.displayAffiliateImages\n\t\t\t\t\t},\n\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tclassName: \"ta-search-affiliate-links\",\n\t\t\t\t\t\tplaceholder: __(\"Type to search affiliate links\"),\n\t\t\t\t\t\tonChange: this.searchAffiliateLinks,\n\t\t\t\t\t\tautocomplete: \"off\"\n\t\t\t\t\t}),\n\t\t\t\t\tloading && wp.element.createElement(Spinner, null),\n\t\t\t\t\tshowSuggestions && !!posts.length && wp.element.createElement(\n\t\t\t\t\t\tPopover,\n\t\t\t\t\t\t{ position: \"bottom\", focusOnMount: false },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ \"class\": \"affilate-links-suggestions\" },\n\t\t\t\t\t\t\tposts.map(function (post, index) {\n\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\"button\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkey: post.id,\n\t\t\t\t\t\t\t\t\t\trole: \"option\",\n\t\t\t\t\t\t\t\t\t\ttabIndex: \"-1\",\n\t\t\t\t\t\t\t\t\t\tid: \"editor-url-input-suggestion-\" + instanceId + \"-\" + index,\n\t\t\t\t\t\t\t\t\t\tref: _this5.bindSuggestionNode(index),\n\t\t\t\t\t\t\t\t\t\tclassName: __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\t\treturn _this5.handleOnClick(post);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"aria-selected\": index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpost.title || __('(no title)')\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ThirstyURLInput;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(withInstanceId(ThirstyURLInput)));\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = registerFormats;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ta_link__ = __webpack_require__(9);\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\nvar registerFormatType = wp.richText.registerFormatType;\n\n/**\r\n * Register custom formats.\r\n * \r\n * @since 3.6\r\n */\n\nfunction registerFormats() {\n\n [__WEBPACK_IMPORTED_MODULE_0__ta_link__[\"a\" /* taLink */]].forEach(function (_ref) {\n var name = _ref.name,\n settings = _objectWithoutProperties(_ref, [\"name\"]);\n\n return registerFormatType(name, settings);\n });\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return taLink; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__inline__ = __webpack_require__(10);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n Fragment = _wp$element.Fragment;\nvar withSpokenMessages = wp.components.withSpokenMessages;\nvar _wp$richText = wp.richText,\n getTextContent = _wp$richText.getTextContent,\n applyFormat = _wp$richText.applyFormat,\n removeFormat = _wp$richText.removeFormat,\n slice = _wp$richText.slice;\nvar isURL = wp.url.isURL;\nvar _wp$editor = wp.editor,\n RichTextToolbarButton = _wp$editor.RichTextToolbarButton,\n RichTextShortcut = _wp$editor.RichTextShortcut;\nvar _wp$components = wp.components,\n Path = _wp$components.Path,\n SVG = _wp$components.SVG;\n\n\nvar name = \"ta/link\";\n\n/**\r\n * Custom Affiliate link format. When applied will wrap selected text with <ta href=\"\" linkid=\"\"></ta> custom element.\r\n * Custom element is implemented here as we are not allowed to use <a> tag due to Gutenberg limitations.\r\n * Element is converted to normal <a> tag on frontend via PHP script filtered on 'the_content'.\r\n * \r\n * @since 3.6\r\n */\nvar taLink = {\n\tname: name,\n\ttitle: __(\"Affiliate Link\"),\n\ttagName: \"ta\",\n\tclassName: null,\n\tattributes: {\n\t\turl: \"href\",\n\t\ttarget: \"target\"\n\t},\n\tedit: withSpokenMessages(function (_Component) {\n\t\t_inherits(LinkEdit, _Component);\n\n\t\t/**\r\n * Component constructor.\r\n * \r\n * @since 3.6\r\n */\n\t\tfunction LinkEdit() {\n\t\t\t_classCallCheck(this, LinkEdit);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (LinkEdit.__proto__ || Object.getPrototypeOf(LinkEdit)).apply(this, arguments));\n\n\t\t\t_this.addLink = _this.addLink.bind(_this);\n\t\t\t_this.stopAddingLink = _this.stopAddingLink.bind(_this);\n\t\t\t_this.onRemoveFormat = _this.onRemoveFormat.bind(_this);\n\t\t\t_this.state = {\n\t\t\t\taddingLink: false\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\r\n * Callback to set state to adding link status.\r\n * \r\n * @since 3.6\r\n */\n\n\n\t\t_createClass(LinkEdit, [{\n\t\t\tkey: \"addLink\",\n\t\t\tvalue: function addLink() {\n\t\t\t\tvar _props = this.props,\n\t\t\t\t value = _props.value,\n\t\t\t\t onChange = _props.onChange;\n\n\t\t\t\tvar text = getTextContent(slice(value));\n\n\t\t\t\tif (text && isURL(text)) {\n\t\t\t\t\tonChange(applyFormat(value, { type: name, attributes: { url: text } }));\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState({ addingLink: true });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\r\n * Callback to set state to stop adding link status.\r\n * \r\n * @since 3.6\r\n */\n\n\t\t}, {\n\t\t\tkey: \"stopAddingLink\",\n\t\t\tvalue: function stopAddingLink() {\n\t\t\t\tthis.setState({ addingLink: false });\n\t\t\t}\n\n\t\t\t/**\r\n * Remove format event callback.\r\n * \r\n * @since 3.6\r\n */\n\n\t\t}, {\n\t\t\tkey: \"onRemoveFormat\",\n\t\t\tvalue: function onRemoveFormat() {\n\t\t\t\tvar _props2 = this.props,\n\t\t\t\t value = _props2.value,\n\t\t\t\t onChange = _props2.onChange,\n\t\t\t\t speak = _props2.speak;\n\n\n\t\t\t\tonChange(removeFormat(value, name));\n\t\t\t\tspeak(__(\"Affiliate Link removed.\"), \"assertive\");\n\t\t\t}\n\n\t\t\t/**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\n\n\t\t}, {\n\t\t\tkey: \"render\",\n\t\t\tvalue: function render() {\n\t\t\t\tvar _props3 = this.props,\n\t\t\t\t isActive = _props3.isActive,\n\t\t\t\t activeAttributes = _props3.activeAttributes,\n\t\t\t\t value = _props3.value,\n\t\t\t\t onChange = _props3.onChange;\n\n\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"access\",\n\t\t\t\t\t\tcharacter: \"s\",\n\t\t\t\t\t\tonUse: this.onRemoveFormat\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"primary\",\n\t\t\t\t\t\tcharacter: \"l\",\n\t\t\t\t\t\tonUse: this.addLink\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"primaryShift\",\n\t\t\t\t\t\tcharacter: \"l\",\n\t\t\t\t\t\tonUse: this.onRemoveFormat\n\t\t\t\t\t}),\n\t\t\t\t\tisActive && wp.element.createElement(RichTextToolbarButton, {\n\t\t\t\t\t\ticon: \"editor-unlink\",\n\t\t\t\t\t\ttitle: __('Remove Affiliate Link'),\n\t\t\t\t\t\tclassName: \"ta-unlink-button\",\n\t\t\t\t\t\tonClick: this.onRemoveFormat,\n\t\t\t\t\t\tisActive: isActive,\n\t\t\t\t\t\tshortcutType: \"primaryShift\",\n\t\t\t\t\t\tshortcutCharacter: \"l\"\n\t\t\t\t\t}),\n\t\t\t\t\t!isActive && wp.element.createElement(RichTextToolbarButton, {\n\t\t\t\t\t\ticon: wp.element.createElement(\n\t\t\t\t\t\t\tSVG,\n\t\t\t\t\t\t\t{ xmlns: \"http://www.w3.org/2000/svg\", width: \"16.688\", height: \"9.875\", viewBox: \"0 0 16.688 9.875\" },\n\t\t\t\t\t\t\twp.element.createElement(Path, { id: \"TA.svg\", fill: \"black\", \"class\": \"cls-1\", d: \"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z\", transform: \"translate(-1.188 -5.25)\" })\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttitle: __('Affiliate Link'),\n\t\t\t\t\t\tclassName: \"ta-link-button\",\n\t\t\t\t\t\tonClick: this.addLink,\n\t\t\t\t\t\tshortcutType: \"primary\",\n\t\t\t\t\t\tshortcutCharacter: \"l\"\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_0__inline__[\"a\" /* default */], {\n\t\t\t\t\t\taddingLink: this.state.addingLink,\n\t\t\t\t\t\tstopAddingLink: this.stopAddingLink,\n\t\t\t\t\t\tisActive: isActive,\n\t\t\t\t\t\tactiveAttributes: activeAttributes,\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tonChange: onChange\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}]);\n\n\t\treturn LinkEdit;\n\t}(Component))\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__positioned_at_selection__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__url_popover__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__url_input__ = __webpack_require__(14);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\n\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$components = wp.components,\n ExternalLink = _wp$components.ExternalLink,\n ToggleControl = _wp$components.ToggleControl,\n IconButton = _wp$components.IconButton,\n withSpokenMessages = _wp$components.withSpokenMessages;\nvar _wp$keycodes = wp.keycodes,\n LEFT = _wp$keycodes.LEFT,\n RIGHT = _wp$keycodes.RIGHT,\n UP = _wp$keycodes.UP,\n DOWN = _wp$keycodes.DOWN,\n BACKSPACE = _wp$keycodes.BACKSPACE,\n ENTER = _wp$keycodes.ENTER;\nvar _wp$url = wp.url,\n prependHTTP = _wp$url.prependHTTP,\n safeDecodeURI = _wp$url.safeDecodeURI,\n filterURLForDisplay = _wp$url.filterURLForDisplay;\nvar _wp$richText = wp.richText,\n create = _wp$richText.create,\n insert = _wp$richText.insert,\n isCollapsed = _wp$richText.isCollapsed,\n applyFormat = _wp$richText.applyFormat,\n getTextContent = _wp$richText.getTextContent,\n slice = _wp$richText.slice;\n\n\nvar stopKeyPropagation = function stopKeyPropagation(event) {\n\treturn event.stopPropagation();\n};\n\n/**\r\n * Generates the format object that will be applied to the link text.\r\n * \r\n * @since 3.6\r\n *\r\n * @param {string} url The href of the link.\r\n * @param {boolean} linkid Affiliate link ID.\r\n * @param {Object} text The text that is being hyperlinked.\r\n *\r\n * @return {Object} The final format object.\r\n */\nfunction createLinkFormat(_ref) {\n\tvar url = _ref.url,\n\t linkid = _ref.linkid,\n\t text = _ref.text;\n\n\tvar format = {\n\t\ttype: \"ta/link\",\n\t\tattributes: {\n\t\t\turl: url,\n\t\t\tlinkid: linkid.toString()\n\t\t}\n\t};\n\n\treturn format;\n}\n\n/**\r\n * Check if input is being show.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {Object} props Component props.\r\n * @param {Object} state Component state.\r\n */\nfunction isShowingInput(props, state) {\n\treturn props.addingLink || state.editLink;\n}\n\n/**\r\n * Affiliate Link editor JSX element.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {Object} param0 Component props (destructred).\r\n */\nvar LinkEditor = function LinkEditor(_ref2) {\n\tvar value = _ref2.value,\n\t onChangeInputValue = _ref2.onChangeInputValue,\n\t onKeyDown = _ref2.onKeyDown,\n\t submitLink = _ref2.submitLink,\n\t invalidLink = _ref2.invalidLink,\n\t resetInvalidLink = _ref2.resetInvalidLink,\n\t autocompleteRef = _ref2.autocompleteRef;\n\treturn (\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t\twp.element.createElement(\n\t\t\t'form',\n\t\t\t{\n\t\t\t\tclassName: 'editor-format-toolbar__link-container-content ta-link-search-popover',\n\t\t\t\tonKeyPress: stopKeyPropagation,\n\t\t\t\tonKeyDown: onKeyDown,\n\t\t\t\tonSubmit: submitLink\n\t\t\t},\n\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_4__url_input__[\"a\" /* default */], {\n\t\t\t\tvalue: value,\n\t\t\t\tonChange: onChangeInputValue,\n\t\t\t\tautocompleteRef: autocompleteRef,\n\t\t\t\tinvalidLink: invalidLink,\n\t\t\t\tresetInvalidLink: resetInvalidLink\n\t\t\t}),\n\t\t\twp.element.createElement(IconButton, { icon: 'editor-break', label: __('Apply'), type: 'submit' })\n\t\t)\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n\n\t);\n};\n\n/**\r\n * Affiliate link url viewer JSX element.\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\nvar LinkViewerUrl = function LinkViewerUrl(_ref3) {\n\tvar url = _ref3.url;\n\n\tvar prependedURL = prependHTTP(url);\n\tvar linkClassName = __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-format-toolbar__link-container-value', {\n\t\t'has-invalid-link': !Object(__WEBPACK_IMPORTED_MODULE_2__utils__[\"a\" /* isValidHref */])(prependedURL)\n\t});\n\n\tif (!url) {\n\t\treturn wp.element.createElement('span', { className: linkClassName });\n\t}\n\n\treturn wp.element.createElement(\n\t\tExternalLink,\n\t\t{\n\t\t\tclassName: linkClassName,\n\t\t\thref: url\n\t\t},\n\t\tfilterURLForDisplay(safeDecodeURI(url))\n\t);\n};\n\n/**\r\n * Affiliate link viewer JSX element.\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\nvar LinkViewer = function LinkViewer(_ref4) {\n\tvar url = _ref4.url,\n\t editLink = _ref4.editLink;\n\n\treturn (\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\t\twp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'editor-format-toolbar__link-container-content',\n\t\t\t\tonKeyPress: stopKeyPropagation\n\t\t\t},\n\t\t\twp.element.createElement(LinkViewerUrl, { url: url }),\n\t\t\twp.element.createElement(IconButton, { icon: 'edit', label: __('Edit'), onClick: editLink })\n\t\t)\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions */\n\n\t);\n};\n\n/**\r\n * Inline affiliate link UI Component.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\n\nvar InlineAffiliateLinkUI = function (_Component) {\n\t_inherits(InlineAffiliateLinkUI, _Component);\n\n\tfunction InlineAffiliateLinkUI() {\n\t\t_classCallCheck(this, InlineAffiliateLinkUI);\n\n\t\tvar _this = _possibleConstructorReturn(this, (InlineAffiliateLinkUI.__proto__ || Object.getPrototypeOf(InlineAffiliateLinkUI)).apply(this, arguments));\n\n\t\t_this.editLink = _this.editLink.bind(_this);\n\t\t_this.submitLink = _this.submitLink.bind(_this);\n\t\t_this.onKeyDown = _this.onKeyDown.bind(_this);\n\t\t_this.onChangeInputValue = _this.onChangeInputValue.bind(_this);\n\t\t_this.onClickOutside = _this.onClickOutside.bind(_this);\n\t\t_this.resetState = _this.resetState.bind(_this);\n\t\t_this.autocompleteRef = createRef();\n\t\t_this.resetInvalidLink = _this.resetInvalidLink.bind(_this);\n\n\t\t_this.state = {\n\t\t\tinputValue: '',\n\t\t\tlinkid: 0,\n\t\t\tpost: null,\n\t\t\tinvalidLink: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\r\n * Stop the key event from propagating up to ObserveTyping.startTypingInTextField.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {Object} event Event object.\r\n */\n\n\n\t_createClass(InlineAffiliateLinkUI, [{\n\t\tkey: 'onKeyDown',\n\t\tvalue: function onKeyDown(event) {\n\t\t\tif ([LEFT, DOWN, RIGHT, UP, BACKSPACE, ENTER].indexOf(event.keyCode) > -1) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * Callback to set state when input value is changed.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} inputValue \r\n * @param {*} post \r\n */\n\n\t}, {\n\t\tkey: 'onChangeInputValue',\n\t\tvalue: function onChangeInputValue(inputValue) {\n\t\t\tvar post = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\t\tvar linkid = post ? post.id : 0;\n\t\t\tthis.setState({ inputValue: inputValue, linkid: linkid, post: post });\n\t\t}\n\n\t\t/**\r\n * Callback to set state when edit affiliate link (already inserted) is triggered.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\n\n\t}, {\n\t\tkey: 'editLink',\n\t\tvalue: function editLink(event) {\n\t\t\tthis.setState({ editLink: true });\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\t/**\r\n * Callback to apply the affiliate link format to the selected text or position in the active block.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\n\n\t}, {\n\t\tkey: 'submitLink',\n\t\tvalue: function submitLink(event) {\n\t\t\tvar _props = this.props,\n\t\t\t isActive = _props.isActive,\n\t\t\t value = _props.value,\n\t\t\t onChange = _props.onChange,\n\t\t\t speak = _props.speak;\n\t\t\tvar _state = this.state,\n\t\t\t inputValue = _state.inputValue,\n\t\t\t linkid = _state.linkid,\n\t\t\t post = _state.post;\n\n\t\t\tvar url = prependHTTP(inputValue);\n\t\t\tvar selectedText = getTextContent(slice(value));\n\t\t\tvar format = createLinkFormat({\n\t\t\t\turl: url,\n\t\t\t\tlinkid: linkid,\n\t\t\t\ttext: selectedText\n\t\t\t});\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif (!linkid || !post) {\n\t\t\t\tthis.setState({ invalidLink: true });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isCollapsed(value) && !isActive) {\n\t\t\t\tvar toInsert = applyFormat(create({ text: post.title }), format, 0, url.length);\n\t\t\t\tonChange(insert(value, toInsert));\n\t\t\t} else {\n\t\t\t\tonChange(applyFormat(value, format));\n\t\t\t}\n\n\t\t\tthis.resetState();\n\n\t\t\tif (!Object(__WEBPACK_IMPORTED_MODULE_2__utils__[\"a\" /* isValidHref */])(url)) {\n\t\t\t\tspeak(__('Warning: the link has been inserted but may have errors. Please test it.'), 'assertive');\n\t\t\t} else if (isActive) {\n\t\t\t\tspeak(__('Link edited.'), 'assertive');\n\t\t\t} else {\n\t\t\t\tspeak(__('Link inserted'), 'assertive');\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * Callback to run when users clicks outside the popover UI.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\n\n\t}, {\n\t\tkey: 'onClickOutside',\n\t\tvalue: function onClickOutside(event) {\n\t\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\n\t\t\t// so onClickOutside fails to detect that a click on a suggestion occured in the\n\t\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\n\t\t\t// return to avoid the popover being closed.\n\t\t\tvar autocompleteElement = this.autocompleteRef.current;\n\t\t\tif (autocompleteElement && autocompleteElement.contains(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.resetState();\n\t\t}\n\n\t\t/**\r\n * Reset state callback.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'resetState',\n\t\tvalue: function resetState() {\n\t\t\tthis.props.stopAddingLink();\n\t\t\tthis.setState({ inputValue: '', editLink: false });\n\t\t\tthis.resetInvalidLink();\n\t\t}\n\n\t\t/**\r\n * Reset invalid link state callback. Separated as we need to run this independently from resetState() callback.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'resetInvalidLink',\n\t\tvalue: function resetInvalidLink() {\n\t\t\tthis.setState({ invalidLink: false });\n\t\t}\n\n\t\t/**\r\n * Component render method.\r\n *\r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props2 = this.props,\n\t\t\t isActive = _props2.isActive,\n\t\t\t _props2$activeAttribu = _props2.activeAttributes,\n\t\t\t url = _props2$activeAttribu.url,\n\t\t\t linkid = _props2$activeAttribu.linkid,\n\t\t\t addingLink = _props2.addingLink,\n\t\t\t value = _props2.value,\n\t\t\t onChange = _props2.onChange;\n\n\n\t\t\tif (!isActive && !addingLink) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar _state2 = this.state,\n\t\t\t inputValue = _state2.inputValue,\n\t\t\t invalidLink = _state2.invalidLink;\n\n\t\t\tvar showInput = isShowingInput(this.props, this.state);\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_1__positioned_at_selection__[\"a\" /* default */],\n\t\t\t\t{\n\t\t\t\t\tkey: '' + value.start + value.end /* Used to force rerender on selection change */\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_3__url_popover__[\"a\" /* default */],\n\t\t\t\t\t{\n\t\t\t\t\t\tonClickOutside: this.onClickOutside,\n\t\t\t\t\t\tonClose: this.resetState,\n\t\t\t\t\t\tfocusOnMount: showInput ? 'firstElement' : false,\n\t\t\t\t\t\tinvalidLink: invalidLink\n\t\t\t\t\t},\n\t\t\t\t\tshowInput ? wp.element.createElement(LinkEditor, {\n\t\t\t\t\t\tvalue: inputValue,\n\t\t\t\t\t\tonChangeInputValue: this.onChangeInputValue,\n\t\t\t\t\t\tonKeyDown: this.onKeyDown,\n\t\t\t\t\t\tsubmitLink: this.submitLink,\n\t\t\t\t\t\tautocompleteRef: this.autocompleteRef,\n\t\t\t\t\t\tupdateLinkId: this.updateLinkId,\n\t\t\t\t\t\tinvalidLink: invalidLink,\n\t\t\t\t\t\tresetInvalidLink: this.resetInvalidLink\n\t\t\t\t\t}) : wp.element.createElement(LinkViewer, {\n\t\t\t\t\t\turl: url,\n\t\t\t\t\t\teditLink: this.editLink\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn InlineAffiliateLinkUI;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(InlineAffiliateLinkUI));\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar Component = wp.element.Component;\nvar _wp$dom = wp.dom,\n getOffsetParent = _wp$dom.getOffsetParent,\n getRectangleFromRange = _wp$dom.getRectangleFromRange;\n\n/**\r\n * Returns a style object for applying as `position: absolute` for an element\r\n * relative to the bottom-center of the current selection. Includes `top` and\r\n * `left` style properties.\r\n * \r\n * @since 3.6\r\n *\r\n * @return {Object} Style object.\r\n */\n\nfunction getCurrentCaretPositionStyle() {\n\tvar selection = window.getSelection();\n\n\t// Unlikely, but in the case there is no selection, return empty styles so\n\t// as to avoid a thrown error by `Selection#getRangeAt` on invalid index.\n\tif (selection.rangeCount === 0) {\n\t\treturn {};\n\t}\n\n\t// Get position relative viewport.\n\tvar rect = getRectangleFromRange(selection.getRangeAt(0));\n\tvar top = rect.top + rect.height;\n\tvar left = rect.left + rect.width / 2;\n\n\t// Offset by positioned parent, if one exists.\n\tvar offsetParent = getOffsetParent(selection.anchorNode);\n\tif (offsetParent) {\n\t\tvar parentRect = offsetParent.getBoundingClientRect();\n\t\ttop -= parentRect.top;\n\t\tleft -= parentRect.left;\n\t}\n\n\treturn { top: top, left: left };\n}\n\n/**\r\n * Component which renders itself positioned under the current caret selection.\r\n * The position is calculated at the time of the component being mounted, so it\r\n * should only be mounted after the desired selection has been made.\r\n * \r\n * @since 3.6\r\n *\r\n * @type {WPComponent}\r\n */\n\nvar ThirstyPositionedAtSelection = function (_Component) {\n\t_inherits(ThirstyPositionedAtSelection, _Component);\n\n\t/**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n */\n\tfunction ThirstyPositionedAtSelection() {\n\t\t_classCallCheck(this, ThirstyPositionedAtSelection);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyPositionedAtSelection.__proto__ || Object.getPrototypeOf(ThirstyPositionedAtSelection)).apply(this, arguments));\n\n\t\t_this.state = {\n\t\t\tstyle: getCurrentCaretPositionStyle()\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\n\n\n\t_createClass(ThirstyPositionedAtSelection, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar children = this.props.children;\n\t\t\tvar style = this.state.style;\n\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t\"div\",\n\t\t\t\t{ className: \"editor-format-toolbar__selection-position\", style: style },\n\t\t\t\tchildren\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ThirstyPositionedAtSelection;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ThirstyPositionedAtSelection);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = isValidHref;\nvar _lodash = lodash,\n startsWith = _lodash.startsWith;\nvar _wp$url = wp.url,\n getProtocol = _wp$url.getProtocol,\n isValidProtocol = _wp$url.isValidProtocol,\n getAuthority = _wp$url.getAuthority,\n isValidAuthority = _wp$url.isValidAuthority,\n getPath = _wp$url.getPath,\n isValidPath = _wp$url.isValidPath,\n getQueryString = _wp$url.getQueryString,\n isValidQueryString = _wp$url.isValidQueryString,\n getFragment = _wp$url.getFragment,\n isValidFragment = _wp$url.isValidFragment;\n\n/**\r\n * Check for issues with the provided href.\r\n * \r\n * @since 3.6\r\n *\r\n * @param {string} href The href.\r\n * @return {boolean} Is the href invalid?\r\n */\n\nfunction isValidHref(href) {\n\tif (!href) {\n\t\treturn false;\n\t}\n\n\tvar trimmedHref = href.trim();\n\n\tif (!trimmedHref) {\n\t\treturn false;\n\t}\n\n\t// Does the href start with something that looks like a URL protocol?\n\tif (/^\\S+:/.test(trimmedHref)) {\n\t\tvar protocol = getProtocol(trimmedHref);\n\t\tif (!isValidProtocol(protocol)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Add some extra checks for http(s) URIs, since these are the most common use-case.\n\t\t// This ensures URIs with an http protocol have exactly two forward slashes following the protocol.\n\t\tif (startsWith(protocol, 'http') && !/^https?:\\/\\/[^\\/\\s]/i.test(trimmedHref)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar authority = getAuthority(trimmedHref);\n\t\tif (!isValidAuthority(authority)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar path = getPath(trimmedHref);\n\t\tif (path && !isValidPath(path)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar queryString = getQueryString(trimmedHref);\n\t\tif (queryString && !isValidQueryString(queryString)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar fragment = getFragment(trimmedHref);\n\t\tif (fragment && !isValidFragment(fragment)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Validate anchor links.\n\tif (startsWith(trimmedHref, '#') && !isValidFragment(trimmedHref)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar __ = wp.i18n.__;\nvar Component = wp.element.Component;\nvar _wp$components = wp.components,\n Popover = _wp$components.Popover,\n IconButton = _wp$components.IconButton;\n\n/**\r\n * Custom URL Popover component.\r\n * \r\n * @since 3.6\r\n */\n\nvar ThirstyURLPopover = function (_Component) {\n\t_inherits(ThirstyURLPopover, _Component);\n\n\t/**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n */\n\tfunction ThirstyURLPopover() {\n\t\t_classCallCheck(this, ThirstyURLPopover);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLPopover.__proto__ || Object.getPrototypeOf(ThirstyURLPopover)).apply(this, arguments));\n\n\t\t_this.toggleSettingsVisibility = _this.toggleSettingsVisibility.bind(_this);\n\n\t\t_this.state = {\n\t\t\tisSettingsExpanded: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\r\n * Component constructor.\r\n * \r\n * @since 3.6\r\n */\n\n\n\t_createClass(ThirstyURLPopover, [{\n\t\tkey: 'toggleSettingsVisibility',\n\t\tvalue: function toggleSettingsVisibility() {\n\t\t\tthis.setState({\n\t\t\t\tisSettingsExpanded: !this.state.isSettingsExpanded\n\t\t\t});\n\t\t}\n\n\t\t/**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t children = _props.children,\n\t\t\t renderSettings = _props.renderSettings,\n\t\t\t onClose = _props.onClose,\n\t\t\t onClickOutside = _props.onClickOutside,\n\t\t\t invalidLink = _props.invalidLink,\n\t\t\t _props$position = _props.position,\n\t\t\t position = _props$position === undefined ? 'bottom center' : _props$position,\n\t\t\t _props$focusOnMount = _props.focusOnMount,\n\t\t\t focusOnMount = _props$focusOnMount === undefined ? 'firstElement' : _props$focusOnMount;\n\t\t\tvar isSettingsExpanded = this.state.isSettingsExpanded;\n\n\n\t\t\tvar showSettings = !!renderSettings && isSettingsExpanded;\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\tPopover,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'ta-url-popover editor-url-popover',\n\t\t\t\t\tfocusOnMount: focusOnMount,\n\t\t\t\t\tposition: position,\n\t\t\t\t\tonClose: onClose,\n\t\t\t\t\tonClickOutside: onClickOutside\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'editor-url-popover__row' },\n\t\t\t\t\tchildren,\n\t\t\t\t\t!!renderSettings && wp.element.createElement(IconButton, {\n\t\t\t\t\t\tclassName: 'editor-url-popover__settings-toggle',\n\t\t\t\t\t\ticon: 'ellipsis',\n\t\t\t\t\t\tlabel: __('Link Settings'),\n\t\t\t\t\t\tonClick: this.toggleSettingsVisibility,\n\t\t\t\t\t\t'aria-expanded': isSettingsExpanded\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tshowSettings && wp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'editor-url-popover__row editor-url-popover__settings' },\n\t\t\t\t\trenderSettings()\n\t\t\t\t),\n\t\t\t\tinvalidLink && wp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ 'class': 'ta-invalid-link' },\n\t\t\t\t\t__('Invalid affiliate link')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ThirstyURLPopover;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ThirstyURLPopover);\n\n/***/ }),\n/* 14 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\n\nvar __ = wp.i18n.__;\nvar _lodash = lodash,\n throttle = _lodash.throttle;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$keycodes = wp.keycodes,\n UP = _wp$keycodes.UP,\n DOWN = _wp$keycodes.DOWN,\n ENTER = _wp$keycodes.ENTER,\n TAB = _wp$keycodes.TAB;\nvar _wp$components = wp.components,\n Spinner = _wp$components.Spinner,\n withSpokenMessages = _wp$components.withSpokenMessages,\n Popover = _wp$components.Popover;\nvar withInstanceId = wp.compose.withInstanceId;\n\n// Since URLInput is rendered in the context of other inputs, but should be\n// considered a separate modal node, prevent keyboard events from propagating\n// as being considered from the input.\n\nvar stopEventPropagation = function stopEventPropagation(event) {\n\treturn event.stopPropagation();\n};\n\n/**\r\n * Custom URL Input component.\r\n * \r\n * @since 3.6\r\n */\n\nvar ThirstyURLInput = function (_Component) {\n\t_inherits(ThirstyURLInput, _Component);\n\n\t/**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 \r\n */\n\tfunction ThirstyURLInput(_ref) {\n\t\tvar autocompleteRef = _ref.autocompleteRef;\n\n\t\t_classCallCheck(this, ThirstyURLInput);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLInput.__proto__ || Object.getPrototypeOf(ThirstyURLInput)).apply(this, arguments));\n\n\t\t_this.onChange = _this.onChange.bind(_this);\n\t\t_this.onKeyDown = _this.onKeyDown.bind(_this);\n\t\t_this.autocompleteRef = autocompleteRef || createRef();\n\t\t_this.inputRef = createRef();\n\t\t_this.updateSuggestions = throttle(_this.updateSuggestions.bind(_this), 200);\n\n\t\t_this.suggestionNodes = [];\n\n\t\t_this.state = {\n\t\t\tposts: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\r\n * Component did update method.\r\n * \r\n * @since 3.6\r\n */\n\n\n\t_createClass(ThirstyURLInput, [{\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t showSuggestions = _state.showSuggestions,\n\t\t\t selectedSuggestion = _state.selectedSuggestion;\n\t\t\t// only have to worry about scrolling selected suggestion into view\n\t\t\t// when already expanded\n\n\t\t\tif (showSuggestions && selectedSuggestion !== null && !this.scrollingIntoView) {\n\t\t\t\tthis.scrollingIntoView = true;\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default()(this.suggestionNodes[selectedSuggestion], this.autocompleteRef.current, {\n\t\t\t\t\tonlyScrollIfNeeded: true\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this2.scrollingIntoView = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * Component unmount method.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tdelete this.suggestionsRequest;\n\t\t}\n\n\t\t/**\r\n * Bind suggestion to node.\r\n * \r\n * @param {*} index \r\n */\n\n\t}, {\n\t\tkey: 'bindSuggestionNode',\n\t\tvalue: function bindSuggestionNode(index) {\n\t\t\tvar _this3 = this;\n\n\t\t\treturn function (ref) {\n\t\t\t\t_this3.suggestionNodes[index] = ref;\n\t\t\t};\n\t\t}\n\n\t\t/**\r\n * Callback to show suggestions based on value inputted on search field.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} value \r\n */\n\n\t}, {\n\t\tkey: 'updateSuggestions',\n\t\tvalue: function updateSuggestions(value) {\n\t\t\tvar _this4 = this;\n\n\t\t\t// Show the suggestions after typing at least 2 characters\n\t\t\t// and also for URLs\n\t\t\tif (value.length < 2 || /^https?:/.test(value)) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tshowSuggestions: false,\n\t\t\t\t\tselectedSuggestion: null,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.setState({\n\t\t\t\tshowSuggestions: true,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: true\n\t\t\t});\n\n\t\t\tvar formData = new FormData();\n\t\t\tformData.append(\"action\", \"search_affiliate_links_query\");\n\t\t\tformData.append(\"keyword\", value);\n\t\t\tformData.append(\"paged\", 1);\n\t\t\tformData.append(\"gutenberg\", true);\n\n\t\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\n\t\t\t// to filter results with category value. This is to prepare next update to add category filter.\n\t\t\tvar request = fetch(ajaxurl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: formData\n\t\t\t});\n\n\t\t\trequest.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t}).then(function (response) {\n\n\t\t\t\tif (!response.affiliate_links) return;\n\n\t\t\t\tvar posts = response.affiliate_links;\n\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif (_this4.suggestionsRequest !== request) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this4.setState({\n\t\t\t\t\tposts: posts,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\tif (!!posts.length) {\n\t\t\t\t\t_this4.props.debouncedSpeak(sprintf(_n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', posts.length), posts.length), 'assertive');\n\t\t\t\t} else {\n\t\t\t\t\t_this4.props.debouncedSpeak(__('No results.'), 'assertive');\n\t\t\t\t}\n\t\t\t}).catch(function () {\n\t\t\t\tif (_this4.suggestionsRequest === request) {\n\t\t\t\t\t_this4.setState({\n\t\t\t\t\t\tloading: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.suggestionsRequest = request;\n\t\t}\n\n\t\t/**\r\n * Search input value change event callback method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\n\n\t}, {\n\t\tkey: 'onChange',\n\t\tvalue: function onChange(event) {\n\t\t\tthis.props.resetInvalidLink();\n\t\t\tvar inputValue = event.target.value;\n\t\t\tthis.props.onChange(inputValue);\n\t\t\tthis.updateSuggestions(inputValue);\n\t\t}\n\n\t\t/**\r\n * Keydown event callback. Handles selecting result via keyboard.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\n\n\t}, {\n\t\tkey: 'onKeyDown',\n\t\tvalue: function onKeyDown(event) {\n\t\t\tvar _state2 = this.state,\n\t\t\t showSuggestions = _state2.showSuggestions,\n\t\t\t selectedSuggestion = _state2.selectedSuggestion,\n\t\t\t posts = _state2.posts,\n\t\t\t loading = _state2.loading;\n\t\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\n\t\t\tif (!showSuggestions || !posts.length || loading) {\n\t\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\t\tswitch (event.keyCode) {\n\t\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t\t// position.\n\t\t\t\t\tcase UP:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (0 !== event.target.selectionStart) {\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\t\t\tevent.target.setSelectionRange(0, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t\t// last position.\n\t\t\t\t\tcase DOWN:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (this.props.value.length !== event.target.selectionStart) {\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\t\t\tevent.target.setSelectionRange(this.props.value.length, this.props.value.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar post = this.state.posts[this.state.selectedSuggestion];\n\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase UP:\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar previousIndex = !selectedSuggestion ? posts.length - 1 : selectedSuggestion - 1;\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tselectedSuggestion: previousIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase DOWN:\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar nextIndex = selectedSuggestion === null || selectedSuggestion === posts.length - 1 ? 0 : selectedSuggestion + 1;\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tselectedSuggestion: nextIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase TAB:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.state.selectedSuggestion !== null) {\n\t\t\t\t\t\t\tthis.selectLink(post);\n\t\t\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\t\t\tthis.props.speak(__('Link selected'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase ENTER:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.state.selectedSuggestion !== null) {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tthis.selectLink(post);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\r\n * Set state when an affiliate link is selected.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} post \r\n */\n\n\t}, {\n\t\tkey: 'selectLink',\n\t\tvalue: function selectLink(post) {\n\t\t\tthis.props.onChange(post.link, post);\n\t\t\tthis.setState({\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tshowSuggestions: false\n\t\t\t});\n\t\t}\n\n\t\t/**\r\n * Callback handler for when affiliate link is selected.\r\n * \r\n * @param {*} post \r\n */\n\n\t}, {\n\t\tkey: 'handleOnClick',\n\t\tvalue: function handleOnClick(post) {\n\t\t\tthis.selectLink(post);\n\t\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\t\tthis.inputRef.current.focus();\n\t\t}\n\n\t\t/**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t _props$value = _props.value,\n\t\t\t value = _props$value === undefined ? '' : _props$value,\n\t\t\t _props$autoFocus = _props.autoFocus,\n\t\t\t autoFocus = _props$autoFocus === undefined ? true : _props$autoFocus,\n\t\t\t instanceId = _props.instanceId,\n\t\t\t invalidLink = _props.invalidLink;\n\t\t\tvar _state3 = this.state,\n\t\t\t showSuggestions = _state3.showSuggestions,\n\t\t\t posts = _state3.posts,\n\t\t\t selectedSuggestion = _state3.selectedSuggestion,\n\t\t\t loading = _state3.loading;\n\t\t\t/* eslint-disable jsx-a11y/no-autofocus */\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'editor-url-input' },\n\t\t\t\twp.element.createElement('input', {\n\t\t\t\t\tautoFocus: autoFocus,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\t'aria-label': __('URL'),\n\t\t\t\t\trequired: true,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tonChange: this.onChange,\n\t\t\t\t\tonInput: stopEventPropagation,\n\t\t\t\t\tplaceholder: __('Paste URL or type to search'),\n\t\t\t\t\tonKeyDown: this.onKeyDown,\n\t\t\t\t\trole: 'combobox',\n\t\t\t\t\t'aria-expanded': showSuggestions,\n\t\t\t\t\t'aria-autocomplete': 'list',\n\t\t\t\t\t'aria-owns': 'editor-url-input-suggestions-' + instanceId,\n\t\t\t\t\t'aria-activedescendant': selectedSuggestion !== null ? 'editor-url-input-suggestion-' + instanceId + '-' + selectedSuggestion : undefined,\n\t\t\t\t\tref: this.inputRef\n\t\t\t\t}),\n\t\t\t\tloading && wp.element.createElement(Spinner, null),\n\t\t\t\tshowSuggestions && !!posts.length && !invalidLink && wp.element.createElement(\n\t\t\t\t\tPopover,\n\t\t\t\t\t{ position: 'bottom', noArrow: true, focusOnMount: false },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'editor-url-input__suggestions',\n\t\t\t\t\t\t\tid: 'editor-url-input-suggestions-' + instanceId,\n\t\t\t\t\t\t\tref: this.autocompleteRef,\n\t\t\t\t\t\t\trole: 'listbox'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tposts.map(function (post, index) {\n\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t'button',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: post.id,\n\t\t\t\t\t\t\t\t\trole: 'option',\n\t\t\t\t\t\t\t\t\ttabIndex: '-1',\n\t\t\t\t\t\t\t\t\tid: 'editor-url-input-suggestion-' + instanceId + '-' + index,\n\t\t\t\t\t\t\t\t\tref: _this5.bindSuggestionNode(index),\n\t\t\t\t\t\t\t\t\tclassName: __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\treturn _this5.handleOnClick(post);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t'aria-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tpost.title || __('(no title)')\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t\t/* eslint-enable jsx-a11y/no-autofocus */\n\t\t}\n\t}]);\n\n\treturn ThirstyURLInput;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(withInstanceId(ThirstyURLInput)));\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = __webpack_require__(16);\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar util = __webpack_require__(17);\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {};\n // document 归一化到 window\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset = undefined;\n var ch = undefined;\n var cw = undefined;\n var containerScroll = undefined;\n var diffTop = undefined;\n var diffBottom = undefined;\n var win = undefined;\n var winScroll = undefined;\n var ww = undefined;\n var wh = undefined;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n };\n // elem 相对 container 可视视窗的距离\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n };\n // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nmodule.exports = scrollIntoView;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box = undefined;\n var x = undefined;\n var y = undefined;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n var method = 'scroll' + (top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX = undefined;\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name = undefined;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop = undefined;\n var j = undefined;\n var i = undefined;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = undefined;\n if (prop === 'border') {\n cssProp = prop + which[i] + 'Width';\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n domUtils['doc' + name] = function (refWin) {\n var d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement['scroll' + name],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body['scroll' + name], domUtils['viewport' + name](d));\n };\n\n domUtils['viewport' + name] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = 'client' + name;\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem, computedStyle);\n var cssBoxValue = 0;\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n }\n return cssBoxValue;\n }\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(elem) {\n var val = undefined;\n var args = arguments;\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils['outer' + first] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current = undefined;\n var key = undefined;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n css(elem, ret);\n}\n\nmodule.exports = _extends({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n var overflow = obj.overflow;\n if (overflow) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n w.scrollTop = v;\n }\n },\n\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// gutenberg-support.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c9935c87e3e022ad59ba","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/classnames/index.js\n// module id = 0\n// module chunks = 0","import registerBlocks from \"./blocks\";\r\nimport registerFormats from \"./formats\";\r\n\r\nimport \"./assets/styles/index.scss\";\r\n\r\nregisterBlocks();\r\nregisterFormats();\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","import * as taimage from \"./ta-image\";\r\n\r\nconst { registerBlockType } = wp.blocks;\r\n\r\n/**\r\n * Register gutenberg blocks.\r\n * \r\n * @since 3.6\r\n */\r\nexport default function registerBlocks() {\r\n\r\n [\r\n taimage\r\n ].forEach( ( block ) => {\r\n if ( ! block ) return;\r\n\r\n const { name , settings } = block;\r\n registerBlockType( name , settings );\r\n } );\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/index.js","import classnames from \"classnames\";\r\n\r\nconst { Fragment } = wp.element;\r\nconst { __ } = wp.i18n;\r\nconst { createBlock, getBlockAttributes, getPhrasingContentSchema } = wp.blocks;\r\nconst { RichText } = wp.editor;\r\nconst { Path , SVG } = wp.components;\r\n\r\nimport edit from \"./edit\";\r\n\r\nexport const name = 'ta/image';\r\n\r\nconst blockAttributes = {\r\n\turl: {\r\n\t\ttype: 'string',\r\n\t\tsource: 'attribute',\r\n\t\tselector: 'img',\r\n\t\tattribute: 'src',\r\n\t},\r\n\talt: {\r\n\t\ttype: 'string',\r\n\t\tsource: 'attribute',\r\n\t\tselector: 'img',\r\n\t\tattribute: 'alt',\r\n\t\tdefault: '',\r\n\t},\r\n\tcaption: {\r\n\t\ttype: 'string',\r\n\t\tsource: 'html',\r\n\t\tselector: 'figcaption',\r\n\t},\r\n\tid: {\r\n\t\ttype: 'number',\r\n\t},\r\n\talign: {\r\n\t\ttype: 'string',\r\n\t},\r\n\twidth: {\r\n\t\ttype: 'number',\r\n\t},\r\n\theight: {\r\n\t\ttype: 'number',\r\n\t},\r\n\tlinkid: {\r\n\t\ttype: 'number',\r\n\t},\r\n\thref: {\r\n\t\ttype: 'string',\r\n\t\tsource: 'attribute',\r\n\t\tselector: 'ta',\r\n\t\tattribute: 'href'\r\n\t},\r\n\taffiliateLink: {\r\n\t\ttype: 'object'\r\n\t}\r\n};\r\n\r\nconst imageSchema = {\r\n\timg: {\r\n\t\tattributes: [ 'src', 'alt' ],\r\n\t\tclasses: [ 'alignleft', 'aligncenter', 'alignright', 'alignnone', /^wp-image-\\d+$/ ],\r\n\t},\r\n};\r\n\r\nconst schema = {\r\n\tfigure: {\r\n\t\trequire: [ 'ta' , 'img' ],\r\n\t\tchildren: {\r\n\t\t\tta: {\r\n\t\t\t\tattributes: [ 'href', 'linkid' ],\r\n\t\t\t\tchildren: imageSchema,\r\n\t\t\t},\r\n\t\t\tfigcaption: {\r\n\t\t\t\tchildren: getPhrasingContentSchema(),\r\n\t\t\t},\r\n\t\t},\r\n\t},\r\n};\r\n\r\nfunction getFirstAnchorAttributeFormHTML( html, attributeName ) {\r\n\tconst { body } = document.implementation.createHTMLDocument( '' );\r\n\r\n\tbody.innerHTML = html;\r\n\r\n\tconst { firstElementChild } = body;\r\n\r\n\tif (\r\n\t\tfirstElementChild &&\r\n\t\tfirstElementChild.nodeName === 'A'\r\n\t) {\r\n\t\treturn firstElementChild.getAttribute( attributeName ) || undefined;\r\n\t}\r\n}\r\n\r\nexport const settings = {\r\n\ttitle: __( 'ThirstyAffiliates Image' ),\r\n\r\n\tdescription: __( 'Insert an image with an affiliate link to make a visual statement.' ),\r\n\r\n\ticon: <SVG viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><Path d=\"M0,0h24v24H0V0z\" fill=\"none\" /><Path d=\"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z\" /><Path d=\"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z\" /></SVG>,\r\n\r\n\tcategory: 'common',\r\n\r\n\tkeywords: [\r\n\t\t'img', // \"img\" is not translated as it is intended to reflect the HTML <img> tag.\r\n\t\t__( 'photo' ),\r\n\t\t__( 'affiliate' )\r\n\t],\r\n\r\n\tattributes: blockAttributes,\r\n\r\n\ttransforms: {\r\n\t\tfrom: [\r\n\t\t\t{\r\n\t\t\t\ttype: 'raw',\r\n\t\t\t\tisMatch: ( node ) => node.nodeName === 'FIGURE' && !! node.querySelector( 'img' ),\r\n\t\t\t\tschema,\r\n\t\t\t\ttransform: ( node ) => {\r\n\r\n\t\t\t\t\t// Search both figure and image classes. Alignment could be\r\n\t\t\t\t\t// set on either. ID is set on the image.\r\n\t\t\t\t\tconst className = node.className + ' ' + node.querySelector( 'img' ).className;\r\n\t\t\t\t\tconst alignMatches = /(?:^|\\s)align(left|center|right)(?:$|\\s)/.exec( className );\r\n\t\t\t\t\tconst align = alignMatches ? alignMatches[ 1 ] : undefined;\r\n\t\t\t\t\tconst idMatches = /(?:^|\\s)wp-image-(\\d+)(?:$|\\s)/.exec( className );\r\n\t\t\t\t\tconst id = idMatches ? Number( idMatches[ 1 ] ) : undefined;\r\n\t\t\t\t\tconst anchorElement = node.querySelector( 'a' );\r\n\t\t\t\t\tconst linkDestination = anchorElement && anchorElement.href ? 'custom' : undefined;\r\n\t\t\t\t\tconst linkid = anchorElement && anchorElement.linkid ? anchorElement.linkid : undefined;\r\n\t\t\t\t\tconst href = anchorElement && anchorElement.href ? anchorElement.href : undefined;\r\n\t\t\t\t\tconst rel = anchorElement && anchorElement.rel ? anchorElement.rel : undefined;\r\n\t\t\t\t\tconst linkClass = anchorElement && anchorElement.className ? anchorElement.className : undefined;\r\n\t\t\t\t\tconst attributes = getBlockAttributes( 'ta/image', node.outerHTML, { align, id, linkDestination, linkid , href, rel, linkClass } );\r\n\t\t\t\t\treturn createBlock( 'ta/image', attributes );\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttype: 'files',\r\n\t\t\t\tisMatch( files ) {\r\n\t\t\t\t\treturn files.length === 1 && files[ 0 ].type.indexOf( 'image/' ) === 0;\r\n\t\t\t\t},\r\n\t\t\t\ttransform( files ) {\r\n\t\t\t\t\tconst file = files[ 0 ];\r\n\t\t\t\t\t// We don't need to upload the media directly here\r\n\t\t\t\t\t// It's already done as part of the `componentDidMount`\r\n\t\t\t\t\t// int the image block\r\n\t\t\t\t\tconst block = createBlock( 'ta/image', {\r\n\t\t\t\t\t\turl: createBlobURL( file ),\r\n\t\t\t\t\t} );\r\n\r\n\t\t\t\t\treturn block;\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\ttype: 'shortcode',\r\n\t\t\t\ttag: 'caption',\r\n\t\t\t\tattributes: {\r\n\t\t\t\t\turl: {\r\n\t\t\t\t\t\ttype: 'string',\r\n\t\t\t\t\t\tsource: 'attribute',\r\n\t\t\t\t\t\tattribute: 'src',\r\n\t\t\t\t\t\tselector: 'img',\r\n\t\t\t\t\t},\r\n\t\t\t\t\talt: {\r\n\t\t\t\t\t\ttype: 'string',\r\n\t\t\t\t\t\tsource: 'attribute',\r\n\t\t\t\t\t\tattribute: 'alt',\r\n\t\t\t\t\t\tselector: 'img',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcaption: {\r\n\t\t\t\t\t\tshortcode: ( attributes, { shortcode } ) => {\r\n\t\t\t\t\t\t\tconst { body } = document.implementation.createHTMLDocument( '' );\r\n\r\n\t\t\t\t\t\t\tbody.innerHTML = shortcode.content;\r\n\t\t\t\t\t\t\tbody.removeChild( body.firstElementChild );\r\n\r\n\t\t\t\t\t\t\treturn body.innerHTML.trim();\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\tid: {\r\n\t\t\t\t\t\ttype: 'number',\r\n\t\t\t\t\t\tshortcode: ( { named: { id } } ) => {\r\n\t\t\t\t\t\t\tif ( ! id ) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn parseInt( id.replace( 'attachment_', '' ), 10 );\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\talign: {\r\n\t\t\t\t\t\ttype: 'string',\r\n\t\t\t\t\t\tshortcode: ( { named: { align = 'alignnone' } } ) => {\r\n\t\t\t\t\t\t\treturn align.replace( 'align', '' );\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\t\t\t\t\tlinkid: {\r\n\t\t\t\t\t\ttype: 'string',\r\n\t\t\t\t\t\tsource: 'attribute',\r\n\t\t\t\t\t\tselector: 'wp-block-ta-image > ta',\r\n\t\t\t\t\t\tattribute: 'linkid'\r\n\t\t\t\t\t},\r\n\t\t\t\t\thref: {\r\n\t\t\t\t\t\ttype: 'string',\r\n\t\t\t\t\t\tsource: 'attribute',\r\n\t\t\t\t\t\tselector: 'ta',\r\n\t\t\t\t\t\tattribute: 'href'\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\r\n\tgetEditWrapperProps( attributes ) {\r\n\t\tconst { align, width } = attributes;\r\n\t\tif ( 'left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align ) {\r\n\t\t\treturn { 'data-align': align, 'data-resized': !! width };\r\n\t\t}\r\n\t},\r\n\r\n\tedit,\r\n\r\n\tsave( { attributes } ) {\r\n\t\tconst {\r\n\t\t\turl,\r\n\t\t\talt,\r\n\t\t\tcaption,\r\n\t\t\talign,\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t\tid,\r\n\t\t\tlinkid,\r\n\t\t\thref\r\n\t\t} = attributes;\r\n\r\n\t\tconst classes = classnames( {\r\n\t\t\t[ `align${ align }` ]: align,\r\n\t\t\t'is-resized': width || height,\r\n\t\t} );\r\n\r\n\t\tconst image = (\r\n\t\t\t<img\r\n\t\t\t\tsrc={ url }\r\n\t\t\t\talt={ alt }\r\n\t\t\t\tclassName={ id ? `wp-image-${ id }` : null }\r\n\t\t\t\twidth={ width }\r\n\t\t\t\theight={ height }\r\n\t\t\t/>\r\n\t\t);\r\n\r\n\t\tconst figure = (\r\n\t\t\t<Fragment>\r\n\t\t\t\t<ta linkid={ linkid } href={ href }>\r\n\t\t\t\t{ image }\r\n\t\t\t\t</ta>\r\n\t\t\t\t<RichText.Content tagName=\"figcaption\" value={ caption } />\r\n\t\t\t</Fragment>\r\n\t\t);\r\n\r\n\t\tif ( 'left' === align || 'right' === align || 'center' === align ) {\r\n\t\t\treturn (\r\n\t\t\t\t<div className='wp-block-image'>\r\n\t\t\t\t\t<figure className={ classes }>\r\n\t\t\t\t\t\t{ figure }\r\n\t\t\t\t\t</figure>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<figure className={ `wp-block-image ${classes}` }>\r\n\t\t\t\t{ figure }\r\n\t\t\t</figure>\r\n\t\t);\r\n\t}\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/index.js","import classnames from \"classnames\";\r\n\r\nconst { get , isEmpty , map , last , pick , compact } = lodash;\r\nconst { getPath } = wp.url;\r\nconst { __, sprintf } = wp.i18n;\r\nconst { Component, Fragment , createRef } = wp.element;\r\nconst { getBlobByURL, revokeBlobURL, isBlobURL } = wp.blob;\r\nconst { Placeholder , Button , ButtonGroup , IconButton , PanelBody , ResizableBox , SelectControl , Spinner , TextControl , TextareaControl , Toolbar , withNotices , ToggleControl , Popover } = wp.components;\r\nconst { withSelect } = wp.data;\r\nconst { RichText , BlockControls , InspectorControls , MediaUpload , MediaUploadCheck , MediaPlaceholder , BlockAlignmentToolbar , mediaUpload } = wp.editor;\r\nconst { withViewportMatch } = wp.viewport;\r\nconst { compose } = wp.compose;\r\n\r\nimport { createUpgradedEmbedBlock } from \"./util\";\r\nimport ImageSize from \"./image-size\";\r\nimport ThirstyURLInput from './search-input';\r\n\r\n/**\r\n * Module constants\r\n */\r\nconst MIN_SIZE = 20;\r\nconst LINK_DESTINATION_NONE = 'none';\r\nconst LINK_DESTINATION_MEDIA = 'media';\r\nconst LINK_DESTINATION_ATTACHMENT = 'attachment';\r\nconst LINK_DESTINATION_CUSTOM = 'custom';\r\nconst NEW_TAB_REL = 'noreferrer noopener';\r\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\r\n\r\nexport const pickRelevantMediaFiles = ( image ) => {\r\n\tconst imageProps = pick( image, [ 'alt', 'id', 'link', 'caption' ] );\r\n\timageProps.url = get( image, [ 'sizes', 'large', 'url' ] ) || get( image, [ 'media_details', 'sizes', 'large', 'source_url' ] ) || image.url;\r\n\treturn imageProps;\r\n};\r\n\r\n/**\r\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\r\n * while the image is being uploaded and will not have an id yet allocated.\r\n *\r\n * @param {number=} id The id of the image.\r\n * @param {string=} url The url of the image.\r\n *\r\n * @return {boolean} Is the URL a Blob URL\r\n */\r\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\r\n\r\n/**\r\n * Is the url for the image hosted externally. An externally hosted image has no id\r\n * and is not a blob url.\r\n *\r\n * @param {number=} id The id of the image.\r\n * @param {string=} url The url of the image.\r\n *\r\n * @return {boolean} Is the url an externally hosted url?\r\n */\r\nconst isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\r\n\r\nclass ImageEdit extends Component {\r\n\tconstructor( { attributes } ) {\r\n\t\tsuper( ...arguments );\r\n\t\tthis.updateAlt = this.updateAlt.bind( this );\r\n\t\tthis.updateAlignment = this.updateAlignment.bind( this );\r\n\t\tthis.onFocusCaption = this.onFocusCaption.bind( this );\r\n\t\tthis.onImageClick = this.onImageClick.bind( this );\r\n\t\tthis.onSelectImage = this.onSelectImage.bind( this );\r\n\t\tthis.updateImageURL = this.updateImageURL.bind( this );\r\n\t\tthis.updateWidth = this.updateWidth.bind( this );\r\n\t\tthis.updateHeight = this.updateHeight.bind( this );\r\n\t\tthis.updateDimensions = this.updateDimensions.bind( this );\r\n\t\tthis.getFilename = this.getFilename.bind( this );\r\n\t\tthis.toggleIsEditing = this.toggleIsEditing.bind( this );\r\n\t\tthis.onImageError = this.onImageError.bind( this );\r\n\t\tthis.onChangeInputValue = this.onChangeInputValue.bind( this );\r\n\t\tthis.autocompleteRef = createRef();\r\n\t\tthis.resetInvalidLink = this.resetInvalidLink.bind( this );\r\n\t\tthis.updateImageSelection = this.updateImageSelection.bind( this );\r\n\t\tthis.onSelectAffiliateImage = this.onSelectAffiliateImage.bind( this );\r\n\t\tthis.editAFfiliateImage = this.editAFfiliateImage.bind( this );\r\n\r\n\t\tthis.state = {\r\n\t\t\tcaptionFocused: false,\r\n\t\t\tisEditing: ! attributes.url,\r\n\t\t\tinputValue : '',\r\n\t\t\tlinkid : 0,\r\n\t\t\tpost : null,\r\n\t\t\tshowSuggestions : false,\r\n\t\t\timageSelection : [],\r\n\t\t\taffiliateLink : null\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { attributes, setAttributes, noticeOperations } = this.props;\r\n\t\tconst { id, url = '' } = attributes;\r\n\r\n\t\tif ( isTemporaryImage( id, url ) ) {\r\n\t\t\tconst file = getBlobByURL( url );\r\n\r\n\t\t\tif ( file ) {\r\n\t\t\t\tmediaUpload( {\r\n\t\t\t\t\tfilesList: [ file ],\r\n\t\t\t\t\tonFileChange: ( [ image ] ) => {\r\n\t\t\t\t\t\tsetAttributes( pickRelevantMediaFiles( image ) );\r\n\t\t\t\t\t},\r\n\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\r\n\t\t\t\t\tonError: ( message ) => {\r\n\t\t\t\t\t\tnoticeOperations.createErrorNotice( message );\r\n\t\t\t\t\t\tthis.setState( { isEditing: true } );\r\n\t\t\t\t\t},\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidUpdate( prevProps ) {\r\n\t\tconst { id: prevID, url: prevURL = '' } = prevProps.attributes;\r\n\t\tconst { id, url = '' } = this.props.attributes;\r\n\r\n\t\tif ( isTemporaryImage( prevID, prevURL ) && ! isTemporaryImage( id, url ) ) {\r\n\t\t\trevokeBlobURL( url );\r\n\t\t}\r\n\r\n\t\tif ( ! this.props.isSelected && prevProps.isSelected && this.state.captionFocused ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\tcaptionFocused: false,\r\n\t\t\t} );\r\n\t\t}\r\n\t}\r\n\r\n\tonSelectImage( media ) {\r\n\r\n\t\tif ( ! media || ! media.url ) {\r\n\t\t\tthis.props.setAttributes( {\r\n\t\t\t\turl: undefined,\r\n\t\t\t\talt: undefined,\r\n\t\t\t\tid: undefined,\r\n\t\t\t\tcaption: undefined\r\n\t\t\t} );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { affiliateLink } = this.state;\r\n\r\n\t\tthis.setState( {\r\n\t\t\tisEditing: false,\r\n\t\t} );\r\n\r\n\t\tthis.props.setAttributes( {\r\n\t\t\t...pickRelevantMediaFiles( media ),\r\n\t\t\tlinkid: affiliateLink.id,\r\n\t\t\thref: affiliateLink.link,\r\n\t\t\taffiliateLink : affiliateLink,\r\n\t\t\twidth: undefined,\r\n\t\t\theight: undefined,\r\n\t\t} );\r\n\t}\r\n\r\n\tonImageError( url ) {\r\n\t\t// Check if there's an embed block that handles this URL.\r\n\t\tconst embedBlock = createUpgradedEmbedBlock(\r\n\t\t\t{ attributes: { url } }\r\n\t\t);\r\n\t\tif ( undefined !== embedBlock ) {\r\n\t\t\tthis.props.onReplace( embedBlock );\r\n\t\t}\r\n\t}\r\n\r\n\tonFocusCaption() {\r\n\t\tif ( ! this.state.captionFocused ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\tcaptionFocused: true,\r\n\t\t\t} );\r\n\t\t}\r\n\t}\r\n\r\n\tonImageClick() {\r\n\t\tif ( this.state.captionFocused ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\tcaptionFocused: false,\r\n\t\t\t} );\r\n\t\t}\r\n\t}\r\n\r\n\tupdateAlt( newAlt ) {\r\n\t\tthis.props.setAttributes( { alt: newAlt } );\r\n\t}\r\n\r\n\tupdateAlignment( nextAlign ) {\r\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].indexOf( nextAlign ) !== -1 ?\r\n\t\t\t{ width: undefined, height: undefined } :\r\n\t\t\t{};\r\n\t\tthis.props.setAttributes( { ...extraUpdatedAttributes, align: nextAlign } );\r\n\t}\r\n\r\n\tupdateImageURL( url ) {\r\n\t\tthis.props.setAttributes( { url, width: undefined, height: undefined } );\r\n\t}\r\n\r\n\tupdateWidth( width ) {\r\n\t\tthis.props.setAttributes( { width: parseInt( width, 10 ) } );\r\n\t}\r\n\r\n\tupdateHeight( height ) {\r\n\t\tthis.props.setAttributes( { height: parseInt( height, 10 ) } );\r\n\t}\r\n\r\n\tupdateDimensions( width = undefined, height = undefined ) {\r\n\t\treturn () => {\r\n\t\t\tthis.props.setAttributes( { width, height } );\r\n\t\t};\r\n\t}\r\n\r\n\tgetFilename( url ) {\r\n\t\tconst path = getPath( url );\r\n\t\tif ( path ) {\r\n\t\t\treturn last( path.split( '/' ) );\r\n\t\t}\r\n\t}\r\n\r\n\tgetLinkDestinationOptions() {\r\n\t\treturn [\r\n\t\t\t{ value: LINK_DESTINATION_NONE, label: __( 'None' ) },\r\n\t\t\t{ value: LINK_DESTINATION_MEDIA, label: __( 'Media File' ) },\r\n\t\t\t{ value: LINK_DESTINATION_ATTACHMENT, label: __( 'Attachment Page' ) },\r\n\t\t\t{ value: LINK_DESTINATION_CUSTOM, label: __( 'Custom URL' ) },\r\n\t\t];\r\n\t}\r\n\r\n\ttoggleIsEditing() {\r\n\t\tthis.setState( {\r\n\t\t\tisEditing: ! this.state.isEditing,\r\n\t\t} );\r\n\t}\r\n\r\n\tgetImageSizeOptions() {\r\n\t\tconst { imageSizes, image } = this.props;\r\n\t\treturn compact( map( imageSizes, ( { name, slug } ) => {\r\n\t\t\tconst sizeUrl = get( image, [ 'media_details', 'sizes', slug, 'source_url' ] );\r\n\t\t\tif ( ! sizeUrl ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tvalue: sizeUrl,\r\n\t\t\t\tlabel: name,\r\n\t\t\t};\r\n\t\t} ) );\r\n\t}\r\n\r\n\tonChangeInputValue( inputValue , post = null ) {\r\n\t\tconst linkid = post ? post.id : 0;\r\n\t\tthis.setState( { inputValue , linkid , post } );\r\n\t}\r\n\r\n\tresetInvalidLink() {\r\n\t\tthis.setState( { invalidLink : false } );\r\n\t}\r\n\r\n\tupdateImageSelection( imageSelection , affiliateLink ) {\r\n\t\tthis.setState({\r\n\t\t\timageSelection,\r\n\t\t\taffiliateLink\r\n\t\t});\r\n\t}\r\n\r\n\tonSelectAffiliateImage( image ) {\r\n\r\n\t\tconst request = wp.apiFetch( {\r\n\t\t\tpath: wp.url.addQueryArgs( 'wp/v2/media/' + image.id , {\r\n\t\t\t\tcontext: 'edit',\r\n\t\t\t\t_locale: 'user'\r\n\t\t\t} ),\r\n\t\t} );\r\n\r\n\t\trequest.then( (media) => {\r\n\t\t\tmedia.url = media.source_url;\r\n\t\t\tthis.onSelectImage( media );\r\n\t\t} );\r\n\t}\r\n\r\n\teditAFfiliateImage() {\r\n\r\n\t\tconst { attributes } = this.props;\r\n\t\tconst { affiliateLink } = attributes;\r\n\r\n\t\tthis.setState({\r\n\t\t\tisEditing : true,\r\n\t\t\timageSelection : affiliateLink.images,\r\n\t\t\taffiliateLink\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { \r\n\t\t\tisEditing,\r\n\t\t\timageSelection,\r\n\t\t\taffiliateLink,\r\n\t\t} = this.state;\r\n\t\tconst {\r\n\t\t\tattributes,\r\n\t\t\tsetAttributes,\r\n\t\t\tisLargeViewport,\r\n\t\t\tisSelected,\r\n\t\t\tclassName,\r\n\t\t\tmaxWidth,\r\n\t\t\ttoggleSelection,\r\n\t\t\tisRTL,\r\n\t\t} = this.props;\r\n\t\tconst {\r\n\t\t\turl,\r\n\t\t\talt,\r\n\t\t\tcaption,\r\n\t\t\talign,\r\n\t\t\tlinkDestination,\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t\tlinkid,\r\n\t\t\thref\r\n\t\t} = attributes;\r\n\t\tconst toolbarEditButton = (\r\n\t\t\t<Toolbar>\r\n\t\t\t\t<IconButton\r\n\t\t\t\t\tclassName=\"ta-edit-image-button components-icon-button components-toolbar__control\"\r\n\t\t\t\t\tlabel={ __( 'Edit ThirstyAffiliates Image' ) }\r\n\t\t\t\t\ticon=\"edit\"\r\n\t\t\t\t\tonClick={ this.editAFfiliateImage }\r\n\t\t\t\t/>\r\n\t\t\t</Toolbar>\r\n\t\t);\r\n\r\n\t\tconst controls = (\r\n\t\t\t<BlockControls>\r\n\t\t\t\t<BlockAlignmentToolbar\r\n\t\t\t\t\tvalue={ align }\r\n\t\t\t\t\tonChange={ this.updateAlignment }\r\n\t\t\t\t/>\r\n\t\t\t\t{ toolbarEditButton }\r\n\t\t\t</BlockControls>\r\n\t\t);\r\n\r\n\t\tif ( isEditing ) {\r\n\t\t\treturn (\r\n\t\t\t\t<Fragment>\r\n\t\t\t\t\t{ controls }\r\n\t\t\t\t\t<Placeholder\r\n\t\t\t\t\t\ticon={ \"format-image\" }\r\n\t\t\t\t\t\tlabel={ __( \"ThirstyAffiliates Image\" ) }\r\n\t\t\t\t\t\tinstructions={ __( \"Search for an affiliate link and select image to insert.\" ) } \r\n\t\t\t\t\t>\t\r\n\r\n\t\t\t\t\t\t<ThirstyURLInput\r\n\t\t\t\t\t\t\tupdateImageSelection={ this.updateImageSelection }\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{ !! imageSelection.length &&\r\n\t\t\t\t\t\t\t<div className=\"ta-image-sel-wrap\">\r\n\t\t\t\t\t\t\t\t<h3>{ `${affiliateLink.title} ${ __( 'attached images:' ) }` }</h3>\r\n\t\t\t\t\t\t\t\t<div className=\"ta-image-selection\">\r\n\t\t\t\t\t\t\t\t\t{ imageSelection.map( ( image , index ) => (\r\n\t\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => this.onSelectAffiliateImage( image ) }\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t<img src={ image.src } />\r\n\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t) ) }\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t</Placeholder>\r\n\t\t\t\t</Fragment>\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tconst classes = classnames( className, {\r\n\t\t\t'wp-block-image' : true,\r\n\t\t\t'is-transient': isBlobURL( url ),\r\n\t\t\t'is-resized': !! width || !! height,\r\n\t\t\t'is-focused': isSelected,\r\n\t\t} );\r\n\r\n\t\tconst isResizable = [ 'wide', 'full' ].indexOf( align ) === -1 && isLargeViewport;\r\n\t\tconst imageSizeOptions = this.getImageSizeOptions();\r\n\r\n\t\tconst getInspectorControls = ( imageWidth, imageHeight ) => (\r\n\t\t\t<InspectorControls>\r\n\t\t\t\t<PanelBody title={ __( 'Image Settings' ) }>\r\n\t\t\t\t\t<TextareaControl\r\n\t\t\t\t\t\tlabel={ __( 'Alt Text (Alternative Text)' ) }\r\n\t\t\t\t\t\tvalue={ alt }\r\n\t\t\t\t\t\tonChange={ this.updateAlt }\r\n\t\t\t\t\t\thelp={ __( 'Alternative text describes your image to people who can’t see it. Add a short description with its key details.' ) }\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{ ! isEmpty( imageSizeOptions ) && (\r\n\t\t\t\t\t\t<SelectControl\r\n\t\t\t\t\t\t\tlabel={ __( 'Image Size' ) }\r\n\t\t\t\t\t\t\tvalue={ url }\r\n\t\t\t\t\t\t\toptions={ imageSizeOptions }\r\n\t\t\t\t\t\t\tonChange={ this.updateImageURL }\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) }\r\n\t\t\t\t\t{ isResizable && (\r\n\t\t\t\t\t\t<div className=\"block-library-image__dimensions\">\r\n\t\t\t\t\t\t\t<p className=\"block-library-image__dimensions__row\">\r\n\t\t\t\t\t\t\t\t{ __( 'Image Dimensions' ) }\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t<div className=\"block-library-image__dimensions__row\">\r\n\t\t\t\t\t\t\t\t<TextControl\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"block-library-image__dimensions__width\"\r\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Width' ) }\r\n\t\t\t\t\t\t\t\t\tvalue={ width !== undefined ? width : '' }\r\n\t\t\t\t\t\t\t\t\tplaceholder={ imageWidth }\r\n\t\t\t\t\t\t\t\t\tmin={ 1 }\r\n\t\t\t\t\t\t\t\t\tonChange={ this.updateWidth }\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<TextControl\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"block-library-image__dimensions__height\"\r\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Height' ) }\r\n\t\t\t\t\t\t\t\t\tvalue={ height !== undefined ? height : '' }\r\n\t\t\t\t\t\t\t\t\tplaceholder={ imageHeight }\r\n\t\t\t\t\t\t\t\t\tmin={ 1 }\r\n\t\t\t\t\t\t\t\t\tonChange={ this.updateHeight }\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div className=\"block-library-image__dimensions__row\">\r\n\t\t\t\t\t\t\t\t<ButtonGroup aria-label={ __( 'Image Size' ) }>\r\n\t\t\t\t\t\t\t\t\t{ [ 25, 50, 75, 100 ].map( ( scale ) => {\r\n\t\t\t\t\t\t\t\t\t\tconst scaledWidth = Math.round( imageWidth * ( scale / 100 ) );\r\n\t\t\t\t\t\t\t\t\t\tconst scaledHeight = Math.round( imageHeight * ( scale / 100 ) );\r\n\r\n\t\t\t\t\t\t\t\t\t\tconst isCurrent = width === scaledWidth && height === scaledHeight;\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ scale }\r\n\t\t\t\t\t\t\t\t\t\t\t\tisSmall\r\n\t\t\t\t\t\t\t\t\t\t\t\tisPrimary={ isCurrent }\r\n\t\t\t\t\t\t\t\t\t\t\t\taria-pressed={ isCurrent }\r\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={ this.updateDimensions( scaledWidth, scaledHeight ) }\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{ scale }%\r\n\t\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t} ) }\r\n\t\t\t\t\t\t\t\t</ButtonGroup>\r\n\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\tisSmall\r\n\t\t\t\t\t\t\t\t\tonClick={ this.updateDimensions() }\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\r\n\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t) }\r\n\t\t\t\t</PanelBody>\r\n\t\t\t</InspectorControls>\r\n\t\t);\r\n\r\n\t\t// Disable reason: Each block can be selected by clicking on it\r\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\r\n\t\treturn (\r\n\t\t\t<Fragment>\r\n\t\t\t\t{ controls }\r\n\t\t\t\t<figure className={ classes }>\r\n\t\t\t\t\t<ImageSize src={ url } dirtynessTrigger={ align }>\r\n\t\t\t\t\t\t{ ( sizes ) => {\r\n\t\t\t\t\t\t\tconst {\r\n\t\t\t\t\t\t\t\timageWidthWithinContainer,\r\n\t\t\t\t\t\t\t\timageHeightWithinContainer,\r\n\t\t\t\t\t\t\t\timageWidth,\r\n\t\t\t\t\t\t\t\timageHeight,\r\n\t\t\t\t\t\t\t} = sizes;\r\n\r\n\t\t\t\t\t\t\tconst filename = this.getFilename( url );\r\n\t\t\t\t\t\t\tlet defaultedAlt;\r\n\t\t\t\t\t\t\tif ( alt ) {\r\n\t\t\t\t\t\t\t\tdefaultedAlt = alt;\r\n\t\t\t\t\t\t\t} else if ( filename ) {\r\n\t\t\t\t\t\t\t\tdefaultedAlt = sprintf( __( 'This image has an empty alt attribute; its file name is %s' ), filename );\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tconst img = (\r\n\t\t\t\t\t\t\t\t// Disable reason: Image itself is not meant to be interactive, but\r\n\t\t\t\t\t\t\t\t// should direct focus to block.\r\n\t\t\t\t\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\r\n\t\t\t\t\t\t\t\t<Fragment>\r\n\t\t\t\t\t\t\t\t\t<ta linkid={ linkid } href={ href }>\r\n\t\t\t\t\t\t\t\t\t\t<img src={ url } alt={ defaultedAlt } onClick={ this.onImageClick } onError={ () => this.onImageError( url ) } />\r\n\t\t\t\t\t\t\t\t\t</ta>\r\n\t\t\t\t\t\t\t\t\t{ isBlobURL( url ) && <Spinner /> }\r\n\t\t\t\t\t\t\t\t</Fragment>\r\n\t\t\t\t\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif ( ! isResizable || ! imageWidthWithinContainer ) {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<Fragment>\r\n\t\t\t\t\t\t\t\t\t\t{ getInspectorControls( imageWidth, imageHeight ) }\r\n\t\t\t\t\t\t\t\t\t\t<div style={ { width, height } }>\r\n\t\t\t\t\t\t\t\t\t\t\t{ img }\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</Fragment>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tconst currentWidth = width || imageWidthWithinContainer;\r\n\t\t\t\t\t\t\tconst currentHeight = height || imageHeightWithinContainer;\r\n\r\n\t\t\t\t\t\t\tconst ratio = imageWidth / imageHeight;\r\n\t\t\t\t\t\t\tconst minWidth = imageWidth < imageHeight ? MIN_SIZE : MIN_SIZE * ratio;\r\n\t\t\t\t\t\t\tconst minHeight = imageHeight < imageWidth ? MIN_SIZE : MIN_SIZE / ratio;\r\n\r\n\t\t\t\t\t\t\t// With the current implementation of ResizableBox, an image needs an explicit pixel value for the max-width.\r\n\t\t\t\t\t\t\t// In absence of being able to set the content-width, this max-width is currently dictated by the vanilla editor style.\r\n\t\t\t\t\t\t\t// The following variable adds a buffer to this vanilla style, so 3rd party themes have some wiggleroom.\r\n\t\t\t\t\t\t\t// This does, in most cases, allow you to scale the image beyond the width of the main column, though not infinitely.\r\n\t\t\t\t\t\t\t// @todo It would be good to revisit this once a content-width variable becomes available.\r\n\t\t\t\t\t\t\tconst maxWidthBuffer = maxWidth * 2.5;\r\n\r\n\t\t\t\t\t\t\tlet showRightHandle = false;\r\n\t\t\t\t\t\t\tlet showLeftHandle = false;\r\n\r\n\t\t\t\t\t\t\t/* eslint-disable no-lonely-if */\r\n\t\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\r\n\t\t\t\t\t\t\tif ( align === 'center' ) {\r\n\t\t\t\t\t\t\t\t// When the image is centered, show both handles.\r\n\t\t\t\t\t\t\t\tshowRightHandle = true;\r\n\t\t\t\t\t\t\t\tshowLeftHandle = true;\r\n\t\t\t\t\t\t\t} else if ( isRTL ) {\r\n\t\t\t\t\t\t\t\t// In RTL mode the image is on the right by default.\r\n\t\t\t\t\t\t\t\t// Show the right handle and hide the left handle only when it is aligned left.\r\n\t\t\t\t\t\t\t\t// Otherwise always show the left handle.\r\n\t\t\t\t\t\t\t\tif ( align === 'left' ) {\r\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t// Show the left handle and hide the right handle only when the image is aligned right.\r\n\t\t\t\t\t\t\t\t// Otherwise always show the right handle.\r\n\t\t\t\t\t\t\t\tif ( align === 'right' ) {\r\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/* eslint-enable no-lonely-if */\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t<Fragment>\r\n\t\t\t\t\t\t\t\t\t{ getInspectorControls( imageWidth, imageHeight ) }\r\n\t\t\t\t\t\t\t\t\t<ResizableBox\r\n\t\t\t\t\t\t\t\t\t\tsize={\r\n\t\t\t\t\t\t\t\t\t\t\twidth && height ? {\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth,\r\n\t\t\t\t\t\t\t\t\t\t\t\theight,\r\n\t\t\t\t\t\t\t\t\t\t\t} : undefined\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tminWidth={ minWidth }\r\n\t\t\t\t\t\t\t\t\t\tmaxWidth={ maxWidthBuffer }\r\n\t\t\t\t\t\t\t\t\t\tminHeight={ minHeight }\r\n\t\t\t\t\t\t\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\r\n\t\t\t\t\t\t\t\t\t\tlockAspectRatio\r\n\t\t\t\t\t\t\t\t\t\tenable={ {\r\n\t\t\t\t\t\t\t\t\t\t\ttop: false,\r\n\t\t\t\t\t\t\t\t\t\t\tright: showRightHandle,\r\n\t\t\t\t\t\t\t\t\t\t\tbottom: true,\r\n\t\t\t\t\t\t\t\t\t\t\tleft: showLeftHandle,\r\n\t\t\t\t\t\t\t\t\t\t} }\r\n\t\t\t\t\t\t\t\t\t\tonResizeStart={ () => {\r\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection( false );\r\n\t\t\t\t\t\t\t\t\t\t} }\r\n\t\t\t\t\t\t\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\r\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\r\n\t\t\t\t\t\t\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\r\n\t\t\t\t\t\t\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\r\n\t\t\t\t\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection( true );\r\n\t\t\t\t\t\t\t\t\t\t} }\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{ img }\r\n\t\t\t\t\t\t\t\t\t</ResizableBox>\r\n\t\t\t\t\t\t\t\t</Fragment>\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} }\r\n\t\t\t\t\t</ImageSize>\r\n\t\t\t\t\t{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\r\n\t\t\t\t\t\t<RichText\r\n\t\t\t\t\t\t\ttagName=\"figcaption\"\r\n\t\t\t\t\t\t\tplaceholder={ __( 'Write caption…' ) }\r\n\t\t\t\t\t\t\tvalue={ caption }\r\n\t\t\t\t\t\t\tunstableOnFocus={ this.onFocusCaption }\r\n\t\t\t\t\t\t\tonChange={ ( value ) => setAttributes( { caption: value } ) }\r\n\t\t\t\t\t\t\tisSelected={ this.state.captionFocused }\r\n\t\t\t\t\t\t\tinlineToolbar\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) }\r\n\t\t\t\t</figure>\r\n\t\t\t</Fragment>\r\n\t\t);\r\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\r\n\t}\r\n}\r\n\r\nexport default compose( [\r\n\twithSelect( ( select, props ) => {\r\n\t\tconst { getMedia } = select( 'core' );\r\n\t\tconst { getEditorSettings } = select( 'core/editor' );\r\n\t\tconst { id } = props.attributes;\r\n\t\tconst { maxWidth, isRTL, imageSizes } = getEditorSettings();\r\n\r\n\t\treturn {\r\n\t\t\timage: id ? getMedia( id ) : null,\r\n\t\t\tmaxWidth,\r\n\t\t\tisRTL,\r\n\t\t\timageSizes,\r\n\t\t};\r\n\t} ),\r\n\twithViewportMatch( { isLargeViewport: 'medium' } ),\r\n\twithNotices,\r\n] )( ImageEdit );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/edit.js","const WORDPRESS_EMBED_BLOCK = 'core-embed/wordpress';\r\n\r\nconst { includes } = lodash;\r\nconst { renderToString } = wp.element;\r\nconst { createBlock } = wp.blocks;\r\n\r\n/***\r\n * Creates a more suitable embed block based on the passed in props\r\n * and attributes generated from an embed block's preview.\r\n *\r\n * We require `attributesFromPreview` to be generated from the latest attributes\r\n * and preview, and because of the way the react lifecycle operates, we can't\r\n * guarantee that the attributes contained in the block's props are the latest\r\n * versions, so we require that these are generated separately.\r\n * See `getAttributesFromPreview` in the generated embed edit component.\r\n *\r\n * @param {Object} props The block's props.\r\n * @param {Object} attributesFromPreview Attributes generated from the block's most up to date preview.\r\n * @return {Object|undefined} A more suitable embed block if one exists.\r\n */\r\nexport const createUpgradedEmbedBlock = ( props, attributesFromPreview ) => {\r\n\tconst { preview, name } = props;\r\n\tconst { url } = props.attributes;\r\n\r\n\tif ( ! url ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst matchingBlock = findBlock( url );\r\n\r\n\t// WordPress blocks can work on multiple sites, and so don't have patterns,\r\n\t// so if we're in a WordPress block, assume the user has chosen it for a WordPress URL.\r\n\tif ( WORDPRESS_EMBED_BLOCK !== name && DEFAULT_EMBED_BLOCK !== matchingBlock ) {\r\n\t\t// At this point, we have discovered a more suitable block for this url, so transform it.\r\n\t\tif ( name !== matchingBlock ) {\r\n\t\t\treturn createBlock( matchingBlock, { url } );\r\n\t\t}\r\n\t}\r\n\r\n\tif ( preview ) {\r\n\t\tconst { html } = preview;\r\n\r\n\t\t// We can't match the URL for WordPress embeds, we have to check the HTML instead.\r\n\t\tif ( isFromWordPress( html ) ) {\r\n\t\t\t// If this is not the WordPress embed block, transform it into one.\r\n\t\t\tif ( WORDPRESS_EMBED_BLOCK !== name ) {\r\n\t\t\t\treturn createBlock(\r\n\t\t\t\t\tWORDPRESS_EMBED_BLOCK,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\turl,\r\n\t\t\t\t\t\t// By now we have the preview, but when the new block first renders, it\r\n\t\t\t\t\t\t// won't have had all the attributes set, and so won't get the correct\r\n\t\t\t\t\t\t// type and it won't render correctly. So, we pass through the current attributes\r\n\t\t\t\t\t\t// here so that the initial render works when we switch to the WordPress\r\n\t\t\t\t\t\t// block. This only affects the WordPress block because it can't be\r\n\t\t\t\t\t\t// rendered in the usual Sandbox (it has a sandbox of its own) and it\r\n\t\t\t\t\t\t// relies on the preview to set the correct render type.\r\n\t\t\t\t\t\t...attributesFromPreview,\r\n\t\t\t\t\t}\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport const isFromWordPress = ( html ) => {\r\n\treturn includes( html, 'class=\"wp-embedded-content\" data-secret' );\r\n};\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/util.js","const { noop } = lodash;\r\n\r\nconst { withGlobalEvents } = wp.compose;\r\nconst { Component } = wp.element;\r\n\r\nclass ImageSize extends Component {\r\n\tconstructor() {\r\n\t\tsuper( ...arguments );\r\n\t\tthis.state = {\r\n\t\t\twidth: undefined,\r\n\t\t\theight: undefined,\r\n\t\t};\r\n\t\tthis.bindContainer = this.bindContainer.bind( this );\r\n\t\tthis.calculateSize = this.calculateSize.bind( this );\r\n\t}\r\n\r\n\tbindContainer( ref ) {\r\n\t\tthis.container = ref;\r\n\t}\r\n\r\n\tcomponentDidUpdate( prevProps ) {\r\n\t\tif ( this.props.src !== prevProps.src ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\twidth: undefined,\r\n\t\t\t\theight: undefined,\r\n\t\t\t} );\r\n\t\t\tthis.fetchImageSize();\r\n\t\t}\r\n\r\n\t\tif ( this.props.dirtynessTrigger !== prevProps.dirtynessTrigger ) {\r\n\t\t\tthis.calculateSize();\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.fetchImageSize();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tif ( this.image ) {\r\n\t\t\tthis.image.onload = noop;\r\n\t\t}\r\n\t}\r\n\r\n\tfetchImageSize() {\r\n\t\tthis.image = new window.Image();\r\n\t\tthis.image.onload = this.calculateSize;\r\n\t\tthis.image.src = this.props.src;\r\n\t}\r\n\r\n\tcalculateSize() {\r\n\t\tconst maxWidth = this.container.clientWidth;\r\n\t\tconst exceedMaxWidth = this.image.width > maxWidth;\r\n\t\tconst ratio = this.image.height / this.image.width;\r\n\t\tconst width = exceedMaxWidth ? maxWidth : this.image.width;\r\n\t\tconst height = exceedMaxWidth ? maxWidth * ratio : this.image.height;\r\n\t\tthis.setState( { width, height } );\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst sizes = {\r\n\t\t\timageWidth: this.image && this.image.width,\r\n\t\t\timageHeight: this.image && this.image.height,\r\n\t\t\tcontainerWidth: this.container && this.container.clientWidth,\r\n\t\t\tcontainerHeight: this.container && this.container.clientHeight,\r\n\t\t\timageWidthWithinContainer: this.state.width,\r\n\t\t\timageHeightWithinContainer: this.state.height,\r\n\t\t};\r\n\t\treturn (\r\n\t\t\t<div ref={ this.bindContainer }>\r\n\t\t\t\t{ this.props.children( sizes ) }\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withGlobalEvents( {\r\n\tresize: 'calculateSize',\r\n} )( ImageSize );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/image-size.js","import classnames from \"classnames\";\r\n\r\nconst { __ } = wp.i18n;\r\nconst { Component , createRef } = wp.element;\r\nconst { Spinner, withSpokenMessages, Popover , TextControl } = wp.components;\r\nconst { withInstanceId } = wp.compose;\r\n\r\nclass ThirstyURLInput extends Component {\r\n\r\n /**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 \r\n */\r\n\tconstructor( { autocompleteRef } ) {\r\n\t\tsuper( ...arguments );\r\n\r\n\t\t// this.onChange = this.onChange.bind( this );\r\n\t\t// this.onKeyDown = this.onKeyDown.bind( this );\r\n\t\tthis.autocompleteRef = autocompleteRef || createRef();\r\n\t\tthis.inputRef = createRef();\r\n\t\tthis.searchAffiliateLinks = this.searchAffiliateLinks.bind( this );\r\n\t\t// this.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\r\n\r\n\t\tthis.suggestionNodes = [];\r\n\r\n\t\tthis.state = {\r\n\t\t\tposts : [],\r\n\t\t\tshowSuggestions : false,\r\n\t\t\tselectedSuggestion : null,\r\n\t\t\tloading : false\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n * Component did update method.\r\n * \r\n * @since 3.6\r\n */\r\n\tcomponentDidUpdate() {\r\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\r\n\t\t// only have to worry about scrolling selected suggestion into view\r\n\t\t// when already expanded\r\n\t\tif ( showSuggestions && selectedSuggestion !== null && ! this.scrollingIntoView ) {\r\n\t\t\tthis.scrollingIntoView = true;\r\n\t\t\tscrollIntoView( this.suggestionNodes[ selectedSuggestion ], this.autocompleteRef.current, {\r\n\t\t\t\tonlyScrollIfNeeded: true,\r\n\t\t\t} );\r\n\r\n\t\t\tsetTimeout( () => {\r\n\t\t\t\tthis.scrollingIntoView = false;\r\n\t\t\t}, 100 );\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Component unmount method.\r\n * \r\n * @since 3.6\r\n */\r\n\tcomponentWillUnmount() {\r\n\t\tdelete this.suggestionsRequest;\r\n\t}\r\n\r\n\t/**\r\n * Bind suggestion to node.\r\n * \r\n * @param {*} index \r\n */\r\n\tbindSuggestionNode( index ) {\r\n\t\treturn ( ref ) => {\r\n\t\t\tthis.suggestionNodes[ index ] = ref;\r\n\t\t};\r\n\t}\r\n\t\r\n\tsearchAffiliateLinks( value ) {\r\n\r\n\t\t// Show the suggestions after typing at least 2 characters=\r\n\t\tif ( value.length < 2 ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\tshowSuggestions: false,\r\n\t\t\t\tselectedSuggestion: null,\r\n\t\t\t\tloading: false,\r\n\t\t\t} );\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tshowSuggestions : true,\r\n\t\t\tselectedSuggestion : null,\r\n\t\t\tloading : true\r\n\t\t});\r\n\r\n\t\tconst formData = new FormData();\r\n formData.append( \"action\" , \"search_affiliate_links_query\" );\r\n formData.append( \"keyword\" , value );\r\n formData.append( \"paged\" , 1 );\r\n\t\tformData.append( \"gutenberg\" , true );\r\n\t\tformData.append( \"with_images\" , true );\r\n\t\t\r\n\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\r\n // to filter results with category value. This is to prepare next update to add category filter.\r\n const request = fetch( ajaxurl , {\r\n method : \"POST\",\r\n body : formData\r\n\t\t} );\r\n\t\t\r\n\t\trequest\r\n .then( response => response.json() )\r\n .then( ( response ) => {\r\n\r\n if ( ! response.affiliate_links ) return;\r\n\r\n const posts = response.affiliate_links;\r\n\r\n\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\r\n\t\t\t// comparing the request reference in on the instance, which is\r\n\t\t\t// reset or deleted on subsequent requests or unmounting.\r\n\t\t\tif ( this.suggestionsRequest !== request ) {\r\n\t\t\t\treturn;\r\n }\r\n\r\n\t\t\tthis.setState( {\r\n\t\t\t\tposts,\r\n\t\t\t\tloading: false,\r\n } );\r\n\r\n\t\t\tif ( !! posts.length ) {\r\n\t\t\t\tthis.props.debouncedSpeak( sprintf( _n(\r\n\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\r\n\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\r\n\t\t\t\t\tposts.length\r\n\t\t\t\t), posts.length ), 'assertive' );\r\n\t\t\t} else {\r\n\t\t\t\tthis.props.debouncedSpeak( __( 'No results.' ), 'assertive' );\r\n }\r\n\r\n\t\t} ).catch( () => {\r\n\t\t\tif ( this.suggestionsRequest === request ) {\r\n\t\t\t\tthis.setState( {\r\n\t\t\t\t\tloading: false,\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tthis.suggestionsRequest = request;\r\n\t}\r\n\r\n\t/**\r\n * Set state when an affiliate link is selected.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} post \r\n */\r\n\tselectLink( post ) {\r\n\t\t// this.props.onChange( post.link, post );\r\n\t\tthis.setState( {\r\n\t\t\tselectedSuggestion: post,\r\n\t\t\tshowSuggestions: false,\r\n\t\t} );\r\n\r\n\t\tthis.props.updateImageSelection( post.images , post );\r\n\t}\r\n\r\n\t/**\r\n * Callback handler for when affiliate link is selected.\r\n * \r\n * @param {*} post \r\n */\r\n\thandleOnClick( post ) {\r\n\t\tthis.selectLink( post );\r\n\t\t// Move focus to the input field when a link suggestion is clicked.\r\n\t\t// this.inputRef.current.focus();\r\n\t}\r\n\r\n render() {\r\n const { value = '', autoFocus = true, instanceId } = this.props;\r\n const { showSuggestions , posts, selectedSuggestion , loading } = this.state;\r\n \r\n return (\r\n <div class=\"edit-search-affiliate-links\">\r\n\t\t\t\t<form\r\n\t\t\t\t\tclassName=\"editor-format-toolbar__link-container-content ta-link-search-popover\"\r\n\t\t\t\t\tonSubmit={ this.displayAffiliateImages }\r\n\t\t\t\t>\r\n\t\t\t\t\t<TextControl\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tclassName=\"ta-search-affiliate-links\"\r\n\t\t\t\t\t\tplaceholder={ __( \"Type to search affiliate links\" ) }\r\n\t\t\t\t\t\tonChange={ this.searchAffiliateLinks }\r\n\t\t\t\t\t\tautocomplete=\"off\"\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t{ ( loading ) && <Spinner /> }\r\n\r\n\t\t\t\t\t{ showSuggestions && !! posts.length && \r\n\t\t\t\t\t\t<Popover position=\"bottom\" focusOnMount={ false }>\r\n\t\t\t\t\t\t\t<div class=\"affilate-links-suggestions\">\r\n\t\t\t\t\t\t\t\t{ posts.map( ( post, index ) => (\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tkey={ post.id }\r\n\t\t\t\t\t\t\t\t\t\trole=\"option\"\r\n\t\t\t\t\t\t\t\t\t\ttabIndex=\"-1\"\r\n\t\t\t\t\t\t\t\t\t\tid={ `editor-url-input-suggestion-${ instanceId }-${ index }` }\r\n\t\t\t\t\t\t\t\t\t\tref={ this.bindSuggestionNode( index ) }\r\n\t\t\t\t\t\t\t\t\t\tclassName={ classnames( 'editor-url-input__suggestion', {\r\n\t\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\r\n\t\t\t\t\t\t\t\t\t\t} ) }\r\n\t\t\t\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( post ) }\r\n\t\t\t\t\t\t\t\t\t\taria-selected={ index === selectedSuggestion }\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t{ post.title || __( '(no title)' ) }\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t) ) }\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</Popover>\r\n\t\t\t\t\t}\r\n\t\t\t\t</form>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default withSpokenMessages( withInstanceId( ThirstyURLInput ) );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/search-input.js","import { taLink } from \"./ta-link\";\r\n\r\nconst { registerFormatType } = wp.richText;\r\n\r\n/**\r\n * Register custom formats.\r\n * \r\n * @since 3.6\r\n */\r\nexport default function registerFormats() {\r\n\r\n [\r\n taLink\r\n ].forEach( ( { name , ...settings } ) => registerFormatType( name , settings ) );\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/index.js","import InlineAffiliateLinkUI from './inline';\r\n\r\nconst { __ } = wp.i18n;\r\nconst { Component , Fragment } = wp.element;\r\nconst { withSpokenMessages } = wp.components;\r\nconst { getTextContent , applyFormat , removeFormat , slice } = wp.richText;\r\nconst { isURL } = wp.url;\r\nconst { RichTextToolbarButton , RichTextShortcut } = wp.editor;\r\nconst { Path , SVG } = wp.components;\r\n\r\nconst name = \"ta/link\";\r\n\r\n/**\r\n * Custom Affiliate link format. When applied will wrap selected text with <ta href=\"\" linkid=\"\"></ta> custom element.\r\n * Custom element is implemented here as we are not allowed to use <a> tag due to Gutenberg limitations.\r\n * Element is converted to normal <a> tag on frontend via PHP script filtered on 'the_content'.\r\n * \r\n * @since 3.6\r\n */\r\nexport const taLink = {\r\n name,\r\n title : __( \"Affiliate Link\" ),\r\n tagName : \"ta\",\r\n className : null,\r\n attributes : {\r\n\t\turl : \"href\",\r\n\t\ttarget : \"target\"\r\n },\r\n edit : withSpokenMessages( class LinkEdit extends Component {\r\n\t\t\r\n\t\t/**\r\n\t\t * Component constructor.\r\n\t\t * \r\n\t\t * @since 3.6\r\n\t\t */\r\n\t\tconstructor() {\r\n\t\t\tsuper( ...arguments );\r\n\r\n\t\t\tthis.addLink = this.addLink.bind( this );\r\n\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\r\n\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\r\n\t\t\tthis.state = {\r\n\t\t\t\taddingLink: false,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Callback to set state to adding link status.\r\n\t\t * \r\n\t\t * @since 3.6\r\n\t\t */\r\n\t\taddLink() {\r\n\t\t\tconst { value, onChange } = this.props;\r\n\t\t\tconst text = getTextContent( slice( value ) );\r\n\r\n\t\t\tif ( text && isURL( text ) ) {\r\n\t\t\t\tonChange( applyFormat( value, { type: name, attributes: { url: text } } ) );\r\n\t\t\t} else {\r\n\t\t\t\tthis.setState( { addingLink: true } );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Callback to set state to stop adding link status.\r\n\t\t * \r\n\t\t * @since 3.6\r\n\t\t */\r\n\t\tstopAddingLink() {\r\n\t\t\tthis.setState( { addingLink: false } );\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Remove format event callback.\r\n\t\t * \r\n\t\t * @since 3.6\r\n\t\t */\r\n\t\tonRemoveFormat() {\r\n\t\t\tconst { value , onChange , speak } = this.props;\r\n\r\n\t\t\tonChange( removeFormat( value , name ) );\r\n\t\t\tspeak( __( \"Affiliate Link removed.\" ), \"assertive\" );\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Component render method.\r\n\t\t * \r\n\t\t * @since 3.6\r\n\t\t */\r\n\t\trender() {\r\n\t\t\tconst { isActive , activeAttributes , value , onChange } = this.props;\r\n\r\n\t\t\treturn (\r\n\t\t\t\t<Fragment>\r\n\t\t\t\t\t<RichTextShortcut\r\n\t\t\t\t\t\ttype=\"access\"\r\n\t\t\t\t\t\tcharacter=\"s\"\r\n\t\t\t\t\t\tonUse={ this.onRemoveFormat }\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<RichTextShortcut\r\n\t\t\t\t\t\ttype=\"primary\"\r\n\t\t\t\t\t\tcharacter=\"l\"\r\n\t\t\t\t\t\tonUse={ this.addLink }\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<RichTextShortcut\r\n\t\t\t\t\t\ttype=\"primaryShift\"\r\n\t\t\t\t\t\tcharacter=\"l\"\r\n\t\t\t\t\t\tonUse={ this.onRemoveFormat }\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{ isActive && <RichTextToolbarButton\r\n\t\t\t\t\t\ticon=\"editor-unlink\"\r\n\t\t\t\t\t\ttitle={ __( 'Remove Affiliate Link' ) }\r\n\t\t\t\t\t\tclassName=\"ta-unlink-button\"\r\n\t\t\t\t\t\tonClick={ this.onRemoveFormat }\r\n\t\t\t\t\t\tisActive={ isActive }\r\n\t\t\t\t\t\tshortcutType=\"primaryShift\"\r\n\t\t\t\t\t\tshortcutCharacter=\"l\"\r\n\t\t\t\t\t/> }\r\n\t\t\t\t\t{ ! isActive && <RichTextToolbarButton\r\n\t\t\t\t\t\ticon={ <SVG xmlns=\"http://www.w3.org/2000/svg\" width=\"16.688\" height=\"9.875\" viewBox=\"0 0 16.688 9.875\"><Path id=\"TA.svg\" fill=\"black\" class=\"cls-1\" d=\"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z\" transform=\"translate(-1.188 -5.25)\"/></SVG> }\r\n\t\t\t\t\t\ttitle={ __( 'Affiliate Link' ) }\r\n\t\t\t\t\t\tclassName=\"ta-link-button\"\r\n\t\t\t\t\t\tonClick={ this.addLink }\r\n\t\t\t\t\t\tshortcutType=\"primary\"\r\n\t\t\t\t\t\tshortcutCharacter=\"l\"\r\n\t\t\t\t\t/> }\r\n\t\t\t\t\t<InlineAffiliateLinkUI\r\n\t\t\t\t\t\taddingLink={ this.state.addingLink }\r\n\t\t\t\t\t\tstopAddingLink={ this.stopAddingLink }\r\n\t\t\t\t\t\tisActive={ isActive }\r\n\t\t\t\t\t\tactiveAttributes={ activeAttributes }\r\n\t\t\t\t\t\tvalue={ value }\r\n\t\t\t\t\t\tonChange={ onChange }\r\n\t\t\t\t\t/>\r\n\t\t\t\t</Fragment>\r\n\t\t\t);\r\n\t\t}\r\n } )\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/index.js","import classnames from \"classnames\";\r\nimport ThirstyPositionedAtSelection from './positioned-at-selection';\r\nimport { isValidHref } from './utils';\r\nimport ThirstyURLPopover from './url-popover';\r\nimport ThirstyURLInput from './url-input';\r\n\r\nconst { __ } = wp.i18n;\r\nconst { Component , createRef } = wp.element;\r\nconst { ExternalLink , ToggleControl , IconButton , withSpokenMessages } = wp.components;\r\nconst { LEFT, RIGHT, UP, DOWN, BACKSPACE, ENTER } = wp.keycodes;\r\nconst { prependHTTP , safeDecodeURI , filterURLForDisplay } = wp.url;\r\nconst { create , insert , isCollapsed , applyFormat , getTextContent , slice } = wp.richText;\r\n\r\nconst stopKeyPropagation = ( event ) => event.stopPropagation();\r\n\r\n/**\r\n * Generates the format object that will be applied to the link text.\r\n * \r\n * @since 3.6\r\n *\r\n * @param {string} url The href of the link.\r\n * @param {boolean} linkid Affiliate link ID.\r\n * @param {Object} text The text that is being hyperlinked.\r\n *\r\n * @return {Object} The final format object.\r\n */\r\nfunction createLinkFormat( { url , linkid , text } ) {\r\n\tconst format = {\r\n\t\ttype: \"ta/link\",\r\n\t\tattributes: {\r\n\t\t\turl,\r\n\t\t\tlinkid : linkid.toString()\r\n\t\t},\r\n\t};\r\n\r\n\treturn format;\r\n}\r\n\r\n/**\r\n * Check if input is being show.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {Object} props Component props.\r\n * @param {Object} state Component state.\r\n */\r\nfunction isShowingInput( props , state ) {\r\n\treturn props.addingLink || state.editLink;\r\n}\r\n\r\n/**\r\n * Affiliate Link editor JSX element.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {Object} param0 Component props (destructred).\r\n */\r\nconst LinkEditor = ( { value , onChangeInputValue , onKeyDown , submitLink, invalidLink , resetInvalidLink , autocompleteRef } ) => (\r\n\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\r\n\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\r\n\t<form\r\n\t\tclassName=\"editor-format-toolbar__link-container-content ta-link-search-popover\"\r\n\t\tonKeyPress={ stopKeyPropagation }\r\n\t\tonKeyDown={ onKeyDown }\r\n\t\tonSubmit={ submitLink }\r\n\t>\r\n\t\t<ThirstyURLInput\r\n\t\t\tvalue={ value }\r\n\t\t\tonChange={ onChangeInputValue }\r\n\t\t\tautocompleteRef={ autocompleteRef }\r\n\t\t\tinvalidLink={ invalidLink }\r\n\t\t\tresetInvalidLink={ resetInvalidLink }\r\n\t\t/>\r\n\t\t<IconButton icon=\"editor-break\" label={ __( 'Apply' ) } type=\"submit\" />\r\n\t</form>\r\n\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\r\n);\r\n\r\n/**\r\n * Affiliate link url viewer JSX element.\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\r\nconst LinkViewerUrl = ( { url } ) => {\r\n\tconst prependedURL = prependHTTP( url );\r\n\tconst linkClassName = classnames( 'editor-format-toolbar__link-container-value', {\r\n\t\t'has-invalid-link': ! isValidHref( prependedURL ),\r\n\t} );\r\n\r\n\tif ( ! url ) {\r\n\t\treturn <span className={ linkClassName }></span>;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<ExternalLink\r\n\t\t\tclassName={ linkClassName }\r\n\t\t\thref={ url }\r\n\t\t>\r\n\t\t\t{ filterURLForDisplay( safeDecodeURI( url ) ) }\r\n\t\t</ExternalLink>\r\n\t);\r\n};\r\n\r\n/**\r\n * Affiliate link viewer JSX element.\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\r\nconst LinkViewer = ( { url, editLink } ) => {\r\n\treturn (\r\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\r\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n\t\t<div\r\n\t\t\tclassName=\"editor-format-toolbar__link-container-content\"\r\n\t\t\tonKeyPress={ stopKeyPropagation }\r\n\t\t>\r\n\t\t\t<LinkViewerUrl url={ url } />\r\n\t\t\t<IconButton icon=\"edit\" label={ __( 'Edit' ) } onClick={ editLink } />\r\n\t\t</div>\r\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions */\r\n\t);\r\n};\r\n\r\n/**\r\n * Inline affiliate link UI Component.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 Component props (destructred).\r\n */\r\nclass InlineAffiliateLinkUI extends Component {\r\n\tconstructor() {\r\n\t\tsuper( ...arguments );\r\n\r\n\t\tthis.editLink = this.editLink.bind( this );\r\n\t\tthis.submitLink = this.submitLink.bind( this );\r\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\r\n\t\tthis.onChangeInputValue = this.onChangeInputValue.bind( this );\r\n\t\tthis.onClickOutside = this.onClickOutside.bind( this );\r\n\t\tthis.resetState = this.resetState.bind( this );\r\n\t\tthis.autocompleteRef = createRef();\r\n\t\tthis.resetInvalidLink = this.resetInvalidLink.bind( this );\r\n\r\n\t\tthis.state = {\r\n\t\t\tinputValue : '',\r\n\t\t\tlinkid : 0,\r\n\t\t\tpost : null,\r\n\t\t\tinvalidLink : false\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Stop the key event from propagating up to ObserveTyping.startTypingInTextField.\r\n\t * \r\n\t * @since 3.6\r\n\t * \r\n\t * @param {Object} event Event object.\r\n\t */\r\n\tonKeyDown( event ) {\r\n\t\tif ( [ LEFT, DOWN, RIGHT, UP, BACKSPACE, ENTER ].indexOf( event.keyCode ) > -1 ) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Callback to set state when input value is changed.\r\n\t * \r\n\t * @since 3.6\r\n\t * \r\n\t * @param {*} inputValue \r\n\t * @param {*} post \r\n\t */\r\n\tonChangeInputValue( inputValue , post = null ) {\r\n\t\tconst linkid = post ? post.id : 0;\r\n\t\tthis.setState( { inputValue , linkid , post } );\r\n\t}\r\n\r\n\t/**\r\n\t * Callback to set state when edit affiliate link (already inserted) is triggered.\r\n\t * \r\n\t * @since 3.6\r\n\t * \r\n\t * @param {*} event \r\n\t */\r\n\teditLink( event ) {\r\n\t\tthis.setState( { editLink: true } );\r\n\t\tevent.preventDefault();\r\n\t}\r\n\r\n\t/**\r\n\t * Callback to apply the affiliate link format to the selected text or position in the active block.\r\n\t * \r\n\t * @since 3.6\r\n\t * \r\n\t * @param {*} event \r\n\t */\r\n\tsubmitLink( event ) {\r\n\t\tconst { isActive, value, onChange, speak } = this.props;\r\n\t\tconst { inputValue, linkid , post } = this.state;\r\n\t\tconst url = prependHTTP( inputValue );\r\n\t\tconst selectedText = getTextContent( slice( value ) );\r\n\t\tconst format = createLinkFormat( {\r\n\t\t\turl,\r\n\t\t\tlinkid,\r\n\t\t\ttext: selectedText,\r\n\t\t} );\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif ( ! linkid || ! post ) {\r\n\t\t\tthis.setState( { invalidLink : true } )\r\n\t\t\treturn;\r\n\t\t} \r\n\r\n\t\tif ( isCollapsed( value ) && ! isActive ) {\r\n\t\t\tconst toInsert = applyFormat( create( { text: post.title } ), format, 0, url.length );\r\n\t\t\tonChange( insert( value, toInsert ) );\r\n\t\t} else {\r\n\t\t\tonChange( applyFormat( value, format ) );\r\n\t\t}\r\n\r\n\t\tthis.resetState();\r\n\r\n\t\tif ( ! isValidHref( url ) ) {\r\n\t\t\tspeak( __( 'Warning: the link has been inserted but may have errors. Please test it.' ), 'assertive' );\r\n\t\t} else if ( isActive ) {\r\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\r\n\t\t} else {\r\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Callback to run when users clicks outside the popover UI.\r\n\t * \r\n\t * @since 3.6\r\n\t * \r\n\t * @param {*} event \r\n\t */\r\n\tonClickOutside( event ) {\r\n\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\r\n\t\t// so onClickOutside fails to detect that a click on a suggestion occured in the\r\n\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\r\n\t\t// return to avoid the popover being closed.\r\n\t\tconst autocompleteElement = this.autocompleteRef.current;\r\n\t\tif ( autocompleteElement && autocompleteElement.contains( event.target ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.resetState();\r\n\t}\r\n\r\n\t/**\r\n\t * Reset state callback.\r\n\t * \r\n\t * @since 3.6\r\n\t */\r\n\tresetState() {\r\n\t\tthis.props.stopAddingLink();\r\n\t\tthis.setState( { inputValue : '' , editLink: false } );\r\n\t\tthis.resetInvalidLink();\r\n\t}\r\n\r\n\t/**\r\n\t * Reset invalid link state callback. Separated as we need to run this independently from resetState() callback.\r\n\t * \r\n\t * @since 3.6\r\n\t */\r\n\tresetInvalidLink() {\r\n\t\tthis.setState( { invalidLink : false } );\r\n\t}\r\n\r\n\t/**\r\n\t * Component render method.\r\n\t *\r\n\t * @since 3.6\r\n\t */\r\n\trender() {\r\n\t\tconst { isActive, activeAttributes: { url , linkid }, addingLink, value, onChange } = this.props;\r\n\r\n\t\tif ( ! isActive && ! addingLink ) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst { inputValue , invalidLink } = this.state;\r\n\t\tconst showInput = isShowingInput( this.props, this.state );\r\n\r\n\t\treturn (\r\n\t\t\t<ThirstyPositionedAtSelection\r\n\t\t\t\tkey={ `${ value.start }${ value.end }` /* Used to force rerender on selection change */ }\r\n\t\t\t>\r\n\t\t\t\t<ThirstyURLPopover\r\n\t\t\t\t\tonClickOutside={ this.onClickOutside }\r\n\t\t\t\t\tonClose={ this.resetState }\r\n\t\t\t\t\tfocusOnMount={ showInput ? 'firstElement' : false }\r\n\t\t\t\t\tinvalidLink={ invalidLink }\r\n\t\t\t\t>\r\n\t\t\t\t\t{ showInput ? (\r\n\t\t\t\t\t\t<LinkEditor\r\n\t\t\t\t\t\t\tvalue={ inputValue }\r\n\t\t\t\t\t\t\tonChangeInputValue={ this.onChangeInputValue }\r\n\t\t\t\t\t\t\tonKeyDown={ this.onKeyDown }\r\n\t\t\t\t\t\t\tsubmitLink={ this.submitLink }\r\n\t\t\t\t\t\t\tautocompleteRef={ this.autocompleteRef }\r\n\t\t\t\t\t\t\tupdateLinkId= { this.updateLinkId }\r\n\t\t\t\t\t\t\tinvalidLink={ invalidLink }\r\n\t\t\t\t\t\t\tresetInvalidLink={ this.resetInvalidLink }\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<LinkViewer\r\n\t\t\t\t\t\t\turl={ url }\r\n\t\t\t\t\t\t\teditLink={ this.editLink }\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t) }\r\n\t\t\t\t</ThirstyURLPopover>\r\n\t\t\t</ThirstyPositionedAtSelection>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withSpokenMessages( InlineAffiliateLinkUI );\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/inline.js","const { Component } = wp.element;\r\nconst { getOffsetParent , getRectangleFromRange } = wp.dom;\r\n\r\n/**\r\n * Returns a style object for applying as `position: absolute` for an element\r\n * relative to the bottom-center of the current selection. Includes `top` and\r\n * `left` style properties.\r\n * \r\n * @since 3.6\r\n *\r\n * @return {Object} Style object.\r\n */\r\nfunction getCurrentCaretPositionStyle() {\r\n\tconst selection = window.getSelection();\r\n\r\n\t// Unlikely, but in the case there is no selection, return empty styles so\r\n\t// as to avoid a thrown error by `Selection#getRangeAt` on invalid index.\r\n\tif ( selection.rangeCount === 0 ) {\r\n\t\treturn {};\r\n\t}\r\n\r\n\t// Get position relative viewport.\r\n\tconst rect = getRectangleFromRange( selection.getRangeAt( 0 ) );\r\n\tlet top = rect.top + rect.height;\r\n\tlet left = rect.left + ( rect.width / 2 );\r\n\r\n\t// Offset by positioned parent, if one exists.\r\n\tconst offsetParent = getOffsetParent( selection.anchorNode );\r\n\tif ( offsetParent ) {\r\n\t\tconst parentRect = offsetParent.getBoundingClientRect();\r\n\t\ttop -= parentRect.top;\r\n\t\tleft -= parentRect.left;\r\n\t}\r\n\r\n\treturn { top, left };\r\n}\r\n\r\n/**\r\n * Component which renders itself positioned under the current caret selection.\r\n * The position is calculated at the time of the component being mounted, so it\r\n * should only be mounted after the desired selection has been made.\r\n * \r\n * @since 3.6\r\n *\r\n * @type {WPComponent}\r\n */\r\nclass ThirstyPositionedAtSelection extends Component {\r\n\r\n\t/**\r\n\t * Component constructor method.\r\n\t * \r\n\t * @since 3.6\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper( ...arguments );\r\n\r\n\t\tthis.state = {\r\n\t\t\tstyle: getCurrentCaretPositionStyle(),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Component render method.\r\n\t * \r\n\t * @since 3.6\r\n\t */\r\n\trender() {\r\n\t\tconst { children } = this.props;\r\n\t\tconst { style } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t<div className=\"editor-format-toolbar__selection-position\" style={ style }>\r\n\t\t\t\t{ children }\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default ThirstyPositionedAtSelection;\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/positioned-at-selection.js","const { startsWith } = lodash;\r\n\r\nconst {\r\n getProtocol,\r\n\tisValidProtocol,\r\n\tgetAuthority,\r\n\tisValidAuthority,\r\n\tgetPath,\r\n\tisValidPath,\r\n\tgetQueryString,\r\n\tisValidQueryString,\r\n\tgetFragment,\r\n\tisValidFragment,\r\n} = wp.url;\r\n\r\n/**\r\n * Check for issues with the provided href.\r\n * \r\n * @since 3.6\r\n *\r\n * @param {string} href The href.\r\n * @return {boolean} Is the href invalid?\r\n */\r\nexport function isValidHref( href ) {\r\n\tif ( ! href ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tconst trimmedHref = href.trim();\r\n\r\n\tif ( ! trimmedHref ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Does the href start with something that looks like a URL protocol?\r\n\tif ( /^\\S+:/.test( trimmedHref ) ) {\r\n\t\tconst protocol = getProtocol( trimmedHref );\r\n\t\tif ( ! isValidProtocol( protocol ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Add some extra checks for http(s) URIs, since these are the most common use-case.\r\n\t\t// This ensures URIs with an http protocol have exactly two forward slashes following the protocol.\r\n\t\tif ( startsWith( protocol, 'http' ) && ! /^https?:\\/\\/[^\\/\\s]/i.test( trimmedHref ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst authority = getAuthority( trimmedHref );\r\n\t\tif ( ! isValidAuthority( authority ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst path = getPath( trimmedHref );\r\n\t\tif ( path && ! isValidPath( path ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst queryString = getQueryString( trimmedHref );\r\n\t\tif ( queryString && ! isValidQueryString( queryString ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst fragment = getFragment( trimmedHref );\r\n\t\tif ( fragment && ! isValidFragment( fragment ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Validate anchor links.\r\n\tif ( startsWith( trimmedHref, '#' ) && ! isValidFragment( trimmedHref ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn true;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/utils.js","const { __ } = wp.i18n;\r\nconst { Component } = wp.element;\r\nconst { Popover , IconButton } = wp.components;\r\n\r\n/**\r\n * Custom URL Popover component.\r\n * \r\n * @since 3.6\r\n */\r\nclass ThirstyURLPopover extends Component {\r\n\r\n /**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n */\r\n\tconstructor() {\r\n super( ...arguments );\r\n \r\n this.toggleSettingsVisibility = this.toggleSettingsVisibility.bind( this );\r\n\r\n\t\tthis.state = {\r\n\t\t\tisSettingsExpanded: false,\r\n\t\t};\r\n }\r\n \r\n /**\r\n * Component constructor.\r\n * \r\n * @since 3.6\r\n */\r\n toggleSettingsVisibility() {\r\n\t\tthis.setState( {\r\n\t\t\tisSettingsExpanded: ! this.state.isSettingsExpanded,\r\n\t\t} );\r\n\t}\r\n\r\n /**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tchildren,\r\n\t\t\trenderSettings,\r\n\t\t\tonClose,\r\n onClickOutside,\r\n invalidLink,\r\n\t\t\tposition = 'bottom center',\r\n\t\t\tfocusOnMount = 'firstElement',\r\n\t\t} = this.props;\r\n\r\n\t\tconst {\r\n\t\t\tisSettingsExpanded,\r\n } = this.state;\r\n \r\n const showSettings = !! renderSettings && isSettingsExpanded;\r\n\r\n\t\treturn (\r\n\t\t\t<Popover\r\n\t\t\t\tclassName=\"ta-url-popover editor-url-popover\"\r\n\t\t\t\tfocusOnMount={ focusOnMount }\r\n\t\t\t\tposition={ position }\r\n\t\t\t\tonClose={ onClose }\r\n\t\t\t\tonClickOutside={ onClickOutside }\r\n\t\t\t>\r\n\t\t\t\t<div className=\"editor-url-popover__row\">\r\n { children }\r\n { !! renderSettings && (\r\n\t\t\t\t\t\t<IconButton\r\n\t\t\t\t\t\t\tclassName=\"editor-url-popover__settings-toggle\"\r\n\t\t\t\t\t\t\ticon=\"ellipsis\"\r\n\t\t\t\t\t\t\tlabel={ __( 'Link Settings' ) }\r\n\t\t\t\t\t\t\tonClick={ this.toggleSettingsVisibility }\r\n\t\t\t\t\t\t\taria-expanded={ isSettingsExpanded }\r\n\t\t\t\t\t\t/>\r\n ) }\r\n\t\t\t\t</div>\r\n { showSettings && (\r\n\t\t\t\t\t<div className=\"editor-url-popover__row editor-url-popover__settings\">\r\n\t\t\t\t\t\t{ renderSettings() }\r\n\t\t\t\t\t</div>\r\n ) }\r\n { invalidLink && <div class=\"ta-invalid-link\">{ __( 'Invalid affiliate link' ) }</div> }\r\n\t\t\t</Popover>\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default ThirstyURLPopover;\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/url-popover.js","import classnames from 'classnames';\r\nimport scrollIntoView from 'dom-scroll-into-view';\r\n\r\nconst { __ } = wp.i18n;\r\nconst { throttle } = lodash;\r\nconst { Component , createRef } = wp.element;\r\nconst { UP, DOWN, ENTER, TAB } = wp.keycodes;\r\nconst { Spinner, withSpokenMessages, Popover } = wp.components;\r\nconst { withInstanceId } = wp.compose;\r\n\r\n// Since URLInput is rendered in the context of other inputs, but should be\r\n// considered a separate modal node, prevent keyboard events from propagating\r\n// as being considered from the input.\r\nconst stopEventPropagation = ( event ) => event.stopPropagation();\r\n\r\n/**\r\n * Custom URL Input component.\r\n * \r\n * @since 3.6\r\n */\r\nclass ThirstyURLInput extends Component {\r\n\r\n /**\r\n * Component constructor method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} param0 \r\n */\r\n\tconstructor( { autocompleteRef } ) {\r\n\t\tsuper( ...arguments );\r\n\r\n\t\tthis.onChange = this.onChange.bind( this );\r\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\r\n\t\tthis.autocompleteRef = autocompleteRef || createRef();\r\n\t\tthis.inputRef = createRef();\r\n\t\tthis.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\r\n\r\n\t\tthis.suggestionNodes = [];\r\n\r\n\t\tthis.state = {\r\n\t\t\tposts: [],\r\n\t\t\tshowSuggestions: false,\r\n\t\t\tselectedSuggestion: null,\r\n\t\t};\r\n\t}\r\n\r\n /**\r\n * Component did update method.\r\n * \r\n * @since 3.6\r\n */\r\n\tcomponentDidUpdate() {\r\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\r\n\t\t// only have to worry about scrolling selected suggestion into view\r\n\t\t// when already expanded\r\n\t\tif ( showSuggestions && selectedSuggestion !== null && ! this.scrollingIntoView ) {\r\n\t\t\tthis.scrollingIntoView = true;\r\n\t\t\tscrollIntoView( this.suggestionNodes[ selectedSuggestion ], this.autocompleteRef.current, {\r\n\t\t\t\tonlyScrollIfNeeded: true,\r\n\t\t\t} );\r\n\r\n\t\t\tsetTimeout( () => {\r\n\t\t\t\tthis.scrollingIntoView = false;\r\n\t\t\t}, 100 );\r\n\t\t}\r\n\t}\r\n\r\n /**\r\n * Component unmount method.\r\n * \r\n * @since 3.6\r\n */\r\n\tcomponentWillUnmount() {\r\n\t\tdelete this.suggestionsRequest;\r\n\t}\r\n\r\n /**\r\n * Bind suggestion to node.\r\n * \r\n * @param {*} index \r\n */\r\n\tbindSuggestionNode( index ) {\r\n\t\treturn ( ref ) => {\r\n\t\t\tthis.suggestionNodes[ index ] = ref;\r\n\t\t};\r\n\t}\r\n\r\n /**\r\n * Callback to show suggestions based on value inputted on search field.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} value \r\n */\r\n\tupdateSuggestions( value ) {\r\n\t\t// Show the suggestions after typing at least 2 characters\r\n\t\t// and also for URLs\r\n\t\tif ( value.length < 2 || /^https?:/.test( value ) ) {\r\n\t\t\tthis.setState( {\r\n\t\t\t\tshowSuggestions: false,\r\n\t\t\t\tselectedSuggestion: null,\r\n\t\t\t\tloading: false,\r\n\t\t\t} );\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.setState( {\r\n\t\t\tshowSuggestions: true,\r\n\t\t\tselectedSuggestion: null,\r\n\t\t\tloading: true,\r\n\t\t} );\r\n\r\n const formData = new FormData();\r\n formData.append( \"action\" , \"search_affiliate_links_query\" );\r\n formData.append( \"keyword\" , value );\r\n formData.append( \"paged\" , 1 );\r\n formData.append( \"gutenberg\" , true );\r\n \r\n // We are getting data via the WP AJAX instead of rest API as it is not possible yet\r\n // to filter results with category value. This is to prepare next update to add category filter.\r\n const request = fetch( ajaxurl , {\r\n method : \"POST\",\r\n body : formData\r\n } );\r\n\r\n request\r\n .then( response => response.json() )\r\n .then( ( response ) => {\r\n\r\n if ( ! response.affiliate_links ) return;\r\n\r\n const posts = response.affiliate_links;\r\n\r\n\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\r\n\t\t\t// comparing the request reference in on the instance, which is\r\n\t\t\t// reset or deleted on subsequent requests or unmounting.\r\n\t\t\tif ( this.suggestionsRequest !== request ) {\r\n\t\t\t\treturn;\r\n }\r\n\r\n\t\t\tthis.setState( {\r\n\t\t\t\tposts,\r\n\t\t\t\tloading: false,\r\n } );\r\n\r\n\t\t\tif ( !! posts.length ) {\r\n\t\t\t\tthis.props.debouncedSpeak( sprintf( _n(\r\n\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\r\n\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\r\n\t\t\t\t\tposts.length\r\n\t\t\t\t), posts.length ), 'assertive' );\r\n\t\t\t} else {\r\n\t\t\t\tthis.props.debouncedSpeak( __( 'No results.' ), 'assertive' );\r\n }\r\n\r\n\t\t} ).catch( () => {\r\n\t\t\tif ( this.suggestionsRequest === request ) {\r\n\t\t\t\tthis.setState( {\r\n\t\t\t\t\tloading: false,\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tthis.suggestionsRequest = request;\r\n\t}\r\n\r\n /**\r\n * Search input value change event callback method.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\r\n\tonChange( event ) {\r\n this.props.resetInvalidLink();\r\n\t\tconst inputValue = event.target.value;\r\n\t\tthis.props.onChange( inputValue );\r\n\t\tthis.updateSuggestions( inputValue );\r\n\t}\r\n\r\n /**\r\n * Keydown event callback. Handles selecting result via keyboard.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} event \r\n */\r\n\tonKeyDown( event ) {\r\n\t\tconst { showSuggestions, selectedSuggestion, posts, loading } = this.state;\r\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\r\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation\r\n\t\tif ( ! showSuggestions || ! posts.length || loading ) {\r\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\r\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\r\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\r\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\r\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\r\n\t\t\tswitch ( event.keyCode ) {\r\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\r\n\t\t\t\t// position.\r\n\t\t\t\tcase UP: {\r\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\r\n\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t\t// Set the input caret to position 0\r\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\r\n\t\t\t\t// last position.\r\n\t\t\t\tcase DOWN: {\r\n\t\t\t\t\tif ( this.props.value.length !== event.target.selectionStart ) {\r\n\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t\t// Set the input caret to the last position\r\n\t\t\t\t\t\tevent.target.setSelectionRange( this.props.value.length, this.props.value.length );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst post = this.state.posts[ this.state.selectedSuggestion ];\r\n\r\n\t\tswitch ( event.keyCode ) {\r\n\t\t\tcase UP: {\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst previousIndex = ! selectedSuggestion ? posts.length - 1 : selectedSuggestion - 1;\r\n\t\t\t\tthis.setState( {\r\n\t\t\t\t\tselectedSuggestion: previousIndex,\r\n\t\t\t\t} );\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase DOWN: {\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tconst nextIndex = selectedSuggestion === null || ( selectedSuggestion === posts.length - 1 ) ? 0 : selectedSuggestion + 1;\r\n\t\t\t\tthis.setState( {\r\n\t\t\t\t\tselectedSuggestion: nextIndex,\r\n\t\t\t\t} );\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase TAB: {\r\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\r\n\t\t\t\t\tthis.selectLink( post );\r\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\r\n\t\t\t\t\tthis.props.speak( __( 'Link selected' ) );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase ENTER: {\r\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\tthis.selectLink( post );\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n /**\r\n * Set state when an affiliate link is selected.\r\n * \r\n * @since 3.6\r\n * \r\n * @param {*} post \r\n */\r\n\tselectLink( post ) {\r\n\t\tthis.props.onChange( post.link, post );\r\n\t\tthis.setState( {\r\n\t\t\tselectedSuggestion: null,\r\n\t\t\tshowSuggestions: false,\r\n\t\t} );\r\n\t}\r\n\r\n /**\r\n * Callback handler for when affiliate link is selected.\r\n * \r\n * @param {*} post \r\n */\r\n\thandleOnClick( post ) {\r\n\t\tthis.selectLink( post );\r\n\t\t// Move focus to the input field when a link suggestion is clicked.\r\n\t\tthis.inputRef.current.focus();\r\n\t}\r\n\r\n /**\r\n * Component render method.\r\n * \r\n * @since 3.6\r\n */\r\n\trender() {\r\n\t\tconst { value = '', autoFocus = true, instanceId , invalidLink } = this.props;\r\n\t\tconst { showSuggestions, posts, selectedSuggestion, loading } = this.state;\r\n\t\t/* eslint-disable jsx-a11y/no-autofocus */\r\n\t\treturn (\r\n\t\t\t<div className=\"editor-url-input\">\r\n\t\t\t\t<input\r\n\t\t\t\t\tautoFocus={ autoFocus }\r\n\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\taria-label={ __( 'URL' ) }\r\n\t\t\t\t\trequired\r\n\t\t\t\t\tvalue={ value }\r\n\t\t\t\t\tonChange={ this.onChange }\r\n\t\t\t\t\tonInput={ stopEventPropagation }\r\n\t\t\t\t\tplaceholder={ __( 'Paste URL or type to search' ) }\r\n\t\t\t\t\tonKeyDown={ this.onKeyDown }\r\n\t\t\t\t\trole=\"combobox\"\r\n\t\t\t\t\taria-expanded={ showSuggestions }\r\n\t\t\t\t\taria-autocomplete=\"list\"\r\n\t\t\t\t\taria-owns={ `editor-url-input-suggestions-${ instanceId }` }\r\n\t\t\t\t\taria-activedescendant={ selectedSuggestion !== null ? `editor-url-input-suggestion-${ instanceId }-${ selectedSuggestion }` : undefined }\r\n\t\t\t\t\tref={ this.inputRef }\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{ ( loading ) && <Spinner /> }\r\n\r\n\t\t\t\t{ showSuggestions && !! posts.length && ! invalidLink &&\r\n\t\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName=\"editor-url-input__suggestions\"\r\n\t\t\t\t\t\t\tid={ `editor-url-input-suggestions-${ instanceId }` }\r\n\t\t\t\t\t\t\tref={ this.autocompleteRef }\r\n\t\t\t\t\t\t\trole=\"listbox\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{ posts.map( ( post, index ) => (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tkey={ post.id }\r\n\t\t\t\t\t\t\t\t\trole=\"option\"\r\n\t\t\t\t\t\t\t\t\ttabIndex=\"-1\"\r\n\t\t\t\t\t\t\t\t\tid={ `editor-url-input-suggestion-${ instanceId }-${ index }` }\r\n\t\t\t\t\t\t\t\t\tref={ this.bindSuggestionNode( index ) }\r\n\t\t\t\t\t\t\t\t\tclassName={ classnames( 'editor-url-input__suggestion', {\r\n\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\r\n\t\t\t\t\t\t\t\t\t} ) }\r\n\t\t\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( post ) }\r\n\t\t\t\t\t\t\t\t\taria-selected={ index === selectedSuggestion }\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{ post.title || __( '(no title)' ) }\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t) ) }\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</Popover>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t);\r\n\t\t/* eslint-enable jsx-a11y/no-autofocus */\r\n\t}\r\n}\r\n\r\nexport default withSpokenMessages( withInstanceId( ThirstyURLInput ) );\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/url-input.js","'use strict';\n\nmodule.exports = require('./dom-scroll-into-view');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar util = require('./util');\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {};\n // document 归一化到 window\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset = undefined;\n var ch = undefined;\n var cw = undefined;\n var containerScroll = undefined;\n var diffTop = undefined;\n var diffBottom = undefined;\n var win = undefined;\n var winScroll = undefined;\n var ww = undefined;\n var wh = undefined;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n };\n // elem 相对 container 可视视窗的距离\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n };\n // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nmodule.exports = scrollIntoView;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js\n// module id = 16\n// module chunks = 0","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box = undefined;\n var x = undefined;\n var y = undefined;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n var method = 'scroll' + (top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX = undefined;\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name = undefined;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop = undefined;\n var j = undefined;\n var i = undefined;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = undefined;\n if (prop === 'border') {\n cssProp = prop + which[i] + 'Width';\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n domUtils['doc' + name] = function (refWin) {\n var d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement['scroll' + name],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body['scroll' + name], domUtils['viewport' + name](d));\n };\n\n domUtils['viewport' + name] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = 'client' + name;\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem, computedStyle);\n var cssBoxValue = 0;\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n }\n return cssBoxValue;\n }\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(elem) {\n var val = undefined;\n var args = arguments;\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils['outer' + first] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current = undefined;\n var key = undefined;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n css(elem, ret);\n}\n\nmodule.exports = _extends({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n var overflow = obj.overflow;\n if (overflow) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n w.scrollTop = v;\n }\n },\n\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/util.js\n// module id = 17\n// module chunks = 0"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///gutenberg-support.js","webpack:///webpack/bootstrap 765b03ea8b1e2393384e","webpack:///./node_modules/classnames/index.js","webpack:///./src/index.js","webpack:///./src/blocks/index.js","webpack:///./src/blocks/ta-image/index.js","webpack:///./src/blocks/ta-image/edit.js","webpack:///./src/blocks/ta-image/util.js","webpack:///./src/blocks/ta-image/image-size.js","webpack:///./src/blocks/ta-image/search-input.js","webpack:///./src/formats/index.js","webpack:///./src/formats/ta-link/index.js","webpack:///./src/formats/ta-link/inline.js","webpack:///./src/formats/ta-link/utils.js","webpack:///./src/formats/ta-link/url-popover.js","webpack:///./src/formats/ta-link/url-input.js","webpack:///./node_modules/dom-scroll-into-view/lib/index.js","webpack:///./node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js","webpack:///./node_modules/dom-scroll-into-view/lib/util.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","classNames","classes","arguments","length","arg","argType","push","Array","isArray","inner","apply","key","hasOwn","join","default","undefined","__webpack_exports__","value","__WEBPACK_IMPORTED_MODULE_0__blocks__","__WEBPACK_IMPORTED_MODULE_1__formats__","__WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__","registerBlocks","registerFormats","taimage","forEach","block","settings","registerBlockType","__WEBPACK_IMPORTED_MODULE_0__ta_image__","wp","blocks","_defineProperty","obj","writable","__WEBPACK_IMPORTED_MODULE_0_classnames__","__WEBPACK_IMPORTED_MODULE_0_classnames___default","__WEBPACK_IMPORTED_MODULE_1__edit__","Fragment","element","__","i18n","_wp$blocks","getPhrasingContentSchema","createBlock","getBlockAttributes","RichText","editor","_wp$components","components","Path","SVG","blockAttributes","url","type","source","selector","attribute","alt","caption","id","align","width","height","linkid","href","affiliateLink","imageSchema","img","attributes","title","description","icon","createElement","viewBox","xmlns","fill","category","keywords","getEditWrapperProps","data-align","data-resized","edit","save","_ref","_classnames","classnames","image","src","className","figure","Content","tagName","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","__WEBPACK_IMPORTED_MODULE_1__util__","__WEBPACK_IMPORTED_MODULE_2__image_size__","__WEBPACK_IMPORTED_MODULE_3__search_input__","_extends","assign","target","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","_createClass","defineProperties","props","descriptor","protoProps","staticProps","_lodash","lodash","isEmpty","map","last","pick","compact","getPath","_wp$i18n","sprintf","_wp$element","Component","createRef","_wp$blob","blob","getBlobByURL","revokeBlobURL","isBlobURL","Placeholder","Button","ButtonGroup","IconButton","PanelBody","ResizableBox","SelectControl","Spinner","TextControl","TextareaControl","Toolbar","withNotices","withSelect","ToggleControl","Popover","data","_wp$editor","BlockControls","InspectorControls","BlockAlignmentToolbar","MediaUpload","MediaUploadCheck","MediaPlaceholder","mediaUpload","withViewportMatch","viewport","compose","ALLOWED_MEDIA_TYPES","pickRelevantMediaFiles","imageProps","isTemporaryImage","ImageEdit","_Component","this","_this","getPrototypeOf","updateAlt","bind","updateAlignment","onFocusCaption","onImageClick","onSelectImage","updateImageURL","updateWidth","updateHeight","updateDimensions","getFilename","toggleIsEditing","onImageError","onChangeInputValue","autocompleteRef","resetInvalidLink","updateImageSelection","onSelectAffiliateImage","editAFfiliateImage","state","captionFocused","isEditing","inputValue","post","showSuggestions","imageSelection","_this2","_props","setAttributes","noticeOperations","_attributes$url","file","filesList","onFileChange","_ref2","_ref3","allowedTypes","onError","message","createErrorNotice","setState","prevProps","_prevProps$attributes","prevID","_prevProps$attributes2","prevURL","_props$attributes","_props$attributes$url","isSelected","media","link","embedBlock","createUpgradedEmbedBlock","onReplace","newAlt","nextAlign","extraUpdatedAttributes","indexOf","parseInt","_this3","path","split","label","_props2","imageSizes","_ref4","slug","sizeUrl","invalidLink","_this4","apiFetch","addQueryArgs","context","_locale","then","source_url","images","_this5","_state","_props3","isLargeViewport","maxWidth","toggleSelection","isRTL","linkDestination","toolbarEditButton","onClick","controls","onChange","instructions","index","wp-block-image","is-transient","is-resized","is-focused","isResizable","imageSizeOptions","getImageSizeOptions","getInspectorControls","imageWidth","imageHeight","help","options","placeholder","min","aria-label","scale","scaledWidth","Math","round","scaledHeight","isCurrent","isSmall","isPrimary","aria-pressed","dirtynessTrigger","sizes","imageWidthWithinContainer","imageHeightWithinContainer","filename","defaultedAlt","style","currentWidth","currentHeight","ratio","minWidth","minHeight","maxWidthBuffer","showRightHandle","showLeftHandle","size","maxHeight","lockAspectRatio","enable","top","right","bottom","left","onResizeStart","onResizeStop","event","direction","elt","delta","unstableOnFocus","inlineToolbar","select","_select","getMedia","_select2","getEditorSettings","_getEditorSettings","includes","renderToString","attributesFromPreview","preview","matchingBlock","findBlock","DEFAULT_EMBED_BLOCK","html","isFromWordPress","noop","withGlobalEvents","ImageSize","bindContainer","calculateSize","ref","container","fetchImageSize","onload","window","Image","clientWidth","exceedMaxWidth","containerWidth","containerHeight","clientHeight","children","resize","withSpokenMessages","withInstanceId","ThirstyURLInput","inputRef","searchAffiliateLinks","suggestionNodes","posts","selectedSuggestion","loading","scrollingIntoView","scrollIntoView","current","onlyScrollIfNeeded","setTimeout","suggestionsRequest","formData","FormData","append","request","fetch","ajaxurl","method","body","response","json","affiliate_links","debouncedSpeak","catch","selectLink","instanceId","autoFocus","_state2","class","onSubmit","displayAffiliateImages","autocomplete","position","focusOnMount","role","tabIndex","bindSuggestionNode","is-selected","handleOnClick","aria-selected","_objectWithoutProperties","keys","taLink","registerFormatType","__WEBPACK_IMPORTED_MODULE_0__ta_link__","richText","__WEBPACK_IMPORTED_MODULE_0__inline__","_wp$richText","getTextContent","applyFormat","removeFormat","slice","isURL","RichTextToolbarButton","RichTextShortcut","getRectangleFromRange","dom","LinkEdit","addLink","stopAddingLink","onRemoveFormat","addingLink","text","speak","selection","getSelection","range","rangeCount","getRangeAt","rect","startContainer","nextElementSibling","nodeType","Node","ELEMENT_NODE","parentNode","closest","getBoundingClientRect","isActive","activeAttributes","anchorRect","getAnchorRect","character","onUse","shortcutType","shortcutCharacter","transform","createLinkFormat","toString","isShowingInput","editLink","__WEBPACK_IMPORTED_MODULE_1__utils__","__WEBPACK_IMPORTED_MODULE_2__url_popover__","__WEBPACK_IMPORTED_MODULE_3__url_input__","ExternalLink","_wp$keycodes","keycodes","LEFT","RIGHT","UP","DOWN","BACKSPACE","ENTER","_wp$url","prependHTTP","safeDecodeURI","filterURLForDisplay","insert","isCollapsed","stopKeyPropagation","stopPropagation","LinkEditor","onKeyDown","submitLink","onKeyPress","LinkViewerUrl","prependedURL","linkClassName","has-invalid-link","isValidHref","LinkViewer","InlineAffiliateLinkUI","onClickOutside","resetState","keyCode","preventDefault","selectedText","format","toInsert","autocompleteElement","contains","_props2$activeAttribu","showInput","onClose","updateLinkId","trimmedHref","trim","test","protocol","getProtocol","isValidProtocol","startsWith","authority","getAuthority","isValidAuthority","isValidPath","queryString","getQueryString","isValidQueryString","fragment","getFragment","isValidFragment","ThirstyURLPopover","toggleSettingsVisibility","isSettingsExpanded","renderSettings","_props$position","_props$focusOnMount","popoverProps","showSettings","aria-expanded","__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__","__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default","throttle","TAB","stopEventPropagation","updateSuggestions","previousIndex","nextIndex","selectionStart","setSelectionRange","focus","_props$value","_props$autoFocus","_state3","required","onInput","aria-autocomplete","aria-owns","aria-activedescendant","noArrow","elem","config","util","getWindow","allowHorizontalScroll","alignWithTop","alignWithLeft","offsetTop","offsetLeft","offsetBottom","offsetRight","isWin","isWindow","elemOffset","offset","eh","outerHeight","ew","outerWidth","containerOffset","ch","cw","containerScroll","diffTop","diffBottom","win","winScroll","ww","wh","scrollLeft","scrollTop","parseFloat","css","getClientPosition","box","x","y","doc","ownerDocument","docElem","documentElement","clientLeft","clientTop","getScroll","w","ret","document","getScrollLeft","getScrollTop","getOffset","el","pos","defaultView","parentWindow","_getComputedStyle","computedStyle_","val","computedStyle","getComputedStyle","getPropertyValue","_getComputedStyleIE","CURRENT_STYLE","_RE_NUM_NO_PX","RE_POS","rsLeft","RUNTIME_STYLE","pixelLeft","PX","each","fn","isBorderBoxFn","getComputedStyleX","swap","callback","old","getPBMWidth","which","prop","j","cssProp","getWH","extra","domUtils","viewportWidth","viewportHeight","docWidth","docHeight","borderBoxValue","offsetWidth","offsetHeight","isBorderBox","cssBoxValue","Number","BORDER_INDEX","CONTENT_INDEX","borderBoxValueOrIsBorderBox","padding","PADDING_INDEX","BOX_MODELS","getWHIgnoreDisplay","args","cssShow","v","_typeof","setOffset","RE_NUM","RegExp","refWin","max","documentElementProp","compatMode","visibility","display","first","charAt","toUpperCase","includeMargin","node","clone","overflow","scrollTo"],"mappings":"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","file":"gutenberg-support.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__blocks__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__formats__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__assets_styles_index_scss__);\n\n\n\n\n\nObject(__WEBPACK_IMPORTED_MODULE_0__blocks__[\"a\" /* default */])();\nObject(__WEBPACK_IMPORTED_MODULE_1__formats__[\"a\" /* default */])();\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = registerBlocks;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ta_image__ = __webpack_require__(3);\n\n\nvar registerBlockType = wp.blocks.registerBlockType;\n\n/**\n * Register gutenberg blocks.\n * \n * @since 3.6\n */\n\nfunction registerBlocks() {\n\n [__WEBPACK_IMPORTED_MODULE_0__ta_image__].forEach(function (block) {\n if (!block) return;\n\n var name = block.name,\n settings = block.settings;\n\n registerBlockType(name, settings);\n });\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"name\", function() { return name; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"settings\", function() { return settings; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__edit__ = __webpack_require__(4);\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nvar Fragment = wp.element.Fragment;\nvar __ = wp.i18n.__;\nvar _wp$blocks = wp.blocks,\n createBlock = _wp$blocks.createBlock,\n getBlockAttributes = _wp$blocks.getBlockAttributes,\n getPhrasingContentSchema = _wp$blocks.getPhrasingContentSchema;\nvar RichText = wp.editor.RichText;\nvar _wp$components = wp.components,\n Path = _wp$components.Path,\n SVG = _wp$components.SVG;\n\n\n\n\nvar name = 'ta/image';\n\nvar blockAttributes = {\n\turl: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'src'\n\t},\n\talt: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'alt',\n\t\tdefault: ''\n\t},\n\tcaption: {\n\t\ttype: 'string',\n\t\tsource: 'html',\n\t\tselector: 'figcaption'\n\t},\n\tid: {\n\t\ttype: 'number'\n\t},\n\talign: {\n\t\ttype: 'string'\n\t},\n\twidth: {\n\t\ttype: 'number'\n\t},\n\theight: {\n\t\ttype: 'number'\n\t},\n\tlinkid: {\n\t\ttype: 'number'\n\t},\n\thref: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'ta',\n\t\tattribute: 'href'\n\t},\n\taffiliateLink: {\n\t\ttype: 'object'\n\t}\n};\n\nvar imageSchema = {\n\timg: {\n\t\tattributes: ['src', 'alt'],\n\t\tclasses: ['alignleft', 'aligncenter', 'alignright', 'alignnone', /^wp-image-\\d+$/]\n\t}\n};\n\nvar schema = {\n\tfigure: {\n\t\trequire: ['ta', 'img'],\n\t\tchildren: {\n\t\t\tta: {\n\t\t\t\tattributes: ['href', 'linkid'],\n\t\t\t\tchildren: imageSchema\n\t\t\t},\n\t\t\tfigcaption: {\n\t\t\t\tchildren: getPhrasingContentSchema()\n\t\t\t}\n\t\t}\n\t}\n};\n\nfunction getFirstAnchorAttributeFormHTML(html, attributeName) {\n\tvar _document$implementat = document.implementation.createHTMLDocument(''),\n\t body = _document$implementat.body;\n\n\tbody.innerHTML = html;\n\n\tvar firstElementChild = body.firstElementChild;\n\n\n\tif (firstElementChild && firstElementChild.nodeName === 'A') {\n\t\treturn firstElementChild.getAttribute(attributeName) || undefined;\n\t}\n}\n\nvar settings = {\n\ttitle: __('ThirstyAffiliates Image'),\n\n\tdescription: __('Insert an image with an affiliate link to make a visual statement.'),\n\n\ticon: wp.element.createElement(\n\t\tSVG,\n\t\t{ viewBox: \"0 0 24 24\", xmlns: \"http://www.w3.org/2000/svg\" },\n\t\twp.element.createElement(Path, { d: \"M0,0h24v24H0V0z\", fill: \"none\" }),\n\t\twp.element.createElement(Path, { d: \"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z\" }),\n\t\twp.element.createElement(Path, { d: \"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z\" })\n\t),\n\n\tcategory: 'common',\n\n\tkeywords: ['img', // \"img\" is not translated as it is intended to reflect the HTML <img> tag.\n\t__('photo'), __('affiliate')],\n\n\tattributes: blockAttributes,\n\n\tgetEditWrapperProps: function getEditWrapperProps(attributes) {\n\t\tvar align = attributes.align,\n\t\t width = attributes.width;\n\n\t\tif ('left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align) {\n\t\t\treturn { 'data-align': align, 'data-resized': !!width };\n\t\t}\n\t},\n\n\n\tedit: __WEBPACK_IMPORTED_MODULE_1__edit__[\"a\" /* default */],\n\n\tsave: function save(_ref) {\n\t\tvar _classnames;\n\n\t\tvar attributes = _ref.attributes;\n\t\tvar url = attributes.url,\n\t\t alt = attributes.alt,\n\t\t caption = attributes.caption,\n\t\t align = attributes.align,\n\t\t width = attributes.width,\n\t\t height = attributes.height,\n\t\t id = attributes.id,\n\t\t linkid = attributes.linkid,\n\t\t href = attributes.href;\n\n\n\t\tvar classes = __WEBPACK_IMPORTED_MODULE_0_classnames___default()((_classnames = {}, _defineProperty(_classnames, \"align\" + align, align), _defineProperty(_classnames, 'is-resized', width || height), _classnames));\n\n\t\tvar image = wp.element.createElement(\"img\", {\n\t\t\tsrc: url,\n\t\t\talt: alt,\n\t\t\tclassName: id ? \"wp-image-\" + id : null,\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t});\n\n\t\tvar figure = wp.element.createElement(\n\t\t\tFragment,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\t\"ta\",\n\t\t\t\t{ linkid: linkid, href: href },\n\t\t\t\timage\n\t\t\t),\n\t\t\twp.element.createElement(RichText.Content, { tagName: \"figcaption\", value: caption })\n\t\t);\n\n\t\tif ('left' === align || 'right' === align || 'center' === align) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\t\"div\",\n\t\t\t\t{ className: \"wp-block-image\" },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"figure\",\n\t\t\t\t\t{ className: classes },\n\t\t\t\t\tfigure\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn wp.element.createElement(\n\t\t\t\"figure\",\n\t\t\t{ className: \"wp-block-image \" + classes },\n\t\t\tfigure\n\t\t);\n\t}\n};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export pickRelevantMediaFiles */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__image_size__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__search_input__ = __webpack_require__(7);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar _lodash = lodash,\n get = _lodash.get,\n isEmpty = _lodash.isEmpty,\n map = _lodash.map,\n last = _lodash.last,\n pick = _lodash.pick,\n compact = _lodash.compact;\nvar getPath = wp.url.getPath;\nvar _wp$i18n = wp.i18n,\n __ = _wp$i18n.__,\n sprintf = _wp$i18n.sprintf;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n Fragment = _wp$element.Fragment,\n createRef = _wp$element.createRef;\nvar _wp$blob = wp.blob,\n getBlobByURL = _wp$blob.getBlobByURL,\n revokeBlobURL = _wp$blob.revokeBlobURL,\n isBlobURL = _wp$blob.isBlobURL;\nvar _wp$components = wp.components,\n Placeholder = _wp$components.Placeholder,\n Button = _wp$components.Button,\n ButtonGroup = _wp$components.ButtonGroup,\n IconButton = _wp$components.IconButton,\n PanelBody = _wp$components.PanelBody,\n ResizableBox = _wp$components.ResizableBox,\n SelectControl = _wp$components.SelectControl,\n Spinner = _wp$components.Spinner,\n TextControl = _wp$components.TextControl,\n TextareaControl = _wp$components.TextareaControl,\n Toolbar = _wp$components.Toolbar,\n withNotices = _wp$components.withNotices,\n ToggleControl = _wp$components.ToggleControl,\n Popover = _wp$components.Popover;\nvar withSelect = wp.data.withSelect;\nvar _wp$editor = wp.editor,\n RichText = _wp$editor.RichText,\n BlockControls = _wp$editor.BlockControls,\n InspectorControls = _wp$editor.InspectorControls,\n MediaUpload = _wp$editor.MediaUpload,\n MediaUploadCheck = _wp$editor.MediaUploadCheck,\n MediaPlaceholder = _wp$editor.MediaPlaceholder,\n BlockAlignmentToolbar = _wp$editor.BlockAlignmentToolbar,\n mediaUpload = _wp$editor.mediaUpload;\nvar withViewportMatch = wp.viewport.withViewportMatch;\nvar compose = wp.compose.compose;\n\n\n\n\n\n\n/**\n * Module constants\n */\nvar MIN_SIZE = 20;\nvar LINK_DESTINATION_NONE = 'none';\nvar LINK_DESTINATION_MEDIA = 'media';\nvar LINK_DESTINATION_ATTACHMENT = 'attachment';\nvar LINK_DESTINATION_CUSTOM = 'custom';\nvar NEW_TAB_REL = 'noreferrer noopener';\nvar ALLOWED_MEDIA_TYPES = ['image'];\n\nvar pickRelevantMediaFiles = function pickRelevantMediaFiles(image) {\n\tvar imageProps = pick(image, ['alt', 'id', 'link', 'caption']);\n\timageProps.url = get(image, ['sizes', 'large', 'url']) || get(image, ['media_details', 'sizes', 'large', 'source_url']) || image.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nvar isTemporaryImage = function isTemporaryImage(id, url) {\n\treturn !id && isBlobURL(url);\n};\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no id\n * and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nvar isExternalImage = function isExternalImage(id, url) {\n\treturn url && !id && !isBlobURL(url);\n};\n\nvar ImageEdit = function (_Component) {\n\t_inherits(ImageEdit, _Component);\n\n\tfunction ImageEdit(_ref) {\n\t\tvar attributes = _ref.attributes;\n\n\t\t_classCallCheck(this, ImageEdit);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ImageEdit.__proto__ || Object.getPrototypeOf(ImageEdit)).apply(this, arguments));\n\n\t\t_this.updateAlt = _this.updateAlt.bind(_this);\n\t\t_this.updateAlignment = _this.updateAlignment.bind(_this);\n\t\t_this.onFocusCaption = _this.onFocusCaption.bind(_this);\n\t\t_this.onImageClick = _this.onImageClick.bind(_this);\n\t\t_this.onSelectImage = _this.onSelectImage.bind(_this);\n\t\t_this.updateImageURL = _this.updateImageURL.bind(_this);\n\t\t_this.updateWidth = _this.updateWidth.bind(_this);\n\t\t_this.updateHeight = _this.updateHeight.bind(_this);\n\t\t_this.updateDimensions = _this.updateDimensions.bind(_this);\n\t\t_this.getFilename = _this.getFilename.bind(_this);\n\t\t_this.toggleIsEditing = _this.toggleIsEditing.bind(_this);\n\t\t_this.onImageError = _this.onImageError.bind(_this);\n\t\t_this.onChangeInputValue = _this.onChangeInputValue.bind(_this);\n\t\t_this.autocompleteRef = createRef();\n\t\t_this.resetInvalidLink = _this.resetInvalidLink.bind(_this);\n\t\t_this.updateImageSelection = _this.updateImageSelection.bind(_this);\n\t\t_this.onSelectAffiliateImage = _this.onSelectAffiliateImage.bind(_this);\n\t\t_this.editAFfiliateImage = _this.editAFfiliateImage.bind(_this);\n\n\t\t_this.state = {\n\t\t\tcaptionFocused: false,\n\t\t\tisEditing: !attributes.url,\n\t\t\tinputValue: '',\n\t\t\tlinkid: 0,\n\t\t\tpost: null,\n\t\t\tshowSuggestions: false,\n\t\t\timageSelection: [],\n\t\t\taffiliateLink: null\n\t\t};\n\t\treturn _this;\n\t}\n\n\t_createClass(ImageEdit, [{\n\t\tkey: \"componentDidMount\",\n\t\tvalue: function componentDidMount() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t attributes = _props.attributes,\n\t\t\t setAttributes = _props.setAttributes,\n\t\t\t noticeOperations = _props.noticeOperations;\n\t\t\tvar id = attributes.id,\n\t\t\t _attributes$url = attributes.url,\n\t\t\t url = _attributes$url === undefined ? '' : _attributes$url;\n\n\n\t\t\tif (isTemporaryImage(id, url)) {\n\t\t\t\tvar file = getBlobByURL(url);\n\n\t\t\t\tif (file) {\n\t\t\t\t\tmediaUpload({\n\t\t\t\t\t\tfilesList: [file],\n\t\t\t\t\t\tonFileChange: function onFileChange(_ref2) {\n\t\t\t\t\t\t\tvar _ref3 = _slicedToArray(_ref2, 1),\n\t\t\t\t\t\t\t image = _ref3[0];\n\n\t\t\t\t\t\t\tsetAttributes(pickRelevantMediaFiles(image));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\t\tonError: function onError(message) {\n\t\t\t\t\t\t\tnoticeOperations.createErrorNotice(message);\n\t\t\t\t\t\t\t_this2.setState({ isEditing: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"componentDidUpdate\",\n\t\tvalue: function componentDidUpdate(prevProps) {\n\t\t\tvar _prevProps$attributes = prevProps.attributes,\n\t\t\t prevID = _prevProps$attributes.id,\n\t\t\t _prevProps$attributes2 = _prevProps$attributes.url,\n\t\t\t prevURL = _prevProps$attributes2 === undefined ? '' : _prevProps$attributes2;\n\t\t\tvar _props$attributes = this.props.attributes,\n\t\t\t id = _props$attributes.id,\n\t\t\t _props$attributes$url = _props$attributes.url,\n\t\t\t url = _props$attributes$url === undefined ? '' : _props$attributes$url;\n\n\n\t\t\tif (isTemporaryImage(prevID, prevURL) && !isTemporaryImage(id, url)) {\n\t\t\t\trevokeBlobURL(url);\n\t\t\t}\n\n\t\t\tif (!this.props.isSelected && prevProps.isSelected && this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onSelectImage\",\n\t\tvalue: function onSelectImage(media) {\n\n\t\t\tif (!media || !media.url) {\n\t\t\t\tthis.props.setAttributes({\n\t\t\t\t\turl: undefined,\n\t\t\t\t\talt: undefined,\n\t\t\t\t\tid: undefined,\n\t\t\t\t\tcaption: undefined\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar affiliateLink = this.state.affiliateLink;\n\n\n\t\t\tthis.setState({\n\t\t\t\tisEditing: false\n\t\t\t});\n\n\t\t\tthis.props.setAttributes(_extends({}, pickRelevantMediaFiles(media), {\n\t\t\t\tlinkid: affiliateLink.id,\n\t\t\t\thref: affiliateLink.link,\n\t\t\t\taffiliateLink: affiliateLink,\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"onImageError\",\n\t\tvalue: function onImageError(url) {\n\t\t\t// Check if there's an embed block that handles this URL.\n\t\t\tvar embedBlock = Object(__WEBPACK_IMPORTED_MODULE_1__util__[\"a\" /* createUpgradedEmbedBlock */])({ attributes: { url: url } });\n\t\t\tif (undefined !== embedBlock) {\n\t\t\t\tthis.props.onReplace(embedBlock);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onFocusCaption\",\n\t\tvalue: function onFocusCaption() {\n\t\t\tif (!this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onImageClick\",\n\t\tvalue: function onImageClick() {\n\t\t\tif (this.state.captionFocused) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcaptionFocused: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"updateAlt\",\n\t\tvalue: function updateAlt(newAlt) {\n\t\t\tthis.props.setAttributes({ alt: newAlt });\n\t\t}\n\t}, {\n\t\tkey: \"updateAlignment\",\n\t\tvalue: function updateAlignment(nextAlign) {\n\t\t\tvar extraUpdatedAttributes = ['wide', 'full'].indexOf(nextAlign) !== -1 ? { width: undefined, height: undefined } : {};\n\t\t\tthis.props.setAttributes(_extends({}, extraUpdatedAttributes, { align: nextAlign }));\n\t\t}\n\t}, {\n\t\tkey: \"updateImageURL\",\n\t\tvalue: function updateImageURL(url) {\n\t\t\tthis.props.setAttributes({ url: url, width: undefined, height: undefined });\n\t\t}\n\t}, {\n\t\tkey: \"updateWidth\",\n\t\tvalue: function updateWidth(width) {\n\t\t\tthis.props.setAttributes({ width: parseInt(width, 10) });\n\t\t}\n\t}, {\n\t\tkey: \"updateHeight\",\n\t\tvalue: function updateHeight(height) {\n\t\t\tthis.props.setAttributes({ height: parseInt(height, 10) });\n\t\t}\n\t}, {\n\t\tkey: \"updateDimensions\",\n\t\tvalue: function updateDimensions() {\n\t\t\tvar _this3 = this;\n\n\t\t\tvar width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\t\t\tvar height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n\t\t\treturn function () {\n\t\t\t\t_this3.props.setAttributes({ width: width, height: height });\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"getFilename\",\n\t\tvalue: function getFilename(url) {\n\t\t\tvar path = getPath(url);\n\t\t\tif (path) {\n\t\t\t\treturn last(path.split('/'));\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"getLinkDestinationOptions\",\n\t\tvalue: function getLinkDestinationOptions() {\n\t\t\treturn [{ value: LINK_DESTINATION_NONE, label: __('None') }, { value: LINK_DESTINATION_MEDIA, label: __('Media File') }, { value: LINK_DESTINATION_ATTACHMENT, label: __('Attachment Page') }, { value: LINK_DESTINATION_CUSTOM, label: __('Custom URL') }];\n\t\t}\n\t}, {\n\t\tkey: \"toggleIsEditing\",\n\t\tvalue: function toggleIsEditing() {\n\t\t\tthis.setState({\n\t\t\t\tisEditing: !this.state.isEditing\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"getImageSizeOptions\",\n\t\tvalue: function getImageSizeOptions() {\n\t\t\tvar _props2 = this.props,\n\t\t\t imageSizes = _props2.imageSizes,\n\t\t\t image = _props2.image;\n\n\t\t\treturn compact(map(imageSizes, function (_ref4) {\n\t\t\t\tvar name = _ref4.name,\n\t\t\t\t slug = _ref4.slug;\n\n\t\t\t\tvar sizeUrl = get(image, ['media_details', 'sizes', slug, 'source_url']);\n\t\t\t\tif (!sizeUrl) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tvalue: sizeUrl,\n\t\t\t\t\tlabel: name\n\t\t\t\t};\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"onChangeInputValue\",\n\t\tvalue: function onChangeInputValue(inputValue) {\n\t\t\tvar post = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\t\tvar linkid = post ? post.id : 0;\n\t\t\tthis.setState({ inputValue: inputValue, linkid: linkid, post: post });\n\t\t}\n\t}, {\n\t\tkey: \"resetInvalidLink\",\n\t\tvalue: function resetInvalidLink() {\n\t\t\tthis.setState({ invalidLink: false });\n\t\t}\n\t}, {\n\t\tkey: \"updateImageSelection\",\n\t\tvalue: function updateImageSelection(imageSelection, affiliateLink) {\n\t\t\tthis.setState({\n\t\t\t\timageSelection: imageSelection,\n\t\t\t\taffiliateLink: affiliateLink\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"onSelectAffiliateImage\",\n\t\tvalue: function onSelectAffiliateImage(image) {\n\t\t\tvar _this4 = this;\n\n\t\t\tvar request = wp.apiFetch({\n\t\t\t\tpath: wp.url.addQueryArgs('wp/v2/media/' + image.id, {\n\t\t\t\t\tcontext: 'edit',\n\t\t\t\t\t_locale: 'user'\n\t\t\t\t})\n\t\t\t});\n\n\t\t\trequest.then(function (media) {\n\t\t\t\tmedia.url = media.source_url;\n\t\t\t\t_this4.onSelectImage(media);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"editAFfiliateImage\",\n\t\tvalue: function editAFfiliateImage() {\n\t\t\tvar attributes = this.props.attributes;\n\t\t\tvar affiliateLink = attributes.affiliateLink;\n\n\n\t\t\tthis.setState({\n\t\t\t\tisEditing: true,\n\t\t\t\timageSelection: affiliateLink.images,\n\t\t\t\taffiliateLink: affiliateLink\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t isEditing = _state.isEditing,\n\t\t\t imageSelection = _state.imageSelection,\n\t\t\t affiliateLink = _state.affiliateLink;\n\t\t\tvar _props3 = this.props,\n\t\t\t attributes = _props3.attributes,\n\t\t\t setAttributes = _props3.setAttributes,\n\t\t\t isLargeViewport = _props3.isLargeViewport,\n\t\t\t isSelected = _props3.isSelected,\n\t\t\t className = _props3.className,\n\t\t\t maxWidth = _props3.maxWidth,\n\t\t\t toggleSelection = _props3.toggleSelection,\n\t\t\t isRTL = _props3.isRTL;\n\t\t\tvar url = attributes.url,\n\t\t\t alt = attributes.alt,\n\t\t\t caption = attributes.caption,\n\t\t\t align = attributes.align,\n\t\t\t linkDestination = attributes.linkDestination,\n\t\t\t width = attributes.width,\n\t\t\t height = attributes.height,\n\t\t\t linkid = attributes.linkid,\n\t\t\t href = attributes.href;\n\n\t\t\tvar toolbarEditButton = wp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(IconButton, {\n\t\t\t\t\tclassName: \"ta-edit-image-button components-icon-button components-toolbar__control\",\n\t\t\t\t\tlabel: __('Edit ThirstyAffiliates Image'),\n\t\t\t\t\ticon: \"edit\",\n\t\t\t\t\tonClick: this.editAFfiliateImage\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tvar controls = wp.element.createElement(\n\t\t\t\tBlockControls,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(BlockAlignmentToolbar, {\n\t\t\t\t\tvalue: align,\n\t\t\t\t\tonChange: this.updateAlignment\n\t\t\t\t}),\n\t\t\t\ttoolbarEditButton\n\t\t\t);\n\n\t\t\tif (isEditing) {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\tcontrols,\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tPlaceholder,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ticon: \"format-image\",\n\t\t\t\t\t\t\tlabel: __(\"ThirstyAffiliates Image\"),\n\t\t\t\t\t\t\tinstructions: __(\"Search for an affiliate link and select image to insert.\")\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_3__search_input__[\"a\" /* default */], {\n\t\t\t\t\t\t\tupdateImageSelection: this.updateImageSelection\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t!!imageSelection.length && wp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ className: \"ta-image-sel-wrap\" },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"h3\",\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\taffiliateLink.title + \" \" + __('attached images:')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"ta-image-selection\" },\n\t\t\t\t\t\t\t\timageSelection.map(function (image, index) {\n\t\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\"button\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\t\t\treturn _this5.onSelectAffiliateImage(image);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\twp.element.createElement(\"img\", { src: image.src })\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar classes = __WEBPACK_IMPORTED_MODULE_0_classnames___default()(className, {\n\t\t\t\t'wp-block-image': true,\n\t\t\t\t'is-transient': isBlobURL(url),\n\t\t\t\t'is-resized': !!width || !!height,\n\t\t\t\t'is-focused': isSelected\n\t\t\t});\n\n\t\t\tvar isResizable = ['wide', 'full'].indexOf(align) === -1 && isLargeViewport;\n\t\t\tvar imageSizeOptions = this.getImageSizeOptions();\n\n\t\t\tvar getInspectorControls = function getInspectorControls(imageWidth, imageHeight) {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tInspectorControls,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tPanelBody,\n\t\t\t\t\t\t{ title: __('Image Settings') },\n\t\t\t\t\t\twp.element.createElement(TextareaControl, {\n\t\t\t\t\t\t\tlabel: __('Alt Text (Alternative Text)'),\n\t\t\t\t\t\t\tvalue: alt,\n\t\t\t\t\t\t\tonChange: _this5.updateAlt,\n\t\t\t\t\t\t\thelp: __('Alternative text describes your image to people who can’t see it. Add a short description with its key details.')\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t!isEmpty(imageSizeOptions) && wp.element.createElement(SelectControl, {\n\t\t\t\t\t\t\tlabel: __('Image Size'),\n\t\t\t\t\t\t\tvalue: url,\n\t\t\t\t\t\t\toptions: imageSizeOptions,\n\t\t\t\t\t\t\tonChange: _this5.updateImageURL\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tisResizable && wp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions\" },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"p\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\t__('Image Dimensions')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\t\t\t\tclassName: \"block-library-image__dimensions__width\",\n\t\t\t\t\t\t\t\t\tlabel: __('Width'),\n\t\t\t\t\t\t\t\t\tvalue: width !== undefined ? width : '',\n\t\t\t\t\t\t\t\t\tplaceholder: imageWidth,\n\t\t\t\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\t\t\t\tonChange: _this5.updateWidth\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\t\t\t\ttype: \"number\",\n\t\t\t\t\t\t\t\t\tclassName: \"block-library-image__dimensions__height\",\n\t\t\t\t\t\t\t\t\tlabel: __('Height'),\n\t\t\t\t\t\t\t\t\tvalue: height !== undefined ? height : '',\n\t\t\t\t\t\t\t\t\tplaceholder: imageHeight,\n\t\t\t\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\t\t\t\tonChange: _this5.updateHeight\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t{ className: \"block-library-image__dimensions__row\" },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tButtonGroup,\n\t\t\t\t\t\t\t\t\t{ \"aria-label\": __('Image Size') },\n\t\t\t\t\t\t\t\t\t[25, 50, 75, 100].map(function (scale) {\n\t\t\t\t\t\t\t\t\t\tvar scaledWidth = Math.round(imageWidth * (scale / 100));\n\t\t\t\t\t\t\t\t\t\tvar scaledHeight = Math.round(imageHeight * (scale / 100));\n\n\t\t\t\t\t\t\t\t\t\tvar isCurrent = width === scaledWidth && height === scaledHeight;\n\n\t\t\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\tButton,\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tkey: scale,\n\t\t\t\t\t\t\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\t\t\t\t\t\t\tisPrimary: isCurrent,\n\t\t\t\t\t\t\t\t\t\t\t\t\"aria-pressed\": isCurrent,\n\t\t\t\t\t\t\t\t\t\t\t\tonClick: _this5.updateDimensions(scaledWidth, scaledHeight)\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\t\t\t\t\t\"%\"\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tButton,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tisSmall: true,\n\t\t\t\t\t\t\t\t\t\tonClick: _this5.updateDimensions()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t__('Reset')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Disable reason: Each block can be selected by clicking on it\n\t\t\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t\t\treturn wp.element.createElement(\n\t\t\t\tFragment,\n\t\t\t\tnull,\n\t\t\t\tcontrols,\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"figure\",\n\t\t\t\t\t{ className: classes },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2__image_size__[\"a\" /* default */],\n\t\t\t\t\t\t{ src: url, dirtynessTrigger: align },\n\t\t\t\t\t\tfunction (sizes) {\n\t\t\t\t\t\t\tvar imageWidthWithinContainer = sizes.imageWidthWithinContainer,\n\t\t\t\t\t\t\t imageHeightWithinContainer = sizes.imageHeightWithinContainer,\n\t\t\t\t\t\t\t imageWidth = sizes.imageWidth,\n\t\t\t\t\t\t\t imageHeight = sizes.imageHeight;\n\n\n\t\t\t\t\t\t\tvar filename = _this5.getFilename(url);\n\t\t\t\t\t\t\tvar defaultedAlt = void 0;\n\t\t\t\t\t\t\tif (alt) {\n\t\t\t\t\t\t\t\tdefaultedAlt = alt;\n\t\t\t\t\t\t\t} else if (filename) {\n\t\t\t\t\t\t\t\tdefaultedAlt = sprintf(__('This image has an empty alt attribute; its file name is %s'), filename);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultedAlt = __('This image has an empty alt attribute');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar img =\n\t\t\t\t\t\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t\t\t\t\t\t// should direct focus to block.\n\t\t\t\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t\"ta\",\n\t\t\t\t\t\t\t\t\t{ linkid: linkid, href: href },\n\t\t\t\t\t\t\t\t\twp.element.createElement(\"img\", { src: url, alt: defaultedAlt, onClick: _this5.onImageClick, onError: function onError() {\n\t\t\t\t\t\t\t\t\t\t\treturn _this5.onImageError(url);\n\t\t\t\t\t\t\t\t\t\t} })\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tisBlobURL(url) && wp.element.createElement(Spinner, null)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\t;\n\n\t\t\t\t\t\t\tif (!isResizable || !imageWidthWithinContainer) {\n\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\tgetInspectorControls(imageWidth, imageHeight),\n\t\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t\t\t\t{ style: { width: width, height: height } },\n\t\t\t\t\t\t\t\t\t\timg\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar currentWidth = width || imageWidthWithinContainer;\n\t\t\t\t\t\t\tvar currentHeight = height || imageHeightWithinContainer;\n\n\t\t\t\t\t\t\tvar ratio = imageWidth / imageHeight;\n\t\t\t\t\t\t\tvar minWidth = imageWidth < imageHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\t\t\t\t\t\tvar minHeight = imageHeight < imageWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t\t\t\t\t\t// With the current implementation of ResizableBox, an image needs an explicit pixel value for the max-width.\n\t\t\t\t\t\t\t// In absence of being able to set the content-width, this max-width is currently dictated by the vanilla editor style.\n\t\t\t\t\t\t\t// The following variable adds a buffer to this vanilla style, so 3rd party themes have some wiggleroom.\n\t\t\t\t\t\t\t// This does, in most cases, allow you to scale the image beyond the width of the main column, though not infinitely.\n\t\t\t\t\t\t\t// @todo It would be good to revisit this once a content-width variable becomes available.\n\t\t\t\t\t\t\tvar maxWidthBuffer = maxWidth * 2.5;\n\n\t\t\t\t\t\t\tvar showRightHandle = false;\n\t\t\t\t\t\t\tvar showLeftHandle = false;\n\n\t\t\t\t\t\t\t/* eslint-disable no-lonely-if */\n\t\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\t\t\t\t\t\tif (align === 'center') {\n\t\t\t\t\t\t\t\t// When the image is centered, show both handles.\n\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t} else if (isRTL) {\n\t\t\t\t\t\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t\t\t\t\t\t// Show the right handle and hide the left handle only when it is aligned left.\n\t\t\t\t\t\t\t\t// Otherwise always show the left handle.\n\t\t\t\t\t\t\t\tif (align === 'left') {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Show the left handle and hide the right handle only when the image is aligned right.\n\t\t\t\t\t\t\t\t// Otherwise always show the right handle.\n\t\t\t\t\t\t\t\tif (align === 'right') {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/* eslint-enable no-lonely-if */\n\n\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\tFragment,\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tgetInspectorControls(imageWidth, imageHeight),\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\tResizableBox,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tsize: width && height ? {\n\t\t\t\t\t\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\t\t\t\t\t\theight: height\n\t\t\t\t\t\t\t\t\t\t} : undefined,\n\t\t\t\t\t\t\t\t\t\tminWidth: minWidth,\n\t\t\t\t\t\t\t\t\t\tmaxWidth: maxWidthBuffer,\n\t\t\t\t\t\t\t\t\t\tminHeight: minHeight,\n\t\t\t\t\t\t\t\t\t\tmaxHeight: maxWidthBuffer / ratio,\n\t\t\t\t\t\t\t\t\t\tlockAspectRatio: true,\n\t\t\t\t\t\t\t\t\t\tenable: {\n\t\t\t\t\t\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\t\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\t\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\t\t\t\t\t\tleft: showLeftHandle\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonResizeStart: function onResizeStart() {\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection(false);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tonResizeStop: function onResizeStop(event, direction, elt, delta) {\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes({\n\t\t\t\t\t\t\t\t\t\t\t\twidth: parseInt(currentWidth + delta.width, 10),\n\t\t\t\t\t\t\t\t\t\t\t\theight: parseInt(currentHeight + delta.height, 10)\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\timg\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t),\n\t\t\t\t\t(!RichText.isEmpty(caption) || isSelected) && wp.element.createElement(RichText, {\n\t\t\t\t\t\ttagName: \"figcaption\",\n\t\t\t\t\t\tplaceholder: __('Write caption…'),\n\t\t\t\t\t\tvalue: caption,\n\t\t\t\t\t\tunstableOnFocus: this.onFocusCaption,\n\t\t\t\t\t\tonChange: function onChange(value) {\n\t\t\t\t\t\t\treturn setAttributes({ caption: value });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisSelected: this.state.captionFocused,\n\t\t\t\t\t\tinlineToolbar: true\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t);\n\t\t\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t\t}\n\t}]);\n\n\treturn ImageEdit;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (compose([withSelect(function (select, props) {\n\tvar _select = select('core'),\n\t getMedia = _select.getMedia;\n\n\tvar _select2 = select('core/editor'),\n\t getEditorSettings = _select2.getEditorSettings;\n\n\tvar id = props.attributes.id;\n\n\tvar _getEditorSettings = getEditorSettings(),\n\t maxWidth = _getEditorSettings.maxWidth,\n\t isRTL = _getEditorSettings.isRTL,\n\t imageSizes = _getEditorSettings.imageSizes;\n\n\treturn {\n\t\timage: id ? getMedia(id) : null,\n\t\tmaxWidth: maxWidth,\n\t\tisRTL: isRTL,\n\t\timageSizes: imageSizes\n\t};\n}), withViewportMatch({ isLargeViewport: 'medium' }), withNotices])(ImageEdit));\n\n/***/ }),\n/* 5 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return createUpgradedEmbedBlock; });\n/* unused harmony export isFromWordPress */\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar WORDPRESS_EMBED_BLOCK = 'core-embed/wordpress';\n\nvar _lodash = lodash,\n includes = _lodash.includes;\nvar renderToString = wp.element.renderToString;\nvar createBlock = wp.blocks.createBlock;\n\n/***\n * Creates a more suitable embed block based on the passed in props\n * and attributes generated from an embed block's preview.\n *\n * We require `attributesFromPreview` to be generated from the latest attributes\n * and preview, and because of the way the react lifecycle operates, we can't\n * guarantee that the attributes contained in the block's props are the latest\n * versions, so we require that these are generated separately.\n * See `getAttributesFromPreview` in the generated embed edit component.\n *\n * @param {Object} props The block's props.\n * @param {Object} attributesFromPreview Attributes generated from the block's most up to date preview.\n * @return {Object|undefined} A more suitable embed block if one exists.\n */\n\nvar createUpgradedEmbedBlock = function createUpgradedEmbedBlock(props, attributesFromPreview) {\n\tvar preview = props.preview,\n\t name = props.name;\n\tvar url = props.attributes.url;\n\n\n\tif (!url) {\n\t\treturn;\n\t}\n\n\tvar matchingBlock = findBlock(url);\n\n\t// WordPress blocks can work on multiple sites, and so don't have patterns,\n\t// so if we're in a WordPress block, assume the user has chosen it for a WordPress URL.\n\tif (WORDPRESS_EMBED_BLOCK !== name && DEFAULT_EMBED_BLOCK !== matchingBlock) {\n\t\t// At this point, we have discovered a more suitable block for this url, so transform it.\n\t\tif (name !== matchingBlock) {\n\t\t\treturn createBlock(matchingBlock, { url: url });\n\t\t}\n\t}\n\n\tif (preview) {\n\t\tvar html = preview.html;\n\n\t\t// We can't match the URL for WordPress embeds, we have to check the HTML instead.\n\n\t\tif (isFromWordPress(html)) {\n\t\t\t// If this is not the WordPress embed block, transform it into one.\n\t\t\tif (WORDPRESS_EMBED_BLOCK !== name) {\n\t\t\t\treturn createBlock(WORDPRESS_EMBED_BLOCK, _extends({\n\t\t\t\t\turl: url\n\t\t\t\t}, attributesFromPreview));\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar isFromWordPress = function isFromWordPress(html) {\n\treturn includes(html, 'class=\"wp-embedded-content\" data-secret');\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar _lodash = lodash,\n noop = _lodash.noop;\nvar withGlobalEvents = wp.compose.withGlobalEvents;\nvar Component = wp.element.Component;\n\nvar ImageSize = function (_Component) {\n\t_inherits(ImageSize, _Component);\n\n\tfunction ImageSize() {\n\t\t_classCallCheck(this, ImageSize);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ImageSize.__proto__ || Object.getPrototypeOf(ImageSize)).apply(this, arguments));\n\n\t\t_this.state = {\n\t\t\twidth: undefined,\n\t\t\theight: undefined\n\t\t};\n\t\t_this.bindContainer = _this.bindContainer.bind(_this);\n\t\t_this.calculateSize = _this.calculateSize.bind(_this);\n\t\treturn _this;\n\t}\n\n\t_createClass(ImageSize, [{\n\t\tkey: 'bindContainer',\n\t\tvalue: function bindContainer(ref) {\n\t\t\tthis.container = ref;\n\t\t}\n\t}, {\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate(prevProps) {\n\t\t\tif (this.props.src !== prevProps.src) {\n\t\t\t\tthis.setState({\n\t\t\t\t\twidth: undefined,\n\t\t\t\t\theight: undefined\n\t\t\t\t});\n\t\t\t\tthis.fetchImageSize();\n\t\t\t}\n\n\t\t\tif (this.props.dirtynessTrigger !== prevProps.dirtynessTrigger) {\n\t\t\t\tthis.calculateSize();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'componentDidMount',\n\t\tvalue: function componentDidMount() {\n\t\t\tthis.fetchImageSize();\n\t\t}\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tif (this.image) {\n\t\t\t\tthis.image.onload = noop;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'fetchImageSize',\n\t\tvalue: function fetchImageSize() {\n\t\t\tthis.image = new window.Image();\n\t\t\tthis.image.onload = this.calculateSize;\n\t\t\tthis.image.src = this.props.src;\n\t\t}\n\t}, {\n\t\tkey: 'calculateSize',\n\t\tvalue: function calculateSize() {\n\t\t\tvar maxWidth = this.container.clientWidth;\n\t\t\tvar exceedMaxWidth = this.image.width > maxWidth;\n\t\t\tvar ratio = this.image.height / this.image.width;\n\t\t\tvar width = exceedMaxWidth ? maxWidth : this.image.width;\n\t\t\tvar height = exceedMaxWidth ? maxWidth * ratio : this.image.height;\n\t\t\tthis.setState({ width: width, height: height });\n\t\t}\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar sizes = {\n\t\t\t\timageWidth: this.image && this.image.width,\n\t\t\t\timageHeight: this.image && this.image.height,\n\t\t\t\tcontainerWidth: this.container && this.container.clientWidth,\n\t\t\t\tcontainerHeight: this.container && this.container.clientHeight,\n\t\t\t\timageWidthWithinContainer: this.state.width,\n\t\t\t\timageHeightWithinContainer: this.state.height\n\t\t\t};\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ ref: this.bindContainer },\n\t\t\t\tthis.props.children(sizes)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ImageSize;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withGlobalEvents({\n\tresize: 'calculateSize'\n})(ImageSize));\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$components = wp.components,\n Spinner = _wp$components.Spinner,\n withSpokenMessages = _wp$components.withSpokenMessages,\n Popover = _wp$components.Popover,\n TextControl = _wp$components.TextControl;\nvar withInstanceId = wp.compose.withInstanceId;\n\nvar ThirstyURLInput = function (_Component) {\n\t_inherits(ThirstyURLInput, _Component);\n\n\t/**\n * Component constructor method.\n * \n * @since 3.6\n * \n * @param {*} param0 \n */\n\tfunction ThirstyURLInput(_ref) {\n\t\tvar autocompleteRef = _ref.autocompleteRef;\n\n\t\t_classCallCheck(this, ThirstyURLInput);\n\n\t\t// this.onChange = this.onChange.bind( this );\n\t\t// this.onKeyDown = this.onKeyDown.bind( this );\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLInput.__proto__ || Object.getPrototypeOf(ThirstyURLInput)).apply(this, arguments));\n\n\t\t_this.autocompleteRef = autocompleteRef || createRef();\n\t\t_this.inputRef = createRef();\n\t\t_this.searchAffiliateLinks = _this.searchAffiliateLinks.bind(_this);\n\t\t// this.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\n\n\t\t_this.suggestionNodes = [];\n\n\t\t_this.state = {\n\t\t\tposts: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\n * Component did update method.\n * \n * @since 3.6\n */\n\n\n\t_createClass(ThirstyURLInput, [{\n\t\tkey: \"componentDidUpdate\",\n\t\tvalue: function componentDidUpdate() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t showSuggestions = _state.showSuggestions,\n\t\t\t selectedSuggestion = _state.selectedSuggestion;\n\t\t\t// only have to worry about scrolling selected suggestion into view\n\t\t\t// when already expanded\n\n\t\t\tif (showSuggestions && selectedSuggestion !== null && !this.scrollingIntoView) {\n\t\t\t\tthis.scrollingIntoView = true;\n\t\t\t\tscrollIntoView(this.suggestionNodes[selectedSuggestion], this.autocompleteRef.current, {\n\t\t\t\t\tonlyScrollIfNeeded: true\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this2.scrollingIntoView = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Component unmount method.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: \"componentWillUnmount\",\n\t\tvalue: function componentWillUnmount() {\n\t\t\tdelete this.suggestionsRequest;\n\t\t}\n\n\t\t/**\n * Bind suggestion to node.\n * \n * @param {*} index \n */\n\n\t}, {\n\t\tkey: \"bindSuggestionNode\",\n\t\tvalue: function bindSuggestionNode(index) {\n\t\t\tvar _this3 = this;\n\n\t\t\treturn function (ref) {\n\t\t\t\t_this3.suggestionNodes[index] = ref;\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: \"searchAffiliateLinks\",\n\t\tvalue: function searchAffiliateLinks(value) {\n\t\t\tvar _this4 = this;\n\n\t\t\t// Show the suggestions after typing at least 2 characters=\n\t\t\tif (value.length < 2) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tshowSuggestions: false,\n\t\t\t\t\tselectedSuggestion: null,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.setState({\n\t\t\t\tshowSuggestions: true,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: true\n\t\t\t});\n\n\t\t\tvar formData = new FormData();\n\t\t\tformData.append(\"action\", \"search_affiliate_links_query\");\n\t\t\tformData.append(\"keyword\", value);\n\t\t\tformData.append(\"paged\", 1);\n\t\t\tformData.append(\"gutenberg\", true);\n\t\t\tformData.append(\"with_images\", true);\n\n\t\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\n\t\t\t// to filter results with category value. This is to prepare next update to add category filter.\n\t\t\tvar request = fetch(ajaxurl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: formData\n\t\t\t});\n\n\t\t\trequest.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t}).then(function (response) {\n\n\t\t\t\tif (!response.affiliate_links) return;\n\n\t\t\t\tvar posts = response.affiliate_links;\n\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif (_this4.suggestionsRequest !== request) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this4.setState({\n\t\t\t\t\tposts: posts,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\tif (!!posts.length) {\n\t\t\t\t\t_this4.props.debouncedSpeak(sprintf(_n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', posts.length), posts.length), 'assertive');\n\t\t\t\t} else {\n\t\t\t\t\t_this4.props.debouncedSpeak(__('No results.'), 'assertive');\n\t\t\t\t}\n\t\t\t}).catch(function () {\n\t\t\t\tif (_this4.suggestionsRequest === request) {\n\t\t\t\t\t_this4.setState({\n\t\t\t\t\t\tloading: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.suggestionsRequest = request;\n\t\t}\n\n\t\t/**\n * Set state when an affiliate link is selected.\n * \n * @since 3.6\n * \n * @param {*} post \n */\n\n\t}, {\n\t\tkey: \"selectLink\",\n\t\tvalue: function selectLink(post) {\n\t\t\t// this.props.onChange( post.link, post );\n\t\t\tthis.setState({\n\t\t\t\tselectedSuggestion: post,\n\t\t\t\tshowSuggestions: false\n\t\t\t});\n\n\t\t\tthis.props.updateImageSelection(post.images, post);\n\t\t}\n\n\t\t/**\n * Callback handler for when affiliate link is selected.\n * \n * @param {*} post \n */\n\n\t}, {\n\t\tkey: \"handleOnClick\",\n\t\tvalue: function handleOnClick(post) {\n\t\t\tthis.selectLink(post);\n\t\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\t\t// this.inputRef.current.focus();\n\t\t}\n\t}, {\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t _props$value = _props.value,\n\t\t\t value = _props$value === undefined ? '' : _props$value,\n\t\t\t _props$autoFocus = _props.autoFocus,\n\t\t\t autoFocus = _props$autoFocus === undefined ? true : _props$autoFocus,\n\t\t\t instanceId = _props.instanceId;\n\t\t\tvar _state2 = this.state,\n\t\t\t showSuggestions = _state2.showSuggestions,\n\t\t\t posts = _state2.posts,\n\t\t\t selectedSuggestion = _state2.selectedSuggestion,\n\t\t\t loading = _state2.loading;\n\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t\"div\",\n\t\t\t\t{ \"class\": \"edit-search-affiliate-links\" },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t\"form\",\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: \"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover\",\n\t\t\t\t\t\tonSubmit: this.displayAffiliateImages\n\t\t\t\t\t},\n\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\tclassName: \"ta-search-affiliate-links\",\n\t\t\t\t\t\tplaceholder: __(\"Type to search affiliate links\"),\n\t\t\t\t\t\tonChange: this.searchAffiliateLinks,\n\t\t\t\t\t\tautocomplete: \"off\"\n\t\t\t\t\t}),\n\t\t\t\t\tloading && wp.element.createElement(Spinner, null),\n\t\t\t\t\tshowSuggestions && !!posts.length && wp.element.createElement(\n\t\t\t\t\t\tPopover,\n\t\t\t\t\t\t{ position: \"bottom\", focusOnMount: false },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\"div\",\n\t\t\t\t\t\t\t{ \"class\": \"affilate-links-suggestions\" },\n\t\t\t\t\t\t\tposts.map(function (post, index) {\n\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t\"button\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkey: post.id,\n\t\t\t\t\t\t\t\t\t\trole: \"option\",\n\t\t\t\t\t\t\t\t\t\ttabIndex: \"-1\",\n\t\t\t\t\t\t\t\t\t\tid: \"editor-url-input-suggestion-\" + instanceId + \"-\" + index,\n\t\t\t\t\t\t\t\t\t\tref: _this5.bindSuggestionNode(index),\n\t\t\t\t\t\t\t\t\t\tclassName: __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-url-input__suggestion block-editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\t\treturn _this5.handleOnClick(post);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"aria-selected\": index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tpost.title || __('(no title)')\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ThirstyURLInput;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(withInstanceId(ThirstyURLInput)));\n\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = registerFormats;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ta_link__ = __webpack_require__(9);\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\n\n\nvar registerFormatType = wp.richText.registerFormatType;\n\n/**\n * Register custom formats.\n * \n * @since 3.6\n */\n\nfunction registerFormats() {\n\n [__WEBPACK_IMPORTED_MODULE_0__ta_link__[\"a\" /* taLink */]].forEach(function (_ref) {\n var name = _ref.name,\n settings = _objectWithoutProperties(_ref, [\"name\"]);\n\n return registerFormatType(name, settings);\n });\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return taLink; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__inline__ = __webpack_require__(10);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n Fragment = _wp$element.Fragment;\nvar withSpokenMessages = wp.components.withSpokenMessages;\nvar _wp$richText = wp.richText,\n getTextContent = _wp$richText.getTextContent,\n applyFormat = _wp$richText.applyFormat,\n removeFormat = _wp$richText.removeFormat,\n slice = _wp$richText.slice;\nvar isURL = wp.url.isURL;\nvar _wp$editor = wp.editor,\n RichTextToolbarButton = _wp$editor.RichTextToolbarButton,\n RichTextShortcut = _wp$editor.RichTextShortcut;\nvar _wp$components = wp.components,\n Path = _wp$components.Path,\n SVG = _wp$components.SVG;\nvar getRectangleFromRange = wp.dom.getRectangleFromRange;\n\n\nvar name = \"ta/link\";\n\n/**\n * Custom Affiliate link format. When applied will wrap selected text with <ta href=\"\" linkid=\"\"></ta> custom element.\n * Custom element is implemented here as we are not allowed to use <a> tag due to Gutenberg limitations.\n * Element is converted to normal <a> tag on frontend via PHP script filtered on 'the_content'.\n * \n * @since 3.6\n */\nvar taLink = {\n\tname: name,\n\ttitle: __(\"Affiliate Link\"),\n\ttagName: \"ta\",\n\tclassName: null,\n\tattributes: {\n\t\turl: \"href\",\n\t\ttarget: \"target\"\n\t},\n\tedit: withSpokenMessages(function (_Component) {\n\t\t_inherits(LinkEdit, _Component);\n\n\t\t/**\n * Component constructor.\n * \n * @since 3.6\n */\n\t\tfunction LinkEdit() {\n\t\t\t_classCallCheck(this, LinkEdit);\n\n\t\t\tvar _this = _possibleConstructorReturn(this, (LinkEdit.__proto__ || Object.getPrototypeOf(LinkEdit)).apply(this, arguments));\n\n\t\t\t_this.addLink = _this.addLink.bind(_this);\n\t\t\t_this.stopAddingLink = _this.stopAddingLink.bind(_this);\n\t\t\t_this.onRemoveFormat = _this.onRemoveFormat.bind(_this);\n\t\t\t_this.state = {\n\t\t\t\taddingLink: false\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\t/**\n * Callback to set state to adding link status.\n * \n * @since 3.6\n */\n\n\n\t\t_createClass(LinkEdit, [{\n\t\t\tkey: \"addLink\",\n\t\t\tvalue: function addLink() {\n\t\t\t\tvar _props = this.props,\n\t\t\t\t value = _props.value,\n\t\t\t\t onChange = _props.onChange;\n\n\t\t\t\tvar text = getTextContent(slice(value));\n\n\t\t\t\tif (text && isURL(text)) {\n\t\t\t\t\tonChange(applyFormat(value, { type: name, attributes: { url: text } }));\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState({ addingLink: true });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n * Callback to set state to stop adding link status.\n * \n * @since 3.6\n */\n\n\t\t}, {\n\t\t\tkey: \"stopAddingLink\",\n\t\t\tvalue: function stopAddingLink() {\n\t\t\t\tthis.setState({ addingLink: false });\n\t\t\t}\n\n\t\t\t/**\n * Remove format event callback.\n * \n * @since 3.6\n */\n\n\t\t}, {\n\t\t\tkey: \"onRemoveFormat\",\n\t\t\tvalue: function onRemoveFormat() {\n\t\t\t\tvar _props2 = this.props,\n\t\t\t\t value = _props2.value,\n\t\t\t\t onChange = _props2.onChange,\n\t\t\t\t speak = _props2.speak;\n\n\n\t\t\t\tonChange(removeFormat(value, name));\n\t\t\t\tspeak(__(\"Affiliate Link removed.\"), \"assertive\");\n\t\t\t}\n\n\t\t\t/**\n * Get selected anchor text.\n * \n * @since 3.9\n */\n\n\t\t}, {\n\t\t\tkey: \"getAnchorRect\",\n\t\t\tvalue: function getAnchorRect() {\n\n\t\t\t\tvar selection = window.getSelection();\n\t\t\t\tvar range = selection.rangeCount > 0 ? selection.getRangeAt(0) : null;\n\n\t\t\t\tif (!range) return;\n\n\t\t\t\tvar rect = null;\n\n\t\t\t\tif (this.state.addingLink) {\n\t\t\t\t\trect = getRectangleFromRange(range);\n\t\t\t\t} else {\n\n\t\t\t\t\tvar element = range.startContainer;\n\n\t\t\t\t\t// If the caret is right before the element, select the next element.\n\t\t\t\t\telement = element.nextElementSibling || element;\n\n\t\t\t\t\twhile (element.nodeType !== window.Node.ELEMENT_NODE) {\n\t\t\t\t\t\telement = element.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar closest = element.closest('ta');\n\t\t\t\t\tif (closest) {\n\t\t\t\t\t\trect = closest.getBoundingClientRect();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn rect;\n\t\t\t}\n\n\t\t\t/**\n * Component render method.\n * \n * @since 3.6\n */\n\n\t\t}, {\n\t\t\tkey: \"render\",\n\t\t\tvalue: function render() {\n\t\t\t\tvar _props3 = this.props,\n\t\t\t\t isActive = _props3.isActive,\n\t\t\t\t activeAttributes = _props3.activeAttributes,\n\t\t\t\t value = _props3.value,\n\t\t\t\t onChange = _props3.onChange;\n\n\n\t\t\t\tvar anchorRect = this.getAnchorRect();\n\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"access\",\n\t\t\t\t\t\tcharacter: \"s\",\n\t\t\t\t\t\tonUse: this.onRemoveFormat\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"primary\",\n\t\t\t\t\t\tcharacter: \"l\",\n\t\t\t\t\t\tonUse: this.addLink\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(RichTextShortcut, {\n\t\t\t\t\t\ttype: \"primaryShift\",\n\t\t\t\t\t\tcharacter: \"l\",\n\t\t\t\t\t\tonUse: this.onRemoveFormat\n\t\t\t\t\t}),\n\t\t\t\t\tisActive && wp.element.createElement(RichTextToolbarButton, {\n\t\t\t\t\t\ticon: \"editor-unlink\",\n\t\t\t\t\t\ttitle: __('Remove Affiliate Link'),\n\t\t\t\t\t\tclassName: \"ta-unlink-button\",\n\t\t\t\t\t\tonClick: this.onRemoveFormat,\n\t\t\t\t\t\tisActive: isActive,\n\t\t\t\t\t\tshortcutType: \"primaryShift\",\n\t\t\t\t\t\tshortcutCharacter: \"l\"\n\t\t\t\t\t}),\n\t\t\t\t\t!isActive && wp.element.createElement(RichTextToolbarButton, {\n\t\t\t\t\t\ticon: wp.element.createElement(\n\t\t\t\t\t\t\tSVG,\n\t\t\t\t\t\t\t{ xmlns: \"http://www.w3.org/2000/svg\", width: \"16.688\", height: \"9.875\", viewBox: \"0 0 16.688 9.875\" },\n\t\t\t\t\t\t\twp.element.createElement(Path, { id: \"TA.svg\", fill: \"black\", \"class\": \"cls-1\", d: \"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z\", transform: \"translate(-1.188 -5.25)\" })\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttitle: __('Affiliate Link'),\n\t\t\t\t\t\tclassName: \"ta-link-button\",\n\t\t\t\t\t\tonClick: this.addLink,\n\t\t\t\t\t\tshortcutType: \"primary\",\n\t\t\t\t\t\tshortcutCharacter: \"l\"\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_0__inline__[\"a\" /* default */], {\n\t\t\t\t\t\taddingLink: this.state.addingLink,\n\t\t\t\t\t\tstopAddingLink: this.stopAddingLink,\n\t\t\t\t\t\tisActive: isActive,\n\t\t\t\t\t\tactiveAttributes: activeAttributes,\n\t\t\t\t\t\tanchorRect: anchorRect,\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tonChange: onChange\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}]);\n\n\t\treturn LinkEdit;\n\t}(Component))\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__url_popover__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__url_input__ = __webpack_require__(13);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\n\n\n\nvar __ = wp.i18n.__;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$components = wp.components,\n ExternalLink = _wp$components.ExternalLink,\n ToggleControl = _wp$components.ToggleControl,\n IconButton = _wp$components.IconButton,\n withSpokenMessages = _wp$components.withSpokenMessages;\nvar _wp$keycodes = wp.keycodes,\n LEFT = _wp$keycodes.LEFT,\n RIGHT = _wp$keycodes.RIGHT,\n UP = _wp$keycodes.UP,\n DOWN = _wp$keycodes.DOWN,\n BACKSPACE = _wp$keycodes.BACKSPACE,\n ENTER = _wp$keycodes.ENTER;\nvar _wp$url = wp.url,\n prependHTTP = _wp$url.prependHTTP,\n safeDecodeURI = _wp$url.safeDecodeURI,\n filterURLForDisplay = _wp$url.filterURLForDisplay;\nvar _wp$richText = wp.richText,\n create = _wp$richText.create,\n insert = _wp$richText.insert,\n isCollapsed = _wp$richText.isCollapsed,\n applyFormat = _wp$richText.applyFormat,\n getTextContent = _wp$richText.getTextContent,\n slice = _wp$richText.slice;\n\n\nvar stopKeyPropagation = function stopKeyPropagation(event) {\n\treturn event.stopPropagation();\n};\n\n/**\n * Generates the format object that will be applied to the link text.\n * \n * @since 3.6\n *\n * @param {string} url The href of the link.\n * @param {boolean} linkid Affiliate link ID.\n * @param {Object} text The text that is being hyperlinked.\n *\n * @return {Object} The final format object.\n */\nfunction createLinkFormat(_ref) {\n\tvar url = _ref.url,\n\t linkid = _ref.linkid,\n\t text = _ref.text;\n\n\tvar format = {\n\t\ttype: \"ta/link\",\n\t\tattributes: {\n\t\t\turl: url,\n\t\t\tlinkid: linkid.toString()\n\t\t}\n\t};\n\n\treturn format;\n}\n\n/**\n * Check if input is being show.\n * \n * @since 3.6\n * \n * @param {Object} props Component props.\n * @param {Object} state Component state.\n */\nfunction isShowingInput(props, state) {\n\treturn props.addingLink || state.editLink;\n}\n\n/**\n * Affiliate Link editor JSX element.\n * \n * @since 3.6\n * \n * @param {Object} param0 Component props (destructred).\n */\nvar LinkEditor = function LinkEditor(_ref2) {\n\tvar value = _ref2.value,\n\t onChangeInputValue = _ref2.onChangeInputValue,\n\t onKeyDown = _ref2.onKeyDown,\n\t submitLink = _ref2.submitLink,\n\t invalidLink = _ref2.invalidLink,\n\t resetInvalidLink = _ref2.resetInvalidLink,\n\t autocompleteRef = _ref2.autocompleteRef;\n\treturn (\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t\twp.element.createElement(\n\t\t\t'form',\n\t\t\t{\n\t\t\t\tclassName: 'editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover',\n\t\t\t\tonKeyPress: stopKeyPropagation,\n\t\t\t\tonKeyDown: onKeyDown,\n\t\t\t\tonSubmit: submitLink\n\t\t\t},\n\t\t\twp.element.createElement(__WEBPACK_IMPORTED_MODULE_3__url_input__[\"a\" /* default */], {\n\t\t\t\tvalue: value,\n\t\t\t\tonChange: onChangeInputValue,\n\t\t\t\tautocompleteRef: autocompleteRef,\n\t\t\t\tinvalidLink: invalidLink,\n\t\t\t\tresetInvalidLink: resetInvalidLink\n\t\t\t}),\n\t\t\twp.element.createElement(IconButton, { icon: 'editor-break', label: __('Apply'), type: 'submit' })\n\t\t)\n\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n\n\t);\n};\n\n/**\n * Affiliate link url viewer JSX element.\n * \n * @param {*} param0 Component props (destructred).\n */\nvar LinkViewerUrl = function LinkViewerUrl(_ref3) {\n\tvar url = _ref3.url;\n\n\tvar prependedURL = prependHTTP(url);\n\tvar linkClassName = __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-format-toolbar__link-container-value block-editor-format-toolbar__link-container-value', {\n\t\t'has-invalid-link': !Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"a\" /* isValidHref */])(prependedURL)\n\t});\n\n\tif (!url) {\n\t\treturn wp.element.createElement('span', { className: linkClassName });\n\t}\n\n\treturn wp.element.createElement(\n\t\tExternalLink,\n\t\t{\n\t\t\tclassName: linkClassName,\n\t\t\thref: url\n\t\t},\n\t\tfilterURLForDisplay(safeDecodeURI(url))\n\t);\n};\n\n/**\n * Affiliate link viewer JSX element.\n * \n * @param {*} param0 Component props (destructred).\n */\nvar LinkViewer = function LinkViewer(_ref4) {\n\tvar url = _ref4.url,\n\t editLink = _ref4.editLink;\n\n\treturn (\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\t\twp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content',\n\t\t\t\tonKeyPress: stopKeyPropagation\n\t\t\t},\n\t\t\twp.element.createElement(LinkViewerUrl, { url: url }),\n\t\t\twp.element.createElement(IconButton, { icon: 'edit', label: __('Edit'), onClick: editLink })\n\t\t)\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions */\n\n\t);\n};\n\n/**\n * Inline affiliate link UI Component.\n * \n * @since 3.6\n * \n * @param {*} param0 Component props (destructred).\n */\n\nvar InlineAffiliateLinkUI = function (_Component) {\n\t_inherits(InlineAffiliateLinkUI, _Component);\n\n\tfunction InlineAffiliateLinkUI() {\n\t\t_classCallCheck(this, InlineAffiliateLinkUI);\n\n\t\tvar _this = _possibleConstructorReturn(this, (InlineAffiliateLinkUI.__proto__ || Object.getPrototypeOf(InlineAffiliateLinkUI)).apply(this, arguments));\n\n\t\t_this.editLink = _this.editLink.bind(_this);\n\t\t_this.submitLink = _this.submitLink.bind(_this);\n\t\t_this.onKeyDown = _this.onKeyDown.bind(_this);\n\t\t_this.onChangeInputValue = _this.onChangeInputValue.bind(_this);\n\t\t_this.onClickOutside = _this.onClickOutside.bind(_this);\n\t\t_this.resetState = _this.resetState.bind(_this);\n\t\t_this.autocompleteRef = createRef();\n\t\t_this.resetInvalidLink = _this.resetInvalidLink.bind(_this);\n\n\t\t_this.state = {\n\t\t\tinputValue: '',\n\t\t\tlinkid: 0,\n\t\t\tpost: null,\n\t\t\tinvalidLink: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\n * Stop the key event from propagating up to ObserveTyping.startTypingInTextField.\n * \n * @since 3.6\n * \n * @param {Object} event Event object.\n */\n\n\n\t_createClass(InlineAffiliateLinkUI, [{\n\t\tkey: 'onKeyDown',\n\t\tvalue: function onKeyDown(event) {\n\t\t\tif ([LEFT, DOWN, RIGHT, UP, BACKSPACE, ENTER].indexOf(event.keyCode) > -1) {\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Callback to set state when input value is changed.\n * \n * @since 3.6\n * \n * @param {*} inputValue \n * @param {*} post \n */\n\n\t}, {\n\t\tkey: 'onChangeInputValue',\n\t\tvalue: function onChangeInputValue(inputValue) {\n\t\t\tvar post = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\t\tvar linkid = post ? post.id : 0;\n\t\t\tthis.setState({ inputValue: inputValue, linkid: linkid, post: post });\n\t\t}\n\n\t\t/**\n * Callback to set state when edit affiliate link (already inserted) is triggered.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\n\t}, {\n\t\tkey: 'editLink',\n\t\tvalue: function editLink(event) {\n\t\t\tthis.setState({ editLink: true });\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\t/**\n * Callback to apply the affiliate link format to the selected text or position in the active block.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\n\t}, {\n\t\tkey: 'submitLink',\n\t\tvalue: function submitLink(event) {\n\t\t\tvar _props = this.props,\n\t\t\t isActive = _props.isActive,\n\t\t\t value = _props.value,\n\t\t\t onChange = _props.onChange,\n\t\t\t speak = _props.speak;\n\t\t\tvar _state = this.state,\n\t\t\t inputValue = _state.inputValue,\n\t\t\t linkid = _state.linkid,\n\t\t\t post = _state.post;\n\n\t\t\tvar url = prependHTTP(inputValue);\n\t\t\tvar selectedText = getTextContent(slice(value));\n\t\t\tvar format = createLinkFormat({\n\t\t\t\turl: url,\n\t\t\t\tlinkid: linkid,\n\t\t\t\ttext: selectedText\n\t\t\t});\n\n\t\t\tevent.preventDefault();\n\n\t\t\tif (!linkid || !post) {\n\t\t\t\tthis.setState({ invalidLink: true });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isCollapsed(value) && !isActive) {\n\t\t\t\tvar toInsert = applyFormat(create({ text: post.title }), format, 0, url.length);\n\t\t\t\tonChange(insert(value, toInsert));\n\t\t\t} else {\n\t\t\t\tonChange(applyFormat(value, format));\n\t\t\t}\n\n\t\t\tthis.resetState();\n\n\t\t\tif (!Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"a\" /* isValidHref */])(url)) {\n\t\t\t\tspeak(__('Warning: the link has been inserted but may have errors. Please test it.'), 'assertive');\n\t\t\t} else if (isActive) {\n\t\t\t\tspeak(__('Link edited.'), 'assertive');\n\t\t\t} else {\n\t\t\t\tspeak(__('Link inserted'), 'assertive');\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Callback to run when users clicks outside the popover UI.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\n\t}, {\n\t\tkey: 'onClickOutside',\n\t\tvalue: function onClickOutside(event) {\n\t\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\n\t\t\t// so onClickOutside fails to detect that a click on a suggestion occured in the\n\t\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\n\t\t\t// return to avoid the popover being closed.\n\t\t\tvar autocompleteElement = this.autocompleteRef.current;\n\t\t\tif (autocompleteElement && autocompleteElement.contains(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.resetState();\n\t\t}\n\n\t\t/**\n * Reset state callback.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'resetState',\n\t\tvalue: function resetState() {\n\t\t\tthis.props.stopAddingLink();\n\t\t\tthis.setState({ inputValue: '', editLink: false });\n\t\t\tthis.resetInvalidLink();\n\t\t}\n\n\t\t/**\n * Reset invalid link state callback. Separated as we need to run this independently from resetState() callback.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'resetInvalidLink',\n\t\tvalue: function resetInvalidLink() {\n\t\t\tthis.setState({ invalidLink: false });\n\t\t}\n\n\t\t/**\n * Component render method.\n *\n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props2 = this.props,\n\t\t\t isActive = _props2.isActive,\n\t\t\t _props2$activeAttribu = _props2.activeAttributes,\n\t\t\t url = _props2$activeAttribu.url,\n\t\t\t linkid = _props2$activeAttribu.linkid,\n\t\t\t addingLink = _props2.addingLink,\n\t\t\t anchorRect = _props2.anchorRect,\n\t\t\t value = _props2.value,\n\t\t\t onChange = _props2.onChange;\n\n\n\t\t\tif (!isActive && !addingLink) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar _state2 = this.state,\n\t\t\t inputValue = _state2.inputValue,\n\t\t\t invalidLink = _state2.invalidLink;\n\n\t\t\tvar showInput = isShowingInput(this.props, this.state);\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_2__url_popover__[\"a\" /* default */],\n\t\t\t\t{\n\t\t\t\t\tonClickOutside: this.onClickOutside,\n\t\t\t\t\tonClose: this.resetState,\n\t\t\t\t\tfocusOnMount: showInput ? 'firstElement' : false,\n\t\t\t\t\tinvalidLink: invalidLink,\n\t\t\t\t\tanchorRect: anchorRect\n\t\t\t\t},\n\t\t\t\tshowInput ? wp.element.createElement(LinkEditor, {\n\t\t\t\t\tvalue: inputValue,\n\t\t\t\t\tonChangeInputValue: this.onChangeInputValue,\n\t\t\t\t\tonKeyDown: this.onKeyDown,\n\t\t\t\t\tsubmitLink: this.submitLink,\n\t\t\t\t\tautocompleteRef: this.autocompleteRef,\n\t\t\t\t\tupdateLinkId: this.updateLinkId,\n\t\t\t\t\tinvalidLink: invalidLink,\n\t\t\t\t\tresetInvalidLink: this.resetInvalidLink\n\t\t\t\t}) : wp.element.createElement(LinkViewer, {\n\t\t\t\t\turl: url,\n\t\t\t\t\teditLink: this.editLink\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn InlineAffiliateLinkUI;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(InlineAffiliateLinkUI));\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = isValidHref;\nvar _lodash = lodash,\n startsWith = _lodash.startsWith;\nvar _wp$url = wp.url,\n getProtocol = _wp$url.getProtocol,\n isValidProtocol = _wp$url.isValidProtocol,\n getAuthority = _wp$url.getAuthority,\n isValidAuthority = _wp$url.isValidAuthority,\n getPath = _wp$url.getPath,\n isValidPath = _wp$url.isValidPath,\n getQueryString = _wp$url.getQueryString,\n isValidQueryString = _wp$url.isValidQueryString,\n getFragment = _wp$url.getFragment,\n isValidFragment = _wp$url.isValidFragment;\n\n/**\n * Check for issues with the provided href.\n * \n * @since 3.6\n *\n * @param {string} href The href.\n * @return {boolean} Is the href invalid?\n */\n\nfunction isValidHref(href) {\n\tif (!href) {\n\t\treturn false;\n\t}\n\n\tvar trimmedHref = href.trim();\n\n\tif (!trimmedHref) {\n\t\treturn false;\n\t}\n\n\t// Does the href start with something that looks like a URL protocol?\n\tif (/^\\S+:/.test(trimmedHref)) {\n\t\tvar protocol = getProtocol(trimmedHref);\n\t\tif (!isValidProtocol(protocol)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Add some extra checks for http(s) URIs, since these are the most common use-case.\n\t\t// This ensures URIs with an http protocol have exactly two forward slashes following the protocol.\n\t\tif (startsWith(protocol, 'http') && !/^https?:\\/\\/[^\\/\\s]/i.test(trimmedHref)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar authority = getAuthority(trimmedHref);\n\t\tif (!isValidAuthority(authority)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar path = getPath(trimmedHref);\n\t\tif (path && !isValidPath(path)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar queryString = getQueryString(trimmedHref);\n\t\tif (queryString && !isValidQueryString(queryString)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar fragment = getFragment(trimmedHref);\n\t\tif (fragment && !isValidFragment(fragment)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Validate anchor links.\n\tif (startsWith(trimmedHref, '#') && !isValidFragment(trimmedHref)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _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; }; }();\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\nvar __ = wp.i18n.__;\nvar Component = wp.element.Component;\nvar _wp$components = wp.components,\n Popover = _wp$components.Popover,\n IconButton = _wp$components.IconButton;\n\n/**\n * Custom URL Popover component.\n * \n * @since 3.6\n */\n\nvar ThirstyURLPopover = function (_Component) {\n\t_inherits(ThirstyURLPopover, _Component);\n\n\t/**\n * Component constructor method.\n * \n * @since 3.6\n */\n\tfunction ThirstyURLPopover() {\n\t\t_classCallCheck(this, ThirstyURLPopover);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLPopover.__proto__ || Object.getPrototypeOf(ThirstyURLPopover)).apply(this, arguments));\n\n\t\t_this.toggleSettingsVisibility = _this.toggleSettingsVisibility.bind(_this);\n\n\t\t_this.state = {\n\t\t\tisSettingsExpanded: false\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\n * Component constructor.\n * \n * @since 3.6\n */\n\n\n\t_createClass(ThirstyURLPopover, [{\n\t\tkey: 'toggleSettingsVisibility',\n\t\tvalue: function toggleSettingsVisibility() {\n\t\t\tthis.setState({\n\t\t\t\tisSettingsExpanded: !this.state.isSettingsExpanded\n\t\t\t});\n\t\t}\n\n\t\t/**\n * Component render method.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t children = _props.children,\n\t\t\t renderSettings = _props.renderSettings,\n\t\t\t invalidLink = _props.invalidLink,\n\t\t\t _props$position = _props.position,\n\t\t\t position = _props$position === undefined ? 'bottom center' : _props$position,\n\t\t\t _props$focusOnMount = _props.focusOnMount,\n\t\t\t focusOnMount = _props$focusOnMount === undefined ? 'firstElement' : _props$focusOnMount,\n\t\t\t popoverProps = _objectWithoutProperties(_props, ['children', 'renderSettings', 'invalidLink', 'position', 'focusOnMount']);\n\n\t\t\tvar isSettingsExpanded = this.state.isSettingsExpanded;\n\n\n\t\t\tvar showSettings = !!renderSettings && isSettingsExpanded;\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\tPopover,\n\t\t\t\t_extends({\n\t\t\t\t\tclassName: 'ta-url-popover editor-url-popover block-editor-url-popover',\n\t\t\t\t\tfocusOnMount: focusOnMount,\n\t\t\t\t\tposition: position\n\t\t\t\t}, popoverProps),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'editor-url-popover__row' },\n\t\t\t\t\tchildren,\n\t\t\t\t\t!!renderSettings && wp.element.createElement(IconButton, {\n\t\t\t\t\t\tclassName: 'editor-url-popover__settings-toggle',\n\t\t\t\t\t\ticon: 'ellipsis',\n\t\t\t\t\t\tlabel: __('Link Settings'),\n\t\t\t\t\t\tonClick: this.toggleSettingsVisibility,\n\t\t\t\t\t\t'aria-expanded': isSettingsExpanded\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\tshowSettings && wp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'editor-url-popover__row editor-url-popover__settings' },\n\t\t\t\t\trenderSettings()\n\t\t\t\t),\n\t\t\t\tinvalidLink && wp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ 'class': 'ta-invalid-link' },\n\t\t\t\t\t__('Invalid affiliate link')\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn ThirstyURLPopover;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ThirstyURLPopover);\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_classnames__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view__);\nvar _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; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n\n\n\nvar __ = wp.i18n.__;\nvar _lodash = lodash,\n throttle = _lodash.throttle;\nvar _wp$element = wp.element,\n Component = _wp$element.Component,\n createRef = _wp$element.createRef;\nvar _wp$keycodes = wp.keycodes,\n UP = _wp$keycodes.UP,\n DOWN = _wp$keycodes.DOWN,\n ENTER = _wp$keycodes.ENTER,\n TAB = _wp$keycodes.TAB;\nvar _wp$components = wp.components,\n Spinner = _wp$components.Spinner,\n withSpokenMessages = _wp$components.withSpokenMessages,\n Popover = _wp$components.Popover;\nvar withInstanceId = wp.compose.withInstanceId;\n\n// Since URLInput is rendered in the context of other inputs, but should be\n// considered a separate modal node, prevent keyboard events from propagating\n// as being considered from the input.\n\nvar stopEventPropagation = function stopEventPropagation(event) {\n\treturn event.stopPropagation();\n};\n\n/**\n * Custom URL Input component.\n * \n * @since 3.6\n */\n\nvar ThirstyURLInput = function (_Component) {\n\t_inherits(ThirstyURLInput, _Component);\n\n\t/**\n * Component constructor method.\n * \n * @since 3.6\n * \n * @param {*} param0 \n */\n\tfunction ThirstyURLInput(_ref) {\n\t\tvar autocompleteRef = _ref.autocompleteRef;\n\n\t\t_classCallCheck(this, ThirstyURLInput);\n\n\t\tvar _this = _possibleConstructorReturn(this, (ThirstyURLInput.__proto__ || Object.getPrototypeOf(ThirstyURLInput)).apply(this, arguments));\n\n\t\t_this.onChange = _this.onChange.bind(_this);\n\t\t_this.onKeyDown = _this.onKeyDown.bind(_this);\n\t\t_this.autocompleteRef = autocompleteRef || createRef();\n\t\t_this.inputRef = createRef();\n\t\t_this.updateSuggestions = throttle(_this.updateSuggestions.bind(_this), 200);\n\n\t\t_this.suggestionNodes = [];\n\n\t\t_this.state = {\n\t\t\tposts: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null\n\t\t};\n\t\treturn _this;\n\t}\n\n\t/**\n * Component did update method.\n * \n * @since 3.6\n */\n\n\n\t_createClass(ThirstyURLInput, [{\n\t\tkey: 'componentDidUpdate',\n\t\tvalue: function componentDidUpdate() {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar _state = this.state,\n\t\t\t showSuggestions = _state.showSuggestions,\n\t\t\t selectedSuggestion = _state.selectedSuggestion;\n\t\t\t// only have to worry about scrolling selected suggestion into view\n\t\t\t// when already expanded\n\n\t\t\tif (showSuggestions && selectedSuggestion !== null && !this.scrollingIntoView) {\n\t\t\t\tthis.scrollingIntoView = true;\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_1_dom_scroll_into_view___default()(this.suggestionNodes[selectedSuggestion], this.autocompleteRef.current, {\n\t\t\t\t\tonlyScrollIfNeeded: true\n\t\t\t\t});\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t_this2.scrollingIntoView = false;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Component unmount method.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'componentWillUnmount',\n\t\tvalue: function componentWillUnmount() {\n\t\t\tdelete this.suggestionsRequest;\n\t\t}\n\n\t\t/**\n * Bind suggestion to node.\n * \n * @param {*} index \n */\n\n\t}, {\n\t\tkey: 'bindSuggestionNode',\n\t\tvalue: function bindSuggestionNode(index) {\n\t\t\tvar _this3 = this;\n\n\t\t\treturn function (ref) {\n\t\t\t\t_this3.suggestionNodes[index] = ref;\n\t\t\t};\n\t\t}\n\n\t\t/**\n * Callback to show suggestions based on value inputted on search field.\n * \n * @since 3.6\n * \n * @param {*} value \n */\n\n\t}, {\n\t\tkey: 'updateSuggestions',\n\t\tvalue: function updateSuggestions(value) {\n\t\t\tvar _this4 = this;\n\n\t\t\t// Show the suggestions after typing at least 2 characters\n\t\t\t// and also for URLs\n\t\t\tif (value.length < 2 || /^https?:/.test(value)) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tshowSuggestions: false,\n\t\t\t\t\tselectedSuggestion: null,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.setState({\n\t\t\t\tshowSuggestions: true,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: true\n\t\t\t});\n\n\t\t\tvar formData = new FormData();\n\t\t\tformData.append(\"action\", \"search_affiliate_links_query\");\n\t\t\tformData.append(\"keyword\", value);\n\t\t\tformData.append(\"paged\", 1);\n\t\t\tformData.append(\"gutenberg\", true);\n\n\t\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\n\t\t\t// to filter results with category value. This is to prepare next update to add category filter.\n\t\t\tvar request = fetch(ajaxurl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: formData\n\t\t\t});\n\n\t\t\trequest.then(function (response) {\n\t\t\t\treturn response.json();\n\t\t\t}).then(function (response) {\n\n\t\t\t\tif (!response.affiliate_links) return;\n\n\t\t\t\tvar posts = response.affiliate_links;\n\n\t\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\t\tif (_this4.suggestionsRequest !== request) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_this4.setState({\n\t\t\t\t\tposts: posts,\n\t\t\t\t\tloading: false\n\t\t\t\t});\n\n\t\t\t\tif (!!posts.length) {\n\t\t\t\t\t_this4.props.debouncedSpeak(sprintf(_n('%d result found, use up and down arrow keys to navigate.', '%d results found, use up and down arrow keys to navigate.', posts.length), posts.length), 'assertive');\n\t\t\t\t} else {\n\t\t\t\t\t_this4.props.debouncedSpeak(__('No results.'), 'assertive');\n\t\t\t\t}\n\t\t\t}).catch(function () {\n\t\t\t\tif (_this4.suggestionsRequest === request) {\n\t\t\t\t\t_this4.setState({\n\t\t\t\t\t\tloading: false\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.suggestionsRequest = request;\n\t\t}\n\n\t\t/**\n * Search input value change event callback method.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\n\t}, {\n\t\tkey: 'onChange',\n\t\tvalue: function onChange(event) {\n\t\t\tthis.props.resetInvalidLink();\n\t\t\tvar inputValue = event.target.value;\n\t\t\tthis.props.onChange(inputValue);\n\t\t\tthis.updateSuggestions(inputValue);\n\t\t}\n\n\t\t/**\n * Keydown event callback. Handles selecting result via keyboard.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\n\t}, {\n\t\tkey: 'onKeyDown',\n\t\tvalue: function onKeyDown(event) {\n\t\t\tvar _state2 = this.state,\n\t\t\t showSuggestions = _state2.showSuggestions,\n\t\t\t selectedSuggestion = _state2.selectedSuggestion,\n\t\t\t posts = _state2.posts,\n\t\t\t loading = _state2.loading;\n\t\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\n\t\t\tif (!showSuggestions || !posts.length || loading) {\n\t\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\t\tswitch (event.keyCode) {\n\t\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t\t// position.\n\t\t\t\t\tcase UP:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (0 !== event.target.selectionStart) {\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\t\t\tevent.target.setSelectionRange(0, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t\t// last position.\n\t\t\t\t\tcase DOWN:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (this.props.value.length !== event.target.selectionStart) {\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\t\t\tevent.target.setSelectionRange(this.props.value.length, this.props.value.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar post = this.state.posts[this.state.selectedSuggestion];\n\n\t\t\tswitch (event.keyCode) {\n\t\t\t\tcase UP:\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar previousIndex = !selectedSuggestion ? posts.length - 1 : selectedSuggestion - 1;\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tselectedSuggestion: previousIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase DOWN:\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tvar nextIndex = selectedSuggestion === null || selectedSuggestion === posts.length - 1 ? 0 : selectedSuggestion + 1;\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tselectedSuggestion: nextIndex\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase TAB:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.state.selectedSuggestion !== null) {\n\t\t\t\t\t\t\tthis.selectLink(post);\n\t\t\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\t\t\tthis.props.speak(__('Link selected'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tcase ENTER:\n\t\t\t\t\t{\n\t\t\t\t\t\tif (this.state.selectedSuggestion !== null) {\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\tthis.selectLink(post);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Set state when an affiliate link is selected.\n * \n * @since 3.6\n * \n * @param {*} post \n */\n\n\t}, {\n\t\tkey: 'selectLink',\n\t\tvalue: function selectLink(post) {\n\t\t\tthis.props.onChange(post.link, post);\n\t\t\tthis.setState({\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tshowSuggestions: false\n\t\t\t});\n\t\t}\n\n\t\t/**\n * Callback handler for when affiliate link is selected.\n * \n * @param {*} post \n */\n\n\t}, {\n\t\tkey: 'handleOnClick',\n\t\tvalue: function handleOnClick(post) {\n\t\t\tthis.selectLink(post);\n\t\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\t\tthis.inputRef.current.focus();\n\t\t}\n\n\t\t/**\n * Component render method.\n * \n * @since 3.6\n */\n\n\t}, {\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar _props = this.props,\n\t\t\t _props$value = _props.value,\n\t\t\t value = _props$value === undefined ? '' : _props$value,\n\t\t\t _props$autoFocus = _props.autoFocus,\n\t\t\t autoFocus = _props$autoFocus === undefined ? true : _props$autoFocus,\n\t\t\t instanceId = _props.instanceId,\n\t\t\t invalidLink = _props.invalidLink;\n\t\t\tvar _state3 = this.state,\n\t\t\t showSuggestions = _state3.showSuggestions,\n\t\t\t posts = _state3.posts,\n\t\t\t selectedSuggestion = _state3.selectedSuggestion,\n\t\t\t loading = _state3.loading;\n\t\t\t/* eslint-disable jsx-a11y/no-autofocus */\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'editor-url-input block-editor-url-input' },\n\t\t\t\twp.element.createElement('input', {\n\t\t\t\t\tautoFocus: autoFocus,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\t'aria-label': __('URL'),\n\t\t\t\t\trequired: true,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tonChange: this.onChange,\n\t\t\t\t\tonInput: stopEventPropagation,\n\t\t\t\t\tplaceholder: __('Paste URL or type to search'),\n\t\t\t\t\tonKeyDown: this.onKeyDown,\n\t\t\t\t\trole: 'combobox',\n\t\t\t\t\t'aria-expanded': showSuggestions,\n\t\t\t\t\t'aria-autocomplete': 'list',\n\t\t\t\t\t'aria-owns': 'editor-url-input-suggestions-' + instanceId,\n\t\t\t\t\t'aria-activedescendant': selectedSuggestion !== null ? 'editor-url-input-suggestion-' + instanceId + '-' + selectedSuggestion : undefined,\n\t\t\t\t\tref: this.inputRef\n\t\t\t\t}),\n\t\t\t\tloading && wp.element.createElement(Spinner, null),\n\t\t\t\tshowSuggestions && !!posts.length && !invalidLink && wp.element.createElement(\n\t\t\t\t\tPopover,\n\t\t\t\t\t{ position: 'bottom', noArrow: true, focusOnMount: false },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'editor-url-input__suggestions block-editor-url-input__suggestions',\n\t\t\t\t\t\t\tid: 'editor-url-input-suggestions-' + instanceId,\n\t\t\t\t\t\t\tref: this.autocompleteRef,\n\t\t\t\t\t\t\trole: 'listbox'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tposts.map(function (post, index) {\n\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t'button',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkey: post.id,\n\t\t\t\t\t\t\t\t\trole: 'option',\n\t\t\t\t\t\t\t\t\ttabIndex: '-1',\n\t\t\t\t\t\t\t\t\tid: 'block-editor-url-input-suggestion-' + instanceId + '-' + index,\n\t\t\t\t\t\t\t\t\tref: _this5.bindSuggestionNode(index),\n\t\t\t\t\t\t\t\t\tclassName: __WEBPACK_IMPORTED_MODULE_0_classnames___default()('editor-url-input__suggestion block-editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\t\t\treturn _this5.handleOnClick(post);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t'aria-selected': index === selectedSuggestion\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tpost.title || __('(no title)')\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t\t/* eslint-enable jsx-a11y/no-autofocus */\n\t\t}\n\t}]);\n\n\treturn ThirstyURLInput;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (withSpokenMessages(withInstanceId(ThirstyURLInput)));\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = __webpack_require__(15);\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar util = __webpack_require__(16);\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {};\n // document 归一化到 window\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset = undefined;\n var ch = undefined;\n var cw = undefined;\n var containerScroll = undefined;\n var diffTop = undefined;\n var diffBottom = undefined;\n var win = undefined;\n var winScroll = undefined;\n var ww = undefined;\n var wh = undefined;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n };\n // elem 相对 container 可视视窗的距离\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n };\n // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nmodule.exports = scrollIntoView;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box = undefined;\n var x = undefined;\n var y = undefined;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n var method = 'scroll' + (top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX = undefined;\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name = undefined;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop = undefined;\n var j = undefined;\n var i = undefined;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = undefined;\n if (prop === 'border') {\n cssProp = prop + which[i] + 'Width';\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n domUtils['doc' + name] = function (refWin) {\n var d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement['scroll' + name],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body['scroll' + name], domUtils['viewport' + name](d));\n };\n\n domUtils['viewport' + name] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = 'client' + name;\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem, computedStyle);\n var cssBoxValue = 0;\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n }\n return cssBoxValue;\n }\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(elem) {\n var val = undefined;\n var args = arguments;\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils['outer' + first] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current = undefined;\n var key = undefined;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n css(elem, ret);\n}\n\nmodule.exports = _extends({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n var overflow = obj.overflow;\n if (overflow) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n w.scrollTop = v;\n }\n },\n\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// gutenberg-support.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 765b03ea8b1e2393384e","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/classnames/index.js\n// module id = 0\n// module chunks = 0","import registerBlocks from \"./blocks\";\nimport registerFormats from \"./formats\";\n\nimport \"./assets/styles/index.scss\";\n\nregisterBlocks();\nregisterFormats();\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","import * as taimage from \"./ta-image\";\n\nconst { registerBlockType } = wp.blocks;\n\n/**\n * Register gutenberg blocks.\n * \n * @since 3.6\n */\nexport default function registerBlocks() {\n\n [\n taimage\n ].forEach( ( block ) => {\n if ( ! block ) return;\n\n const { name , settings } = block;\n registerBlockType( name , settings );\n } );\n}\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/index.js","import classnames from \"classnames\";\n\nconst { Fragment } = wp.element;\nconst { __ } = wp.i18n;\nconst { createBlock, getBlockAttributes, getPhrasingContentSchema } = wp.blocks;\nconst { RichText } = wp.editor;\nconst { Path , SVG } = wp.components;\n\nimport edit from \"./edit\";\n\nexport const name = 'ta/image';\n\nconst blockAttributes = {\n\turl: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'src',\n\t},\n\talt: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'img',\n\t\tattribute: 'alt',\n\t\tdefault: '',\n\t},\n\tcaption: {\n\t\ttype: 'string',\n\t\tsource: 'html',\n\t\tselector: 'figcaption',\n\t},\n\tid: {\n\t\ttype: 'number',\n\t},\n\talign: {\n\t\ttype: 'string',\n\t},\n\twidth: {\n\t\ttype: 'number',\n\t},\n\theight: {\n\t\ttype: 'number',\n\t},\n\tlinkid: {\n\t\ttype: 'number',\n\t},\n\thref: {\n\t\ttype: 'string',\n\t\tsource: 'attribute',\n\t\tselector: 'ta',\n\t\tattribute: 'href'\n\t},\n\taffiliateLink: {\n\t\ttype: 'object'\n\t}\n};\n\nconst imageSchema = {\n\timg: {\n\t\tattributes: [ 'src', 'alt' ],\n\t\tclasses: [ 'alignleft', 'aligncenter', 'alignright', 'alignnone', /^wp-image-\\d+$/ ],\n\t},\n};\n\nconst schema = {\n\tfigure: {\n\t\trequire: [ 'ta' , 'img' ],\n\t\tchildren: {\n\t\t\tta: {\n\t\t\t\tattributes: [ 'href', 'linkid' ],\n\t\t\t\tchildren: imageSchema,\n\t\t\t},\n\t\t\tfigcaption: {\n\t\t\t\tchildren: getPhrasingContentSchema(),\n\t\t\t},\n\t\t},\n\t},\n};\n\nfunction getFirstAnchorAttributeFormHTML( html, attributeName ) {\n\tconst { body } = document.implementation.createHTMLDocument( '' );\n\n\tbody.innerHTML = html;\n\n\tconst { firstElementChild } = body;\n\n\tif (\n\t\tfirstElementChild &&\n\t\tfirstElementChild.nodeName === 'A'\n\t) {\n\t\treturn firstElementChild.getAttribute( attributeName ) || undefined;\n\t}\n}\n\nexport const settings = {\n\ttitle: __( 'ThirstyAffiliates Image' ),\n\n\tdescription: __( 'Insert an image with an affiliate link to make a visual statement.' ),\n\n\ticon: <SVG viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><Path d=\"M0,0h24v24H0V0z\" fill=\"none\" /><Path d=\"m19 5v14h-14v-14h14m0-2h-14c-1.1 0-2 0.9-2 2v14c0 1.1 0.9 2 2 2h14c1.1 0 2-0.9 2-2v-14c0-1.1-0.9-2-2-2z\" /><Path d=\"m14.14 11.86l-3 3.87-2.14-2.59-3 3.86h12l-3.86-5.14z\" /></SVG>,\n\n\tcategory: 'common',\n\n\tkeywords: [\n\t\t'img', // \"img\" is not translated as it is intended to reflect the HTML <img> tag.\n\t\t__( 'photo' ),\n\t\t__( 'affiliate' )\n\t],\n\n\tattributes: blockAttributes,\n\n\tgetEditWrapperProps( attributes ) {\n\t\tconst { align, width } = attributes;\n\t\tif ( 'left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align ) {\n\t\t\treturn { 'data-align': align, 'data-resized': !! width };\n\t\t}\n\t},\n\n\tedit,\n\n\tsave( { attributes } ) {\n\t\tconst {\n\t\t\turl,\n\t\t\talt,\n\t\t\tcaption,\n\t\t\talign,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tid,\n\t\t\tlinkid,\n\t\t\thref\n\t\t} = attributes;\n\n\t\tconst classes = classnames( {\n\t\t\t[ `align${ align }` ]: align,\n\t\t\t'is-resized': width || height,\n\t\t} );\n\n\t\tconst image = (\n\t\t\t<img\n\t\t\t\tsrc={ url }\n\t\t\t\talt={ alt }\n\t\t\t\tclassName={ id ? `wp-image-${ id }` : null }\n\t\t\t\twidth={ width }\n\t\t\t\theight={ height }\n\t\t\t/>\n\t\t);\n\n\t\tconst figure = (\n\t\t\t<Fragment>\n\t\t\t\t<ta linkid={ linkid } href={ href }>\n\t\t\t\t{ image }\n\t\t\t\t</ta>\n\t\t\t\t<RichText.Content tagName=\"figcaption\" value={ caption } />\n\t\t\t</Fragment>\n\t\t);\n\n\t\tif ( 'left' === align || 'right' === align || 'center' === align ) {\n\t\t\treturn (\n\t\t\t\t<div className='wp-block-image'>\n\t\t\t\t\t<figure className={ classes }>\n\t\t\t\t\t\t{ figure }\n\t\t\t\t\t</figure>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<figure className={ `wp-block-image ${classes}` }>\n\t\t\t\t{ figure }\n\t\t\t</figure>\n\t\t);\n\t}\n};\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/index.js","import classnames from \"classnames\";\n\nconst { get , isEmpty , map , last , pick , compact } = lodash;\nconst { getPath } = wp.url;\nconst { __, sprintf } = wp.i18n;\nconst { Component, Fragment , createRef } = wp.element;\nconst { getBlobByURL, revokeBlobURL, isBlobURL } = wp.blob;\nconst { Placeholder , Button , ButtonGroup , IconButton , PanelBody , ResizableBox , SelectControl , Spinner , TextControl , TextareaControl , Toolbar , withNotices , ToggleControl , Popover } = wp.components;\nconst { withSelect } = wp.data;\nconst { RichText , BlockControls , InspectorControls , MediaUpload , MediaUploadCheck , MediaPlaceholder , BlockAlignmentToolbar , mediaUpload } = wp.editor;\nconst { withViewportMatch } = wp.viewport;\nconst { compose } = wp.compose;\n\nimport { createUpgradedEmbedBlock } from \"./util\";\nimport ImageSize from \"./image-size\";\nimport ThirstyURLInput from './search-input';\n\n/**\n * Module constants\n */\nconst MIN_SIZE = 20;\nconst LINK_DESTINATION_NONE = 'none';\nconst LINK_DESTINATION_MEDIA = 'media';\nconst LINK_DESTINATION_ATTACHMENT = 'attachment';\nconst LINK_DESTINATION_CUSTOM = 'custom';\nconst NEW_TAB_REL = 'noreferrer noopener';\nconst ALLOWED_MEDIA_TYPES = [ 'image' ];\n\nexport const pickRelevantMediaFiles = ( image ) => {\n\tconst imageProps = pick( image, [ 'alt', 'id', 'link', 'caption' ] );\n\timageProps.url = get( image, [ 'sizes', 'large', 'url' ] ) || get( image, [ 'media_details', 'sizes', 'large', 'source_url' ] ) || image.url;\n\treturn imageProps;\n};\n\n/**\n * Is the URL a temporary blob URL? A blob URL is one that is used temporarily\n * while the image is being uploaded and will not have an id yet allocated.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the URL a Blob URL\n */\nconst isTemporaryImage = ( id, url ) => ! id && isBlobURL( url );\n\n/**\n * Is the url for the image hosted externally. An externally hosted image has no id\n * and is not a blob url.\n *\n * @param {number=} id The id of the image.\n * @param {string=} url The url of the image.\n *\n * @return {boolean} Is the url an externally hosted url?\n */\nconst isExternalImage = ( id, url ) => url && ! id && ! isBlobURL( url );\n\nclass ImageEdit extends Component {\n\tconstructor( { attributes } ) {\n\t\tsuper( ...arguments );\n\t\tthis.updateAlt = this.updateAlt.bind( this );\n\t\tthis.updateAlignment = this.updateAlignment.bind( this );\n\t\tthis.onFocusCaption = this.onFocusCaption.bind( this );\n\t\tthis.onImageClick = this.onImageClick.bind( this );\n\t\tthis.onSelectImage = this.onSelectImage.bind( this );\n\t\tthis.updateImageURL = this.updateImageURL.bind( this );\n\t\tthis.updateWidth = this.updateWidth.bind( this );\n\t\tthis.updateHeight = this.updateHeight.bind( this );\n\t\tthis.updateDimensions = this.updateDimensions.bind( this );\n\t\tthis.getFilename = this.getFilename.bind( this );\n\t\tthis.toggleIsEditing = this.toggleIsEditing.bind( this );\n\t\tthis.onImageError = this.onImageError.bind( this );\n\t\tthis.onChangeInputValue = this.onChangeInputValue.bind( this );\n\t\tthis.autocompleteRef = createRef();\n\t\tthis.resetInvalidLink = this.resetInvalidLink.bind( this );\n\t\tthis.updateImageSelection = this.updateImageSelection.bind( this );\n\t\tthis.onSelectAffiliateImage = this.onSelectAffiliateImage.bind( this );\n\t\tthis.editAFfiliateImage = this.editAFfiliateImage.bind( this );\n\n\t\tthis.state = {\n\t\t\tcaptionFocused: false,\n\t\t\tisEditing: ! attributes.url,\n\t\t\tinputValue : '',\n\t\t\tlinkid : 0,\n\t\t\tpost : null,\n\t\t\tshowSuggestions : false,\n\t\t\timageSelection : [],\n\t\t\taffiliateLink : null\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tconst { attributes, setAttributes, noticeOperations } = this.props;\n\t\tconst { id, url = '' } = attributes;\n\n\t\tif ( isTemporaryImage( id, url ) ) {\n\t\t\tconst file = getBlobByURL( url );\n\n\t\t\tif ( file ) {\n\t\t\t\tmediaUpload( {\n\t\t\t\t\tfilesList: [ file ],\n\t\t\t\t\tonFileChange: ( [ image ] ) => {\n\t\t\t\t\t\tsetAttributes( pickRelevantMediaFiles( image ) );\n\t\t\t\t\t},\n\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES,\n\t\t\t\t\tonError: ( message ) => {\n\t\t\t\t\t\tnoticeOperations.createErrorNotice( message );\n\t\t\t\t\t\tthis.setState( { isEditing: true } );\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tconst { id: prevID, url: prevURL = '' } = prevProps.attributes;\n\t\tconst { id, url = '' } = this.props.attributes;\n\n\t\tif ( isTemporaryImage( prevID, prevURL ) && ! isTemporaryImage( id, url ) ) {\n\t\t\trevokeBlobURL( url );\n\t\t}\n\n\t\tif ( ! this.props.isSelected && prevProps.isSelected && this.state.captionFocused ) {\n\t\t\tthis.setState( {\n\t\t\t\tcaptionFocused: false,\n\t\t\t} );\n\t\t}\n\t}\n\n\tonSelectImage( media ) {\n\n\t\tif ( ! media || ! media.url ) {\n\t\t\tthis.props.setAttributes( {\n\t\t\t\turl: undefined,\n\t\t\t\talt: undefined,\n\t\t\t\tid: undefined,\n\t\t\t\tcaption: undefined\n\t\t\t} );\n\t\t\treturn;\n\t\t}\n\n\t\tconst { affiliateLink } = this.state;\n\n\t\tthis.setState( {\n\t\t\tisEditing: false,\n\t\t} );\n\n\t\tthis.props.setAttributes( {\n\t\t\t...pickRelevantMediaFiles( media ),\n\t\t\tlinkid: affiliateLink.id,\n\t\t\thref: affiliateLink.link,\n\t\t\taffiliateLink : affiliateLink,\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t} );\n\t}\n\n\tonImageError( url ) {\n\t\t// Check if there's an embed block that handles this URL.\n\t\tconst embedBlock = createUpgradedEmbedBlock(\n\t\t\t{ attributes: { url } }\n\t\t);\n\t\tif ( undefined !== embedBlock ) {\n\t\t\tthis.props.onReplace( embedBlock );\n\t\t}\n\t}\n\n\tonFocusCaption() {\n\t\tif ( ! this.state.captionFocused ) {\n\t\t\tthis.setState( {\n\t\t\t\tcaptionFocused: true,\n\t\t\t} );\n\t\t}\n\t}\n\n\tonImageClick() {\n\t\tif ( this.state.captionFocused ) {\n\t\t\tthis.setState( {\n\t\t\t\tcaptionFocused: false,\n\t\t\t} );\n\t\t}\n\t}\n\n\tupdateAlt( newAlt ) {\n\t\tthis.props.setAttributes( { alt: newAlt } );\n\t}\n\n\tupdateAlignment( nextAlign ) {\n\t\tconst extraUpdatedAttributes = [ 'wide', 'full' ].indexOf( nextAlign ) !== -1 ?\n\t\t\t{ width: undefined, height: undefined } :\n\t\t\t{};\n\t\tthis.props.setAttributes( { ...extraUpdatedAttributes, align: nextAlign } );\n\t}\n\n\tupdateImageURL( url ) {\n\t\tthis.props.setAttributes( { url, width: undefined, height: undefined } );\n\t}\n\n\tupdateWidth( width ) {\n\t\tthis.props.setAttributes( { width: parseInt( width, 10 ) } );\n\t}\n\n\tupdateHeight( height ) {\n\t\tthis.props.setAttributes( { height: parseInt( height, 10 ) } );\n\t}\n\n\tupdateDimensions( width = undefined, height = undefined ) {\n\t\treturn () => {\n\t\t\tthis.props.setAttributes( { width, height } );\n\t\t};\n\t}\n\n\tgetFilename( url ) {\n\t\tconst path = getPath( url );\n\t\tif ( path ) {\n\t\t\treturn last( path.split( '/' ) );\n\t\t}\n\t}\n\n\tgetLinkDestinationOptions() {\n\t\treturn [\n\t\t\t{ value: LINK_DESTINATION_NONE, label: __( 'None' ) },\n\t\t\t{ value: LINK_DESTINATION_MEDIA, label: __( 'Media File' ) },\n\t\t\t{ value: LINK_DESTINATION_ATTACHMENT, label: __( 'Attachment Page' ) },\n\t\t\t{ value: LINK_DESTINATION_CUSTOM, label: __( 'Custom URL' ) },\n\t\t];\n\t}\n\n\ttoggleIsEditing() {\n\t\tthis.setState( {\n\t\t\tisEditing: ! this.state.isEditing,\n\t\t} );\n\t}\n\n\tgetImageSizeOptions() {\n\t\tconst { imageSizes, image } = this.props;\n\t\treturn compact( map( imageSizes, ( { name, slug } ) => {\n\t\t\tconst sizeUrl = get( image, [ 'media_details', 'sizes', slug, 'source_url' ] );\n\t\t\tif ( ! sizeUrl ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tvalue: sizeUrl,\n\t\t\t\tlabel: name,\n\t\t\t};\n\t\t} ) );\n\t}\n\n\tonChangeInputValue( inputValue , post = null ) {\n\t\tconst linkid = post ? post.id : 0;\n\t\tthis.setState( { inputValue , linkid , post } );\n\t}\n\n\tresetInvalidLink() {\n\t\tthis.setState( { invalidLink : false } );\n\t}\n\n\tupdateImageSelection( imageSelection , affiliateLink ) {\n\t\tthis.setState({\n\t\t\timageSelection,\n\t\t\taffiliateLink\n\t\t});\n\t}\n\n\tonSelectAffiliateImage( image ) {\n\n\t\tconst request = wp.apiFetch( {\n\t\t\tpath: wp.url.addQueryArgs( 'wp/v2/media/' + image.id , {\n\t\t\t\tcontext: 'edit',\n\t\t\t\t_locale: 'user'\n\t\t\t} ),\n\t\t} );\n\n\t\trequest.then( (media) => {\n\t\t\tmedia.url = media.source_url;\n\t\t\tthis.onSelectImage( media );\n\t\t} );\n\t}\n\n\teditAFfiliateImage() {\n\n\t\tconst { attributes } = this.props;\n\t\tconst { affiliateLink } = attributes;\n\n\t\tthis.setState({\n\t\t\tisEditing : true,\n\t\t\timageSelection : affiliateLink.images,\n\t\t\taffiliateLink\n\t\t});\n\t}\n\n\trender() {\n\t\tconst { \n\t\t\tisEditing,\n\t\t\timageSelection,\n\t\t\taffiliateLink,\n\t\t} = this.state;\n\t\tconst {\n\t\t\tattributes,\n\t\t\tsetAttributes,\n\t\t\tisLargeViewport,\n\t\t\tisSelected,\n\t\t\tclassName,\n\t\t\tmaxWidth,\n\t\t\ttoggleSelection,\n\t\t\tisRTL,\n\t\t} = this.props;\n\t\tconst {\n\t\t\turl,\n\t\t\talt,\n\t\t\tcaption,\n\t\t\talign,\n\t\t\tlinkDestination,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tlinkid,\n\t\t\thref\n\t\t} = attributes;\n\t\tconst toolbarEditButton = (\n\t\t\t<Toolbar>\n\t\t\t\t<IconButton\n\t\t\t\t\tclassName=\"ta-edit-image-button components-icon-button components-toolbar__control\"\n\t\t\t\t\tlabel={ __( 'Edit ThirstyAffiliates Image' ) }\n\t\t\t\t\ticon=\"edit\"\n\t\t\t\t\tonClick={ this.editAFfiliateImage }\n\t\t\t\t/>\n\t\t\t</Toolbar>\n\t\t);\n\n\t\tconst controls = (\n\t\t\t<BlockControls>\n\t\t\t\t<BlockAlignmentToolbar\n\t\t\t\t\tvalue={ align }\n\t\t\t\t\tonChange={ this.updateAlignment }\n\t\t\t\t/>\n\t\t\t\t{ toolbarEditButton }\n\t\t\t</BlockControls>\n\t\t);\n\n\t\tif ( isEditing ) {\n\t\t\treturn (\n\t\t\t\t<Fragment>\n\t\t\t\t\t{ controls }\n\t\t\t\t\t<Placeholder\n\t\t\t\t\t\ticon={ \"format-image\" }\n\t\t\t\t\t\tlabel={ __( \"ThirstyAffiliates Image\" ) }\n\t\t\t\t\t\tinstructions={ __( \"Search for an affiliate link and select image to insert.\" ) } \n\t\t\t\t\t>\t\n\n\t\t\t\t\t\t<ThirstyURLInput\n\t\t\t\t\t\t\tupdateImageSelection={ this.updateImageSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{ !! imageSelection.length &&\n\t\t\t\t\t\t\t<div className=\"ta-image-sel-wrap\">\n\t\t\t\t\t\t\t\t<h3>{ `${affiliateLink.title} ${ __( 'attached images:' ) }` }</h3>\n\t\t\t\t\t\t\t\t<div className=\"ta-image-selection\">\n\t\t\t\t\t\t\t\t\t{ imageSelection.map( ( image , index ) => (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => this.onSelectAffiliateImage( image ) }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<img src={ image.src } />\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t</Placeholder>\n\t\t\t\t</Fragment>\n\t\t\t);\n\t\t}\n\n\t\tconst classes = classnames( className, {\n\t\t\t'wp-block-image' : true,\n\t\t\t'is-transient': isBlobURL( url ),\n\t\t\t'is-resized': !! width || !! height,\n\t\t\t'is-focused': isSelected,\n\t\t} );\n\n\t\tconst isResizable = [ 'wide', 'full' ].indexOf( align ) === -1 && isLargeViewport;\n\t\tconst imageSizeOptions = this.getImageSizeOptions();\n\n\t\tconst getInspectorControls = ( imageWidth, imageHeight ) => (\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody title={ __( 'Image Settings' ) }>\n\t\t\t\t\t<TextareaControl\n\t\t\t\t\t\tlabel={ __( 'Alt Text (Alternative Text)' ) }\n\t\t\t\t\t\tvalue={ alt }\n\t\t\t\t\t\tonChange={ this.updateAlt }\n\t\t\t\t\t\thelp={ __( 'Alternative text describes your image to people who can’t see it. Add a short description with its key details.' ) }\n\t\t\t\t\t/>\n\t\t\t\t\t{ ! isEmpty( imageSizeOptions ) && (\n\t\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t\tlabel={ __( 'Image Size' ) }\n\t\t\t\t\t\t\tvalue={ url }\n\t\t\t\t\t\t\toptions={ imageSizeOptions }\n\t\t\t\t\t\t\tonChange={ this.updateImageURL }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t\t{ isResizable && (\n\t\t\t\t\t\t<div className=\"block-library-image__dimensions\">\n\t\t\t\t\t\t\t<p className=\"block-library-image__dimensions__row\">\n\t\t\t\t\t\t\t\t{ __( 'Image Dimensions' ) }\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div className=\"block-library-image__dimensions__row\">\n\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\tclassName=\"block-library-image__dimensions__width\"\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Width' ) }\n\t\t\t\t\t\t\t\t\tvalue={ width !== undefined ? width : '' }\n\t\t\t\t\t\t\t\t\tplaceholder={ imageWidth }\n\t\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\t\tonChange={ this.updateWidth }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\t\t\t\tclassName=\"block-library-image__dimensions__height\"\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Height' ) }\n\t\t\t\t\t\t\t\t\tvalue={ height !== undefined ? height : '' }\n\t\t\t\t\t\t\t\t\tplaceholder={ imageHeight }\n\t\t\t\t\t\t\t\t\tmin={ 1 }\n\t\t\t\t\t\t\t\t\tonChange={ this.updateHeight }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"block-library-image__dimensions__row\">\n\t\t\t\t\t\t\t\t<ButtonGroup aria-label={ __( 'Image Size' ) }>\n\t\t\t\t\t\t\t\t\t{ [ 25, 50, 75, 100 ].map( ( scale ) => {\n\t\t\t\t\t\t\t\t\t\tconst scaledWidth = Math.round( imageWidth * ( scale / 100 ) );\n\t\t\t\t\t\t\t\t\t\tconst scaledHeight = Math.round( imageHeight * ( scale / 100 ) );\n\n\t\t\t\t\t\t\t\t\t\tconst isCurrent = width === scaledWidth && height === scaledHeight;\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tkey={ scale }\n\t\t\t\t\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\t\t\t\t\tisPrimary={ isCurrent }\n\t\t\t\t\t\t\t\t\t\t\t\taria-pressed={ isCurrent }\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={ this.updateDimensions( scaledWidth, scaledHeight ) }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{ scale }%\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t</ButtonGroup>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tisSmall\n\t\t\t\t\t\t\t\t\tonClick={ this.updateDimensions() }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Reset' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t);\n\n\t\t// Disable reason: Each block can be selected by clicking on it\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t\treturn (\n\t\t\t<Fragment>\n\t\t\t\t{ controls }\n\t\t\t\t<figure className={ classes }>\n\t\t\t\t\t<ImageSize src={ url } dirtynessTrigger={ align }>\n\t\t\t\t\t\t{ ( sizes ) => {\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\timageWidthWithinContainer,\n\t\t\t\t\t\t\t\timageHeightWithinContainer,\n\t\t\t\t\t\t\t\timageWidth,\n\t\t\t\t\t\t\t\timageHeight,\n\t\t\t\t\t\t\t} = sizes;\n\n\t\t\t\t\t\t\tconst filename = this.getFilename( url );\n\t\t\t\t\t\t\tlet defaultedAlt;\n\t\t\t\t\t\t\tif ( alt ) {\n\t\t\t\t\t\t\t\tdefaultedAlt = alt;\n\t\t\t\t\t\t\t} else if ( filename ) {\n\t\t\t\t\t\t\t\tdefaultedAlt = sprintf( __( 'This image has an empty alt attribute; its file name is %s' ), filename );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdefaultedAlt = __( 'This image has an empty alt attribute' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst img = (\n\t\t\t\t\t\t\t\t// Disable reason: Image itself is not meant to be interactive, but\n\t\t\t\t\t\t\t\t// should direct focus to block.\n\t\t\t\t\t\t\t\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t<ta linkid={ linkid } href={ href }>\n\t\t\t\t\t\t\t\t\t\t<img src={ url } alt={ defaultedAlt } onClick={ this.onImageClick } onError={ () => this.onImageError( url ) } />\n\t\t\t\t\t\t\t\t\t</ta>\n\t\t\t\t\t\t\t\t\t{ isBlobURL( url ) && <Spinner /> }\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( ! isResizable || ! imageWidthWithinContainer ) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t\t{ getInspectorControls( imageWidth, imageHeight ) }\n\t\t\t\t\t\t\t\t\t\t<div style={ { width, height } }>\n\t\t\t\t\t\t\t\t\t\t\t{ img }\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst currentWidth = width || imageWidthWithinContainer;\n\t\t\t\t\t\t\tconst currentHeight = height || imageHeightWithinContainer;\n\n\t\t\t\t\t\t\tconst ratio = imageWidth / imageHeight;\n\t\t\t\t\t\t\tconst minWidth = imageWidth < imageHeight ? MIN_SIZE : MIN_SIZE * ratio;\n\t\t\t\t\t\t\tconst minHeight = imageHeight < imageWidth ? MIN_SIZE : MIN_SIZE / ratio;\n\n\t\t\t\t\t\t\t// With the current implementation of ResizableBox, an image needs an explicit pixel value for the max-width.\n\t\t\t\t\t\t\t// In absence of being able to set the content-width, this max-width is currently dictated by the vanilla editor style.\n\t\t\t\t\t\t\t// The following variable adds a buffer to this vanilla style, so 3rd party themes have some wiggleroom.\n\t\t\t\t\t\t\t// This does, in most cases, allow you to scale the image beyond the width of the main column, though not infinitely.\n\t\t\t\t\t\t\t// @todo It would be good to revisit this once a content-width variable becomes available.\n\t\t\t\t\t\t\tconst maxWidthBuffer = maxWidth * 2.5;\n\n\t\t\t\t\t\t\tlet showRightHandle = false;\n\t\t\t\t\t\t\tlet showLeftHandle = false;\n\n\t\t\t\t\t\t\t/* eslint-disable no-lonely-if */\n\t\t\t\t\t\t\t// See https://github.com/WordPress/gutenberg/issues/7584.\n\t\t\t\t\t\t\tif ( align === 'center' ) {\n\t\t\t\t\t\t\t\t// When the image is centered, show both handles.\n\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t} else if ( isRTL ) {\n\t\t\t\t\t\t\t\t// In RTL mode the image is on the right by default.\n\t\t\t\t\t\t\t\t// Show the right handle and hide the left handle only when it is aligned left.\n\t\t\t\t\t\t\t\t// Otherwise always show the left handle.\n\t\t\t\t\t\t\t\tif ( align === 'left' ) {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Show the left handle and hide the right handle only when the image is aligned right.\n\t\t\t\t\t\t\t\t// Otherwise always show the right handle.\n\t\t\t\t\t\t\t\tif ( align === 'right' ) {\n\t\t\t\t\t\t\t\t\tshowLeftHandle = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tshowRightHandle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/* eslint-enable no-lonely-if */\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Fragment>\n\t\t\t\t\t\t\t\t\t{ getInspectorControls( imageWidth, imageHeight ) }\n\t\t\t\t\t\t\t\t\t<ResizableBox\n\t\t\t\t\t\t\t\t\t\tsize={\n\t\t\t\t\t\t\t\t\t\t\twidth && height ? {\n\t\t\t\t\t\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t\t\t\t\t\t\theight,\n\t\t\t\t\t\t\t\t\t\t\t} : undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tminWidth={ minWidth }\n\t\t\t\t\t\t\t\t\t\tmaxWidth={ maxWidthBuffer }\n\t\t\t\t\t\t\t\t\t\tminHeight={ minHeight }\n\t\t\t\t\t\t\t\t\t\tmaxHeight={ maxWidthBuffer / ratio }\n\t\t\t\t\t\t\t\t\t\tlockAspectRatio\n\t\t\t\t\t\t\t\t\t\tenable={ {\n\t\t\t\t\t\t\t\t\t\t\ttop: false,\n\t\t\t\t\t\t\t\t\t\t\tright: showRightHandle,\n\t\t\t\t\t\t\t\t\t\t\tbottom: true,\n\t\t\t\t\t\t\t\t\t\t\tleft: showLeftHandle,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tonResizeStart={ () => {\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection( false );\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tonResizeStop={ ( event, direction, elt, delta ) => {\n\t\t\t\t\t\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\t\t\t\t\t\twidth: parseInt( currentWidth + delta.width, 10 ),\n\t\t\t\t\t\t\t\t\t\t\t\theight: parseInt( currentHeight + delta.height, 10 ),\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\ttoggleSelection( true );\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ img }\n\t\t\t\t\t\t\t\t\t</ResizableBox>\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t</ImageSize>\n\t\t\t\t\t{ ( ! RichText.isEmpty( caption ) || isSelected ) && (\n\t\t\t\t\t\t<RichText\n\t\t\t\t\t\t\ttagName=\"figcaption\"\n\t\t\t\t\t\t\tplaceholder={ __( 'Write caption…' ) }\n\t\t\t\t\t\t\tvalue={ caption }\n\t\t\t\t\t\t\tunstableOnFocus={ this.onFocusCaption }\n\t\t\t\t\t\t\tonChange={ ( value ) => setAttributes( { caption: value } ) }\n\t\t\t\t\t\t\tisSelected={ this.state.captionFocused }\n\t\t\t\t\t\t\tinlineToolbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</figure>\n\t\t\t</Fragment>\n\t\t);\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions, jsx-a11y/onclick-has-role, jsx-a11y/click-events-have-key-events */\n\t}\n}\n\nexport default compose( [\n\twithSelect( ( select, props ) => {\n\t\tconst { getMedia } = select( 'core' );\n\t\tconst { getEditorSettings } = select( 'core/editor' );\n\t\tconst { id } = props.attributes;\n\t\tconst { maxWidth, isRTL, imageSizes } = getEditorSettings();\n\n\t\treturn {\n\t\t\timage: id ? getMedia( id ) : null,\n\t\t\tmaxWidth,\n\t\t\tisRTL,\n\t\t\timageSizes,\n\t\t};\n\t} ),\n\twithViewportMatch( { isLargeViewport: 'medium' } ),\n\twithNotices,\n] )( ImageEdit );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/edit.js","const WORDPRESS_EMBED_BLOCK = 'core-embed/wordpress';\n\nconst { includes } = lodash;\nconst { renderToString } = wp.element;\nconst { createBlock } = wp.blocks;\n\n/***\n * Creates a more suitable embed block based on the passed in props\n * and attributes generated from an embed block's preview.\n *\n * We require `attributesFromPreview` to be generated from the latest attributes\n * and preview, and because of the way the react lifecycle operates, we can't\n * guarantee that the attributes contained in the block's props are the latest\n * versions, so we require that these are generated separately.\n * See `getAttributesFromPreview` in the generated embed edit component.\n *\n * @param {Object} props The block's props.\n * @param {Object} attributesFromPreview Attributes generated from the block's most up to date preview.\n * @return {Object|undefined} A more suitable embed block if one exists.\n */\nexport const createUpgradedEmbedBlock = ( props, attributesFromPreview ) => {\n\tconst { preview, name } = props;\n\tconst { url } = props.attributes;\n\n\tif ( ! url ) {\n\t\treturn;\n\t}\n\n\tconst matchingBlock = findBlock( url );\n\n\t// WordPress blocks can work on multiple sites, and so don't have patterns,\n\t// so if we're in a WordPress block, assume the user has chosen it for a WordPress URL.\n\tif ( WORDPRESS_EMBED_BLOCK !== name && DEFAULT_EMBED_BLOCK !== matchingBlock ) {\n\t\t// At this point, we have discovered a more suitable block for this url, so transform it.\n\t\tif ( name !== matchingBlock ) {\n\t\t\treturn createBlock( matchingBlock, { url } );\n\t\t}\n\t}\n\n\tif ( preview ) {\n\t\tconst { html } = preview;\n\n\t\t// We can't match the URL for WordPress embeds, we have to check the HTML instead.\n\t\tif ( isFromWordPress( html ) ) {\n\t\t\t// If this is not the WordPress embed block, transform it into one.\n\t\t\tif ( WORDPRESS_EMBED_BLOCK !== name ) {\n\t\t\t\treturn createBlock(\n\t\t\t\t\tWORDPRESS_EMBED_BLOCK,\n\t\t\t\t\t{\n\t\t\t\t\t\turl,\n\t\t\t\t\t\t// By now we have the preview, but when the new block first renders, it\n\t\t\t\t\t\t// won't have had all the attributes set, and so won't get the correct\n\t\t\t\t\t\t// type and it won't render correctly. So, we pass through the current attributes\n\t\t\t\t\t\t// here so that the initial render works when we switch to the WordPress\n\t\t\t\t\t\t// block. This only affects the WordPress block because it can't be\n\t\t\t\t\t\t// rendered in the usual Sandbox (it has a sandbox of its own) and it\n\t\t\t\t\t\t// relies on the preview to set the correct render type.\n\t\t\t\t\t\t...attributesFromPreview,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport const isFromWordPress = ( html ) => {\n\treturn includes( html, 'class=\"wp-embedded-content\" data-secret' );\n};\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/util.js","const { noop } = lodash;\n\nconst { withGlobalEvents } = wp.compose;\nconst { Component } = wp.element;\n\nclass ImageSize extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\t\tthis.state = {\n\t\t\twidth: undefined,\n\t\t\theight: undefined,\n\t\t};\n\t\tthis.bindContainer = this.bindContainer.bind( this );\n\t\tthis.calculateSize = this.calculateSize.bind( this );\n\t}\n\n\tbindContainer( ref ) {\n\t\tthis.container = ref;\n\t}\n\n\tcomponentDidUpdate( prevProps ) {\n\t\tif ( this.props.src !== prevProps.src ) {\n\t\t\tthis.setState( {\n\t\t\t\twidth: undefined,\n\t\t\t\theight: undefined,\n\t\t\t} );\n\t\t\tthis.fetchImageSize();\n\t\t}\n\n\t\tif ( this.props.dirtynessTrigger !== prevProps.dirtynessTrigger ) {\n\t\t\tthis.calculateSize();\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.fetchImageSize();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tif ( this.image ) {\n\t\t\tthis.image.onload = noop;\n\t\t}\n\t}\n\n\tfetchImageSize() {\n\t\tthis.image = new window.Image();\n\t\tthis.image.onload = this.calculateSize;\n\t\tthis.image.src = this.props.src;\n\t}\n\n\tcalculateSize() {\n\t\tconst maxWidth = this.container.clientWidth;\n\t\tconst exceedMaxWidth = this.image.width > maxWidth;\n\t\tconst ratio = this.image.height / this.image.width;\n\t\tconst width = exceedMaxWidth ? maxWidth : this.image.width;\n\t\tconst height = exceedMaxWidth ? maxWidth * ratio : this.image.height;\n\t\tthis.setState( { width, height } );\n\t}\n\n\trender() {\n\t\tconst sizes = {\n\t\t\timageWidth: this.image && this.image.width,\n\t\t\timageHeight: this.image && this.image.height,\n\t\t\tcontainerWidth: this.container && this.container.clientWidth,\n\t\t\tcontainerHeight: this.container && this.container.clientHeight,\n\t\t\timageWidthWithinContainer: this.state.width,\n\t\t\timageHeightWithinContainer: this.state.height,\n\t\t};\n\t\treturn (\n\t\t\t<div ref={ this.bindContainer }>\n\t\t\t\t{ this.props.children( sizes ) }\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nexport default withGlobalEvents( {\n\tresize: 'calculateSize',\n} )( ImageSize );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/image-size.js","import classnames from \"classnames\";\n\nconst { __ } = wp.i18n;\nconst { Component , createRef } = wp.element;\nconst { Spinner, withSpokenMessages, Popover , TextControl } = wp.components;\nconst { withInstanceId } = wp.compose;\n\nclass ThirstyURLInput extends Component {\n\n /**\n * Component constructor method.\n * \n * @since 3.6\n * \n * @param {*} param0 \n */\n\tconstructor( { autocompleteRef } ) {\n\t\tsuper( ...arguments );\n\n\t\t// this.onChange = this.onChange.bind( this );\n\t\t// this.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.autocompleteRef = autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.searchAffiliateLinks = this.searchAffiliateLinks.bind( this );\n\t\t// this.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.state = {\n\t\t\tposts : [],\n\t\t\tshowSuggestions : false,\n\t\t\tselectedSuggestion : null,\n\t\t\tloading : false\n\t\t};\n\t}\n\n\t/**\n * Component did update method.\n * \n * @since 3.6\n */\n\tcomponentDidUpdate() {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\t// only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded\n\t\tif ( showSuggestions && selectedSuggestion !== null && ! this.scrollingIntoView ) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView( this.suggestionNodes[ selectedSuggestion ], this.autocompleteRef.current, {\n\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t} );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\t}\n\n\t/**\n * Component unmount method.\n * \n * @since 3.6\n */\n\tcomponentWillUnmount() {\n\t\tdelete this.suggestionsRequest;\n\t}\n\n\t/**\n * Bind suggestion to node.\n * \n * @param {*} index \n */\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\t\n\tsearchAffiliateLinks( value ) {\n\n\t\t// Show the suggestions after typing at least 2 characters=\n\t\tif ( value.length < 2 ) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState({\n\t\t\tshowSuggestions : true,\n\t\t\tselectedSuggestion : null,\n\t\t\tloading : true\n\t\t});\n\n\t\tconst formData = new FormData();\n formData.append( \"action\" , \"search_affiliate_links_query\" );\n formData.append( \"keyword\" , value );\n formData.append( \"paged\" , 1 );\n\t\tformData.append( \"gutenberg\" , true );\n\t\tformData.append( \"with_images\" , true );\n\t\t\n\t\t// We are getting data via the WP AJAX instead of rest API as it is not possible yet\n // to filter results with category value. This is to prepare next update to add category filter.\n const request = fetch( ajaxurl , {\n method : \"POST\",\n body : formData\n\t\t} );\n\t\t\n\t\trequest\n .then( response => response.json() )\n .then( ( response ) => {\n\n if ( ! response.affiliate_links ) return;\n\n const posts = response.affiliate_links;\n\n\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\treturn;\n }\n\n\t\t\tthis.setState( {\n\t\t\t\tposts,\n\t\t\t\tloading: false,\n } );\n\n\t\t\tif ( !! posts.length ) {\n\t\t\t\tthis.props.debouncedSpeak( sprintf( _n(\n\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\tposts.length\n\t\t\t\t), posts.length ), 'assertive' );\n\t\t\t} else {\n\t\t\t\tthis.props.debouncedSpeak( __( 'No results.' ), 'assertive' );\n }\n\n\t\t} ).catch( () => {\n\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tthis.suggestionsRequest = request;\n\t}\n\n\t/**\n * Set state when an affiliate link is selected.\n * \n * @since 3.6\n * \n * @param {*} post \n */\n\tselectLink( post ) {\n\t\t// this.props.onChange( post.link, post );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: post,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\n\t\tthis.props.updateImageSelection( post.images , post );\n\t}\n\n\t/**\n * Callback handler for when affiliate link is selected.\n * \n * @param {*} post \n */\n\thandleOnClick( post ) {\n\t\tthis.selectLink( post );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\t// this.inputRef.current.focus();\n\t}\n\n render() {\n const { value = '', autoFocus = true, instanceId } = this.props;\n const { showSuggestions , posts, selectedSuggestion , loading } = this.state;\n \n return (\n <div class=\"edit-search-affiliate-links\">\n\t\t\t\t<form\n\t\t\t\t\tclassName=\"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover\"\n\t\t\t\t\tonSubmit={ this.displayAffiliateImages }\n\t\t\t\t>\n\t\t\t\t\t<TextControl\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclassName=\"ta-search-affiliate-links\"\n\t\t\t\t\t\tplaceholder={ __( \"Type to search affiliate links\" ) }\n\t\t\t\t\t\tonChange={ this.searchAffiliateLinks }\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t{ ( loading ) && <Spinner /> }\n\n\t\t\t\t\t{ showSuggestions && !! posts.length && \n\t\t\t\t\t\t<Popover position=\"bottom\" focusOnMount={ false }>\n\t\t\t\t\t\t\t<div class=\"affilate-links-suggestions\">\n\t\t\t\t\t\t\t\t{ posts.map( ( post, index ) => (\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tkey={ post.id }\n\t\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\t\ttabIndex=\"-1\"\n\t\t\t\t\t\t\t\t\t\tid={ `editor-url-input-suggestion-${ instanceId }-${ index }` }\n\t\t\t\t\t\t\t\t\t\tref={ this.bindSuggestionNode( index ) }\n\t\t\t\t\t\t\t\t\t\tclassName={ classnames( 'editor-url-input__suggestion block-editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( post ) }\n\t\t\t\t\t\t\t\t\t\taria-selected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ post.title || __( '(no title)' ) }\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Popover>\n\t\t\t\t\t}\n\t\t\t\t</form>\n </div>\n );\n }\n}\n\nexport default withSpokenMessages( withInstanceId( ThirstyURLInput ) );\n\n\n// WEBPACK FOOTER //\n// ./src/blocks/ta-image/search-input.js","import { taLink } from \"./ta-link\";\n\nconst { registerFormatType } = wp.richText;\n\n/**\n * Register custom formats.\n * \n * @since 3.6\n */\nexport default function registerFormats() {\n\n [\n taLink\n ].forEach( ( { name , ...settings } ) => registerFormatType( name , settings ) );\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/index.js","import InlineAffiliateLinkUI from './inline';\n\nconst { __ } = wp.i18n;\nconst { Component , Fragment } = wp.element;\nconst { withSpokenMessages } = wp.components;\nconst { getTextContent , applyFormat , removeFormat , slice } = wp.richText;\nconst { isURL } = wp.url;\nconst { RichTextToolbarButton , RichTextShortcut } = wp.editor;\nconst { Path , SVG } = wp.components;\nconst { getRectangleFromRange } = wp.dom;\n\nconst name = \"ta/link\";\n\n/**\n * Custom Affiliate link format. When applied will wrap selected text with <ta href=\"\" linkid=\"\"></ta> custom element.\n * Custom element is implemented here as we are not allowed to use <a> tag due to Gutenberg limitations.\n * Element is converted to normal <a> tag on frontend via PHP script filtered on 'the_content'.\n * \n * @since 3.6\n */\nexport const taLink = {\n name,\n title : __( \"Affiliate Link\" ),\n tagName : \"ta\",\n className : null,\n attributes : {\n\t\turl : \"href\",\n\t\ttarget : \"target\"\n },\n edit : withSpokenMessages( class LinkEdit extends Component {\n\t\t\n\t\t/**\n\t\t * Component constructor.\n\t\t * \n\t\t * @since 3.6\n\t\t */\n\t\tconstructor() {\n\t\t\tsuper( ...arguments );\n\n\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\tthis.state = {\n\t\t\t\taddingLink: false,\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Callback to set state to adding link status.\n\t\t * \n\t\t * @since 3.6\n\t\t */\n\t\taddLink() {\n\n\t\t\tconst { value, onChange } = this.props;\n\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\tif ( text && isURL( text ) ) {\n\t\t\t\tonChange( applyFormat( value, { type: name, attributes: { url: text } } ) );\n\t\t\t} else {\n\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Callback to set state to stop adding link status.\n\t\t * \n\t\t * @since 3.6\n\t\t */\n\t\tstopAddingLink() {\n\t\t\tthis.setState( { addingLink: false } );\n\t\t}\n\n\t\t/**\n\t\t * Remove format event callback.\n\t\t * \n\t\t * @since 3.6\n\t\t */\n\t\tonRemoveFormat() {\n\t\t\tconst { value , onChange , speak } = this.props;\n\n\t\t\tonChange( removeFormat( value , name ) );\n\t\t\tspeak( __( \"Affiliate Link removed.\" ), \"assertive\" );\n\t\t}\n\n\t\t/**\n\t\t * Get selected anchor text.\n\t\t * \n\t\t * @since 3.9\n\t\t */\n\t\tgetAnchorRect() {\n\n\t\t\tconst selection = window.getSelection();\n\t\t\tconst range = selection.rangeCount > 0 ? selection.getRangeAt( 0 ) : null;\n\n\t\t\tif ( ! range ) return;\n\n\t\t\tlet rect = null;\n\n\t\t\tif ( this.state.addingLink ) {\n\t\t\t\trect = getRectangleFromRange( range );\n\t\t\t} else {\n\n\t\t\t\tlet element = range.startContainer;\n\n\t\t\t\t// If the caret is right before the element, select the next element.\n\t\t\t\telement = element.nextElementSibling || element;\n\n\t\t\t\twhile ( element.nodeType !== window.Node.ELEMENT_NODE ) {\n\t\t\t\t\telement = element.parentNode;\n\t\t\t\t}\n\n\t\t\t\tconst closest = element.closest( 'ta' );\n\t\t\t\tif ( closest ) {\n\t\t\t\t\trect = closest.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\n\t\t\t}\n\n\t\t\treturn rect;\n\t\t}\n\n\t\t/**\n\t\t * Component render method.\n\t\t * \n\t\t * @since 3.6\n\t\t */\n\t\trender() {\n\t\t\tconst { isActive , activeAttributes , value , onChange } = this.props;\n\n\t\t\tconst anchorRect = this.getAnchorRect();\n\n\t\t\treturn (\n\t\t\t\t<Fragment>\n\t\t\t\t\t<RichTextShortcut\n\t\t\t\t\t\ttype=\"access\"\n\t\t\t\t\t\tcharacter=\"s\"\n\t\t\t\t\t\tonUse={ this.onRemoveFormat }\n\t\t\t\t\t/>\n\t\t\t\t\t<RichTextShortcut\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\tcharacter=\"l\"\n\t\t\t\t\t\tonUse={ this.addLink }\n\t\t\t\t\t/>\n\t\t\t\t\t<RichTextShortcut\n\t\t\t\t\t\ttype=\"primaryShift\"\n\t\t\t\t\t\tcharacter=\"l\"\n\t\t\t\t\t\tonUse={ this.onRemoveFormat }\n\t\t\t\t\t/>\n\t\t\t\t\t{ isActive && <RichTextToolbarButton\n\t\t\t\t\t\ticon=\"editor-unlink\"\n\t\t\t\t\t\ttitle={ __( 'Remove Affiliate Link' ) }\n\t\t\t\t\t\tclassName=\"ta-unlink-button\"\n\t\t\t\t\t\tonClick={ this.onRemoveFormat }\n\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\tshortcutType=\"primaryShift\"\n\t\t\t\t\t\tshortcutCharacter=\"l\"\n\t\t\t\t\t/> }\n\t\t\t\t\t{ ! isActive && <RichTextToolbarButton\n\t\t\t\t\t\ticon={ <SVG xmlns=\"http://www.w3.org/2000/svg\" width=\"16.688\" height=\"9.875\" viewBox=\"0 0 16.688 9.875\"><Path id=\"TA.svg\" fill=\"black\" class=\"cls-1\" d=\"M2.115,15.12H4.847L6.836,7.7H9.777l0.63-2.381H1.821L1.177,7.7H4.118Zm4.758,0H9.829l1.177-1.751h3.782l0.238,1.751h2.858L16.357,5.245H13.7Zm5.5-3.866,1.835-2.816,0.35,2.816H12.378Z\" transform=\"translate(-1.188 -5.25)\"/></SVG> }\n\t\t\t\t\t\ttitle={ __( 'Affiliate Link' ) }\n\t\t\t\t\t\tclassName=\"ta-link-button\"\n\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\tshortcutCharacter=\"l\"\n\t\t\t\t\t/> }\n\t\t\t\t\t<InlineAffiliateLinkUI\n\t\t\t\t\t\taddingLink={ this.state.addingLink }\n\t\t\t\t\t\tstopAddingLink={ this.stopAddingLink }\n\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\tanchorRect={ anchorRect }\n\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t/>\n\t\t\t\t</Fragment>\n\t\t\t);\n\t\t}\n } )\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/index.js","import classnames from \"classnames\";\nimport { isValidHref } from './utils';\nimport ThirstyURLPopover from './url-popover';\nimport ThirstyURLInput from './url-input';\n\nconst { __ } = wp.i18n;\nconst { Component , createRef } = wp.element;\nconst { ExternalLink , ToggleControl , IconButton , withSpokenMessages } = wp.components;\nconst { LEFT, RIGHT, UP, DOWN, BACKSPACE, ENTER } = wp.keycodes;\nconst { prependHTTP , safeDecodeURI , filterURLForDisplay } = wp.url;\nconst { create , insert , isCollapsed , applyFormat , getTextContent , slice } = wp.richText;\n\nconst stopKeyPropagation = ( event ) => event.stopPropagation();\n\n/**\n * Generates the format object that will be applied to the link text.\n * \n * @since 3.6\n *\n * @param {string} url The href of the link.\n * @param {boolean} linkid Affiliate link ID.\n * @param {Object} text The text that is being hyperlinked.\n *\n * @return {Object} The final format object.\n */\nfunction createLinkFormat( { url , linkid , text } ) {\n\tconst format = {\n\t\ttype: \"ta/link\",\n\t\tattributes: {\n\t\t\turl,\n\t\t\tlinkid : linkid.toString()\n\t\t},\n\t};\n\n\treturn format;\n}\n\n/**\n * Check if input is being show.\n * \n * @since 3.6\n * \n * @param {Object} props Component props.\n * @param {Object} state Component state.\n */\nfunction isShowingInput( props , state ) {\n\treturn props.addingLink || state.editLink;\n}\n\n/**\n * Affiliate Link editor JSX element.\n * \n * @since 3.6\n * \n * @param {Object} param0 Component props (destructred).\n */\nconst LinkEditor = ( { value , onChangeInputValue , onKeyDown , submitLink, invalidLink , resetInvalidLink , autocompleteRef } ) => (\n\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n\t<form\n\t\tclassName=\"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover\"\n\t\tonKeyPress={ stopKeyPropagation }\n\t\tonKeyDown={ onKeyDown }\n\t\tonSubmit={ submitLink }\n\t>\n\t\t<ThirstyURLInput\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChangeInputValue }\n\t\t\tautocompleteRef={ autocompleteRef }\n\t\t\tinvalidLink={ invalidLink }\n\t\t\tresetInvalidLink={ resetInvalidLink }\n\t\t/>\n\t\t<IconButton icon=\"editor-break\" label={ __( 'Apply' ) } type=\"submit\" />\n\t</form>\n\t/* eslint-enable jsx-a11y/no-noninteractive-element-interactions */\n);\n\n/**\n * Affiliate link url viewer JSX element.\n * \n * @param {*} param0 Component props (destructred).\n */\nconst LinkViewerUrl = ( { url } ) => {\n\tconst prependedURL = prependHTTP( url );\n\tconst linkClassName = classnames( 'editor-format-toolbar__link-container-value block-editor-format-toolbar__link-container-value', {\n\t\t'has-invalid-link': ! isValidHref( prependedURL ),\n\t} );\n\n\tif ( ! url ) {\n\t\treturn <span className={ linkClassName }></span>;\n\t}\n\n\treturn (\n\t\t<ExternalLink\n\t\t\tclassName={ linkClassName }\n\t\t\thref={ url }\n\t\t>\n\t\t\t{ filterURLForDisplay( safeDecodeURI( url ) ) }\n\t\t</ExternalLink>\n\t);\n};\n\n/**\n * Affiliate link viewer JSX element.\n * \n * @param {*} param0 Component props (destructred).\n */\nconst LinkViewer = ( { url, editLink } ) => {\n\treturn (\n\t\t// Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar\n\t\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\t\t<div\n\t\t\tclassName=\"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content\"\n\t\t\tonKeyPress={ stopKeyPropagation }\n\t\t>\n\t\t\t<LinkViewerUrl url={ url } />\n\t\t\t<IconButton icon=\"edit\" label={ __( 'Edit' ) } onClick={ editLink } />\n\t\t</div>\n\t\t/* eslint-enable jsx-a11y/no-static-element-interactions */\n\t);\n};\n\n/**\n * Inline affiliate link UI Component.\n * \n * @since 3.6\n * \n * @param {*} param0 Component props (destructred).\n */\nclass InlineAffiliateLinkUI extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.editLink = this.editLink.bind( this );\n\t\tthis.submitLink = this.submitLink.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.onChangeInputValue = this.onChangeInputValue.bind( this );\n\t\tthis.onClickOutside = this.onClickOutside.bind( this );\n\t\tthis.resetState = this.resetState.bind( this );\n\t\tthis.autocompleteRef = createRef();\n\t\tthis.resetInvalidLink = this.resetInvalidLink.bind( this );\n\n\t\tthis.state = {\n\t\t\tinputValue : '',\n\t\t\tlinkid : 0,\n\t\t\tpost : null,\n\t\t\tinvalidLink : false\n\t\t};\n\t}\n\n\t/**\n\t * Stop the key event from propagating up to ObserveTyping.startTypingInTextField.\n\t * \n\t * @since 3.6\n\t * \n\t * @param {Object} event Event object.\n\t */\n\tonKeyDown( event ) {\n\t\tif ( [ LEFT, DOWN, RIGHT, UP, BACKSPACE, ENTER ].indexOf( event.keyCode ) > -1 ) {\n\t\t\tevent.stopPropagation();\n\t\t}\n\t}\n\n\t/**\n\t * Callback to set state when input value is changed.\n\t * \n\t * @since 3.6\n\t * \n\t * @param {*} inputValue \n\t * @param {*} post \n\t */\n\tonChangeInputValue( inputValue , post = null ) {\n\t\tconst linkid = post ? post.id : 0;\n\t\tthis.setState( { inputValue , linkid , post } );\n\t}\n\n\t/**\n\t * Callback to set state when edit affiliate link (already inserted) is triggered.\n\t * \n\t * @since 3.6\n\t * \n\t * @param {*} event \n\t */\n\teditLink( event ) {\n\t\tthis.setState( { editLink: true } );\n\t\tevent.preventDefault();\n\t}\n\n\t/**\n\t * Callback to apply the affiliate link format to the selected text or position in the active block.\n\t * \n\t * @since 3.6\n\t * \n\t * @param {*} event \n\t */\n\tsubmitLink( event ) {\n\t\tconst { isActive, value, onChange, speak } = this.props;\n\t\tconst { inputValue, linkid , post } = this.state;\n\t\tconst url = prependHTTP( inputValue );\n\t\tconst selectedText = getTextContent( slice( value ) );\n\t\tconst format = createLinkFormat( {\n\t\t\turl,\n\t\t\tlinkid,\n\t\t\ttext: selectedText,\n\t\t} );\n\n\t\tevent.preventDefault();\n\n\t\tif ( ! linkid || ! post ) {\n\t\t\tthis.setState( { invalidLink : true } )\n\t\t\treturn;\n\t\t} \n\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\tconst toInsert = applyFormat( create( { text: post.title } ), format, 0, url.length );\n\t\t\tonChange( insert( value, toInsert ) );\n\t\t} else {\n\t\t\tonChange( applyFormat( value, format ) );\n\t\t}\n\n\t\tthis.resetState();\n\n\t\tif ( ! isValidHref( url ) ) {\n\t\t\tspeak( __( 'Warning: the link has been inserted but may have errors. Please test it.' ), 'assertive' );\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\n\t\t}\n\t}\n\n\t/**\n\t * Callback to run when users clicks outside the popover UI.\n\t * \n\t * @since 3.6\n\t * \n\t * @param {*} event \n\t */\n\tonClickOutside( event ) {\n\t\t// The autocomplete suggestions list renders in a separate popover (in a portal),\n\t\t// so onClickOutside fails to detect that a click on a suggestion occured in the\n\t\t// LinkContainer. Detect clicks on autocomplete suggestions using a ref here, and\n\t\t// return to avoid the popover being closed.\n\t\tconst autocompleteElement = this.autocompleteRef.current;\n\t\tif ( autocompleteElement && autocompleteElement.contains( event.target ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetState();\n\t}\n\n\t/**\n\t * Reset state callback.\n\t * \n\t * @since 3.6\n\t */\n\tresetState() {\n\t\tthis.props.stopAddingLink();\n\t\tthis.setState( { inputValue : '' , editLink: false } );\n\t\tthis.resetInvalidLink();\n\t}\n\n\t/**\n\t * Reset invalid link state callback. Separated as we need to run this independently from resetState() callback.\n\t * \n\t * @since 3.6\n\t */\n\tresetInvalidLink() {\n\t\tthis.setState( { invalidLink : false } );\n\t}\n\n\t/**\n\t * Component render method.\n\t *\n\t * @since 3.6\n\t */\n\trender() {\n\t\tconst { isActive, activeAttributes: { url , linkid }, addingLink, anchorRect, value, onChange } = this.props;\n\n\t\tif ( ! isActive && ! addingLink ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { inputValue , invalidLink } = this.state;\n\t\tconst showInput = isShowingInput( this.props, this.state );\n\n\t\treturn (\n\t\t\t<ThirstyURLPopover\n\t\t\t\tonClickOutside={ this.onClickOutside }\n\t\t\t\tonClose={ this.resetState }\n\t\t\t\tfocusOnMount={ showInput ? 'firstElement' : false }\n\t\t\t\tinvalidLink={ invalidLink }\n\t\t\t\tanchorRect= { anchorRect }\n\t\t\t>\n\t\t\t\t{ showInput ? (\n\t\t\t\t\t<LinkEditor\n\t\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\t\tonChangeInputValue={ this.onChangeInputValue }\n\t\t\t\t\t\tonKeyDown={ this.onKeyDown }\n\t\t\t\t\t\tsubmitLink={ this.submitLink }\n\t\t\t\t\t\tautocompleteRef={ this.autocompleteRef }\n\t\t\t\t\t\tupdateLinkId= { this.updateLinkId }\n\t\t\t\t\t\tinvalidLink={ invalidLink }\n\t\t\t\t\t\tresetInvalidLink={ this.resetInvalidLink }\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<LinkViewer\n\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\teditLink={ this.editLink }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</ThirstyURLPopover>\n\t\t);\n\t}\n}\n\nexport default withSpokenMessages( InlineAffiliateLinkUI );\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/inline.js","const { startsWith } = lodash;\n\nconst {\n getProtocol,\n\tisValidProtocol,\n\tgetAuthority,\n\tisValidAuthority,\n\tgetPath,\n\tisValidPath,\n\tgetQueryString,\n\tisValidQueryString,\n\tgetFragment,\n\tisValidFragment,\n} = wp.url;\n\n/**\n * Check for issues with the provided href.\n * \n * @since 3.6\n *\n * @param {string} href The href.\n * @return {boolean} Is the href invalid?\n */\nexport function isValidHref( href ) {\n\tif ( ! href ) {\n\t\treturn false;\n\t}\n\n\tconst trimmedHref = href.trim();\n\n\tif ( ! trimmedHref ) {\n\t\treturn false;\n\t}\n\n\t// Does the href start with something that looks like a URL protocol?\n\tif ( /^\\S+:/.test( trimmedHref ) ) {\n\t\tconst protocol = getProtocol( trimmedHref );\n\t\tif ( ! isValidProtocol( protocol ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Add some extra checks for http(s) URIs, since these are the most common use-case.\n\t\t// This ensures URIs with an http protocol have exactly two forward slashes following the protocol.\n\t\tif ( startsWith( protocol, 'http' ) && ! /^https?:\\/\\/[^\\/\\s]/i.test( trimmedHref ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst authority = getAuthority( trimmedHref );\n\t\tif ( ! isValidAuthority( authority ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst path = getPath( trimmedHref );\n\t\tif ( path && ! isValidPath( path ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst queryString = getQueryString( trimmedHref );\n\t\tif ( queryString && ! isValidQueryString( queryString ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst fragment = getFragment( trimmedHref );\n\t\tif ( fragment && ! isValidFragment( fragment ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Validate anchor links.\n\tif ( startsWith( trimmedHref, '#' ) && ! isValidFragment( trimmedHref ) ) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/utils.js","const { __ } = wp.i18n;\nconst { Component } = wp.element;\nconst { Popover , IconButton } = wp.components;\n\n/**\n * Custom URL Popover component.\n * \n * @since 3.6\n */\nclass ThirstyURLPopover extends Component {\n\n /**\n * Component constructor method.\n * \n * @since 3.6\n */\n\tconstructor() {\n super( ...arguments );\n \n this.toggleSettingsVisibility = this.toggleSettingsVisibility.bind( this );\n\n\t\tthis.state = {\n\t\t\tisSettingsExpanded: false,\n\t\t};\n }\n \n /**\n * Component constructor.\n * \n * @since 3.6\n */\n toggleSettingsVisibility() {\n\t\tthis.setState( {\n\t\t\tisSettingsExpanded: ! this.state.isSettingsExpanded,\n\t\t} );\n\t}\n\n /**\n * Component render method.\n * \n * @since 3.6\n */\n\trender() {\n\t\tconst {\n\t\t\tchildren,\n\t\t\trenderSettings,\n invalidLink,\n\t\t\tposition = 'bottom center',\n\t\t\tfocusOnMount = 'firstElement',\n\t\t\t...popoverProps\n\t\t} = this.props;\n\n\t\tconst {\n\t\t\tisSettingsExpanded,\n } = this.state;\n \n const showSettings = !! renderSettings && isSettingsExpanded;\n\n\t\treturn (\n\t\t\t<Popover\n\t\t\t\tclassName=\"ta-url-popover editor-url-popover block-editor-url-popover\"\n\t\t\t\tfocusOnMount={ focusOnMount }\n\t\t\t\tposition={ position }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<div className=\"editor-url-popover__row\">\n { children }\n { !! renderSettings && (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tclassName=\"editor-url-popover__settings-toggle\"\n\t\t\t\t\t\t\ticon=\"ellipsis\"\n\t\t\t\t\t\t\tlabel={ __( 'Link Settings' ) }\n\t\t\t\t\t\t\tonClick={ this.toggleSettingsVisibility }\n\t\t\t\t\t\t\taria-expanded={ isSettingsExpanded }\n\t\t\t\t\t\t/>\n ) }\n\t\t\t\t</div>\n { showSettings && (\n\t\t\t\t\t<div className=\"editor-url-popover__row editor-url-popover__settings\">\n\t\t\t\t\t\t{ renderSettings() }\n\t\t\t\t\t</div>\n ) }\n { invalidLink && <div class=\"ta-invalid-link\">{ __( 'Invalid affiliate link' ) }</div> }\n\t\t\t</Popover>\n\t\t);\n\t}\n}\n\nexport default ThirstyURLPopover;\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/url-popover.js","import classnames from 'classnames';\nimport scrollIntoView from 'dom-scroll-into-view';\n\nconst { __ } = wp.i18n;\nconst { throttle } = lodash;\nconst { Component , createRef } = wp.element;\nconst { UP, DOWN, ENTER, TAB } = wp.keycodes;\nconst { Spinner, withSpokenMessages, Popover } = wp.components;\nconst { withInstanceId } = wp.compose;\n\n// Since URLInput is rendered in the context of other inputs, but should be\n// considered a separate modal node, prevent keyboard events from propagating\n// as being considered from the input.\nconst stopEventPropagation = ( event ) => event.stopPropagation();\n\n/**\n * Custom URL Input component.\n * \n * @since 3.6\n */\nclass ThirstyURLInput extends Component {\n\n /**\n * Component constructor method.\n * \n * @since 3.6\n * \n * @param {*} param0 \n */\n\tconstructor( { autocompleteRef } ) {\n\t\tsuper( ...arguments );\n\n\t\tthis.onChange = this.onChange.bind( this );\n\t\tthis.onKeyDown = this.onKeyDown.bind( this );\n\t\tthis.autocompleteRef = autocompleteRef || createRef();\n\t\tthis.inputRef = createRef();\n\t\tthis.updateSuggestions = throttle( this.updateSuggestions.bind( this ), 200 );\n\n\t\tthis.suggestionNodes = [];\n\n\t\tthis.state = {\n\t\t\tposts: [],\n\t\t\tshowSuggestions: false,\n\t\t\tselectedSuggestion: null,\n\t\t};\n\t}\n\n /**\n * Component did update method.\n * \n * @since 3.6\n */\n\tcomponentDidUpdate() {\n\t\tconst { showSuggestions, selectedSuggestion } = this.state;\n\t\t// only have to worry about scrolling selected suggestion into view\n\t\t// when already expanded\n\t\tif ( showSuggestions && selectedSuggestion !== null && ! this.scrollingIntoView ) {\n\t\t\tthis.scrollingIntoView = true;\n\t\t\tscrollIntoView( this.suggestionNodes[ selectedSuggestion ], this.autocompleteRef.current, {\n\t\t\t\tonlyScrollIfNeeded: true,\n\t\t\t} );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.scrollingIntoView = false;\n\t\t\t}, 100 );\n\t\t}\n\t}\n\n /**\n * Component unmount method.\n * \n * @since 3.6\n */\n\tcomponentWillUnmount() {\n\t\tdelete this.suggestionsRequest;\n\t}\n\n /**\n * Bind suggestion to node.\n * \n * @param {*} index \n */\n\tbindSuggestionNode( index ) {\n\t\treturn ( ref ) => {\n\t\t\tthis.suggestionNodes[ index ] = ref;\n\t\t};\n\t}\n\n /**\n * Callback to show suggestions based on value inputted on search field.\n * \n * @since 3.6\n * \n * @param {*} value \n */\n\tupdateSuggestions( value ) {\n\t\t// Show the suggestions after typing at least 2 characters\n\t\t// and also for URLs\n\t\tif ( value.length < 2 || /^https?:/.test( value ) ) {\n\t\t\tthis.setState( {\n\t\t\t\tshowSuggestions: false,\n\t\t\t\tselectedSuggestion: null,\n\t\t\t\tloading: false,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState( {\n\t\t\tshowSuggestions: true,\n\t\t\tselectedSuggestion: null,\n\t\t\tloading: true,\n\t\t} );\n\n const formData = new FormData();\n formData.append( \"action\" , \"search_affiliate_links_query\" );\n formData.append( \"keyword\" , value );\n formData.append( \"paged\" , 1 );\n formData.append( \"gutenberg\" , true );\n \n // We are getting data via the WP AJAX instead of rest API as it is not possible yet\n // to filter results with category value. This is to prepare next update to add category filter.\n const request = fetch( ajaxurl , {\n method : \"POST\",\n body : formData\n } );\n\n request\n .then( response => response.json() )\n .then( ( response ) => {\n\n if ( ! response.affiliate_links ) return;\n\n const posts = response.affiliate_links;\n\n\t\t\t// A fetch Promise doesn't have an abort option. It's mimicked by\n\t\t\t// comparing the request reference in on the instance, which is\n\t\t\t// reset or deleted on subsequent requests or unmounting.\n\t\t\tif ( this.suggestionsRequest !== request ) {\n\t\t\t\treturn;\n }\n\n\t\t\tthis.setState( {\n\t\t\t\tposts,\n\t\t\t\tloading: false,\n } );\n\n\t\t\tif ( !! posts.length ) {\n\t\t\t\tthis.props.debouncedSpeak( sprintf( _n(\n\t\t\t\t\t'%d result found, use up and down arrow keys to navigate.',\n\t\t\t\t\t'%d results found, use up and down arrow keys to navigate.',\n\t\t\t\t\tposts.length\n\t\t\t\t), posts.length ), 'assertive' );\n\t\t\t} else {\n\t\t\t\tthis.props.debouncedSpeak( __( 'No results.' ), 'assertive' );\n }\n\n\t\t} ).catch( () => {\n\t\t\tif ( this.suggestionsRequest === request ) {\n\t\t\t\tthis.setState( {\n\t\t\t\t\tloading: false,\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tthis.suggestionsRequest = request;\n\t}\n\n /**\n * Search input value change event callback method.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\tonChange( event ) {\n this.props.resetInvalidLink();\n\t\tconst inputValue = event.target.value;\n\t\tthis.props.onChange( inputValue );\n\t\tthis.updateSuggestions( inputValue );\n\t}\n\n /**\n * Keydown event callback. Handles selecting result via keyboard.\n * \n * @since 3.6\n * \n * @param {*} event \n */\n\tonKeyDown( event ) {\n\t\tconst { showSuggestions, selectedSuggestion, posts, loading } = this.state;\n\t\t// If the suggestions are not shown or loading, we shouldn't handle the arrow keys\n\t\t// We shouldn't preventDefault to allow block arrow keys navigation\n\t\tif ( ! showSuggestions || ! posts.length || loading ) {\n\t\t\t// In the Windows version of Firefox the up and down arrows don't move the caret\n\t\t\t// within an input field like they do for Mac Firefox/Chrome/Safari. This causes\n\t\t\t// a form of focus trapping that is disruptive to the user experience. This disruption\n\t\t\t// only happens if the caret is not in the first or last position in the text input.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/5693#issuecomment-436684747\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\t// When UP is pressed, if the caret is at the start of the text, move it to the 0\n\t\t\t\t// position.\n\t\t\t\tcase UP: {\n\t\t\t\t\tif ( 0 !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to position 0\n\t\t\t\t\t\tevent.target.setSelectionRange( 0, 0 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// When DOWN is pressed, if the caret is not at the end of the text, move it to the\n\t\t\t\t// last position.\n\t\t\t\tcase DOWN: {\n\t\t\t\t\tif ( this.props.value.length !== event.target.selectionStart ) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Set the input caret to the last position\n\t\t\t\t\t\tevent.target.setSelectionRange( this.props.value.length, this.props.value.length );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst post = this.state.posts[ this.state.selectedSuggestion ];\n\n\t\tswitch ( event.keyCode ) {\n\t\t\tcase UP: {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst previousIndex = ! selectedSuggestion ? posts.length - 1 : selectedSuggestion - 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: previousIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase DOWN: {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst nextIndex = selectedSuggestion === null || ( selectedSuggestion === posts.length - 1 ) ? 0 : selectedSuggestion + 1;\n\t\t\t\tthis.setState( {\n\t\t\t\t\tselectedSuggestion: nextIndex,\n\t\t\t\t} );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TAB: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tthis.selectLink( post );\n\t\t\t\t\t// Announce a link has been selected when tabbing away from the input field.\n\t\t\t\t\tthis.props.speak( __( 'Link selected' ) );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ENTER: {\n\t\t\t\tif ( this.state.selectedSuggestion !== null ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tthis.selectLink( post );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n /**\n * Set state when an affiliate link is selected.\n * \n * @since 3.6\n * \n * @param {*} post \n */\n\tselectLink( post ) {\n\t\tthis.props.onChange( post.link, post );\n\t\tthis.setState( {\n\t\t\tselectedSuggestion: null,\n\t\t\tshowSuggestions: false,\n\t\t} );\n\t}\n\n /**\n * Callback handler for when affiliate link is selected.\n * \n * @param {*} post \n */\n\thandleOnClick( post ) {\n\t\tthis.selectLink( post );\n\t\t// Move focus to the input field when a link suggestion is clicked.\n\t\tthis.inputRef.current.focus();\n\t}\n\n /**\n * Component render method.\n * \n * @since 3.6\n */\n\trender() {\n\t\tconst { value = '', autoFocus = true, instanceId , invalidLink } = this.props;\n\t\tconst { showSuggestions, posts, selectedSuggestion, loading } = this.state;\n\t\t/* eslint-disable jsx-a11y/no-autofocus */\n\t\treturn (\n\t\t\t<div className=\"editor-url-input block-editor-url-input\">\n\t\t\t\t<input\n\t\t\t\t\tautoFocus={ autoFocus }\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\taria-label={ __( 'URL' ) }\n\t\t\t\t\trequired\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ this.onChange }\n\t\t\t\t\tonInput={ stopEventPropagation }\n\t\t\t\t\tplaceholder={ __( 'Paste URL or type to search' ) }\n\t\t\t\t\tonKeyDown={ this.onKeyDown }\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={ showSuggestions }\n\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\taria-owns={ `editor-url-input-suggestions-${ instanceId }` }\n\t\t\t\t\taria-activedescendant={ selectedSuggestion !== null ? `editor-url-input-suggestion-${ instanceId }-${ selectedSuggestion }` : undefined }\n\t\t\t\t\tref={ this.inputRef }\n\t\t\t\t/>\n\n\t\t\t\t{ ( loading ) && <Spinner /> }\n\n\t\t\t\t{ showSuggestions && !! posts.length && ! invalidLink &&\n\t\t\t\t\t<Popover position=\"bottom\" noArrow focusOnMount={ false }>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"editor-url-input__suggestions block-editor-url-input__suggestions\"\n\t\t\t\t\t\t\tid={ `editor-url-input-suggestions-${ instanceId }` }\n\t\t\t\t\t\t\tref={ this.autocompleteRef }\n\t\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ posts.map( ( post, index ) => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={ post.id }\n\t\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\t\ttabIndex=\"-1\"\n\t\t\t\t\t\t\t\t\tid={ `block-editor-url-input-suggestion-${ instanceId }-${ index }` }\n\t\t\t\t\t\t\t\t\tref={ this.bindSuggestionNode( index ) }\n\t\t\t\t\t\t\t\t\tclassName={ classnames( 'editor-url-input__suggestion block-editor-url-input__suggestion', {\n\t\t\t\t\t\t\t\t\t\t'is-selected': index === selectedSuggestion,\n\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\tonClick={ () => this.handleOnClick( post ) }\n\t\t\t\t\t\t\t\t\taria-selected={ index === selectedSuggestion }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ post.title || __( '(no title)' ) }\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover>\n\t\t\t\t}\n\t\t\t</div>\n\t\t);\n\t\t/* eslint-enable jsx-a11y/no-autofocus */\n\t}\n}\n\nexport default withSpokenMessages( withInstanceId( ThirstyURLInput ) );\n\n\n// WEBPACK FOOTER //\n// ./src/formats/ta-link/url-input.js","'use strict';\n\nmodule.exports = require('./dom-scroll-into-view');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/index.js\n// module id = 14\n// module chunks = 0","'use strict';\n\nvar util = require('./util');\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {};\n // document 归一化到 window\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset = undefined;\n var ch = undefined;\n var cw = undefined;\n var containerScroll = undefined;\n var diffTop = undefined;\n var diffBottom = undefined;\n var win = undefined;\n var winScroll = undefined;\n var ww = undefined;\n var wh = undefined;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n };\n // elem 相对 container 可视视窗的距离\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n };\n // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nmodule.exports = scrollIntoView;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/dom-scroll-into-view.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box = undefined;\n var x = undefined;\n var y = undefined;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top;\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];\n var method = 'scroll' + (top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX = undefined;\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name = undefined;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop = undefined;\n var j = undefined;\n var i = undefined;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = undefined;\n if (prop === 'border') {\n cssProp = prop + which[i] + 'Width';\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\n\neach(['Width', 'Height'], function (name) {\n domUtils['doc' + name] = function (refWin) {\n var d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement['scroll' + name],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body['scroll' + name], domUtils['viewport' + name](d));\n };\n\n domUtils['viewport' + name] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = 'client' + name;\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem, computedStyle);\n var cssBoxValue = 0;\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n }\n return cssBoxValue;\n }\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(elem) {\n var val = undefined;\n var args = arguments;\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils['outer' + first] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current = undefined;\n var key = undefined;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n css(elem, ret);\n}\n\nmodule.exports = _extends({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n var overflow = obj.overflow;\n if (overflow) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n w.scrollTop = v;\n }\n },\n\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/dom-scroll-into-view/lib/util.js\n// module id = 16\n// module chunks = 0"],"sourceRoot":""}
js/app/gutenberg_support/src/blocks/ta-image/index.js CHANGED
@@ -109,107 +109,6 @@ export const settings = {
109
 
110
  attributes: blockAttributes,
111
 
112
- transforms: {
113
- from: [
114
- {
115
- type: 'raw',
116
- isMatch: ( node ) => node.nodeName === 'FIGURE' && !! node.querySelector( 'img' ),
117
- schema,
118
- transform: ( node ) => {
119
-
120
- // Search both figure and image classes. Alignment could be
121
- // set on either. ID is set on the image.
122
- const className = node.className + ' ' + node.querySelector( 'img' ).className;
123
- const alignMatches = /(?:^|\s)align(left|center|right)(?:$|\s)/.exec( className );
124
- const align = alignMatches ? alignMatches[ 1 ] : undefined;
125
- const idMatches = /(?:^|\s)wp-image-(\d+)(?:$|\s)/.exec( className );
126
- const id = idMatches ? Number( idMatches[ 1 ] ) : undefined;
127
- const anchorElement = node.querySelector( 'a' );
128
- const linkDestination = anchorElement && anchorElement.href ? 'custom' : undefined;
129
- const linkid = anchorElement && anchorElement.linkid ? anchorElement.linkid : undefined;
130
- const href = anchorElement && anchorElement.href ? anchorElement.href : undefined;
131
- const rel = anchorElement && anchorElement.rel ? anchorElement.rel : undefined;
132
- const linkClass = anchorElement && anchorElement.className ? anchorElement.className : undefined;
133
- const attributes = getBlockAttributes( 'ta/image', node.outerHTML, { align, id, linkDestination, linkid , href, rel, linkClass } );
134
- return createBlock( 'ta/image', attributes );
135
- },
136
- },
137
- {
138
- type: 'files',
139
- isMatch( files ) {
140
- return files.length === 1 && files[ 0 ].type.indexOf( 'image/' ) === 0;
141
- },
142
- transform( files ) {
143
- const file = files[ 0 ];
144
- // We don't need to upload the media directly here
145
- // It's already done as part of the `componentDidMount`
146
- // int the image block
147
- const block = createBlock( 'ta/image', {
148
- url: createBlobURL( file ),
149
- } );
150
-
151
- return block;
152
- },
153
- },
154
- {
155
- type: 'shortcode',
156
- tag: 'caption',
157
- attributes: {
158
- url: {
159
- type: 'string',
160
- source: 'attribute',
161
- attribute: 'src',
162
- selector: 'img',
163
- },
164
- alt: {
165
- type: 'string',
166
- source: 'attribute',
167
- attribute: 'alt',
168
- selector: 'img',
169
- },
170
- caption: {
171
- shortcode: ( attributes, { shortcode } ) => {
172
- const { body } = document.implementation.createHTMLDocument( '' );
173
-
174
- body.innerHTML = shortcode.content;
175
- body.removeChild( body.firstElementChild );
176
-
177
- return body.innerHTML.trim();
178
- },
179
- },
180
- id: {
181
- type: 'number',
182
- shortcode: ( { named: { id } } ) => {
183
- if ( ! id ) {
184
- return;
185
- }
186
-
187
- return parseInt( id.replace( 'attachment_', '' ), 10 );
188
- },
189
- },
190
- align: {
191
- type: 'string',
192
- shortcode: ( { named: { align = 'alignnone' } } ) => {
193
- return align.replace( 'align', '' );
194
- },
195
- },
196
- linkid: {
197
- type: 'string',
198
- source: 'attribute',
199
- selector: 'wp-block-ta-image > ta',
200
- attribute: 'linkid'
201
- },
202
- href: {
203
- type: 'string',
204
- source: 'attribute',
205
- selector: 'ta',
206
- attribute: 'href'
207
- },
208
- },
209
- },
210
- ],
211
- },
212
-
213
  getEditWrapperProps( attributes ) {
214
  const { align, width } = attributes;
215
  if ( 'left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align ) {
109
 
110
  attributes: blockAttributes,
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  getEditWrapperProps( attributes ) {
113
  const { align, width } = attributes;
114
  if ( 'left' === align || 'center' === align || 'right' === align || 'wide' === align || 'full' === align ) {
js/app/gutenberg_support/src/blocks/ta-image/search-input.js CHANGED
@@ -184,7 +184,7 @@ class ThirstyURLInput extends Component {
184
  return (
185
  <div class="edit-search-affiliate-links">
186
  <form
187
- className="editor-format-toolbar__link-container-content ta-link-search-popover"
188
  onSubmit={ this.displayAffiliateImages }
189
  >
190
  <TextControl
@@ -207,7 +207,7 @@ class ThirstyURLInput extends Component {
207
  tabIndex="-1"
208
  id={ `editor-url-input-suggestion-${ instanceId }-${ index }` }
209
  ref={ this.bindSuggestionNode( index ) }
210
- className={ classnames( 'editor-url-input__suggestion', {
211
  'is-selected': index === selectedSuggestion,
212
  } ) }
213
  onClick={ () => this.handleOnClick( post ) }
184
  return (
185
  <div class="edit-search-affiliate-links">
186
  <form
187
+ className="editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover"
188
  onSubmit={ this.displayAffiliateImages }
189
  >
190
  <TextControl
207
  tabIndex="-1"
208
  id={ `editor-url-input-suggestion-${ instanceId }-${ index }` }
209
  ref={ this.bindSuggestionNode( index ) }
210
+ className={ classnames( 'editor-url-input__suggestion block-editor-url-input__suggestion', {
211
  'is-selected': index === selectedSuggestion,
212
  } ) }
213
  onClick={ () => this.handleOnClick( post ) }
js/app/gutenberg_support/src/formats/ta-link/index.js CHANGED
@@ -7,6 +7,7 @@ const { getTextContent , applyFormat , removeFormat , slice } = wp.richText;
7
  const { isURL } = wp.url;
8
  const { RichTextToolbarButton , RichTextShortcut } = wp.editor;
9
  const { Path , SVG } = wp.components;
 
10
 
11
  const name = "ta/link";
12
 
@@ -50,6 +51,7 @@ export const taLink = {
50
  * @since 3.6
51
  */
52
  addLink() {
 
53
  const { value, onChange } = this.props;
54
  const text = getTextContent( slice( value ) );
55
 
@@ -81,6 +83,43 @@ export const taLink = {
81
  speak( __( "Affiliate Link removed." ), "assertive" );
82
  }
83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  /**
85
  * Component render method.
86
  *
@@ -89,6 +128,8 @@ export const taLink = {
89
  render() {
90
  const { isActive , activeAttributes , value , onChange } = this.props;
91
 
 
 
92
  return (
93
  <Fragment>
94
  <RichTextShortcut
@@ -128,6 +169,7 @@ export const taLink = {
128
  stopAddingLink={ this.stopAddingLink }
129
  isActive={ isActive }
130
  activeAttributes={ activeAttributes }
 
131
  value={ value }
132
  onChange={ onChange }
133
  />
7
  const { isURL } = wp.url;
8
  const { RichTextToolbarButton , RichTextShortcut } = wp.editor;
9
  const { Path , SVG } = wp.components;
10
+ const { getRectangleFromRange } = wp.dom;
11
 
12
  const name = "ta/link";
13
 
51
  * @since 3.6
52
  */
53
  addLink() {
54
+
55
  const { value, onChange } = this.props;
56
  const text = getTextContent( slice( value ) );
57
 
83
  speak( __( "Affiliate Link removed." ), "assertive" );
84
  }
85
 
86
+ /**
87
+ * Get selected anchor text.
88
+ *
89
+ * @since 3.9
90
+ */
91
+ getAnchorRect() {
92
+
93
+ const selection = window.getSelection();
94
+ const range = selection.rangeCount > 0 ? selection.getRangeAt( 0 ) : null;
95
+
96
+ if ( ! range ) return;
97
+
98
+ let rect = null;
99
+
100
+ if ( this.state.addingLink ) {
101
+ rect = getRectangleFromRange( range );
102
+ } else {
103
+
104
+ let element = range.startContainer;
105
+
106
+ // If the caret is right before the element, select the next element.
107
+ element = element.nextElementSibling || element;
108
+
109
+ while ( element.nodeType !== window.Node.ELEMENT_NODE ) {
110
+ element = element.parentNode;
111
+ }
112
+
113
+ const closest = element.closest( 'ta' );
114
+ if ( closest ) {
115
+ rect = closest.getBoundingClientRect();
116
+ }
117
+
118
+ }
119
+
120
+ return rect;
121
+ }
122
+
123
  /**
124
  * Component render method.
125
  *
128
  render() {
129
  const { isActive , activeAttributes , value , onChange } = this.props;
130
 
131
+ const anchorRect = this.getAnchorRect();
132
+
133
  return (
134
  <Fragment>
135
  <RichTextShortcut
169
  stopAddingLink={ this.stopAddingLink }
170
  isActive={ isActive }
171
  activeAttributes={ activeAttributes }
172
+ anchorRect={ anchorRect }
173
  value={ value }
174
  onChange={ onChange }
175
  />
js/app/gutenberg_support/src/formats/ta-link/inline.js CHANGED
@@ -1,5 +1,4 @@
1
  import classnames from "classnames";
2
- import ThirstyPositionedAtSelection from './positioned-at-selection';
3
  import { isValidHref } from './utils';
4
  import ThirstyURLPopover from './url-popover';
5
  import ThirstyURLInput from './url-input';
@@ -59,7 +58,7 @@ const LinkEditor = ( { value , onChangeInputValue , onKeyDown , submitLink, inva
59
  // Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar
60
  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
61
  <form
62
- className="editor-format-toolbar__link-container-content ta-link-search-popover"
63
  onKeyPress={ stopKeyPropagation }
64
  onKeyDown={ onKeyDown }
65
  onSubmit={ submitLink }
@@ -83,7 +82,7 @@ const LinkEditor = ( { value , onChangeInputValue , onKeyDown , submitLink, inva
83
  */
84
  const LinkViewerUrl = ( { url } ) => {
85
  const prependedURL = prependHTTP( url );
86
- const linkClassName = classnames( 'editor-format-toolbar__link-container-value', {
87
  'has-invalid-link': ! isValidHref( prependedURL ),
88
  } );
89
 
@@ -111,7 +110,7 @@ const LinkViewer = ( { url, editLink } ) => {
111
  // Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar
112
  /* eslint-disable jsx-a11y/no-static-element-interactions */
113
  <div
114
- className="editor-format-toolbar__link-container-content"
115
  onKeyPress={ stopKeyPropagation }
116
  >
117
  <LinkViewerUrl url={ url } />
@@ -276,7 +275,7 @@ class InlineAffiliateLinkUI extends Component {
276
  * @since 3.6
277
  */
278
  render() {
279
- const { isActive, activeAttributes: { url , linkid }, addingLink, value, onChange } = this.props;
280
 
281
  if ( ! isActive && ! addingLink ) {
282
  return null;
@@ -286,34 +285,31 @@ class InlineAffiliateLinkUI extends Component {
286
  const showInput = isShowingInput( this.props, this.state );
287
 
288
  return (
289
- <ThirstyPositionedAtSelection
290
- key={ `${ value.start }${ value.end }` /* Used to force rerender on selection change */ }
 
 
 
 
291
  >
292
- <ThirstyURLPopover
293
- onClickOutside={ this.onClickOutside }
294
- onClose={ this.resetState }
295
- focusOnMount={ showInput ? 'firstElement' : false }
296
- invalidLink={ invalidLink }
297
- >
298
- { showInput ? (
299
- <LinkEditor
300
- value={ inputValue }
301
- onChangeInputValue={ this.onChangeInputValue }
302
- onKeyDown={ this.onKeyDown }
303
- submitLink={ this.submitLink }
304
- autocompleteRef={ this.autocompleteRef }
305
- updateLinkId= { this.updateLinkId }
306
- invalidLink={ invalidLink }
307
- resetInvalidLink={ this.resetInvalidLink }
308
- />
309
- ) : (
310
- <LinkViewer
311
- url={ url }
312
- editLink={ this.editLink }
313
- />
314
- ) }
315
- </ThirstyURLPopover>
316
- </ThirstyPositionedAtSelection>
317
  );
318
  }
319
  }
1
  import classnames from "classnames";
 
2
  import { isValidHref } from './utils';
3
  import ThirstyURLPopover from './url-popover';
4
  import ThirstyURLInput from './url-input';
58
  // Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar
59
  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
60
  <form
61
+ className="editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content ta-link-search-popover"
62
  onKeyPress={ stopKeyPropagation }
63
  onKeyDown={ onKeyDown }
64
  onSubmit={ submitLink }
82
  */
83
  const LinkViewerUrl = ( { url } ) => {
84
  const prependedURL = prependHTTP( url );
85
+ const linkClassName = classnames( 'editor-format-toolbar__link-container-value block-editor-format-toolbar__link-container-value', {
86
  'has-invalid-link': ! isValidHref( prependedURL ),
87
  } );
88
 
110
  // Disable reason: KeyPress must be suppressed so the block doesn't hide the toolbar
111
  /* eslint-disable jsx-a11y/no-static-element-interactions */
112
  <div
113
+ className="editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content"
114
  onKeyPress={ stopKeyPropagation }
115
  >
116
  <LinkViewerUrl url={ url } />
275
  * @since 3.6
276
  */
277
  render() {
278
+ const { isActive, activeAttributes: { url , linkid }, addingLink, anchorRect, value, onChange } = this.props;
279
 
280
  if ( ! isActive && ! addingLink ) {
281
  return null;
285
  const showInput = isShowingInput( this.props, this.state );
286
 
287
  return (
288
+ <ThirstyURLPopover
289
+ onClickOutside={ this.onClickOutside }
290
+ onClose={ this.resetState }
291
+ focusOnMount={ showInput ? 'firstElement' : false }
292
+ invalidLink={ invalidLink }
293
+ anchorRect= { anchorRect }
294
  >
295
+ { showInput ? (
296
+ <LinkEditor
297
+ value={ inputValue }
298
+ onChangeInputValue={ this.onChangeInputValue }
299
+ onKeyDown={ this.onKeyDown }
300
+ submitLink={ this.submitLink }
301
+ autocompleteRef={ this.autocompleteRef }
302
+ updateLinkId= { this.updateLinkId }
303
+ invalidLink={ invalidLink }
304
+ resetInvalidLink={ this.resetInvalidLink }
305
+ />
306
+ ) : (
307
+ <LinkViewer
308
+ url={ url }
309
+ editLink={ this.editLink }
310
+ />
311
+ ) }
312
+ </ThirstyURLPopover>
 
 
 
 
 
 
 
313
  );
314
  }
315
  }
js/app/gutenberg_support/src/formats/ta-link/positioned-at-selection.js DELETED
@@ -1,79 +0,0 @@
1
- const { Component } = wp.element;
2
- const { getOffsetParent , getRectangleFromRange } = wp.dom;
3
-
4
- /**
5
- * Returns a style object for applying as `position: absolute` for an element
6
- * relative to the bottom-center of the current selection. Includes `top` and
7
- * `left` style properties.
8
- *
9
- * @since 3.6
10
- *
11
- * @return {Object} Style object.
12
- */
13
- function getCurrentCaretPositionStyle() {
14
- const selection = window.getSelection();
15
-
16
- // Unlikely, but in the case there is no selection, return empty styles so
17
- // as to avoid a thrown error by `Selection#getRangeAt` on invalid index.
18
- if ( selection.rangeCount === 0 ) {
19
- return {};
20
- }
21
-
22
- // Get position relative viewport.
23
- const rect = getRectangleFromRange( selection.getRangeAt( 0 ) );
24
- let top = rect.top + rect.height;
25
- let left = rect.left + ( rect.width / 2 );
26
-
27
- // Offset by positioned parent, if one exists.
28
- const offsetParent = getOffsetParent( selection.anchorNode );
29
- if ( offsetParent ) {
30
- const parentRect = offsetParent.getBoundingClientRect();
31
- top -= parentRect.top;
32
- left -= parentRect.left;
33
- }
34
-
35
- return { top, left };
36
- }
37
-
38
- /**
39
- * Component which renders itself positioned under the current caret selection.
40
- * The position is calculated at the time of the component being mounted, so it
41
- * should only be mounted after the desired selection has been made.
42
- *
43
- * @since 3.6
44
- *
45
- * @type {WPComponent}
46
- */
47
- class ThirstyPositionedAtSelection extends Component {
48
-
49
- /**
50
- * Component constructor method.
51
- *
52
- * @since 3.6
53
- */
54
- constructor() {
55
- super( ...arguments );
56
-
57
- this.state = {
58
- style: getCurrentCaretPositionStyle(),
59
- };
60
- }
61
-
62
- /**
63
- * Component render method.
64
- *
65
- * @since 3.6
66
- */
67
- render() {
68
- const { children } = this.props;
69
- const { style } = this.state;
70
-
71
- return (
72
- <div className="editor-format-toolbar__selection-position" style={ style }>
73
- { children }
74
- </div>
75
- );
76
- }
77
- }
78
-
79
- export default ThirstyPositionedAtSelection;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
js/app/gutenberg_support/src/formats/ta-link/url-input.js CHANGED
@@ -302,7 +302,7 @@ class ThirstyURLInput extends Component {
302
  const { showSuggestions, posts, selectedSuggestion, loading } = this.state;
303
  /* eslint-disable jsx-a11y/no-autofocus */
304
  return (
305
- <div className="editor-url-input">
306
  <input
307
  autoFocus={ autoFocus }
308
  type="text"
@@ -326,7 +326,7 @@ class ThirstyURLInput extends Component {
326
  { showSuggestions && !! posts.length && ! invalidLink &&
327
  <Popover position="bottom" noArrow focusOnMount={ false }>
328
  <div
329
- className="editor-url-input__suggestions"
330
  id={ `editor-url-input-suggestions-${ instanceId }` }
331
  ref={ this.autocompleteRef }
332
  role="listbox"
@@ -336,9 +336,9 @@ class ThirstyURLInput extends Component {
336
  key={ post.id }
337
  role="option"
338
  tabIndex="-1"
339
- id={ `editor-url-input-suggestion-${ instanceId }-${ index }` }
340
  ref={ this.bindSuggestionNode( index ) }
341
- className={ classnames( 'editor-url-input__suggestion', {
342
  'is-selected': index === selectedSuggestion,
343
  } ) }
344
  onClick={ () => this.handleOnClick( post ) }
302
  const { showSuggestions, posts, selectedSuggestion, loading } = this.state;
303
  /* eslint-disable jsx-a11y/no-autofocus */
304
  return (
305
+ <div className="editor-url-input block-editor-url-input">
306
  <input
307
  autoFocus={ autoFocus }
308
  type="text"
326
  { showSuggestions && !! posts.length && ! invalidLink &&
327
  <Popover position="bottom" noArrow focusOnMount={ false }>
328
  <div
329
+ className="editor-url-input__suggestions block-editor-url-input__suggestions"
330
  id={ `editor-url-input-suggestions-${ instanceId }` }
331
  ref={ this.autocompleteRef }
332
  role="listbox"
336
  key={ post.id }
337
  role="option"
338
  tabIndex="-1"
339
+ id={ `block-editor-url-input-suggestion-${ instanceId }-${ index }` }
340
  ref={ this.bindSuggestionNode( index ) }
341
+ className={ classnames( 'editor-url-input__suggestion block-editor-url-input__suggestion', {
342
  'is-selected': index === selectedSuggestion,
343
  } ) }
344
  onClick={ () => this.handleOnClick( post ) }
js/app/gutenberg_support/src/formats/ta-link/url-popover.js CHANGED
@@ -44,11 +44,10 @@ class ThirstyURLPopover extends Component {
44
  const {
45
  children,
46
  renderSettings,
47
- onClose,
48
- onClickOutside,
49
  invalidLink,
50
  position = 'bottom center',
51
  focusOnMount = 'firstElement',
 
52
  } = this.props;
53
 
54
  const {
@@ -59,11 +58,10 @@ class ThirstyURLPopover extends Component {
59
 
60
  return (
61
  <Popover
62
- className="ta-url-popover editor-url-popover"
63
  focusOnMount={ focusOnMount }
64
  position={ position }
65
- onClose={ onClose }
66
- onClickOutside={ onClickOutside }
67
  >
68
  <div className="editor-url-popover__row">
69
  { children }
44
  const {
45
  children,
46
  renderSettings,
 
 
47
  invalidLink,
48
  position = 'bottom center',
49
  focusOnMount = 'firstElement',
50
+ ...popoverProps
51
  } = this.props;
52
 
53
  const {
58
 
59
  return (
60
  <Popover
61
+ className="ta-url-popover editor-url-popover block-editor-url-popover"
62
  focusOnMount={ focusOnMount }
63
  position={ position }
64
+ { ...popoverProps }
 
65
  >
66
  <div className="editor-url-popover__row">
67
  { children }
languages/thirstyaffiliates.pot CHANGED
@@ -2,14 +2,14 @@
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: ThirstyAffiliates\n"
5
- "POT-Creation-Date: 2019-04-01 09:00+0800\n"
6
  "PO-Revision-Date: 2016-04-29 07:38+0800\n"
7
  "Last-Translator: \n"
8
  "Language-Team: Rymera Web Co <support@thirstyaffiliates.com>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.1.1\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "Language: en\n"
2
  msgid ""
3
  msgstr ""
4
  "Project-Id-Version: ThirstyAffiliates\n"
5
+ "POT-Creation-Date: 2019-06-05 09:16+0800\n"
6
  "PO-Revision-Date: 2016-04-29 07:38+0800\n"
7
  "Last-Translator: \n"
8
  "Language-Team: Rymera Web Co <support@thirstyaffiliates.com>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.2.3\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "Language: en\n"
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: affiliate, link, affiliate link management, link cloaker, link redirect, s
5
  Requires at least: 3.4
6
  Requires PHP: 5.6
7
  Tested up to: 5.1.1
8
- Stable tag: 3.8
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -159,6 +159,12 @@ See our [Knowledge Base](https://thirstyaffiliates.com/knowledge-base/?utm_sourc
159
 
160
  == Changelog ==
161
 
 
 
 
 
 
 
162
  = 3.8 =
163
  * Bug Fix: The "convert to blocks" button is not working with Gutenberg
164
 
5
  Requires at least: 3.4
6
  Requires PHP: 5.6
7
  Tested up to: 5.1.1
8
+ Stable tag: 3.9
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
159
 
160
  == Changelog ==
161
 
162
+ = 3.9 =
163
+ * Bug Fix: Gutenberg Input affiliate link as shortcode should show the error to admin only
164
+ * Bug Fix: Convert to blocks converts images on posts as ThirstyAffiliates Image block
165
+ * Bug Fix: UTC-2 and UTC+11 Timezone produces Fatal Error when activating the plugin
166
+ * Bug Fix: TA button style for block editor changes in WP 5.2.1
167
+
168
  = 3.8 =
169
  * Bug Fix: The "convert to blocks" button is not working with Gutenberg
170
 
thirstyaffiliates.php CHANGED
@@ -3,11 +3,11 @@
3
  * Plugin Name: ThirstyAffiliates
4
  * Plugin URI: http://thirstyaffiliates.com/
5
  * Description: ThirstyAffiliates is a revolution in affiliate link management. Collect, collate and store your affiliate links for use in your posts and pages.
6
- * Version: 3.8
7
  * Author: Rymera Web Co
8
  * Author URI: https://rymera.com.au/
9
  * Requires at least: 4.5
10
- * Tested up to: 5.1.1
11
  *
12
  * Text Domain: thirstyaffiliates
13
  * Domain Path: /languages/
3
  * Plugin Name: ThirstyAffiliates
4
  * Plugin URI: http://thirstyaffiliates.com/
5
  * Description: ThirstyAffiliates is a revolution in affiliate link management. Collect, collate and store your affiliate links for use in your posts and pages.
6
+ * Version: 3.9
7
  * Author: Rymera Web Co
8
  * Author URI: https://rymera.com.au/
9
  * Requires at least: 4.5
10
+ * Tested up to: 5.2.1
11
  *
12
  * Text Domain: thirstyaffiliates
13
  * Domain Path: /languages/