commit:     662d15c1d2c5bb896985fd551a3649fcd280429e
Author:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Wed Jan  2 03:20:16 2019 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Wed Jan  2 03:20:16 2019 +0000
URL:        https://gitweb.gentoo.org/proj/blogs-gentoo.git/commit/?id=662d15c1

Update public-post-preview 2.8.0

Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>

 .../js/gutenberg-integration.js                    |   1 +
 .../js/public-post-preview.dev.js                  | 111 -------------
 .../public-post-preview/js/public-post-preview.js  |   2 +-
 .../js/public-post-preview.min.js                  |   2 +-
 .../js/src/components/preview-toggle/index.js      | 171 +++++++++++++++++++++
 plugins/public-post-preview/js/src/index.js        |   6 +
 .../languages/public-post-preview.php              |  19 +++
 .../languages/public-post-preview.pot              |  24 +++
 .../public-post-preview/public-post-preview.php    | 167 +++++++++++++-------
 plugins/public-post-preview/readme.txt             |  17 +-
 10 files changed, 346 insertions(+), 174 deletions(-)

diff --git a/plugins/public-post-preview/js/gutenberg-integration.js 
b/plugins/public-post-preview/js/gutenberg-integration.js
new file mode 100644
index 0000000..6bf327c
--- /dev/null
+++ b/plugins/public-post-preview/js/gutenberg-integration.js
@@ -0,0 +1 @@
+this.publicPostPreview=this.publicPostPreview||{},this.publicPostPreview.main=function(e){var
 t={};function r(n){if(t[n])return t[n].exports;var 
i=t[n]={i:n,l:!1,exports:{}};return 
e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return 
r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof
 
Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return
 e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var 
n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof
 e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return 
n},r.n=function(e){var t=e&&e.__esModule?function(){return 
e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return 
Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=22)}([
 
function(e,t){!function(){e.exports=this.wp.element}()},function(e,t){e.exports=function(e){if(void
 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't 
been called");return 
e}},function(e,t){!function(){e.exports=this.wp.i18n}()},function(e,t,r){"use 
strict";(function(e){r.d(t,"a",function(){return c});var n=r(17),i=void 
0!==e?e:{},a=Object(n.a)(i),c=(a.flush,a.hydrate,a.cx,a.merge,a.getRegisteredStyles,a.injectGlobal,a.keyframes,a.css);a.sheet,a.caches}).call(this,r(21))},function(e,t){!function(){e.exports=this.wp.components}()},function(e,t){!function(){e.exports=this.wp.compose}()},function(e,t){!function(){e.exports=this.wp.editPost}()},function(e,t){!function(){e.exports=this.wp.plugins}()},function(e,t,r){var
 n=r(18);e.exports=function(e){for(var t=1;t<arguments.length;t++){var 
r=null!=arguments[t]?arguments[t]:{},i=Object.keys(r);"function"==typeof 
Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(r).filter(function(e){return
 Ob
 
ject.getOwnPropertyDescriptor(r,e).enumerable}))),i.forEach(function(t){n(e,t,r[t])})}return
 e}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new 
TypeError("Cannot call a class as a function")}},function(e,t){function 
r(e,t){for(var r=0;r<t.length;r++){var 
n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in 
n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return
 t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t,r){var 
n=r(19),i=r(1);e.exports=function(e,t){return!t||"object"!==n(t)&&"function"!=typeof
 t?i(e):t}},function(e,t){function r(t){return 
e.exports=r=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return 
e.__proto__||Object.getPrototypeOf(e)},r(t)}e.exports=r},function(e,t,r){var 
n=r(20);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new 
TypeError("Super expression must either be null or a 
function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}
 
),t&&n(e,t)}},function(e,t){!function(){e.exports=this.lodash}()},function(e,t,r){e.exports=function(){"use
 strict";return function(e){function t(t){if(t)try{e(t+"}")}catch(e){}}return 
function(r,n,i,a,c,o,s,u,l,f){switch(r){case 
1:if(0===l&&64===n.charCodeAt(0))return e(n+";"),"";break;case 
2:if(0===u)return n+"/*|*/";break;case 3:switch(u){case 102:case 112:return 
e(i[0]+n),"";default:return 
n+(0===f?"/*|*/":"")}case-2:n.split("/*|*/}").forEach(t)}}}}()},function(e,t){!function(){e.exports=this.wp.data}()},function(e,t,r){"use
 strict";var n=function(e){var t={};return function(r){return void 
0===t[r]&&(t[r]=e(r)),t[r]}},i={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,fontWeight:1,lineHeight:
 
1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var
 a=function(e){for(var 
t,r=e.length,n=r^r,i=0;r>=4;)t=1540483477*(65535&(t=255&e.charCodeAt(i)|(255&e.charCodeAt(++i))<<8|(255&e.charCodeAt(++i))<<16|(255&e.charCodeAt(++i))<<24))+((1540483477*(t>>>16)&65535)<<16),n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)^(t=1540483477*(65535&(t^=t>>>24))+((1540483477*(t>>>16)&65535)<<16)),r-=4,++i;switch(r){case
 3:n^=(255&e.charCodeAt(i+2))<<16;case 2:n^=(255&e.charCodeAt(i+1))<<8;case 
1:n=1540483477*(65535&(n^=255&e.charCodeAt(i)))+((1540483477*(n>>>16)&65535)<<16)}return
 
n=1540483477*(65535&(n^=n>>>13))+((1540483477*(n>>>16)&65535)<<16),((n^=n>>>15)>>>0).toString(36)};var
 c=function(e){function t(e,t,n){var i=t.trim().split(d);t=i;var 
a=i.length,c=e.length;switch(c){case 0:case 1:var o=0;for(e=0===c?"":e[0]+" 
";o<a;++o)
 t[o]=r(e,t[o],n).trim();break;default:var s=o=0;for(t=[];o<a;++o)for(var 
u=0;u<c;++u)t[s++]=r(e[u]+" ",i[o],n).trim()}return t}function r(e,t,r){var 
n=t.charCodeAt(0);switch(33>n&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return 
t.replace(b,"$1"+e.trim());case 58:return 
e.trim()+t.replace(b,"$1"+e.trim());default:if(0<1*r&&0<t.indexOf("\f"))return 
t.replace(b,(58===e.charCodeAt(0)?"":"$1")+e.trim())}return e+t}function 
n(e,t,r,a){var c=e+";",o=2*t+3*r+4*a;if(944===o){e=c.indexOf(":",9)+1;var 
s=c.substring(e,c.length-1).trim();return 
s=c.substring(0,e).trim()+s+";",1===_||2===_&&i(s,1)?"-webkit-"+s+s:s}if(0===_||2===_&&!i(c,1))return
 c;switch(o){case 1015:return 97===c.charCodeAt(10)?"-webkit-"+c+c:c;case 
951:return 116===c.charCodeAt(3)?"-webkit-"+c+c:c;case 963:return 
110===c.charCodeAt(5)?"-webkit-"+c+c:c;case 
1009:if(100!==c.charCodeAt(4))break;case 969:case 942:return"-webkit-"+c+c;case 
978:return"-webkit-"+c+"-moz-"+c+c;case 1019:case 
983:return"-webkit-"+c+"-moz-"+c+"-ms-"+c+c
 ;case 
883:if(45===c.charCodeAt(8))return"-webkit-"+c+c;if(0<c.indexOf("image-set(",11))return
 c.replace(A,"$1-webkit-$2")+c;break;case 
932:if(45===c.charCodeAt(4))switch(c.charCodeAt(5)){case 
103:return"-webkit-box-"+c.replace("-grow","")+"-webkit-"+c+"-ms-"+c.replace("grow","positive")+c;case
 115:return"-webkit-"+c+"-ms-"+c.replace("shrink","negative")+c;case 
98:return"-webkit-"+c+"-ms-"+c.replace("basis","preferred-size")+c}return"-webkit-"+c+"-ms-"+c+c;case
 964:return"-webkit-"+c+"-ms-flex-"+c+c;case 
1023:if(99!==c.charCodeAt(8))break;return"-webkit-box-pack"+(s=c.substring(c.indexOf(":",15)).replace("flex-","").replace("space-between","justify"))+"-webkit-"+c+"-ms-flex-pack"+s+c;case
 1005:return h.test(c)?c.replace(f,":-webkit-")+c.replace(f,":-moz-")+c:c;case 
1e3:switch(t=(s=c.substring(13).trim()).indexOf("-")+1,s.charCodeAt(0)+s.charCodeAt(t)){case
 226:s=c.replace(m,"tb");break;case 232:s=c.replace(m,"tb-rl");break;case 
220:s=c.replace(m,"lr");break;default:return c}return"-w
 ebkit-"+c+"-ms-"+s+c;case 1017:if(-1===c.indexOf("sticky",9))break;case 
975:switch(t=(c=e).length-10,o=(s=(33===c.charCodeAt(t)?c.substring(0,t):c).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|s.charCodeAt(7))){case
 203:if(111>s.charCodeAt(8))break;case 
115:c=c.replace(s,"-webkit-"+s)+";"+c;break;case 207:case 
102:c=c.replace(s,"-webkit-"+(102<o?"inline-":"")+"box")+";"+c.replace(s,"-webkit-"+s)+";"+c.replace(s,"-ms-"+s+"box")+";"+c}return
 c+";";case 938:if(45===c.charCodeAt(5))switch(c.charCodeAt(6)){case 105:return 
s=c.replace("-items",""),"-webkit-"+c+"-webkit-box-"+s+"-ms-flex-"+s+c;case 
115:return"-webkit-"+c+"-ms-flex-item-"+c.replace(C,"")+c;default:return"-webkit-"+c+"-ms-flex-line-pack"+c.replace("align-content","").replace(C,"")+c}break;case
 973:case 989:if(45!==c.charCodeAt(3)||122===c.charCodeAt(4))break;case 
931:case 953:if(!0===O.test(e))return 
115===(s=e.substring(e.indexOf(":")+1)).charCodeAt(0)?n(e.replace("stretch","fill-available"),t,r,a).replace(":fill-
 
available",":stretch"):c.replace(s,"-webkit-"+s)+c.replace(s,"-moz-"+s.replace("fill-",""))+c;break;case
 
962:if(c="-webkit-"+c+(102===c.charCodeAt(5)?"-ms-"+c:"")+c,211===r+a&&105===c.charCodeAt(13)&&0<c.indexOf("transform",10))return
 c.substring(0,c.indexOf(";",27)+1).replace(p,"$1-webkit-$2")+c}return 
c}function i(e,t){var 
r=e.indexOf(1===t?":":"{"),n=e.substring(0,3!==t?r:10);return 
r=e.substring(r+1,e.length-1),R(2!==t?n:n.replace(x,"$1"),r,t)}function 
a(e,t){var r=n(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return 
r!==t+";"?r.replace(k," or ($1)").substring(4):"("+t+")"}function 
c(e,t,r,n,i,a,c,o,u,l){for(var 
f,h=0,p=t;h<z;++h)switch(f=I[h].call(s,e,p,r,n,i,a,c,o,u,l)){case void 
0:case!1:case!0:case null:break;default:p=f}if(p!==t)return p}function 
o(e){return void 0!==(e=e.prefix)&&(R=null,e?"function"!=typeof 
e?_=1:(_=2,R=e):_=0),o}function s(e,r){var 
o=e;if(33>o.charCodeAt(0)&&(o=o.trim()),o=[o],0<z){var 
s=c(-1,r,o,o,S,j,0,0,0,0);void 0!==s&&"string"==typeof s&&(r=s
 )}var f=function e(r,o,s,f,h){for(var 
p,d,b,m,k,C=0,x=0,O=0,A=0,I=0,R=0,$=b=p=0,U=0,T=0,M=0,F=0,H=s.length,V=H-1,D="",G="",L="",W="";U<H;){if(d=s.charCodeAt(U),U===V&&0!==x+A+O+C&&(0!==x&&(d=47===x?10:47),A=O=C=0,H++,V++),0===x+A+O+C){if(U===V&&(0<T&&(D=D.replace(l,"")),0<D.trim().length)){switch(d){case
 32:case 9:case 59:case 13:case 
10:break;default:D+=s.charAt(U)}d=59}switch(d){case 
123:for(p=(D=D.trim()).charCodeAt(0),b=1,F=++U;U<H;){switch(d=s.charCodeAt(U)){case
 123:b++;break;case 125:b--;break;case 47:switch(d=s.charCodeAt(U+1)){case 
42:case 47:e:{for($=U+1;$<V;++$)switch(s.charCodeAt($)){case 
47:if(42===d&&42===s.charCodeAt($-1)&&U+2!==$){U=$+1;break e}break;case 
10:if(47===d){U=$+1;break e}}U=$}}break;case 91:d++;case 40:d++;case 34:case 
39:for(;U++<V&&s.charCodeAt(U)!==d;);}if(0===b)break;U++}switch(b=s.substring(F,U),0===p&&(p=(D=D.replace(u,"").trim()).charCodeAt(0)),p){case
 64:switch(0<T&&(D=D.replace(l,"")),d=D.charCodeAt(1)){case 100:case 109:case 
115:case 45:T=o;brea
 
k;default:T=P}if(F=(b=e(o,T,b,d,h+1)).length,0<z&&(k=c(3,b,T=t(P,D,M),o,S,j,F,d,h,f),D=T.join(""),void
 0!==k&&0===(F=(b=k.trim()).length)&&(d=0,b="")),0<F)switch(d){case 
115:D=D.replace(y,a);case 100:case 109:case 45:b=D+"{"+b+"}";break;case 
107:b=(D=D.replace(v,"$1 
$2"))+"{"+b+"}",b=1===_||2===_&&i("@"+b,3)?"@-webkit-"+b+"@"+b:"@"+b;break;default:b=D+b,112===f&&(G+=b,b="")}else
 
b="";break;default:b=e(o,t(o,D,M),b,f,h+1)}L+=b,b=M=T=$=p=0,D="",d=s.charCodeAt(++U);break;case
 125:case 
59:if(1<(F=(D=(0<T?D.replace(l,""):D).trim()).length))switch(0===$&&(p=D.charCodeAt(0),45===p||96<p&&123>p)&&(F=(D=D.replace("
 ",":")).length),0<z&&void 
0!==(k=c(1,D,o,r,S,j,G.length,f,h,f))&&0===(F=(D=k.trim()).length)&&(D="\0\0"),p=D.charCodeAt(0),d=D.charCodeAt(1),p){case
 0:break;case 
64:if(105===d||99===d){W+=D+s.charAt(U);break}default:58!==D.charCodeAt(F-1)&&(G+=n(D,p,d,D.charCodeAt(2)))}M=T=$=p=0,D="",d=s.charCodeAt(++U)}}switch(d){case
 13:case 10:47===x?x=0:0===1+p&&107!==f&&0<D.length&&(T=1,D+="\
 0"),0<z*N&&c(0,D,o,r,S,j,G.length,f,h,f),j=1,S++;break;case 59:case 
125:if(0===x+A+O+C){j++;break}default:switch(j++,m=s.charAt(U),d){case 9:case 
32:if(0===A+C+x)switch(I){case 44:case 58:case 9:case 
32:m="";break;default:32!==d&&(m=" ")}break;case 0:m="\\0";break;case 
12:m="\\f";break;case 11:m="\\v";break;case 
38:0===A+x+C&&(T=M=1,m="\f"+m);break;case 
108:if(0===A+x+C+E&&0<$)switch(U-$){case 
2:112===I&&58===s.charCodeAt(U-3)&&(E=I);case 8:111===R&&(E=R)}break;case 
58:0===A+x+C&&($=U);break;case 44:0===x+O+A+C&&(T=1,m+="\r");break;case 34:case 
39:0===x&&(A=A===d?0:0===A?d:A);break;case 91:0===A+x+O&&C++;break;case 
93:0===A+x+O&&C--;break;case 41:0===A+x+C&&O--;break;case 
40:if(0===A+x+C){if(0===p)switch(2*I+3*R){case 
533:break;default:p=1}O++}break;case 64:0===x+O+A+C+$+b&&(b=1);break;case 
42:case 47:if(!(0<A+C+O))switch(x){case 0:switch(2*d+3*s.charCodeAt(U+1)){case 
235:x=47;break;case 220:F=U,x=42}break;case 
42:47===d&&42===I&&F+2!==U&&(33===s.charCodeAt(F+2)&&(G+=s.substring(F,U
 +1)),m="",x=0)}}0===x&&(D+=m)}R=I,I=d,U++}if(0<(F=G.length)){if(T=o,0<z&&void 
0!==(k=c(2,G,T,r,S,j,F,f,h,f))&&0===(G=k).length)return 
W+G+L;if(G=T.join(",")+"{"+G+"}",0!=_*E){switch(2!==_||i(G,2)||(E=0),E){case 
111:G=G.replace(g,":-moz-$1")+G;break;case 
112:G=G.replace(w,"::-webkit-input-$1")+G.replace(w,"::-moz-$1")+G.replace(w,":-ms-input-$1")+G}E=0}}return
 W+G+L}(P,o,r,0,0);return 0<z&&void 
0!==(s=c(-2,f,o,o,S,j,f.length,0,0,0))&&(f=s),E=0,j=S=1,f}var 
u=/^\0+/g,l=/[\0\r\f]/g,f=/: */g,h=/zoo|gra/,p=/([,: 
])(transform)/g,d=/,\r+?/g,b=/([\t\r\n 
])*\f?&/g,v=/@(k\w+)\s*(\S*)\s*/,w=/::(place)/g,g=/:(read-only)/g,m=/[svh]\w+-[tblr]{2}/,y=/\(\s*(.*)\s*\)/g,k=/([\s\S]*?);/g,C=/-self|flex-/g,x=/[^]*?(:[rp][el]a[\w-]+)[^]*/,O=/stretch|:\s*\w+\-(?:conte|avail)/,A=/([^-])(image-set\()/,j=1,S=1,E=0,_=1,P=[],I=[],z=0,R=null,N=0;return
 s.use=function e(t){switch(t){case void 0:case 
null:z=I.length=0;break;default:switch(t.constructor){case Array:for(var 
r=0,n=t.length;r<n;++r)e(t[r]);break;case 
 Function:I[z++]=t;break;case Boolean:N=0|!!t}}return e},s.set=o,void 
0!==e&&o(e),s},o=r(15),s=r.n(o),u=/[A-Z]|^ms/g,l=n(function(e){return 
e.replace(u,"-$&").toLowerCase()}),f=function(e,t){return 
null==t||"boolean"==typeof 
t?"":1===i[e]||45===e.charCodeAt(1)||isNaN(t)||0===t?t:t+"px"},h=function 
e(t){for(var r=t.length,n=0,i="";n<r;n++){var a=t[n];if(null!=a){var c=void 
0;switch(typeof 
a){case"boolean":break;case"function":0,c=e([a()]);break;case"object":if(Array.isArray(a))c=e(a);else
 for(var o in c="",a)a[o]&&o&&(c&&(c+=" "),c+=o);break;default:c=a}c&&(i&&(i+=" 
"),i+=c)}}return i},p="undefined"!=typeof document;function d(e){var 
t=document.createElement("style");return 
t.setAttribute("data-emotion",e.key||""),void 
0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),(void
 0!==e.container?e.container:document.head).appendChild(t),t}var 
b=function(){function 
e(e){this.isSpeedy=!0,this.tags=[],this.ctr=0,this.opts=e}var 
t=e.prototype;return t.injec
 t=function(){if(this.injected)throw new Error("already 
injected!");this.tags[0]=d(this.opts),this.injected=!0},t.speedy=function(e){if(0!==this.ctr)throw
 new Error("cannot change speedy 
now");this.isSpeedy=!!e},t.insert=function(e,t){if(this.isSpeedy){var 
r=function(e){if(e.sheet)return e.sheet;for(var 
t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return
 
document.styleSheets[t]}(this.tags[this.tags.length-1]);try{r.insertRule(e,r.cssRules.length)}catch(e){0}}else{var
 
n=d(this.opts);this.tags.push(n),n.appendChild(document.createTextNode(e+(t||"")))}this.ctr++,this.ctr%65e3==0&&this.tags.push(d(this.opts))},t.flush=function(){this.tags.forEach(function(e){return
 
e.parentNode.removeChild(e)}),this.tags=[],this.ctr=0,this.injected=!1},e}();t.a=function(e,t){if(void
 0!==e.__SECRET_EMOTION__)return e.__SECRET_EMOTION__;void 0===t&&(t={});var 
r,n,i=t.key||"css",o=s()(function(e){r+=e,p&&d.insert(e,w)});void 
0!==t.prefix&&(n={prefix:t.prefix});var u={regist
 ered:{},inserted:{},nonce:t.nonce,key:i},d=new b(t);p&&d.inject();var v=new 
c(n);v.use(t.stylisPlugins)(o);var w="";function 
g(e,t){if(null==e)return"";switch(typeof 
e){case"boolean":return"";case"function":if(void 0!==e.__emotion_styles){var 
r=e.toString();return r}return g.call(this,void 
0===this?e():e(this.mergedProps,this.context),t);case"object":return 
function(e){if(k.has(e))return k.get(e);var t="";return 
Array.isArray(e)?e.forEach(function(e){t+=g.call(this,e,!1)},this):Object.keys(e).forEach(function(r){"object"!=typeof
 e[r]?void 
0!==u.registered[e[r]]?t+=r+"{"+u.registered[e[r]]+"}":t+=l(r)+":"+f(r,e[r])+";":Array.isArray(e[r])&&"string"==typeof
 e[r][0]&&void 
0===u.registered[e[r][0]]?e[r].forEach(function(e){t+=l(r)+":"+f(r,e)+";"}):t+=r+"{"+g.call(this,e[r],!1)+"}"},this),k.set(e,t),t}.call(this,e);default:var
 n=u.registered[e];return!1===t&&void 0!==n?n:e}}var m,y,k=new 
WeakMap,C=/label:\s*([^\s;\n{]+)\s*;/g,x=function(e){var 
t=!0,r="",n="";null==e||void 0===e.raw?(t=!1
 ,r+=g.call(this,e,!1)):r+=e[0];for(var i=arguments.length,c=new 
Array(i>1?i-1:0),o=1;o<i;o++)c[o-1]=arguments[o];return 
c.forEach(function(n,i){r+=g.call(this,n,46===r.charCodeAt(r.length-1)),!0===t&&void
 0!==e[i+1]&&(r+=e[i+1])},this),y=r,r=r.replace(C,function(e,t){return 
n+="-"+t,""}),m=function(e,t){return a(e+t)+t}(r,n),r};function O(e,t){void 
0===u.inserted[m]&&(r="",v(e,t),u.inserted[m]=r)}var A=function(){var 
e=x.apply(this,arguments),t=i+"-"+m;return void 
0===u.registered[t]&&(u.registered[t]=y),O("."+t,e),t};function j(e,t){var 
r="";return t.split(" ").forEach(function(t){void 
0!==u.registered[t]?e.push(t):r+=t+" "}),r}function S(e,t){var 
r=[],n=j(r,e);return r.length<2?e:n+A(r,t)}function 
E(e){u.inserted[e]=!0}if(p){var 
_=document.querySelectorAll("[data-emotion-"+i+"]");Array.prototype.forEach.call(_,function(e){d.tags[0].parentNode.insertBefore(e,d.tags[0]),e.getAttribute("data-emotion-"+i).split("
 ").forEach(E)})}var P={flush:function(){p&&(d.flush(),d.inject()),u.inse
 
rted={},u.registered={}},hydrate:function(e){e.forEach(E)},cx:function(){for(var
 e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return 
S(h(t))},merge:S,getRegisteredStyles:j,injectGlobal:function(){O("",x.apply(this,arguments))},keyframes:function(){var
 e=x.apply(this,arguments),t="animation-"+m;return O("","@keyframes 
"+t+"{"+e+"}"),t},css:A,sheet:d,caches:u};return 
e.__SECRET_EMOTION__=P,P}},function(e,t){e.exports=function(e,t,r){return t in 
e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},function(e,t){function
 r(e){return(r="function"==typeof Symbol&&"symbol"==typeof 
Symbol.iterator?function(e){return typeof e}:function(e){return 
e&&"function"==typeof 
Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof 
e})(e)}function n(t){return"function"==typeof 
Symbol&&"symbol"===r(Symbol.iterator)?e.exports=n=function(e){return 
r(e)}:e.exports=n=function(e){return e&&"function"==typeof 
Symbol&&e.constructor===Symbo
 
l&&e!==Symbol.prototype?"symbol":r(e)},n(t)}e.exports=n},function(e,t){function 
r(t,n){return e.exports=r=Object.setPrototypeOf||function(e,t){return 
e.__proto__=t,e},r(t,n)}e.exports=r},function(e,t){var r;r=function(){return 
this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof 
window&&(r=window)}e.exports=r},function(e,t,r){"use strict";r.r(t);var 
n=r(7),i=r(8),a=r.n(i),c=r(9),o=r.n(c),s=r(10),u=r.n(s),l=r(11),f=r.n(l),h=r(12),p=r.n(h),d=r(13),b=r.n(d),v=r(1),w=r.n(v),g=r(0),m=r(14),y=r(3),k=r(2),C=r(4),x=r(16),O=r(6),A=r(5),j=window,S=j.ajaxurl,E=j.DSPublicPostPreviewData,_=Object(y.a)("flex-direction:column;align-items:stretch;margin-top:10px;"),P=Object(y.a)("width:100%;margin-right:12px;"),I=Object(y.a)("font-style:italic;color:#666;margin:.2em
 0 0 
!important;"),z=Object(y.a)("display:flex;justify-content:flex-start;align-items:center;margin:0;"),R=function(e){function
 t(e){var r;return 
o()(this,t),(r=f()(this,p()(t).call(this,e))).state={previewEnabled:E.p
 
reviewEnabled,previewUrl:E.previewUrl,hasCopied:!1},r.previewUrlInput=Object(g.createRef)(),r.onChange=r.onChange.bind(w()(w()(r))),r.onPreviewUrlInputFocus=r.onPreviewUrlInputFocus.bind(w()(w()(r))),r}return
 b()(t,e),u()(t,[{key:"onChange",value:function(e){var 
t=this;this.request({checked:e,post_ID:this.props.postId},function(){t.setState({previewEnabled:!t.state.previewEnabled})})}},{key:"onPreviewUrlInputFocus",value:function(){this.previewUrlInput.current.focus(),this.previewUrlInput.current.select()}},{key:"request",value:function(e,t){jQuery.ajax({type:"POST",url:S,data:a()({action:"public-post-preview",_ajax_nonce:E.nonce},e),success:t})}},{key:"render",value:function(){var
 
e=this,t=this.state,r=t.previewEnabled,n=t.previewUrl,i=t.hasCopied,a=i?Object(k.__)("Preview
 URL copied","public-post-preview"):Object(k.__)("Copy the preview 
URL","public-post-preview");return 
Object(g.createElement)(g.Fragment,null,Object(g.createElement)(O.PluginPostStatusInfo,null,Object(g.createElem
 ent)(C.CheckboxControl,{label:Object(k.__)("Enable public 
preview","public-post-preview"),checked:r,onChange:this.onChange})),r&&Object(g.createElement)(O.PluginPostStatusInfo,{className:_},Object(g.createElement)("p",{className:z},Object(g.createElement)("label",{htmlFor:"public-post-preview-url",className:"screen-reader-text"},Object(k.__)("Preview
 
URL","public-post-preview")),Object(g.createElement)("input",{ref:this.previewUrlInput,type:"text",id:"public-post-preview-url",className:P,value:n,readOnly:!0,onFocus:this.onPreviewUrlInputFocus}),Object(g.createElement)(C.ClipboardButton,{text:n,label:a,onCopy:function(){return
 e.setState({hasCopied:!0})},onFinishCopy:function(){return 
e.setState({hasCopied:!1})},"aria-disabled":i,icon:Object(g.createElement)(C.SVG,{width:"20",height:"20",viewBox:"0
 0 14 
16",xmlns:"http://www.w3.org/2000/svg",focusable:"false"},Object(g.createElement)(C.Path,{fillRule:"evenodd",d:"M2
 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9z
 M2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 
0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 
1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 
1-.45 1-1 1H3c-.55 0-1 .45-1 
1z"}))})),Object(g.createElement)("p",{className:I},Object(k.__)("Copy and 
share this preview 
URL.","public-post-preview"))))}}]),t}(g.Component),N=Object(A.compose)([Object(x.withSelect)(function(e){var
 
t=e("core").getPostType,r=e("core/editor"),n=r.getCurrentPostId,i=r.getEditedPostAttribute,a=t(i("type"));return{postId:n(),status:i("status"),isViewable:Object(m.get)(a,["viewable"],!1)}}),Object(A.ifCondition)(function(e){return
 e.isViewable}),Object(A.ifCondition)(function(e){var 
t=e.status;return-1===["auto-draft","publish","private"].indexOf(t)})])(R);Object(n.registerPlugin)("public-post-preview",{render:N})}]);
\ No newline at end of file

diff --git a/plugins/public-post-preview/js/public-post-preview.dev.js 
b/plugins/public-post-preview/js/public-post-preview.dev.js
deleted file mode 100644
index bdd8e37..0000000
--- a/plugins/public-post-preview/js/public-post-preview.dev.js
+++ /dev/null
@@ -1,111 +0,0 @@
-( function( $ ) {
-       DSPublicPostPreview = {
-
-               /**
-                * Initializes the plugin.
-                *
-                * @since 2.0.0
-                */
-               initialize : function() {
-                       var t = this;
-
-                       t.checkbox = $( '#public-post-preview' );
-                       t.link     = $( '#public-post-preview-link' );
-                       t.nonce    = $( '#public_post_preview_wpnonce' );
-                       t.status   = $( '#public-post-preview-ajax' );
-
-                       if ( ! t.checkbox.prop( 'checked' ) )
-                               t.link.hide();
-
-                       t.checkbox.bind( 'change', function() {
-                               t.change();
-                       } );
-               },
-
-               /**
-                * Handles a checkbox change.
-                *
-                * @since 2.0.0
-                */
-               change : function() {
-                       var t = this,
-                               checked = t.checkbox.prop( 'checked' ) ? 1 : 0;
-
-                       // Toggle visibility of the link
-                       t.link.toggle();
-
-                       // Disable the checkbox, to prevent double AJAX requests
-                       t.checkbox.prop( 'disabled', 'disabled' );
-
-                       t.request(
-                               {
-                                       _ajax_nonce : t.nonce.val(),
-                                       checked : checked,
-                                       post_ID : $( '#post_ID' ).val()
-                               },
-                               function( data ) {
-                                       // data is '1' if it's a successful 
request
-                                       if ( data ) {
-                                               if ( checked ) {
-                                                       t.status.text( 
DSPublicPostPreviewL10n.enabled );
-                                                       t._pulsate( t.status, 
'green' );
-                                               } else {
-                                                       t.status.text( 
DSPublicPostPreviewL10n.disabled );
-                                                       t._pulsate( t.status, 
'red' );
-                                               }
-                                       }
-
-                                       // Enable the checkbox again
-                                       t.checkbox.prop('disabled', '');
-                               }
-                       );
-               },
-
-               /**
-                * Does the AJAX request.
-                *
-                * @since  2.0.0
-                *
-                * @param  {Object}  data     The data to send.
-                * @param  {Object}  callback Callback function for a 
successfull request.
-                */
-               request : function( data, callback ) {
-                       $.ajax( {
-                               type: 'POST',
-                               url: ajaxurl,
-                               data: $.extend(
-                                       data,
-                                       {
-                                               action: 'public-post-preview'
-                                       }
-                               ),
-                               success : callback
-                       } );
-               },
-
-               /**
-                * Helper for a pulse effect.
-                *
-                * @since  2.0.0
-                *
-                * @param  {Object} e     The element.
-                * @param  {String} color The text color of the element.
-                */
-               _pulsate : function( e, color ) {
-                       e.css( 'color', color )
-                               .animate( { opacity: 0 }, 600, 'linear' )
-                               .animate( { opacity: 1 }, 600, 'linear' )
-                               .animate( { opacity: 0 }, 600, 'linear' )
-                               .animate( { opacity: 1 }, 600, 'linear' )
-                               .animate( { opacity: 0 }, 600, 'linear', 
function() {
-                                       e.text( '' );
-                               } );
-               }
-       };
-
-       // Document is ready.
-       $( function() {
-               DSPublicPostPreview.initialize();
-       } );
-
-} )( jQuery );

diff --git a/plugins/public-post-preview/js/public-post-preview.js 
b/plugins/public-post-preview/js/public-post-preview.js
index cc5d1e1..e25a188 100644
--- a/plugins/public-post-preview/js/public-post-preview.js
+++ b/plugins/public-post-preview/js/public-post-preview.js
@@ -32,7 +32,7 @@
                 */
                change : function() {
                        var t = this,
-                               checked = t.checkbox.prop( 'checked' ) ? 1 : 0;
+                               checked = t.checkbox.prop( 'checked' ) ? 'true' 
: 'false';
 
                        // Toggle visibility of the link
                        t.link.toggle();

diff --git a/plugins/public-post-preview/js/public-post-preview.min.js 
b/plugins/public-post-preview/js/public-post-preview.min.js
index 09df216..4de40d9 100644
--- a/plugins/public-post-preview/js/public-post-preview.min.js
+++ b/plugins/public-post-preview/js/public-post-preview.min.js
@@ -1 +1 @@
-(function(a){DSPublicPostPreview={initialize:function(){var 
b=this;b.checkbox=a("#public-post-preview");b.link=a("#public-post-preview-link");b.nonce=a("#public_post_preview_wpnonce");b.status=a("#public-post-preview-ajax");b.status.css("opacity",0);b.checkbox.bind("change",function(){b.change();});b.link.find("input").on("focus",function(){a(this).select();});},change:function(){var
 
b=this,c=b.checkbox.prop("checked")?1:0;b.link.toggle();b.checkbox.prop("disabled","disabled");b.request({_ajax_nonce:b.nonce.val(),checked:c,post_ID:a("#post_ID").val()},function(d){if(d){if(c){b.status.text(DSPublicPostPreviewL10n.enabled);b._pulsate(b.status,"green");}else{b.status.text(DSPublicPostPreviewL10n.disabled);b._pulsate(b.status,"red");}}b.checkbox.prop("disabled","");});},request:function(b,c){a.ajax({type:"POST",url:ajaxurl,data:a.extend(b,{action:"public-post-preview"}),success:c});},_pulsate:function(c,b){c.css("color",b).animate({opacity:1},600,"linear").animate({opacity:0},600,"linea
 r",function(){c.empty();});}};a(DSPublicPostPreview.initialize());})(jQuery);
\ No newline at end of file
+(function(a){DSPublicPostPreview={initialize:function(){var 
b=this;b.checkbox=a("#public-post-preview");b.link=a("#public-post-preview-link");b.nonce=a("#public_post_preview_wpnonce");b.status=a("#public-post-preview-ajax");b.status.css("opacity",0);b.checkbox.bind("change",function(){b.change();});b.link.find("input").on("focus",function(){a(this).select();});},change:function(){var
 
b=this,c=b.checkbox.prop("checked")?"true":"false";b.link.toggle();b.checkbox.prop("disabled","disabled");b.request({_ajax_nonce:b.nonce.val(),checked:c,post_ID:a("#post_ID").val()},function(d){if(d){if(c){b.status.text(DSPublicPostPreviewL10n.enabled);b._pulsate(b.status,"green");}else{b.status.text(DSPublicPostPreviewL10n.disabled);b._pulsate(b.status,"red");}}b.checkbox.prop("disabled","");});},request:function(b,c){a.ajax({type:"POST",url:ajaxurl,data:a.extend(b,{action:"public-post-preview"}),success:c});},_pulsate:function(c,b){c.css("color",b).animate({opacity:1},600,"linear").animate({opacity:0}
 
,600,"linear",function(){c.empty();});}};a(DSPublicPostPreview.initialize());})(jQuery);
\ No newline at end of file

diff --git 
a/plugins/public-post-preview/js/src/components/preview-toggle/index.js 
b/plugins/public-post-preview/js/src/components/preview-toggle/index.js
new file mode 100644
index 0000000..9650286
--- /dev/null
+++ b/plugins/public-post-preview/js/src/components/preview-toggle/index.js
@@ -0,0 +1,171 @@
+/**
+ * External dependencies
+ */
+import { get } from 'lodash';
+import { css } from 'emotion'
+
+import { __ } from '@wordpress/i18n';
+import {
+       CheckboxControl,
+       ClipboardButton,
+       Path,
+       SVG,
+} from '@wordpress/components';
+import {
+       Component,
+       createRef,
+       Fragment,
+} from '@wordpress/element';
+import { withSelect } from '@wordpress/data';
+import { PluginPostStatusInfo } from '@wordpress/edit-post';
+import { ifCondition, compose } from '@wordpress/compose';
+
+const {
+       ajaxurl,
+       DSPublicPostPreviewData,
+} = window;
+
+const pluginPostStatusInfoPreviewUrl = css`
+       flex-direction: column;
+       align-items: stretch;
+       margin-top: 10px;
+`
+
+const pluginPostStatusInfoPreviewUrlInput = css`
+       width: 100%;
+       margin-right: 12px;
+`
+
+const pluginPostStatusInfoPreviewDescription = css`
+       font-style: italic;
+       color: #666;
+       margin: .2em 0 0 !important;
+`
+
+const pluginPostStatusInfoPreviewUrlInputWrapper = css`
+       display: flex;
+       justify-content: flex-start;
+       align-items: center;
+       margin: 0;
+`
+
+class PreviewToggle extends Component {
+
+       constructor( props ) {
+               super( props )
+
+               this.state = {
+                       previewEnabled: DSPublicPostPreviewData.previewEnabled,
+                       previewUrl: DSPublicPostPreviewData.previewUrl,
+                       hasCopied: false,
+               }
+
+               this.previewUrlInput = createRef();
+
+               this.onChange = this.onChange.bind( this );
+               this.onPreviewUrlInputFocus = this.onPreviewUrlInputFocus.bind( 
this );
+       }
+
+       onChange( checked ) {
+               this.request( {
+                       checked,
+                       post_ID: this.props.postId
+               }, () => {
+                       this.setState( { previewEnabled: ! 
this.state.previewEnabled } );
+               } )
+       }
+
+       onPreviewUrlInputFocus() {
+               this.previewUrlInput.current.focus();
+               this.previewUrlInput.current.select();
+       }
+
+       request( data, callback ) {
+               jQuery.ajax( {
+                       type: 'POST',
+                       url: ajaxurl,
+                       data: {
+                               action: 'public-post-preview',
+                               _ajax_nonce: DSPublicPostPreviewData.nonce,
+                               ...data
+                       },
+                       success: callback,
+               } );
+       }
+
+       render() {
+               const {
+                       previewEnabled,
+                       previewUrl,
+                       hasCopied
+               } = this.state;
+
+               const ariaCopyLabel = hasCopied ? __( 'Preview URL copied', 
'public-post-preview' ) : __( 'Copy the preview URL', 'public-post-preview' );
+
+               return (
+                       <Fragment>
+                               <PluginPostStatusInfo>
+                                       <CheckboxControl
+                                               label={ __( 'Enable public 
preview', 'public-post-preview' ) }
+                                               checked={ previewEnabled }
+                                               onChange={ this.onChange }
+                                       />
+                               </PluginPostStatusInfo>
+                               { previewEnabled &&
+                                       <PluginPostStatusInfo className={ 
pluginPostStatusInfoPreviewUrl }>
+                                               <p className={ 
pluginPostStatusInfoPreviewUrlInputWrapper }>
+                                                       <label 
htmlFor="public-post-preview-url" className="screen-reader-text">{ __( 'Preview 
URL', 'public-post-preview' ) }</label>
+                                                       <input
+                                                               ref={ 
this.previewUrlInput }
+                                                               type="text"
+                                                               
id="public-post-preview-url"
+                                                               className={ 
pluginPostStatusInfoPreviewUrlInput }
+                                                               value={ 
previewUrl }
+                                                               readOnly
+                                                               onFocus={ 
this.onPreviewUrlInputFocus }
+                                                       />
+                                                       <ClipboardButton
+                                                               text={ 
previewUrl }
+                                                               label={ 
ariaCopyLabel }
+                                                               onCopy={ () => 
this.setState( { hasCopied: true } ) }
+                                                               onFinishCopy={ 
() => this.setState( { hasCopied: false } ) }
+                                                               aria-disabled={ 
hasCopied }
+                                                               icon={ <SVG 
width="20" height="20" viewBox="0 0 14 16" xmlns="http://www.w3.org/2000/svg"; 
focusable="false" ><Path fillRule="evenodd" d="M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 
3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 
1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 
1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 
5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 
0-1 .45-1 1z"/></SVG> }
+                                                       />
+                                               </p>
+                                               <p className={ 
pluginPostStatusInfoPreviewDescription }>
+                                                       { __( 'Copy and share 
this preview URL.', 'public-post-preview' ) }
+                                               </p>
+                                       </PluginPostStatusInfo>
+                               }
+                       </Fragment>
+               );
+       }
+}
+
+export default compose( [
+       withSelect( ( select ) => {
+               const {
+                       getPostType,
+               } = select( 'core' );
+               const {
+                       getCurrentPostId,
+                       getEditedPostAttribute,
+               } = select( 'core/editor' );
+               const postType = getPostType( getEditedPostAttribute( 'type' ) 
);
+
+               return {
+                       postId: getCurrentPostId(),
+                       status: getEditedPostAttribute( 'status' ),
+                       isViewable: get( postType, [ 'viewable' ], false ),
+               };
+       } ),
+       ifCondition( ( { isViewable } ) => isViewable ),
+       ifCondition( ( { status } ) => {
+               return [
+                       'auto-draft',
+                       'publish',
+                       'private',
+               ].indexOf( status ) === -1;
+       } ),
+] )( PreviewToggle );

diff --git a/plugins/public-post-preview/js/src/index.js 
b/plugins/public-post-preview/js/src/index.js
new file mode 100644
index 0000000..d56dfc6
--- /dev/null
+++ b/plugins/public-post-preview/js/src/index.js
@@ -0,0 +1,6 @@
+import { registerPlugin } from '@wordpress/plugins';
+import { default as PreviewToggle } from './components/preview-toggle';
+
+registerPlugin( 'public-post-preview', {
+       render: PreviewToggle,
+} );

diff --git a/plugins/public-post-preview/languages/public-post-preview.php 
b/plugins/public-post-preview/languages/public-post-preview.php
new file mode 100644
index 0000000..118fa0f
--- /dev/null
+++ b/plugins/public-post-preview/languages/public-post-preview.php
@@ -0,0 +1,19 @@
+<?php
+/* THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY. */
+$generated_i18n_strings = array(
+       // Reference: js/src/components/preview-toggle/index.js:103
+       __( 'Preview URL copied', 'public-post-preview' ),
+
+       // Reference: js/src/components/preview-toggle/index.js:103
+       __( 'Copy the preview URL', 'public-post-preview' ),
+
+       // Reference: js/src/components/preview-toggle/index.js:109
+       __( 'Enable public preview', 'public-post-preview' ),
+
+       // Reference: js/src/components/preview-toggle/index.js:117
+       __( 'Preview URL', 'public-post-preview' ),
+
+       // Reference: js/src/components/preview-toggle/index.js:137
+       __( 'Copy and share this preview URL.', 'public-post-preview' )
+);
+/* THIS IS THE END OF THE GENERATED FILE */

diff --git a/plugins/public-post-preview/languages/public-post-preview.pot 
b/plugins/public-post-preview/languages/public-post-preview.pot
new file mode 100644
index 0000000..6939e77
--- /dev/null
+++ b/plugins/public-post-preview/languages/public-post-preview.pot
@@ -0,0 +1,24 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=utf-8\n"
+"X-Generator: babel-plugin-makepot\n"
+
+#: js/src/components/preview-toggle/index.js:103
+msgid "Preview URL copied"
+msgstr ""
+
+#: js/src/components/preview-toggle/index.js:103
+msgid "Copy the preview URL"
+msgstr ""
+
+#: js/src/components/preview-toggle/index.js:109
+msgid "Enable public preview"
+msgstr ""
+
+#: js/src/components/preview-toggle/index.js:117
+msgid "Preview URL"
+msgstr ""
+
+#: js/src/components/preview-toggle/index.js:137
+msgid "Copy and share this preview URL."
+msgstr ""
\ No newline at end of file

diff --git a/plugins/public-post-preview/public-post-preview.php 
b/plugins/public-post-preview/public-post-preview.php
index 5130a0a..742a93c 100644
--- a/plugins/public-post-preview/public-post-preview.php
+++ b/plugins/public-post-preview/public-post-preview.php
@@ -1,33 +1,31 @@
 <?php
 /**
  * Plugin Name: Public Post Preview
- * Version: 2.6.0
+ * Version: 2.8.0
  * Description: Enables you to give a link to anonymous users for public 
preview of any post type before it is published.
  * Author: Dominik Schilling
- * Author URI: http://wphelper.de/
+ * Author URI: https://wphelper.de/
  * Plugin URI: https://dominikschilling.de/wp-plugins/public-post-preview/en/
- *
  * Text Domain: public-post-preview
- *
  * License: GPLv2 or later
  *
  * Previously (2009-2011) maintained by Jonathan Dingman and Matt Martz.
  *
- *     Copyright (C) 2012-2017 Dominik Schilling
+ *  Copyright (C) 2012-2018 Dominik Schilling
  *
- *     This program is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License
- *     as published by the Free Software Foundation; either version 2
- *     of the License, or (at your option) any later version.
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License
+ *  as published by the Free Software Foundation; either version 2
+ *  of the License, or (at your option) any later version.
  *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
  *
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
02110-1301, USA.
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
  */
 
 /**
@@ -63,7 +61,7 @@ class DS_Public_Post_Preview {
                        add_action( 'post_submitbox_misc_actions', array( 
__CLASS__, 'post_submitbox_misc_actions' ) );
                        add_action( 'save_post', array( __CLASS__, 
'register_public_preview' ), 20, 2 );
                        add_action( 'wp_ajax_public-post-preview', array( 
__CLASS__, 'ajax_register_public_preview' ) );
-                       add_action( 'admin_enqueue_scripts' , array( __CLASS__, 
'enqueue_script' ) );
+                       add_action( 'admin_enqueue_scripts', array( __CLASS__, 
'enqueue_script' ) );
                        add_filter( 'display_post_states', array( __CLASS__, 
'display_preview_state' ), 20, 2 );
                }
        }
@@ -89,24 +87,65 @@ class DS_Public_Post_Preview {
                        return;
                }
 
-               $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : 
'.min';
+               if (
+                       ( method_exists( get_current_screen(), 
'is_block_editor' ) && get_current_screen()->is_block_editor() ) ||
+                       ( function_exists( 'is_gutenberg_page' ) && 
is_gutenberg_page() )
+               ) {
+                       wp_enqueue_script(
+                               'public-post-preview-gutenberg',
+                               plugins_url( 'js/gutenberg-integration.js', 
__FILE__ ),
+                               array(
+                                       'lodash',
+                                       'wp-compose',
+                                       'wp-components',
+                                       'wp-data',
+                                       'wp-edit-post',
+                                       'wp-element',
+                                       'wp-i18n',
+                               ),
+                               '20181127',
+                               true
+                       );
 
-               wp_enqueue_script(
-                       'public-post-preview',
-                       plugins_url( "js/public-post-preview$suffix.js", 
__FILE__ ),
-                       array( 'jquery' ),
-                       '20160403',
-                       true
-               );
+                       $post = get_post();
+                       wp_localize_script(
+                               'public-post-preview-gutenberg',
+                               'DSPublicPostPreviewData',
+                               array(
+                                       'previewEnabled' => 
self::is_public_preview_enabled( $post ),
+                                       'previewUrl'     => 
self::get_preview_link( $post ),
+                                       'nonce'          => wp_create_nonce( 
'public-post-preview_' . $post->ID ),
+                               )
+                       );
 
-               wp_localize_script(
-                       'public-post-preview',
-                       'DSPublicPostPreviewL10n',
-                       array(
-                               'enabled'  => __( 'Enabled!', 
'public-post-preview' ),
-                               'disabled' => __( 'Disabled!', 
'public-post-preview' ),
-                       )
-               );
+                       if ( function_exists( 'gutenberg_get_jed_locale_data' ) 
) {
+                               $locale_data = gutenberg_get_jed_locale_data( 
'public-post-preview' );
+                               wp_add_inline_script(
+                                       'public-post-preview-gutenberg',
+                                       'wp.i18n.setLocaleData( ' . 
wp_json_encode( $locale_data ) . ', "public-post-preview" );',
+                                       'before'
+                               );
+                       }
+               } else {
+                       $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? 
'' : '.min';
+
+                       wp_enqueue_script(
+                               'public-post-preview',
+                               plugins_url( 
"js/public-post-preview$suffix.js", __FILE__ ),
+                               array( 'jquery' ),
+                               '20180914',
+                               true
+                       );
+
+                       wp_localize_script(
+                               'public-post-preview',
+                               'DSPublicPostPreviewL10n',
+                               array(
+                                       'enabled'  => __( 'Enabled!', 
'public-post-preview' ),
+                                       'disabled' => __( 'Disabled!', 
'public-post-preview' ),
+                               )
+                       );
+               }
        }
 
        /**
@@ -187,10 +226,9 @@ class DS_Public_Post_Preview {
                        $post = get_post();
                }
 
-               wp_nonce_field( 'public_post_preview', 
'public_post_preview_wpnonce' );
+               wp_nonce_field( 'public-post-preview_' . $post->ID, 
'public_post_preview_wpnonce' );
 
-               $preview_post_ids = self::get_preview_post_ids();
-               $enabled = in_array( $post->ID, $preview_post_ids );
+               $enabled = self::is_public_preview_enabled( $post );
                ?>
                <label><input type="checkbox"<?php checked( $enabled ); ?> 
name="public_post_preview" id="public-post-preview" value="1" />
                <?php _e( 'Enable public preview', 'public-post-preview' ); ?> 
<span id="public-post-preview-ajax"></span></label>
@@ -198,12 +236,25 @@ class DS_Public_Post_Preview {
                <div id="public-post-preview-link" style="margin-top:6px"<?php 
echo $enabled ? '' : ' class="hidden"'; ?>>
                        <label>
                                <input type="text" 
name="public_post_preview_link" class="regular-text" value="<?php echo 
esc_attr( self::get_preview_link( $post ) ); ?>" style="width:99%" readonly />
-                               <span class="description"><?php _e( '(Copy and 
share this link.)', 'public-post-preview' ); ?></span>
+                               <span class="description"><?php _e( 'Copy and 
share this preview URL.', 'public-post-preview' ); ?></span>
                        </label>
                </div>
                <?php
        }
 
+       /**
+        * Checks if a public preview is enabled for a post.
+        *
+        * @since 2.7.0
+        *
+        * @param WP_Post $post The post object.
+        * @return bool True if a public preview is enabled, false if not.
+        */
+       private static function is_public_preview_enabled( $post ) {
+               $preview_post_ids = self::get_preview_post_ids();
+               return in_array( $post->ID, $preview_post_ids, true );
+       }
+
        /**
         * Returns the public preview link.
         *
@@ -220,25 +271,25 @@ class DS_Public_Post_Preview {
        public static function get_preview_link( $post ) {
                if ( 'page' == $post->post_type ) {
                        $args = array(
-                               'page_id'    => $post->ID,
+                               'page_id' => $post->ID,
                        );
-               } else if ( 'post' == $post->post_type ) {
+               } elseif ( 'post' == $post->post_type ) {
                        $args = array(
-                               'p'          => $post->ID,
+                               'p' => $post->ID,
                        );
                } else {
                        $args = array(
-                               'p'          => $post->ID,
-                               'post_type'  => $post->post_type,
+                               'p'         => $post->ID,
+                               'post_type' => $post->post_type,
                        );
                }
 
                $args['preview'] = true;
-               $args['_ppp'] = self::create_nonce( 'public_post_preview_' . 
$post->ID );
+               $args['_ppp']    = self::create_nonce( 'public_post_preview_' . 
$post->ID );
 
                $link = add_query_arg( $args, home_url( '/' ) );
 
-               return apply_filters( 'ppp_preview_link', $link,  $post->ID, 
$post );
+               return apply_filters( 'ppp_preview_link', $link, $post->ID, 
$post );
        }
 
        /**
@@ -298,7 +349,7 @@ class DS_Public_Post_Preview {
         * @return bool Returns false on a failure, true on a success.
         */
        public static function unregister_public_preview_on_status_change( 
$new_status, $old_status, $post ) {
-               $disallowed_status = self::get_published_statuses();
+               $disallowed_status   = self::get_published_statuses();
                $disallowed_status[] = 'trash';
 
                if ( in_array( $new_status, $disallowed_status ) ) {
@@ -318,7 +369,7 @@ class DS_Public_Post_Preview {
         * @return bool Returns false on a failure, true on a success.
         */
        public static function unregister_public_preview_on_edit( $post_id, 
$post ) {
-               $disallowed_status = self::get_published_statuses();
+               $disallowed_status   = self::get_published_statuses();
                $disallowed_status[] = 'trash';
 
                if ( in_array( $post->post_status, $disallowed_status ) ) {
@@ -356,36 +407,37 @@ class DS_Public_Post_Preview {
         * @since 2.0.0
         */
        public static function ajax_register_public_preview() {
-               check_ajax_referer( 'public_post_preview' );
-
                $preview_post_id = (int) $_POST['post_ID'];
+
+               check_ajax_referer( 'public-post-preview_' . $preview_post_id );
+
                $post = get_post( $preview_post_id );
 
-               if ( ( 'page' == $post->post_type && ! current_user_can( 
'edit_page', $preview_post_id ) ) || ! current_user_can( 'edit_post', 
$preview_post_id ) ) {
-                       wp_die( 0 );
+               if ( ! current_user_can( 'edit_post', $preview_post_id ) ) {
+                       wp_send_json_error( 'cannot_edit' );
                }
 
                if ( in_array( $post->post_status, 
self::get_published_statuses() ) ) {
-                       wp_die( 0 );
+                       wp_send_json_error( 'invalid_post_status' );
                }
 
                $preview_post_ids = self::get_preview_post_ids();
 
-               if ( empty( $_POST['checked'] ) && in_array( $preview_post_id, 
$preview_post_ids ) ) {
+               if ( 'false' === $_POST['checked'] && in_array( 
$preview_post_id, $preview_post_ids ) ) {
                        $preview_post_ids = array_diff( $preview_post_ids, 
(array) $preview_post_id );
-               } elseif ( ! empty( $_POST['checked'] ) && ! in_array( 
$preview_post_id, $preview_post_ids ) ) {
+               } elseif ( 'true' === $_POST['checked'] && ! in_array( 
$preview_post_id, $preview_post_ids ) ) {
                        $preview_post_ids = array_merge( $preview_post_ids, 
(array) $preview_post_id );
                } else {
-                       wp_die( 0 );
+                       wp_send_json_error( 'unknown_status' );
                }
 
                $ret = self::set_preview_post_ids( $preview_post_ids );
 
                if ( ! $ret ) {
-                       wp_die( 0 );
+                       wp_send_json_error( 'not_saved' );
                }
 
-               wp_die( 1 );
+               wp_send_json_success();
        }
 
        /**
@@ -423,6 +475,7 @@ class DS_Public_Post_Preview {
                        if ( ! headers_sent() ) {
                                nocache_headers();
                        }
+                       add_action( 'wp_head', 'wp_no_robots' );
 
                        add_filter( 'posts_results', array( __CLASS__, 
'set_post_to_publish' ), 10, 2 );
                }
@@ -449,7 +502,7 @@ class DS_Public_Post_Preview {
                }
 
                if ( ! in_array( $post_id, self::get_preview_post_ids() ) ) {
-                       wp_die( __( 'No Public Preview available!', 
'public-post-preview' ) );
+                       wp_die( __( 'No public preview available!', 
'public-post-preview' ) );
                }
 
                return true;

diff --git a/plugins/public-post-preview/readme.txt 
b/plugins/public-post-preview/readme.txt
index c286709..ebd6f19 100644
--- a/plugins/public-post-preview/readme.txt
+++ b/plugins/public-post-preview/readme.txt
@@ -1,9 +1,9 @@
 === Public Post Preview ===
 Contributors: ocean90
 Tags: public, post, preview, posts, custom post types, draft
-Requires at least: 3.5
-Tested up to: 4.7
-Stable tag: 2.6.0
+Requires at least: 4.6
+Tested up to: 5.0
+Stable tag: 2.8.0
 License: GPLv2 or later
 License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
@@ -40,7 +40,8 @@ To upload the plugin through WordPress, instead of FTP:
 
 == Screenshots ==
 
-1. Edit Posts Page
+1. Setting in block editor
+2. Setting in classic editor
 
 == Usage ==
 * To enable a public post preview check the box below the edit post box.
@@ -71,6 +72,14 @@ function my_nonce_life() {
 Or use the [Public Post Preview 
Configurator](https://wordpress.org/plugins/public-post-preview-configurator/).
 
 == Change Log ==
+
+= 2.8.0 (2018-11-27): =
+* Add support for WordPress 5.0 and the new block editor.
+
+= 2.7.0 (2018-09-14): =
+* Initial support for Gutenberg.
+* Block robots for public post previews. Props 
[@westonruter](https://github.com/westonruter).
+
 = 2.6.0 (2017-04-27): =
 * Make `DS_Public_Post_Preview::get_preview_link()` public. Props 
[@rcstr](https://github.com/rcstr).
 * Send no-cache headers for public post previews.

Reply via email to