Font Awesome Icons - Version 4.0.0-rc6

Version Description

  • Fix error when updating options on admin page: handle null releaseProviderStatus in cases where the release provider does not have to make a network request to update release metadata.
Download this release

Release Info

Developer mlwilkerson
Plugin Icon 128x128 Font Awesome Icons
Version 4.0.0-rc6
Comparing to
See all releases

Code changes from version 4.0.0-rc5 to 4.0.0-rc6

admin/build/asset-manifest.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "main.css": "/static/css/main.91ed8516.chunk.css",
3
- "main.js": "/static/js/main.06a5ea7b.chunk.js",
4
- "main.js.map": "/static/js/main.06a5ea7b.chunk.js.map",
5
  "static/js/1.548e2ad2.chunk.js": "/static/js/1.548e2ad2.chunk.js",
6
  "static/js/1.548e2ad2.chunk.js.map": "/static/js/1.548e2ad2.chunk.js.map",
7
  "runtime-main.js": "/static/js/runtime-main.49c79181.js",
1
  {
2
  "main.css": "/static/css/main.91ed8516.chunk.css",
3
+ "main.js": "/static/js/main.6716b953.chunk.js",
4
+ "main.js.map": "/static/js/main.6716b953.chunk.js.map",
5
  "static/js/1.548e2ad2.chunk.js": "/static/js/1.548e2ad2.chunk.js",
6
  "static/js/1.548e2ad2.chunk.js.map": "/static/js/1.548e2ad2.chunk.js.map",
7
  "runtime-main.js": "/static/js/runtime-main.49c79181.js",
admin/build/static/js/main.06a5ea7b.chunk.js DELETED
@@ -1,2 +0,0 @@
1
- (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{12:function(e,t,a){e.exports={"submit-status":"OptionsSetter_submit-status__2A56R",explanation:"OptionsSetter_explanation__XoKaX",success:"OptionsSetter_success__uJCv9",icon:"OptionsSetter_icon__l-DXD","release-provider-error":"OptionsSetter_release-provider-error__2Wbm4","label-hint":"OptionsSetter_label-hint__kpp6r"}},15:function(e,t,a){e.exports={label:"LoadSpecView_label__34LBg","load-spec":"LoadSpecView_load-spec__3SZje"}},16:function(e,t,a){e.exports={"client-requirements":"ClientRequirementsView_client-requirements__1v61H",conflicted:"ClientRequirementsView_conflicted__5hmJU"}},17:function(e,t,a){e.exports={"v3-deprecation-warning":"V3DeprecationWarning_v3-deprecation-warning__3EzKh","snooze-button":"V3DeprecationWarning_snooze-button__2jHLk",label:"V3DeprecationWarning_label__2oz_x"}},2:function(e,t,a){e.exports={explanation:"App_explanation__2O1a5","table-header":"App_table-header__3XfOL"}},20:function(e,t,a){e.exports={status:"FontAwesomeAdminView_status__1TvaT",icon:"FontAwesomeAdminView_icon__AUm7s",good:"FontAwesomeAdminView_good__3B1qV",conflict:"FontAwesomeAdminView_conflict__2JlC8",warning:"FontAwesomeAdminView_warning__mMIh9"}},21:function(e,t,a){e.exports={"plugin-version-warnings":"PluginVersionWarningsView_plugin-version-warnings__RYKwJ"}},24:function(e,t,a){e.exports={"unregistered-clients":"UnregisteredClientsView_unregistered-clients__4czYv"}},33:function(e,t,a){e.exports=a(68)},68:function(e,t,a){"use strict";a.r(t);var n=a(0),s=a.n(n),i=a(32),o=a.n(i),l=a(7),r=a(8),c=a(10),u=a(9),m=a(11),d=a(1),h=a(19),p=a.n(h),b=a(6),g=a(5),v=function(){return s.a.createElement("div",{className:"loading-view"},s.a.createElement(b.a,{icon:g.g,size:"4x",spin:!0}))},f=a(4),E=a.n(f),y=a(20),w=a.n(y),S=a(15),k=a.n(S),O=function(e){var t=e.usePro,a=e.spec,n=a.method,i=a.v4shim,o=a.pseudoElements,l=a.version,r=t?"Pro":"Free";return s.a.createElement("div",{className:k.a["load-spec"]},s.a.createElement("h2",null,"Current Load Specification"),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Product"),s.a.createElement("td",{className:k.a.value},"Font Awesome"," ",s.a.createElement("span",{className:E()("license",r)},r))),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Version"),s.a.createElement("td",{className:k.a.value},l)),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Method"),s.a.createElement("td",{className:k.a.value},n)),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Version 4 compatibility"),s.a.createElement("td",{className:k.a.value},i?"true":"false")),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Pseudo-elements support"),s.a.createElement("td",{className:k.a.value},o?"true":"false")))))},N=a(13),j=a(12),_=a.n(j),C=a(2),x=a.n(C),P=a(18),A="",L=["webfont","svg",A],F=["require","forbid",A],V=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={method:A,v4shim:A,pseudoElements:A,version:A,usePro:!1,removeUnregisteredClients:!1,versionOptions:null,lastProps:null},a.handleMethodSelect=a.handleMethodSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleProCheck=a.handleProCheck.bind(Object(d.a)(Object(d.a)(a))),a.handleV4Select=a.handleV4Select.bind(Object(d.a)(Object(d.a)(a))),a.handlePseudoElementsSelect=a.handlePseudoElementsSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleVersionSelect=a.handleVersionSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleRemoveUnregisteredCheck=a.handleRemoveUnregisteredCheck.bind(Object(d.a)(Object(d.a)(a))),a.handleSubmitClick=a.handleSubmitClick.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleMethodSelect",value:function(e){this.setState({method:"-"===e.target.value?A:e.target.value})}},{key:"handleVersionSelect",value:function(e){this.setState({version:"-"===e.target.value?A:e.target.value})}},{key:"handlePseudoElementsSelect",value:function(e){this.setState({pseudoElements:"-"===e.target.value?A:e.target.value})}},{key:"handleProCheck",value:function(){this.setState({usePro:!this.state.usePro})}},{key:"handleRemoveUnregisteredCheck",value:function(){this.setState({removeUnregisteredClients:!this.state.removeUnregisteredClients})}},{key:"handleV4Select",value:function(e){this.setState({v4shim:"-"===e.target.value?A:e.target.value})}},{key:"handleSubmitClick",value:function(e){e.preventDefault();var t=this.props;(0,t.putData)({options:{adminClientLoadSpec:{name:t.adminClientInternal,method:this.state.method===A?void 0:this.state.method,v4shim:this.state.v4shim===A?void 0:this.state.v4shim,pseudoElements:this.state.pseudoElements===A?void 0:this.state.pseudoElements,version:this.state.version===A?void 0:this.state.version},usePro:this.state.usePro,removeUnregisteredClients:this.state.removeUnregisteredClients}})}},{key:"render",value:function(){var e=this;if(this.state.error)throw this.state.error;var t=this.props,a=t.hasSubmitted,n=t.isSubmitting,i=t.submitSuccess,o=t.submitMessage;return s.a.createElement("div",{className:"options-setter"},s.a.createElement("h2",null,"Options"),s.a.createElement("p",{className:x.a.explanation},"You can tune these options according to your preferences, as long as your preferences don't conflict with the specifications required by other plugins and themes that you've installed."),s.a.createElement("p",{className:x.a.explanation},"If conflicts are detected, they'll be shown below, and you might be able to resolve them just by choosing different options here."),s.a.createElement("table",{className:"form-table"},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"method"},"Method")),s.a.createElement("td",null,s.a.createElement("select",{name:"method",onChange:this.handleMethodSelect,value:this.state.method},L.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"use-pro"},"Use Pro")),s.a.createElement("td",null,s.a.createElement("input",{name:"use-pro",checked:this.state.usePro,value:this.state.usePro,type:"checkbox",onChange:this.handleProCheck}),s.a.createElement("span",{className:_.a["label-hint"]},"Requires a subscription.",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/pro"},s.a.createElement(b.a,{icon:g.e})," Learn more"),s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/account/domains"},s.a.createElement(b.a,{icon:g.e})," Manage my allowed domains")))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"v4shim"},"Version 4 Compatibility")),s.a.createElement("td",null,s.a.createElement("select",{name:"v4shim",onChange:this.handleV4Select,value:this.state.v4shim},F.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"pseudo-elements"},"Pseudo-elements Support")),s.a.createElement("td",null,s.a.createElement("select",{name:"pseudo-elements",onChange:this.handlePseudoElementsSelect,value:this.state.pseudoElements},F.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"version"},"Version")),s.a.createElement("td",null,s.a.createElement("select",{name:"version",onChange:this.handleVersionSelect,value:this.state.version},Object.keys(this.state.versionOptions).map(function(t,a){return s.a.createElement("option",{key:a,value:t},t===A?"-":e.state.versionOptions[t])})),200!==this.props.releaseProviderStatus.code&&s.a.createElement("div",{className:_.a["release-provider-error"]},this.props.releaseProviderStatus.message))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"remove-unregistered"},"Remove unregistered clients")),s.a.createElement("td",null,s.a.createElement("input",{name:"remove-unregistered",checked:this.state.removeUnregisteredClients,value:this.state.removeUnregisteredClients,type:"checkbox",onChange:this.handleRemoveUnregisteredCheck}))))),s.a.createElement("p",{className:"submit"},s.a.createElement("input",{type:"submit",name:"submit",id:"submit",className:"button button-primary",value:"Save Changes",onClick:this.handleSubmitClick}),a&&(i?s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.success)},s.a.createElement(b.a,{className:_.a.icon,icon:g.a}),s.a.createElement("span",{className:_.a.explanation},o)):s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.fail)},s.a.createElement(b.a,{className:_.a.icon,icon:g.f}),s.a.createElement("span",{className:_.a.explanation},o))),n&&s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.submitting)},s.a.createElement(b.a,{className:_.a.icon,icon:g.g,spin:!0}))))}}],[{key:"getDerivedStateFromProps",value:function(e,a){return e.isSubmitting||Object(P.isEqual)(a.lastProps,e)?null:{lastProps:e,pseudoElements:e.currentOptions.adminClientLoadSpec.pseudoElements||A,version:e.currentOptions.adminClientLoadSpec.version||A,v4shim:e.currentOptions.adminClientLoadSpec.v4shim||A,method:e.currentOptions.adminClientLoadSpec.method||A,usePro:!!e.currentOptions.usePro,removeUnregisteredClients:!!e.currentOptions.removeUnregisteredClients,versionOptions:t.buildVersionOptions(e)}}},{key:"buildVersionOptions",value:function(e){var t=e.releases,a=t.available,n=t.latest_version,s=t.previous_version;return a.reduce(function(e,t){return e[t]=n===t?"".concat(t," (latest)"):s===t?"".concat(t," (previous minor release)"):t,e},Object(N.a)({},A,"-"))}}]),t}(s.a.Component),R=a(16),D=a.n(R),q=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"hasAdditionalClients",value:function(){var e=this;return!!Object(P.find)(this.props.clientRequirements,function(t){return t.name!==e.props.adminClientInternal})}},{key:"render",value:function(){var e=this,t=this.props,a=t.conflict,n=t.hasLockedLoadSpec,i=!!a;return s.a.createElement("div",{className:D.a["client-requirements"]},i?s.a.createElement("h2",null,"Conflicting Requirements"):s.a.createElement("h2",null,"Client Requirements"),this.hasAdditionalClients()?s.a.createElement("div",null,i?s.a.createElement("div",null,s.a.createElement("p",{className:x.a.explanation},"We found conflicting requirements between two or more plugins or themes, shown below."),n?s.a.createElement("p",{className:x.a.explanation},"We'll continue to load the last good load specification you've locked in, so things will keep working the way they've been working. However, until you resolve the conflict, whatever clients have introduced these new conflicting requirements may not work as expected."):s.a.createElement("p",{className:x.a.explanation},"Since you haven't yet locked in a working configuration, we can't load Font Awesome at all. So, until you resolve these conflicts, Font Awesome won't work!")):s.a.createElement("p",{className:x.a.explanation},"Here are some other clients of the Font Awesome plugin, such as plugins or themes, along with their Font Awesome requirements shown side-by-side with your preferences. If you're trying to resolve a conflict, you might find the culprit at a glance here."),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("thead",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"method"===a))},"Method"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"version"===a))},"Version"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"v4shim"===a))},"V4 Compat"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"pseudoElements"===a))},"Pseudo-elements"))),s.a.createElement("tbody",null,this.props.clientRequirements.map(function(t,n){return s.a.createElement("tr",{key:n},s.a.createElement("td",null,t.name===e.props.adminClientInternal?e.props.adminClientExternal:t.name),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"method"===a))},t.method?t.method:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"version"===a))},t.version?t.version:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"v4shim"===a))},t.v4shim?t.v4shim:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"pseudoElements"===a))},t.pseudoElements?t.pseudoElements:"-"))})))):s.a.createElement("p",{className:x.a.explanation},"We don't detect any other active clients (like themes or plugins) that have registered requirements for Font Awesome."))}}]),t}(s.a.Component),W=a(24),I=a.n(W),M=function(e){var t=e.clients.length>0;return s.a.createElement("div",{className:E()(I.a["unregistered-clients"],Object(N.a)({},I.a["none-detected"],!t))},s.a.createElement("h2",null,"Unregistered Clients"),t?s.a.createElement("div",null,s.a.createElement("p",{className:x.a.explanation},"These are plugins or themes we've detected that appear to be trying to load their own versions of Font Awesome. Loading more than one version of Font Awesome will almost certainly result in problems, eventually. So, even if all registered clients are satisfied with your configuration, they can be broken by an unexpected version of Font Awesome loaded by one of these unregistered clients."),s.a.createElement("p",{className:x.a.explanation},"We recommend enabling the ",s.a.createElement("code",null,"Remove unregistered clients")," option to avoid such conflicts. When enabled, our plugin will attempt to stop these other clients from loading their own versions of Font Awesome. Most likely, they will continue to operate normally, as long as they are compatible with the version configured here."),s.a.createElement("p",{className:x.a.explanation},"If you enable ",s.a.createElement("code",null,"Remove unregistered clients")," and the results produced by those unregistered clients aren't what you expect (for example, their icons are missing), then you could try to select different options here, trying to find a configuration that ",s.a.createElement("em",null,"is")," compatible with them. Since they are ",s.a.createElement("em",null,"unregistered")," clients, we don't know what their requirements are, so you kinda just have to guess. You'll know you've found a workable configuration when all of the registered clients are satisfied (no conflicts shown here), and the unregistered clients produce expected results (their icons look right to you)."),s.a.createElement("p",{className:x.a.explanation},"A couple other options for resolving problems with unregistered clients:"),s.a.createElement("ol",{className:x.a.explanation},s.a.createElement("li",null,"Deactivate or replace it, if possible."),s.a.createElement("li",null,"Contact the developer for the unregistered client and ask them to consider updating their code to register with this Font Awesome Official plugin. Let them know they can reach us at ",s.a.createElement("code",null,"hello@fontawesome.com"),".")),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("tbody",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",null,"Type"),s.a.createElement("th",null,"Loading")),e.clients.map(function(e,t){return s.a.createElement("tr",{key:t},s.a.createElement("td",null,e.handle),s.a.createElement("td",null,e.type),s.a.createElement("td",null,e.src))})))):s.a.createElement("p",{className:x.a.explanation},"We detected no unregistered clients."))},U=a(21),G=a.n(U),z=function(e){return s.a.createElement("div",{className:G.a["plugin-version-warnings"]},s.a.createElement("h2",null,"Plugin Version Warnings"),s.a.createElement("p",{className:x.a.explanation},"This plugin is designed to be loaded in a variety of ways by third-party plugins and themes, all in the hope that it makes your life easier by managing the complexity of their various requirements. But sometimes, they have a conflict over not just the version of Font Awesome to load, but on the version of this plugin that they require in order to get the job done. Behind the scenes, only one copy of the plugin is actually loaded. Any subsequent plugins are forced to use that version that's already loaded. Those subsequently loaded plugins might have a problem using the loaded version and this is where they'll warn you about that so you can see the problem clearly and (hopefully) quickly work out a solution."),s.a.createElement("p",{className:x.a.explanation},"Unfortunately, we've got one of those situations here. The likely solution is to upgrade one of these to its latest version. Or, if you've installed a plugin that includes the Font Awesome plugin and you've also installed the Font Awesome plugin directly yourself, you might be able to resolve this conflict by deactivating the version of the Font Awesome plugin you installed yourself."),s.a.createElement("p",{className:x.a.explanation},"If you have reason to keep your own installation of the plugin in addition to another plugin and think you could resolve this problem by downgrading your own installation of the plugin, you find older releases of the plugin on ",s.a.createElement("a",{href:"https://fontawesome.com"},"our website"),"."),s.a.createElement("p",{className:x.a.explanation},"In most cases, if you've installed a plugin that embeds this plugin, you do not need to also have your own copy of this plugin installed, and it may be simpler to just deactivate and uninstall it, unless it's the only copy of the plugin."),s.a.createElement("p",{className:x.a.explanation},s.a.createElement("b",null,"Loaded Plugin Version: ")," ",e.pluginVersion),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("thead",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",null,"Version Requirement"))),s.a.createElement("tbody",null,Object.keys(e.warnings).map(function(t,a){return s.a.createElement("tr",{key:a},s.a.createElement("td",{className:G.a.name},e.warnings[t].name),s.a.createElement("td",{className:G.a.name},e.warnings[t].constraint))}))))},B=a(17),T=a.n(B),X=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={data:null,error:null,isLoading:!0,isSubmitting:!1,hasSubmitted:!1,submitSuccess:!1,submitMessage:null},a.getData=a.getData.bind(Object(d.a)(Object(d.a)(a))),a.putData=a.putData.bind(Object(d.a)(Object(d.a)(a))),a.handlePutResponse=a.handlePutResponse.bind(Object(d.a)(Object(d.a)(a))),a.handlePutError=a.handlePutError.bind(Object(d.a)(Object(d.a)(a))),a.handleGetResponse=a.handleGetResponse.bind(Object(d.a)(Object(d.a)(a))),a.handleGetError=a.handleGetError.bind(Object(d.a)(Object(d.a)(a))),a.handleSnooze=a.handleSnooze.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleSnooze",value:function(){this.putData({snooze:!0})}},{key:"handleGetResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isLoading:!1}):this.setState({error:new Error("failed to get data"),isLoading:!1})}},{key:"handlePutResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!0,submitMessage:"Changes saved"}):this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:"Failed to save changes"})}},{key:"handlePutError",value:function(e){var t=e.response.data,a=t.code,n=t.message,s="";switch(a){case"cant_update":s=n;break;case"rest_no_route":case"rest_cookie_invalid_nonce":s="Sorry, we couldn't reach the server";break;default:s="Update failed"}this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:s})}},{key:"handleGetError",value:function(e){this.setState({error:e})}},{key:"getData",value:function(){p.a.get("".concat(this.props.wpApiSettings.api_url,"/v3deprecation"),{headers:{"X-WP-Nonce":this.props.wpApiSettings.api_nonce}}).then(this.handleGetResponse).catch(this.handleGetError)}},{key:"putData",value:function(e){this.setState({isSubmitting:!0,hasSubmitted:!1}),p.a.put("".concat(this.props.wpApiSettings.api_url,"/v3deprecation"),e,{headers:{"X-WP-Nonce":this.props.wpApiSettings.api_nonce}}).then(this.handlePutResponse).catch(this.handlePutError)}},{key:"componentDidMount",value:function(){this.setState({isLoading:!0}),this.getData()}},{key:"render",value:function(){if(this.state.error)throw this.state.error;if(!this.state.isLoading&&!this.state.data)throw new Error("missing data");if(this.state.isLoading)return null;if(this.state.data){if(!1===this.state.data.v3DeprecationWarning)return null;var e=this.state.data.v3DeprecationWarning,t=e.atts,a=e.v5name,n=e.v5prefix;return e.snooze?null:s.a.createElement("div",{className:T.a["v3-deprecation-warning"]},s.a.createElement("p",{className:x.a.explanation},s.a.createElement(b.a,{icon:g.d,size:"2x"})),s.a.createElement("p",{className:x.a.explanation},"Looks like you're using an ",s.a.createElement("code",null,"[icon]")," shortcode with an old Font Awesome 3 icon name:",s.a.createElement("code",null,t.name)),s.a.createElement("p",{className:x.a.explanation},"We discontinued support for ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/v3.2.1/icons/"},"Font Awesome 3")," quite some time ago, though we only recently inherited this WordPress plugin, which previously only supported up to Font Awesome 3."),s.a.createElement("p",{className:x.a.explanation},"Won't you jump into Font Awesome 5 with us? It's way better, and we're gonna make it really easy to upgrade. We've added some temporary magic to this plugin to translate your version 3 icon names into their version 5 equivalents."),s.a.createElement("p",{className:x.a.explanation},s.a.createElement("i",{className:"fas fa-magic fa-2x"})," ",s.a.createElement("em",null,"Bippity Boppity Boo!")),s.a.createElement("p",{className:x.a.explanation},"We just turned your",s.a.createElement("br",null),s.a.createElement("code",null,'[icon name="',t.name,'"]'),s.a.createElement("br",null),s.a.createElement("i",{className:"".concat(n," fa-").concat(a," fa-2x")})," into",s.a.createElement("br",null),s.a.createElement("code",null,'[icon name="',a,'" prefix="',n,'"]'),"."),s.a.createElement("p",{className:x.a.explanation},"Actually, we just converted it on the fly so it would look right in your web pages, without changing your saved web site content. So to make that change permanent (and get rid of this warning), you'll need to go change any version 3 icon names in ",s.a.createElement("code",null,"[icon]")," shortcodes in your pages, posts, widgets, templates, or wherever they're coming from."),s.a.createElement("p",{className:x.a.explanation},"What's that ",s.a.createElement("code",null,"prefix"),", you ask?"),s.a.createElement("p",{className:x.a.explanation},"Well...in Font Awesome 5, most icons come in three different styles. You use a style ",s.a.createElement("em",null,"prefix")," to indicate which style you want. The default style prefix is ",s.a.createElement("code",null,"fas")," for the Solid style. So when you're upgrading your shortcodes from v3 to v5 names, if you just want the Solid style icon, you can leave off that ",s.a.createElement("code",null,"prefix"),". Most v3 icons map to Solid style icons in v5. But some of the version 3 icon names map to the ",s.a.createElement("code",null,"fab")," style for Brands, or the ",s.a.createElement("code",null,"far")," style for Regular."),s.a.createElement("p",{className:x.a.explanation},"Icons for companies like ",s.a.createElement("i",{className:"fab fa-apple fa-2x"})," Apple, or products like ",s.a.createElement("i",{className:"fab fa-chrome fa-2x"}),"Chrome will be in the Brands style with the ",s.a.createElement("code",null,"fab")," prefix."),s.a.createElement("p",{className:x.a.explanation},"When you subscribe to ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/pro"},"Font Awesome Pro"),", you get a kajillion icons in All the Styles, including ",s.a.createElement("code",null,"fal"),", the Light style."),s.a.createElement("p",{className:x.a.explanation},"Head over to our ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/icons?d=gallery"},"Icon Gallery")," to check out the vast array."),s.a.createElement("p",{className:x.a.explanation},"Guess what! In Font Awesome 3.2.1, you had 361 icons to choose from. Now, with Font Awesome 5 Free (as of v5.5.0) you've got ",s.a.createElement("b",null,"1,409"),", and with Pro you get...wait for it...",s.a.createElement("b",null,"4,566"),". (Rounds up to a kajillion.)"),s.a.createElement("p",{className:x.a.explanation},"So have a blast upgrading. We're gonna remove this v3-to-v5 magic soon, though, so don't wait forever."),s.a.createElement("p",{className:x.a.explanation},"Clear this warning by updating those icons, or you could hit snooze to get this warning of your way for a while."),s.a.createElement("div",null,s.a.createElement("button",{disabled:this.state.isSubmitting,onClick:this.handleSnooze,className:E()(T.a["snooze-button"],"button","button-primary")},this.state.isSubmitting?s.a.createElement(b.a,{icon:g.g,spin:!0,className:T.a.submitting}):this.state.hasSubmitted?this.state.submitSuccess?s.a.createElement(b.a,{icon:g.a,className:T.a.success}):s.a.createElement(b.a,{icon:g.f,className:T.a.fail}):s.a.createElement(b.a,{icon:g.b,className:T.a.snooze}),s.a.createElement("span",{className:T.a.label},"Snooze"))))}}}]),t}(s.a.Component),J=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"getStatus",value:function(e,t){return e?t?{statusLabel:"warning",statusIcon:g.d}:{statusLabel:"conflict",statusIcon:g.c}:{statusLabel:"good",statusIcon:g.h}}},{key:"render",value:function(){var e=this.props,t=e.data,a=e.putData,n=!!t.conflicts,i=this.getStatus(n,!!t.options.lockedLoadSpec),o=i.statusLabel,l=i.statusIcon;return s.a.createElement("div",{className:w.a["font-awesome-admin-view"]},s.a.createElement("h1",null,"Font Awesome"),s.a.createElement("div",null,s.a.createElement("p",{className:E()(w.a.status,w.a[o])},s.a.createElement("span",{className:w.a["status-label"]},"Status: "),s.a.createElement(b.a,{className:w.a.icon,icon:l})),s.a.createElement(X,{wpApiSettings:this.props.wpApiSettings}),t.options.lockedLoadSpec&&s.a.createElement(O,{spec:t.options.lockedLoadSpec,usePro:t.options.usePro}),n&&s.a.createElement(q,{clientRequirements:t.conflicts.conflictingClientRequirements,conflict:t.conflicts.requirement,hasLockedLoadSpec:!!t.options.lockedLoadSpec,adminClientInternal:t.adminClientInternal,adminClientExternal:t.adminClientExternal}),s.a.createElement(V,{releases:t.releases,currentOptions:t.options,putData:a,isSubmitting:this.props.isSubmitting,hasSubmitted:this.props.hasSubmitted,submitSuccess:this.props.submitSuccess,submitMessage:this.props.submitMessage,error:this.props.error,adminClientInternal:t.adminClientInternal,releaseProviderStatus:t.releaseProviderStatus}),!n&&s.a.createElement(q,{clientRequirements:Object(P.values)(t.clientRequirements),adminClientInternal:t.adminClientInternal,adminClientExternal:t.adminClientExternal}),s.a.createElement(M,{clients:t.unregisteredClients}),t.pluginVersionWarnings&&s.a.createElement(z,{warnings:Object(P.values)(t.pluginVersionWarnings),pluginVersion:t.pluginVersion})))}}]),t}(s.a.Component),H=function(e){function t(e){var a;Object(l.a)(this,t),a=Object(c.a)(this,Object(u.a)(t).call(this,e));var n=window.wpFontAwesomeOfficial;if(!n)throw Error("Well, this is embarrassing. The plugin doesn't seem to be installed correctly.");return a.state={data:null,error:null,isLoading:!0,isSubmitting:!1,hasSubmitted:!1,submitSuccess:!1,submitMessage:null,wpApiSettings:n},a.getData=a.getData.bind(Object(d.a)(Object(d.a)(a))),a.putData=a.putData.bind(Object(d.a)(Object(d.a)(a))),a.handlePutResponse=a.handlePutResponse.bind(Object(d.a)(Object(d.a)(a))),a.handlePutError=a.handlePutError.bind(Object(d.a)(Object(d.a)(a))),a.handleGetResponse=a.handleGetResponse.bind(Object(d.a)(Object(d.a)(a))),a.handleGetError=a.handleGetError.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleGetResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isLoading:!1}):this.setState({error:new Error("failed to get data"),isLoading:!1})}},{key:"handlePutResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!0,submitMessage:"Changes saved"}):this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:"Failed to save changes"})}},{key:"handlePutError",value:function(e){var t=e.response.data,a=t.code,n=t.message,s="";switch(a){case"cant_update":s=n;break;case"rest_no_route":case"rest_cookie_invalid_nonce":s="Sorry, we couldn't reach the server";break;default:s="Update failed"}this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:s})}},{key:"handleGetError",value:function(e){this.setState({error:e})}},{key:"getData",value:function(){p.a.get("".concat(this.state.wpApiSettings.api_url,"/config"),{headers:{"X-WP-Nonce":this.state.wpApiSettings.api_nonce}}).then(this.handleGetResponse).catch(this.handleGetError)}},{key:"putData",value:function(e){this.setState({isSubmitting:!0,hasSubmitted:!1}),p.a.put("".concat(this.state.wpApiSettings.api_url,"/config"),e,{headers:{"X-WP-Nonce":this.state.wpApiSettings.api_nonce}}).then(this.handlePutResponse).catch(this.handlePutError)}},{key:"componentDidMount",value:function(){this.setState({isLoading:!0}),this.getData()}},{key:"render",value:function(){if(this.state.error)throw this.state.error;if(!this.state.isLoading&&!this.state.data)throw new Error("missing data");return s.a.createElement("div",{className:"wrap"},this.state.isLoading?s.a.createElement(v,null):s.a.createElement(J,{data:this.state.data,putData:this.putData,isSubmitting:this.state.isSubmitting,hasSubmitted:this.state.hasSubmitted,submitSuccess:this.state.submitSuccess,submitMessage:this.state.submitMessage,wpApiSettings:this.state.wpApiSettings,error:this.state.error}))}}]),t}(n.Component),Y=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"render",value:function(){var e=this.props.message;return s.a.createElement("div",{className:"error-fallback"},"Sorry, we've experienced some error.",e&&s.a.createElement("div",{className:"additional-message"},e))}}]),t}(s.a.Component),K=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={error:null,errorInfo:null},a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"componentDidCatch",value:function(e,t){this.setState({error:e,errorInfo:t})}},{key:"render",value:function(){return this.state.error?s.a.createElement(Y,null):this.props.children}}]),t}(s.a.Component);o.a.render(s.a.createElement(K,null,s.a.createElement(H,null)),document.getElementById("font-awesome-admin"))}},[[33,2,1]]]);
2
- //# sourceMappingURL=main.06a5ea7b.chunk.js.map
 
 
admin/build/static/js/main.06a5ea7b.chunk.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["OptionsSetter.module.css","LoadSpecView.module.css","ClientRequirementsView.module.css","V3DeprecationWarning.module.css","App.module.css","FontAwesomeAdminView.module.css","PluginVersionWarningsView.module.css","UnregisteredClientsView.module.css","LoadingView.js","LoadSpecView.js","OptionsSetter.js","ClientRequirementsView.js","UnregisteredClientsView.js","PluginVersionWarningsView.js","V3DeprecationWarning.js","FontAwesomeAdminView.js","App.js","ErrorFallbackView.js","ErrorBoundary.js","index.js"],"names":["module","exports","submit-status","explanation","success","icon","release-provider-error","label-hint","label","load-spec","client-requirements","conflicted","v3-deprecation-warning","snooze-button","table-header","status","good","conflict","warning","plugin-version-warnings","unregistered-clients","LoadingView","react_default","a","createElement","className","index_es","faSpinner","size","spin","LoadSpecView","props","usePro","_props$spec","spec","method","v4shim","pseudoElements","version","licenseType","styles","classnames","UNSPECIFIED","METHOD_OPTIONS","REQUIRE_FORBID_OPTIONS","OptionsSetter","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","state","removeUnregisteredClients","versionOptions","lastProps","handleMethodSelect","bind","assertThisInitialized","handleProCheck","handleV4Select","handlePseudoElementsSelect","handleVersionSelect","handleRemoveUnregisteredCheck","handleSubmitClick","e","setState","target","value","preventDefault","_this$props","putData","options","adminClientLoadSpec","name","adminClientInternal","undefined","_this2","error","_this$props2","hasSubmitted","isSubmitting","submitSuccess","submitMessage","sharedStyles","scope","htmlFor","onChange","map","index","key","checked","type","rel","href","faExternalLinkAlt","option","keys","releaseProviderStatus","code","message","id","onClick","faCheck","faSkull","nextProps","prevState","isEqual","currentOptions","buildVersionOptions","_props$releases","releases","available","latest_version","previous_version","reduce","acc","concat","defineProperty","React","Component","ClientRequirementsView","find","clientRequirements","client","hasLockedLoadSpec","hasConflict","hasAdditionalClients","adminClientExternal","UnregisteredClientsView","detectedUnregisteredClients","clients","length","handle","src","PluginVersionWarningsView","pluginVersion","warnings","warningKey","constraint","V3DeprecationWarning","data","isLoading","getData","handlePutResponse","handlePutError","handleGetResponse","handleGetError","handleSnooze","snooze","response","Error","_error$response$data","axios","get","wpApiSettings","api_url","headers","X-WP-Nonce","api_nonce","then","catch","newData","put","v3DeprecationWarning","_this$state$data$v3De","atts","v5name","v5prefix","faExclamationTriangle","disabled","faClock","FontAwesomeAdminView","haslockedLoadSpec","statusLabel","statusIcon","faExclamationCircle","faThumbsUp","conflicts","_this$getStatus","getStatus","lockedLoadSpec","src_V3DeprecationWarning","src_LoadSpecView","src_ClientRequirementsView","conflictingClientRequirements","requirement","src_OptionsSetter","values","src_UnregisteredClientsView","unregisteredClients","pluginVersionWarnings","src_PluginVersionWarningsView","App","window","src_FontAwesomeAdminView","ErrorFallbackView","ErrorBoundary","errorInfo","src_ErrorFallbackView","children","ReactDOM","render","src_ErrorBoundary","src_App","document","getElementById"],"mappings":"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","file":"static/js/main.06a5ea7b.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"submit-status\":\"OptionsSetter_submit-status__2A56R\",\"explanation\":\"OptionsSetter_explanation__XoKaX\",\"success\":\"OptionsSetter_success__uJCv9\",\"icon\":\"OptionsSetter_icon__l-DXD\",\"release-provider-error\":\"OptionsSetter_release-provider-error__2Wbm4\",\"label-hint\":\"OptionsSetter_label-hint__kpp6r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"LoadSpecView_label__34LBg\",\"load-spec\":\"LoadSpecView_load-spec__3SZje\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"client-requirements\":\"ClientRequirementsView_client-requirements__1v61H\",\"conflicted\":\"ClientRequirementsView_conflicted__5hmJU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"v3-deprecation-warning\":\"V3DeprecationWarning_v3-deprecation-warning__3EzKh\",\"snooze-button\":\"V3DeprecationWarning_snooze-button__2jHLk\",\"label\":\"V3DeprecationWarning_label__2oz_x\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"explanation\":\"App_explanation__2O1a5\",\"table-header\":\"App_table-header__3XfOL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"status\":\"FontAwesomeAdminView_status__1TvaT\",\"icon\":\"FontAwesomeAdminView_icon__AUm7s\",\"good\":\"FontAwesomeAdminView_good__3B1qV\",\"conflict\":\"FontAwesomeAdminView_conflict__2JlC8\",\"warning\":\"FontAwesomeAdminView_warning__mMIh9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"plugin-version-warnings\":\"PluginVersionWarningsView_plugin-version-warnings__RYKwJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"unregistered-clients\":\"UnregisteredClientsView_unregistered-clients__4czYv\"};","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons'\n\nexport default () =>\n <div className=\"loading-view\">\n <FontAwesomeIcon icon={ faSpinner } size=\"4x\" spin />\n </div>","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\nimport styles from './LoadSpecView.module.css'\n\nconst PRODUCT_BASE_NAME = 'Font Awesome'\n\nconst LoadSpecView = props => {\n const { usePro, spec: {\n method,\n v4shim,\n pseudoElements,\n version,\n }} = props\n\n const licenseType = usePro ? 'Pro' : 'Free'\n\n return <div className={styles['load-spec']}>\n <h2>Current Load Specification</h2>\n <table className={classnames('widefat', 'striped')}>\n <tbody>\n <tr>\n <td className={styles['label']}>Product</td>\n <td className={styles['value']}>{PRODUCT_BASE_NAME} <span\n className={classnames('license', licenseType)}>{ licenseType }</span></td>\n </tr>\n <tr>\n <td className={styles['label']}>Version</td>\n <td className={styles['value']}>{version}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Method</td>\n <td className={styles['value']}>{method}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Version 4 compatibility</td>\n <td className={styles['value']}>{v4shim ? 'true' : 'false'}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Pseudo-elements support</td>\n <td className={styles['value']}>{pseudoElements ? 'true' : 'false'}</td>\n </tr>\n </tbody>\n </table>\n </div>\n}\n\nexport default LoadSpecView\n\nLoadSpecView.propTypes = {\n spec: PropTypes.object.isRequired,\n usePro: PropTypes.bool\n}\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner, faCheck, faSkull, faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'\nimport styles from './OptionsSetter.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\nimport { isEqual } from 'lodash'\n\nconst UNSPECIFIED = ''\nconst METHOD_OPTIONS = ['webfont', 'svg', UNSPECIFIED]\nconst REQUIRE_FORBID_OPTIONS = ['require', 'forbid', UNSPECIFIED]\n\nclass OptionsSetter extends React.Component {\n constructor(props){\n super(props)\n\n this.state = {\n method: UNSPECIFIED,\n v4shim: UNSPECIFIED,\n pseudoElements: UNSPECIFIED,\n version: UNSPECIFIED,\n usePro: false,\n removeUnregisteredClients: false,\n versionOptions: null,\n lastProps: null\n }\n\n this.handleMethodSelect = this.handleMethodSelect.bind(this)\n this.handleProCheck = this.handleProCheck.bind(this)\n this.handleV4Select = this.handleV4Select.bind(this)\n this.handlePseudoElementsSelect = this.handlePseudoElementsSelect.bind(this)\n this.handleVersionSelect = this.handleVersionSelect.bind(this)\n this.handleRemoveUnregisteredCheck = this.handleRemoveUnregisteredCheck.bind(this)\n this.handleSubmitClick = this.handleSubmitClick.bind(this)\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if( nextProps.isSubmitting || isEqual(prevState.lastProps, nextProps) ) {\n return null\n }\n\n const newState = {\n lastProps: nextProps,\n pseudoElements: nextProps.currentOptions.adminClientLoadSpec.pseudoElements || UNSPECIFIED,\n version: nextProps.currentOptions.adminClientLoadSpec.version || UNSPECIFIED,\n v4shim: nextProps.currentOptions.adminClientLoadSpec.v4shim || UNSPECIFIED,\n method: nextProps.currentOptions.adminClientLoadSpec.method || UNSPECIFIED,\n usePro: !!nextProps.currentOptions.usePro,\n removeUnregisteredClients: !!nextProps.currentOptions.removeUnregisteredClients,\n versionOptions: OptionsSetter.buildVersionOptions(nextProps)\n }\n\n return newState\n }\n\n static buildVersionOptions(props) {\n const { releases: { available, latest_version, previous_version } } = props\n\n return available.reduce((acc, version) => {\n if( latest_version === version ) {\n acc[version] = `${ version } (latest)`\n } else if ( previous_version === version ) {\n acc[version] = `${ version } (previous minor release)`\n } else {\n acc[version] = version\n }\n return acc\n }, { [UNSPECIFIED]: '-' })\n }\n\n handleMethodSelect(e){\n this.setState({ method: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleVersionSelect(e){\n this.setState({ version: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handlePseudoElementsSelect(e){\n this.setState({ pseudoElements: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleProCheck(){\n this.setState({ usePro: !this.state.usePro })\n }\n\n handleRemoveUnregisteredCheck(){\n this.setState({ removeUnregisteredClients: !this.state.removeUnregisteredClients })\n }\n\n handleV4Select(e){\n this.setState({ v4shim: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleSubmitClick(e) {\n e.preventDefault()\n\n const { putData, adminClientInternal } = this.props\n\n putData({\n options: {\n adminClientLoadSpec: {\n name: adminClientInternal,\n method: this.state.method === UNSPECIFIED ? undefined : this.state.method,\n v4shim: this.state.v4shim === UNSPECIFIED ? undefined : this.state.v4shim,\n pseudoElements: this.state.pseudoElements === UNSPECIFIED ? undefined : this.state.pseudoElements,\n version: this.state.version === UNSPECIFIED ? undefined : this.state.version,\n },\n usePro: this.state.usePro,\n removeUnregisteredClients: this.state.removeUnregisteredClients\n }\n })\n }\n\n render() {\n if(this.state.error) throw this.state.error\n\n const { hasSubmitted, isSubmitting, submitSuccess, submitMessage } = this.props\n\n return <div className=\"options-setter\">\n <h2>Options</h2>\n <p className={ sharedStyles['explanation'] }>\n You can tune these options according to your preferences, as long as your preferences\n don't conflict with the specifications required by other plugins and themes that you've installed.\n </p>\n <p className={ sharedStyles['explanation'] }>\n If conflicts are detected, they'll be shown below, and\n you might be able to resolve them just by choosing different options here.\n </p>\n <table className=\"form-table\">\n <tbody>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"method\">Method</label>\n </th>\n <td>\n <select name=\"method\" onChange={ this.handleMethodSelect } value={ this.state.method }>\n {\n METHOD_OPTIONS.map((method, index) => {\n return <option key={ index } value={ method }>{ method ? method : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"use-pro\">Use Pro</label>\n </th>\n <td>\n <input name=\"use-pro\" checked={ this.state.usePro } value={ this.state.usePro } type=\"checkbox\" onChange={ this.handleProCheck }/>\n <span className={styles[\"label-hint\"]}>\n Requires a subscription.\n <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/pro\"><FontAwesomeIcon icon={faExternalLinkAlt} /> Learn more</a>\n <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/account/domains\"><FontAwesomeIcon icon={faExternalLinkAlt} /> Manage my allowed domains</a>\n </span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"v4shim\">Version 4 Compatibility</label>\n </th>\n <td>\n <select name=\"v4shim\" onChange={ this.handleV4Select } value={ this.state.v4shim }>\n {\n REQUIRE_FORBID_OPTIONS.map((option, index) => {\n return <option key={ index } value={ option }>{ option ? option : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"pseudo-elements\">Pseudo-elements Support</label>\n </th>\n <td>\n <select name=\"pseudo-elements\" onChange={ this.handlePseudoElementsSelect } value={ this.state.pseudoElements }>\n {\n REQUIRE_FORBID_OPTIONS.map((option, index) => {\n return <option key={ index } value={ option }>{ option ? option : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"version\">Version</label>\n </th>\n <td>\n <select name=\"version\" onChange={ this.handleVersionSelect } value={ this.state.version }>\n {\n Object.keys(this.state.versionOptions).map((version, index) => {\n return <option key={ index } value={ version }>\n { version === UNSPECIFIED ? '-' : this.state.versionOptions[version] }\n </option>\n })\n }\n </select>\n {\n this.props.releaseProviderStatus.code !== 200 &&\n <div className={ styles['release-provider-error'] }>\n { this.props.releaseProviderStatus.message }\n </div>\n }\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"remove-unregistered\">Remove unregistered clients</label>\n </th>\n <td>\n <input\n name=\"remove-unregistered\"\n checked={ this.state.removeUnregisteredClients }\n value={ this.state.removeUnregisteredClients }\n type=\"checkbox\"\n onChange={ this.handleRemoveUnregisteredCheck }\n />\n </td>\n </tr>\n </tbody>\n </table>\n <p className=\"submit\">\n <input\n type=\"submit\"\n name=\"submit\"\n id=\"submit\"\n className=\"button button-primary\"\n value=\"Save Changes\"\n onClick={ this.handleSubmitClick }\n />\n { hasSubmitted &&\n ( submitSuccess\n ? <span className={ classnames(styles['submit-status'], styles['success']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={ faCheck } />\n <span className={ styles['explanation'] }>\n { submitMessage }\n </span>\n </span>\n : <span className={ classnames(styles['submit-status'], styles['fail']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={ faSkull } />\n <span className={ styles['explanation'] }>\n { submitMessage }\n </span>\n </span>\n )\n }\n {isSubmitting &&\n <span className={ classnames(styles['submit-status'], styles['submitting']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={faSpinner} spin/>\n </span>\n }\n </p>\n </div>\n\n }\n}\n\nexport default OptionsSetter\n\nOptionsSetter.propTypes = {\n putData: PropTypes.func.isRequired,\n currentOptions: PropTypes.object.isRequired,\n releases: PropTypes.object.isRequired,\n adminClientInternal: PropTypes.string.isRequired,\n releaseProviderStatus: PropTypes.object.isRequired,\n}\n","import React from 'react'\nimport styles from './ClientRequirementsView.module.css'\nimport sharedStyles from './App.module.css'\nimport { find } from 'lodash'\nimport classnames from 'classnames'\nimport PropTypes from 'prop-types'\n\n// TODO: refactor this with the one in OptionsSetter\nconst UNSPECIFIED_INDICATOR = '-'\n\nclass ClientRequirementsView extends React.Component {\n\n hasAdditionalClients() {\n return !!find(this.props.clientRequirements, client => client.name !== this.props.adminClientInternal )\n }\n\n render() {\n const { conflict, hasLockedLoadSpec } = this.props\n\n const hasConflict = !!conflict\n\n return <div className={ styles['client-requirements'] }>\n {\n hasConflict\n ? <h2>Conflicting Requirements</h2>\n : <h2>Client Requirements</h2>\n }\n {\n this.hasAdditionalClients()\n ?\n <div>\n { hasConflict\n ? <div>\n <p className={sharedStyles['explanation']}>\n We found conflicting requirements between two or more plugins or themes, shown below.\n </p>\n { hasLockedLoadSpec\n ? <p className={sharedStyles['explanation']}>\n We'll continue to load the last good load specification you've locked in, so things will\n keep working the way they've been working. However, until you resolve the conflict, whatever\n clients have introduced these new conflicting requirements may not work as expected.\n </p>\n : <p className={sharedStyles['explanation']}>\n Since you haven't yet locked in a working configuration, we can't load Font Awesome at all.\n So, until you resolve these conflicts, Font Awesome won't work!\n </p>\n }\n </div>\n : <p className={sharedStyles['explanation']}>\n Here are some other clients of the Font Awesome plugin, such as plugins or themes,\n along with their Font Awesome requirements shown side-by-side with your preferences.\n If you're trying to resolve a conflict, you might find the culprit at a glance here.\n </p>\n }\n <table className={ classnames( 'widefat', 'striped' ) }>\n <thead>\n <tr className={ sharedStyles['table-header'] }>\n <th>Name</th>\n <th className={ classnames({ [styles.conflicted]: 'method' === conflict }) }>Method</th>\n <th className={ classnames({ [styles.conflicted]: 'version' === conflict }) }>Version</th>\n <th className={ classnames({ [styles.conflicted]: 'v4shim' === conflict }) }>V4 Compat</th>\n <th className={ classnames({ [styles.conflicted]: 'pseudoElements' === conflict }) }>Pseudo-elements</th>\n </tr>\n </thead>\n <tbody>\n {\n this.props.clientRequirements.map((client, index) => {\n return <tr key={ index }>\n <td>{ client.name === this.props.adminClientInternal ? this.props.adminClientExternal : client.name }</td>\n <td className={ classnames({ [styles.conflicted]: 'method' === conflict }) }>{ client.method ? client.method : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'version' === conflict }) }>{ client.version ? client.version : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'v4shim' === conflict }) }>{ client.v4shim ? client.v4shim : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'pseudoElements' === conflict }) }>{ client.pseudoElements ? client.pseudoElements : UNSPECIFIED_INDICATOR }</td>\n </tr>\n })\n }\n </tbody>\n </table>\n </div>\n :\n <p className={ sharedStyles['explanation'] }>\n We don't detect any other active clients (like themes or plugins) that have registered\n requirements for Font Awesome.\n </p>\n }\n </div>\n }\n}\n\nexport default ClientRequirementsView\n\nClientRequirementsView.propTypes = {\n clientRequirements: PropTypes.array.isRequired,\n hasLockedLoadSpec: PropTypes.bool,\n conflict: PropTypes.string,\n adminClientInternal: PropTypes.string.isRequired,\n adminClientExternal: PropTypes.string.isRequired\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './UnregisteredClientsView.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\n\nconst UnregisteredClientsView = props => {\n\n const detectedUnregisteredClients = props.clients.length > 0\n\n return <div className={ classnames(styles['unregistered-clients'], { [styles['none-detected']]: !detectedUnregisteredClients }) }>\n <h2>Unregistered Clients</h2>\n {detectedUnregisteredClients\n ? <div>\n <p className={sharedStyles['explanation']}>\n These are plugins or themes we've detected that appear to be trying to load\n their own versions of Font Awesome. Loading more than one version of Font Awesome\n will almost certainly result in problems, eventually. So, even if all registered\n clients are satisfied with your configuration, they can be broken by an\n unexpected version of Font Awesome loaded by one of these unregistered clients.\n </p>\n <p className={sharedStyles['explanation']}>\n We recommend enabling the <code>Remove unregistered clients</code> option to avoid\n such conflicts. When enabled, our plugin will attempt to stop these other clients from loading\n their own versions of Font Awesome. Most likely, they will continue to operate normally,\n as long as they are compatible with the version configured here.\n </p>\n <p className={sharedStyles['explanation']}>\n If you enable <code>Remove unregistered clients</code> and the results\n produced by those unregistered clients aren't what you expect (for example, their icons are missing),\n then you could try to select different options here, trying to find a configuration\n that <em>is</em> compatible with them. Since they are <em>unregistered</em> clients, we don't know\n what their requirements are, so you kinda just have to guess. You'll know you've found a workable\n configuration when all of the registered clients are satisfied (no conflicts shown here),\n and the unregistered clients produce expected results (their icons look right to you).\n </p>\n <p className={sharedStyles['explanation']}>\n A couple other options for resolving problems with unregistered clients:\n </p>\n <ol className={ sharedStyles['explanation'] }>\n <li>\n Deactivate or replace it, if possible.\n </li>\n <li>\n Contact the developer for the unregistered client and ask them to consider updating their\n code to register with this Font Awesome Official plugin. Let them know they can reach us\n at <code>hello@fontawesome.com</code>.\n </li>\n </ol>\n <table className={classnames('widefat', 'striped')}>\n <tbody>\n <tr className={sharedStyles['table-header']}>\n <th>Name</th>\n <th>Type</th>\n <th>Loading</th>\n </tr>\n {\n props.clients.map((client, index) => (\n <tr key={index}>\n <td>\n {client.handle}\n </td>\n <td>\n {client.type}\n </td>\n <td>\n {client.src}\n </td>\n </tr>\n ))\n }\n </tbody>\n </table>\n </div>\n : <p className={ sharedStyles['explanation'] }>We detected no unregistered clients.</p>\n }\n </div>\n}\n\nUnregisteredClientsView.propTypes = {\n clients: PropTypes.array.isRequired\n}\n\nexport default UnregisteredClientsView\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './PluginVersionWarningsView.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\n\nconst PluginVersionWarningsView = props => (\n <div className={ styles['plugin-version-warnings'] } >\n <h2>Plugin Version Warnings</h2>\n <p className={ sharedStyles['explanation'] }>\n This plugin is designed to be loaded in a variety of ways by third-party plugins and themes, all in the hope\n that it makes your life easier by managing the complexity of their various requirements. But sometimes, they\n have a conflict over not just the version of Font Awesome to load, but on the version of this plugin that they\n require in order to get the job done. Behind the scenes, only one copy of the plugin is actually loaded. Any\n subsequent plugins are forced to use that version that's already loaded. Those subsequently loaded plugins\n might have a problem using the loaded version and this is where they'll warn you about that so you can\n see the problem clearly and (hopefully) quickly work out a solution.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Unfortunately, we've got one of those situations here. The likely solution is to upgrade one of these to\n its latest version. Or, if you've installed a plugin that includes the Font Awesome plugin and you've also\n installed the Font Awesome plugin directly yourself, you might be able to resolve this conflict by deactivating\n the version of the Font Awesome plugin you installed yourself.\n </p>\n <p className={ sharedStyles['explanation'] }>\n If you have reason to keep your own installation of the plugin in addition to another plugin and think you could\n resolve this problem by downgrading your own installation of the plugin, you find older releases of the plugin\n on <a href=\"https://fontawesome.com\">our website</a>.\n </p>\n <p className={ sharedStyles['explanation'] }>\n In most cases, if you've installed a plugin that embeds this plugin, you do not need to also have your own\n copy of this plugin installed, and it may be simpler to just deactivate and uninstall it, unless it's the\n only copy of the plugin.\n </p>\n <p className={ sharedStyles['explanation'] }>\n <b>Loaded Plugin Version: </b> { props.pluginVersion }\n </p>\n <table className={classnames('widefat', 'striped')}>\n <thead>\n <tr className={ sharedStyles['table-header'] }>\n <th>Name</th>\n <th>Version Requirement</th>\n </tr>\n </thead>\n <tbody>\n {\n Object.keys(props.warnings).map( (warningKey, index) => (\n <tr key={ index }>\n <td className={styles['name']}>{ props.warnings[warningKey].name }</td>\n <td className={styles['name']}>{ props.warnings[warningKey].constraint }</td>\n </tr>\n ))\n }\n </tbody>\n </table>\n </div>\n)\n\nexport default PluginVersionWarningsView\n\nPluginVersionWarningsView.propTypes = {\n warnings: PropTypes.array.isRequired,\n pluginVersion: PropTypes.string.isRequired\n}\n","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faExclamationTriangle, faClock, faSpinner, faCheck, faSkull } from '@fortawesome/free-solid-svg-icons'\nimport PropTypes from 'prop-types'\nimport styles from './V3DeprecationWarning.module.css'\nimport sharedStyles from './App.module.css'\nimport axios from 'axios'\nimport classnames from 'classnames'\n\nclass V3DeprecationWarning extends React.Component {\n\n constructor(props){\n super(props)\n\n this.state = {\n data: null,\n error: null,\n isLoading: true,\n isSubmitting: false,\n hasSubmitted: false,\n submitSuccess: false,\n submitMessage: null,\n }\n\n this.getData = this.getData.bind(this)\n this.putData = this.putData.bind(this)\n this.handlePutResponse = this.handlePutResponse.bind(this)\n this.handlePutError = this.handlePutError.bind(this)\n this.handleGetResponse = this.handleGetResponse.bind(this)\n this.handleGetError = this.handleGetError.bind(this)\n this.handleSnooze = this.handleSnooze.bind(this)\n }\n\n handleSnooze() {\n const newData = {\n snooze: true\n }\n this.putData( newData )\n }\n\n handleGetResponse(response) {\n const { status, data } = response\n if(200 === status) {\n this.setState({ data, isLoading: false })\n } else {\n this.setState({ error: new Error(\"failed to get data\"), isLoading: false })\n }\n }\n\n handlePutResponse(response) {\n const { status, data } = response\n if (200 === status) {\n this.setState({\n data,\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: true,\n submitMessage: \"Changes saved\"\n })\n } else {\n this.setState({\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: false,\n submitMessage: \"Failed to save changes\"\n })\n }\n }\n\n handlePutError(error) {\n const { response: { data: { code, message }}} = error\n let submitMessage = \"\"\n\n switch(code) {\n case 'cant_update':\n submitMessage = message\n break\n case 'rest_no_route':\n case 'rest_cookie_invalid_nonce':\n submitMessage = \"Sorry, we couldn't reach the server\"\n break\n default:\n submitMessage = \"Update failed\"\n }\n this.setState({ isSubmitting: false, hasSubmitted: true, error: null, submitSuccess: false, submitMessage })\n }\n\n handleGetError(error) {\n this.setState({ error })\n }\n\n getData() {\n axios.get(\n `${this.props.wpApiSettings.api_url}/v3deprecation`,\n {\n headers: {\n 'X-WP-Nonce': this.props.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handleGetResponse )\n .catch( this.handleGetError )\n }\n\n putData(newData){\n this.setState({ isSubmitting: true, hasSubmitted: false })\n\n axios.put(\n `${this.props.wpApiSettings.api_url}/v3deprecation`,\n newData,\n {\n headers: {\n 'X-WP-Nonce': this.props.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handlePutResponse )\n .catch( this.handlePutError )\n }\n\n componentDidMount() {\n this.setState({ isLoading: true })\n this.getData()\n }\n\n render() {\n if(this.state.error) throw this.state.error\n if( !this.state.isLoading && !this.state.data ) throw new Error('missing data')\n\n if(this.state.isLoading) {\n return null\n } else if( this.state.data ) {\n if ( false === this.state.data.v3DeprecationWarning ) {\n return null\n }\n\n const { v3DeprecationWarning: { atts, v5name, v5prefix, snooze } } = this.state.data\n\n if( snooze ) return null\n\n return <div className={styles['v3-deprecation-warning']}>\n <p className={ sharedStyles['explanation'] }>\n <FontAwesomeIcon icon={ faExclamationTriangle } size=\"2x\"/>\n </p>\n\n <p className={ sharedStyles['explanation'] }>\n Looks like you're using an <code>[icon]</code> shortcode with an old Font Awesome 3 icon name:\n <code>{ atts.name }</code>\n </p>\n <p className={ sharedStyles['explanation'] }>\n We discontinued support for <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/v3.2.1/icons/\">Font Awesome 3</a> quite some time ago,\n though we only recently inherited this WordPress plugin,\n which previously only supported up to Font Awesome 3.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Won't you jump into Font Awesome 5 with us? It's way better, and we're gonna make\n it really easy to upgrade. We've added some temporary magic to this plugin to translate your version 3 icon\n names into their version 5 equivalents.\n </p>\n <p className={ sharedStyles['explanation'] }>\n <i className=\"fas fa-magic fa-2x\"></i> <em>Bippity Boppity Boo!</em>\n </p>\n <p className={ sharedStyles['explanation'] }>\n We just turned your<br/>\n <code>[icon name=\"{ atts.name }\"]</code><br/>\n <i className={ `${ v5prefix } fa-${ v5name } fa-2x` }></i> into<br/>\n <code>[icon name=\"{ v5name }\" prefix=\"{ v5prefix }\"]</code>.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Actually, we just converted it on the fly so it would look right in your web pages,\n without changing your saved web site content. So\n to make that change permanent (and get rid of this warning), you'll need to go change any version 3 icon\n names in <code>[icon]</code> shortcodes in your pages, posts, widgets, templates, or wherever they're coming from.\n </p>\n <p className={ sharedStyles['explanation'] }>\n What's that <code>prefix</code>, you ask?\n </p>\n <p className={ sharedStyles['explanation'] }>\n Well...in Font Awesome 5, most icons come in three different styles. You use a style <em>prefix</em> to indicate\n which style you want. The default style prefix is <code>fas</code> for the Solid style.\n So when you're upgrading your shortcodes from v3 to v5 names, if you just want the Solid style icon,\n you can leave off that <code>prefix</code>. Most v3 icons map to Solid style icons in v5. But some of\n the version 3 icon names map to the <code>fab</code> style for Brands, or the <code>far</code> style for Regular.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Icons for companies like <i className=\"fab fa-apple fa-2x\"></i> Apple, or products like <i className=\"fab fa-chrome fa-2x\"></i>\n Chrome will be in the Brands style with the <code>fab</code> prefix.\n </p>\n <p className={ sharedStyles['explanation'] }>\n When you subscribe to <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/pro\">Font Awesome Pro</a>,\n you get a kajillion icons in All the Styles, including <code>fal</code>,\n the Light style.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Head over to our <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/icons?d=gallery\">Icon Gallery</a> to\n check out the vast array.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Guess what! In Font Awesome 3.2.1, you had\n 361 icons to choose from. Now, with Font Awesome 5 Free (as of v5.5.0) you've got <b>1,409</b>,\n and with Pro you get...wait for it...<b>4,566</b>. (Rounds up to a kajillion.)\n </p>\n <p className={ sharedStyles['explanation'] }>\n So have a blast upgrading. We're gonna remove this v3-to-v5 magic soon, though,\n so don't wait forever.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Clear this warning by updating those icons, or you could hit snooze to get this warning of your way for a while.\n </p>\n <div>\n <button disabled={ this.state.isSubmitting } onClick={ this.handleSnooze } className={ classnames( styles['snooze-button'], 'button', 'button-primary' ) }>\n {\n this.state.isSubmitting\n ? <FontAwesomeIcon icon={ faSpinner } spin className={ styles['submitting'] } />\n : this.state.hasSubmitted\n ? this.state.submitSuccess\n ? <FontAwesomeIcon icon={ faCheck } className={ styles['success'] }/>\n : <FontAwesomeIcon icon={ faSkull } className={ styles['fail'] }/>\n : <FontAwesomeIcon icon={ faClock } className={ styles['snooze'] }/>\n }\n <span className={ styles['label'] }>Snooze</span>\n </button>\n </div>\n\n </div>\n }\n }\n}\n\nexport default V3DeprecationWarning\n\nV3DeprecationWarning.propTypes = {\n wpApiSettings: PropTypes.object.isRequired,\n}\n\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\nimport styles from './FontAwesomeAdminView.module.css'\nimport LoadSpecView from './LoadSpecView'\nimport OptionsSetter from './OptionsSetter'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faThumbsUp, faExclamationCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'\nimport ClientRequirementsView from './ClientRequirementsView'\nimport UnregisteredClientsView from './UnregisteredClientsView'\nimport PluginVersionWarningsView from './PluginVersionWarningsView'\nimport V3DeprecationWarning from './V3DeprecationWarning'\nimport { values } from 'lodash'\n\nclass FontAwesomeAdminView extends React.Component {\n\n getStatus(hasConflict, haslockedLoadSpec) {\n if( hasConflict ) {\n if ( haslockedLoadSpec ) {\n return {\n statusLabel: 'warning',\n statusIcon: faExclamationTriangle\n }\n } else {\n return {\n statusLabel: 'conflict',\n statusIcon: faExclamationCircle\n }\n }\n } else {\n return {\n statusLabel: 'good',\n statusIcon: faThumbsUp\n }\n }\n }\n\n render(){\n const { data, putData } = this.props\n\n const hasConflict = !!data.conflicts\n\n const { statusLabel, statusIcon } = this.getStatus( hasConflict, !!data.options.lockedLoadSpec )\n\n return <div className={ styles['font-awesome-admin-view'] }>\n <h1>Font Awesome</h1>\n <div>\n <p className={ classnames( styles['status'], styles[statusLabel] ) }>\n <span className={ styles['status-label'] }>Status: </span>\n <FontAwesomeIcon className={ styles['icon'] } icon={ statusIcon }/>\n </p>\n <V3DeprecationWarning wpApiSettings={ this.props.wpApiSettings }/>\n { data.options.lockedLoadSpec &&\n <LoadSpecView spec={ data.options.lockedLoadSpec } usePro={ data.options.usePro } />\n }\n { hasConflict &&\n <ClientRequirementsView\n clientRequirements={data.conflicts.conflictingClientRequirements}\n conflict={data.conflicts.requirement}\n hasLockedLoadSpec={ !!data.options.lockedLoadSpec }\n adminClientInternal={data.adminClientInternal}\n adminClientExternal={data.adminClientExternal}\n />\n }\n <OptionsSetter\n releases={ data.releases }\n currentOptions={ data.options }\n putData={ putData }\n isSubmitting={ this.props.isSubmitting }\n hasSubmitted={ this.props.hasSubmitted }\n submitSuccess={ this.props.submitSuccess }\n submitMessage={ this.props.submitMessage }\n error={ this.props.error }\n adminClientInternal={ data.adminClientInternal }\n releaseProviderStatus={ data.releaseProviderStatus }\n />\n { !hasConflict &&\n <ClientRequirementsView\n clientRequirements={ values( data.clientRequirements ) }\n adminClientInternal={ data.adminClientInternal }\n adminClientExternal={ data.adminClientExternal }\n />\n }\n <UnregisteredClientsView clients={ data.unregisteredClients }/>\n {\n data.pluginVersionWarnings &&\n <PluginVersionWarningsView warnings={ values(data.pluginVersionWarnings) } pluginVersion={ data.pluginVersion }/>\n }\n </div>\n </div>\n }\n}\n\nexport default FontAwesomeAdminView\n\nFontAwesomeAdminView.propTypes = {\n data: PropTypes.object,\n putData: PropTypes.func.isRequired,\n wpApiSettings: PropTypes.object.isRequired\n // TODO: add the other props if we decide to keep them\n}\n","import React, { Component } from 'react'\nimport axios from 'axios'\nimport LoadingView from './LoadingView'\nimport FontAwesomeAdminView from './FontAwesomeAdminView'\n\nclass App extends Component {\n\n constructor(props) {\n super(props)\n\n const wpApiSettings = window['wpFontAwesomeOfficial']\n\n if(! wpApiSettings) {\n throw Error(\"Well, this is embarrassing. The plugin doesn't seem to be installed correctly.\")\n }\n\n this.state = {\n data: null,\n error: null,\n isLoading: true,\n isSubmitting: false,\n hasSubmitted: false,\n submitSuccess: false,\n submitMessage: null,\n wpApiSettings\n }\n\n this.getData = this.getData.bind(this)\n this.putData = this.putData.bind(this)\n this.handlePutResponse = this.handlePutResponse.bind(this)\n this.handlePutError = this.handlePutError.bind(this)\n this.handleGetResponse = this.handleGetResponse.bind(this)\n this.handleGetError = this.handleGetError.bind(this)\n }\n\n handleGetResponse(response) {\n const { status, data } = response\n if(200 === status) {\n this.setState({ data, isLoading: false })\n } else {\n this.setState({ error: new Error(\"failed to get data\"), isLoading: false })\n }\n }\n\n handlePutResponse(response) {\n const { status, data } = response\n if (200 === status) {\n this.setState({\n data,\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: true,\n submitMessage: \"Changes saved\"\n })\n } else {\n this.setState({\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: false,\n submitMessage: \"Failed to save changes\"\n })\n }\n }\n\n handlePutError(error) {\n const { response: { data: { code, message }}} = error\n let submitMessage = \"\"\n\n switch(code) {\n case 'cant_update':\n submitMessage = message\n break\n case 'rest_no_route':\n case 'rest_cookie_invalid_nonce':\n submitMessage = \"Sorry, we couldn't reach the server\"\n break\n default:\n submitMessage = \"Update failed\"\n }\n this.setState({ isSubmitting: false, hasSubmitted: true, error: null, submitSuccess: false, submitMessage })\n }\n\n handleGetError(error) {\n this.setState({ error })\n }\n\n getData() {\n axios.get(\n `${this.state.wpApiSettings.api_url}/config`,\n {\n headers: {\n 'X-WP-Nonce': this.state.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handleGetResponse )\n .catch( this.handleGetError )\n }\n\n putData(newData){\n this.setState({ isSubmitting: true, hasSubmitted: false })\n\n axios.put(\n `${this.state.wpApiSettings.api_url}/config`,\n newData,\n {\n headers: {\n 'X-WP-Nonce': this.state.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handlePutResponse )\n .catch( this.handlePutError )\n }\n\n componentDidMount() {\n this.setState({ isLoading: true })\n this.getData()\n }\n\n render() {\n if(this.state.error) throw this.state.error\n if( !this.state.isLoading && !this.state.data ) throw new Error('missing data')\n\n return (\n <div className=\"wrap\">\n {\n this.state.isLoading\n ? <LoadingView/>\n : <FontAwesomeAdminView\n data={ this.state.data }\n putData={ this.putData }\n isSubmitting={ this.state.isSubmitting }\n hasSubmitted={ this.state.hasSubmitted }\n submitSuccess={ this.state.submitSuccess }\n submitMessage={ this.state.submitMessage }\n wpApiSettings={ this.state.wpApiSettings }\n error={ this.state.error }\n />\n }\n </div>\n )\n }\n}\n\nexport default App\n","import React from 'react'\n\nclass ErrorFallbackView extends React.Component {\n\n render() {\n const { message } = this.props\n\n return <div className={'error-fallback'}>\n Sorry, we've experienced some error.\n {\n message &&\n <div className={'additional-message'}>\n { message }\n </div>\n }\n </div>\n }\n}\n\nexport default ErrorFallbackView\n","import React from 'react'\nimport ErrorFallbackView from './ErrorFallbackView'\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n error: null,\n errorInfo: null\n }\n }\n\n componentDidCatch(error, errorInfo) {\n this.setState({error, errorInfo})\n }\n\n render() {\n if (this.state.error) {\n //render fallback UI\n return <ErrorFallbackView/>\n } else {\n //when there's not an error, render children untouched\n return this.props.children\n }\n }\n}\n\nexport default ErrorBoundary\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport ErrorBoundary from './ErrorBoundary'\n\nReactDOM.render(<ErrorBoundary><App /></ErrorBoundary>, document.getElementById('font-awesome-admin'));\n"],"sourceRoot":""}
 
admin/build/static/js/main.6716b953.chunk.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{12:function(e,t,a){e.exports={"submit-status":"OptionsSetter_submit-status__2A56R",explanation:"OptionsSetter_explanation__XoKaX",success:"OptionsSetter_success__uJCv9",icon:"OptionsSetter_icon__l-DXD","release-provider-error":"OptionsSetter_release-provider-error__2Wbm4","label-hint":"OptionsSetter_label-hint__kpp6r"}},15:function(e,t,a){e.exports={label:"LoadSpecView_label__34LBg","load-spec":"LoadSpecView_load-spec__3SZje"}},16:function(e,t,a){e.exports={"client-requirements":"ClientRequirementsView_client-requirements__1v61H",conflicted:"ClientRequirementsView_conflicted__5hmJU"}},17:function(e,t,a){e.exports={"v3-deprecation-warning":"V3DeprecationWarning_v3-deprecation-warning__3EzKh","snooze-button":"V3DeprecationWarning_snooze-button__2jHLk",label:"V3DeprecationWarning_label__2oz_x"}},2:function(e,t,a){e.exports={explanation:"App_explanation__2O1a5","table-header":"App_table-header__3XfOL"}},20:function(e,t,a){e.exports={status:"FontAwesomeAdminView_status__1TvaT",icon:"FontAwesomeAdminView_icon__AUm7s",good:"FontAwesomeAdminView_good__3B1qV",conflict:"FontAwesomeAdminView_conflict__2JlC8",warning:"FontAwesomeAdminView_warning__mMIh9"}},21:function(e,t,a){e.exports={"plugin-version-warnings":"PluginVersionWarningsView_plugin-version-warnings__RYKwJ"}},24:function(e,t,a){e.exports={"unregistered-clients":"UnregisteredClientsView_unregistered-clients__4czYv"}},33:function(e,t,a){e.exports=a(68)},68:function(e,t,a){"use strict";a.r(t);var n=a(0),s=a.n(n),i=a(32),o=a.n(i),l=a(7),r=a(8),c=a(10),u=a(9),m=a(11),d=a(1),h=a(19),p=a.n(h),b=a(6),g=a(5),v=function(){return s.a.createElement("div",{className:"loading-view"},s.a.createElement(b.a,{icon:g.g,size:"4x",spin:!0}))},f=a(4),E=a.n(f),y=a(20),w=a.n(y),S=a(15),k=a.n(S),O=function(e){var t=e.usePro,a=e.spec,n=a.method,i=a.v4shim,o=a.pseudoElements,l=a.version,r=t?"Pro":"Free";return s.a.createElement("div",{className:k.a["load-spec"]},s.a.createElement("h2",null,"Current Load Specification"),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Product"),s.a.createElement("td",{className:k.a.value},"Font Awesome"," ",s.a.createElement("span",{className:E()("license",r)},r))),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Version"),s.a.createElement("td",{className:k.a.value},l)),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Method"),s.a.createElement("td",{className:k.a.value},n)),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Version 4 compatibility"),s.a.createElement("td",{className:k.a.value},i?"true":"false")),s.a.createElement("tr",null,s.a.createElement("td",{className:k.a.label},"Pseudo-elements support"),s.a.createElement("td",{className:k.a.value},o?"true":"false")))))},N=a(13),j=a(12),_=a.n(j),C=a(2),x=a.n(C),P=a(18),A="",L=["webfont","svg",A],F=["require","forbid",A],V=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={method:A,v4shim:A,pseudoElements:A,version:A,usePro:!1,removeUnregisteredClients:!1,versionOptions:null,lastProps:null},a.handleMethodSelect=a.handleMethodSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleProCheck=a.handleProCheck.bind(Object(d.a)(Object(d.a)(a))),a.handleV4Select=a.handleV4Select.bind(Object(d.a)(Object(d.a)(a))),a.handlePseudoElementsSelect=a.handlePseudoElementsSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleVersionSelect=a.handleVersionSelect.bind(Object(d.a)(Object(d.a)(a))),a.handleRemoveUnregisteredCheck=a.handleRemoveUnregisteredCheck.bind(Object(d.a)(Object(d.a)(a))),a.handleSubmitClick=a.handleSubmitClick.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleMethodSelect",value:function(e){this.setState({method:"-"===e.target.value?A:e.target.value})}},{key:"handleVersionSelect",value:function(e){this.setState({version:"-"===e.target.value?A:e.target.value})}},{key:"handlePseudoElementsSelect",value:function(e){this.setState({pseudoElements:"-"===e.target.value?A:e.target.value})}},{key:"handleProCheck",value:function(){this.setState({usePro:!this.state.usePro})}},{key:"handleRemoveUnregisteredCheck",value:function(){this.setState({removeUnregisteredClients:!this.state.removeUnregisteredClients})}},{key:"handleV4Select",value:function(e){this.setState({v4shim:"-"===e.target.value?A:e.target.value})}},{key:"handleSubmitClick",value:function(e){e.preventDefault();var t=this.props;(0,t.putData)({options:{adminClientLoadSpec:{name:t.adminClientInternal,method:this.state.method===A?void 0:this.state.method,v4shim:this.state.v4shim===A?void 0:this.state.v4shim,pseudoElements:this.state.pseudoElements===A?void 0:this.state.pseudoElements,version:this.state.version===A?void 0:this.state.version},usePro:this.state.usePro,removeUnregisteredClients:this.state.removeUnregisteredClients}})}},{key:"render",value:function(){var e=this;if(this.state.error)throw this.state.error;var t=this.props,a=t.hasSubmitted,n=t.isSubmitting,i=t.submitSuccess,o=t.submitMessage;return s.a.createElement("div",{className:"options-setter"},s.a.createElement("h2",null,"Options"),s.a.createElement("p",{className:x.a.explanation},"You can tune these options according to your preferences, as long as your preferences don't conflict with the specifications required by other plugins and themes that you've installed."),s.a.createElement("p",{className:x.a.explanation},"If conflicts are detected, they'll be shown below, and you might be able to resolve them just by choosing different options here."),s.a.createElement("table",{className:"form-table"},s.a.createElement("tbody",null,s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"method"},"Method")),s.a.createElement("td",null,s.a.createElement("select",{name:"method",onChange:this.handleMethodSelect,value:this.state.method},L.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"use-pro"},"Use Pro")),s.a.createElement("td",null,s.a.createElement("input",{name:"use-pro",checked:this.state.usePro,value:this.state.usePro,type:"checkbox",onChange:this.handleProCheck}),s.a.createElement("span",{className:_.a["label-hint"]},"Requires a subscription.",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/pro"},s.a.createElement(b.a,{icon:g.e})," Learn more"),s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/account/domains"},s.a.createElement(b.a,{icon:g.e})," Manage my allowed domains")))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"v4shim"},"Version 4 Compatibility")),s.a.createElement("td",null,s.a.createElement("select",{name:"v4shim",onChange:this.handleV4Select,value:this.state.v4shim},F.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"pseudo-elements"},"Pseudo-elements Support")),s.a.createElement("td",null,s.a.createElement("select",{name:"pseudo-elements",onChange:this.handlePseudoElementsSelect,value:this.state.pseudoElements},F.map(function(e,t){return s.a.createElement("option",{key:t,value:e},e||"-")})))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"version"},"Version")),s.a.createElement("td",null,s.a.createElement("select",{name:"version",onChange:this.handleVersionSelect,value:this.state.version},Object.keys(this.state.versionOptions).map(function(t,a){return s.a.createElement("option",{key:a,value:t},t===A?"-":e.state.versionOptions[t])})),this.props.releaseProviderStatus&&200!==this.props.releaseProviderStatus.code&&s.a.createElement("div",{className:_.a["release-provider-error"]},this.props.releaseProviderStatus.message))),s.a.createElement("tr",null,s.a.createElement("th",{scope:"row"},s.a.createElement("label",{htmlFor:"remove-unregistered"},"Remove unregistered clients")),s.a.createElement("td",null,s.a.createElement("input",{name:"remove-unregistered",checked:this.state.removeUnregisteredClients,value:this.state.removeUnregisteredClients,type:"checkbox",onChange:this.handleRemoveUnregisteredCheck}))))),s.a.createElement("p",{className:"submit"},s.a.createElement("input",{type:"submit",name:"submit",id:"submit",className:"button button-primary",value:"Save Changes",onClick:this.handleSubmitClick}),a&&(i?s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.success)},s.a.createElement(b.a,{className:_.a.icon,icon:g.a}),s.a.createElement("span",{className:_.a.explanation},o)):s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.fail)},s.a.createElement(b.a,{className:_.a.icon,icon:g.f}),s.a.createElement("span",{className:_.a.explanation},o))),n&&s.a.createElement("span",{className:E()(_.a["submit-status"],_.a.submitting)},s.a.createElement(b.a,{className:_.a.icon,icon:g.g,spin:!0}))))}}],[{key:"getDerivedStateFromProps",value:function(e,a){return e.isSubmitting||Object(P.isEqual)(a.lastProps,e)?null:{lastProps:e,pseudoElements:e.currentOptions.adminClientLoadSpec.pseudoElements||A,version:e.currentOptions.adminClientLoadSpec.version||A,v4shim:e.currentOptions.adminClientLoadSpec.v4shim||A,method:e.currentOptions.adminClientLoadSpec.method||A,usePro:!!e.currentOptions.usePro,removeUnregisteredClients:!!e.currentOptions.removeUnregisteredClients,versionOptions:t.buildVersionOptions(e)}}},{key:"buildVersionOptions",value:function(e){var t=e.releases,a=t.available,n=t.latest_version,s=t.previous_version;return a.reduce(function(e,t){return e[t]=n===t?"".concat(t," (latest)"):s===t?"".concat(t," (previous minor release)"):t,e},Object(N.a)({},A,"-"))}}]),t}(s.a.Component),R=a(16),D=a.n(R),q=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"hasAdditionalClients",value:function(){var e=this;return!!Object(P.find)(this.props.clientRequirements,function(t){return t.name!==e.props.adminClientInternal})}},{key:"render",value:function(){var e=this,t=this.props,a=t.conflict,n=t.hasLockedLoadSpec,i=!!a;return s.a.createElement("div",{className:D.a["client-requirements"]},i?s.a.createElement("h2",null,"Conflicting Requirements"):s.a.createElement("h2",null,"Client Requirements"),this.hasAdditionalClients()?s.a.createElement("div",null,i?s.a.createElement("div",null,s.a.createElement("p",{className:x.a.explanation},"We found conflicting requirements between two or more plugins or themes, shown below."),n?s.a.createElement("p",{className:x.a.explanation},"We'll continue to load the last good load specification you've locked in, so things will keep working the way they've been working. However, until you resolve the conflict, whatever clients have introduced these new conflicting requirements may not work as expected."):s.a.createElement("p",{className:x.a.explanation},"Since you haven't yet locked in a working configuration, we can't load Font Awesome at all. So, until you resolve these conflicts, Font Awesome won't work!")):s.a.createElement("p",{className:x.a.explanation},"Here are some other clients of the Font Awesome plugin, such as plugins or themes, along with their Font Awesome requirements shown side-by-side with your preferences. If you're trying to resolve a conflict, you might find the culprit at a glance here."),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("thead",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"method"===a))},"Method"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"version"===a))},"Version"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"v4shim"===a))},"V4 Compat"),s.a.createElement("th",{className:E()(Object(N.a)({},D.a.conflicted,"pseudoElements"===a))},"Pseudo-elements"))),s.a.createElement("tbody",null,this.props.clientRequirements.map(function(t,n){return s.a.createElement("tr",{key:n},s.a.createElement("td",null,t.name===e.props.adminClientInternal?e.props.adminClientExternal:t.name),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"method"===a))},t.method?t.method:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"version"===a))},t.version?t.version:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"v4shim"===a))},t.v4shim?t.v4shim:"-"),s.a.createElement("td",{className:E()(Object(N.a)({},D.a.conflicted,"pseudoElements"===a))},t.pseudoElements?t.pseudoElements:"-"))})))):s.a.createElement("p",{className:x.a.explanation},"We don't detect any other active clients (like themes or plugins) that have registered requirements for Font Awesome."))}}]),t}(s.a.Component),W=a(24),I=a.n(W),M=function(e){var t=e.clients.length>0;return s.a.createElement("div",{className:E()(I.a["unregistered-clients"],Object(N.a)({},I.a["none-detected"],!t))},s.a.createElement("h2",null,"Unregistered Clients"),t?s.a.createElement("div",null,s.a.createElement("p",{className:x.a.explanation},"These are plugins or themes we've detected that appear to be trying to load their own versions of Font Awesome. Loading more than one version of Font Awesome will almost certainly result in problems, eventually. So, even if all registered clients are satisfied with your configuration, they can be broken by an unexpected version of Font Awesome loaded by one of these unregistered clients."),s.a.createElement("p",{className:x.a.explanation},"We recommend enabling the ",s.a.createElement("code",null,"Remove unregistered clients")," option to avoid such conflicts. When enabled, our plugin will attempt to stop these other clients from loading their own versions of Font Awesome. Most likely, they will continue to operate normally, as long as they are compatible with the version configured here."),s.a.createElement("p",{className:x.a.explanation},"If you enable ",s.a.createElement("code",null,"Remove unregistered clients")," and the results produced by those unregistered clients aren't what you expect (for example, their icons are missing), then you could try to select different options here, trying to find a configuration that ",s.a.createElement("em",null,"is")," compatible with them. Since they are ",s.a.createElement("em",null,"unregistered")," clients, we don't know what their requirements are, so you kinda just have to guess. You'll know you've found a workable configuration when all of the registered clients are satisfied (no conflicts shown here), and the unregistered clients produce expected results (their icons look right to you)."),s.a.createElement("p",{className:x.a.explanation},"A couple other options for resolving problems with unregistered clients:"),s.a.createElement("ol",{className:x.a.explanation},s.a.createElement("li",null,"Deactivate or replace it, if possible."),s.a.createElement("li",null,"Contact the developer for the unregistered client and ask them to consider updating their code to register with this Font Awesome Official plugin. Let them know they can reach us at ",s.a.createElement("code",null,"hello@fontawesome.com"),".")),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("tbody",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",null,"Type"),s.a.createElement("th",null,"Loading")),e.clients.map(function(e,t){return s.a.createElement("tr",{key:t},s.a.createElement("td",null,e.handle),s.a.createElement("td",null,e.type),s.a.createElement("td",null,e.src))})))):s.a.createElement("p",{className:x.a.explanation},"We detected no unregistered clients."))},U=a(21),G=a.n(U),z=function(e){return s.a.createElement("div",{className:G.a["plugin-version-warnings"]},s.a.createElement("h2",null,"Plugin Version Warnings"),s.a.createElement("p",{className:x.a.explanation},"This plugin is designed to be loaded in a variety of ways by third-party plugins and themes, all in the hope that it makes your life easier by managing the complexity of their various requirements. But sometimes, they have a conflict over not just the version of Font Awesome to load, but on the version of this plugin that they require in order to get the job done. Behind the scenes, only one copy of the plugin is actually loaded. Any subsequent plugins are forced to use that version that's already loaded. Those subsequently loaded plugins might have a problem using the loaded version and this is where they'll warn you about that so you can see the problem clearly and (hopefully) quickly work out a solution."),s.a.createElement("p",{className:x.a.explanation},"Unfortunately, we've got one of those situations here. The likely solution is to upgrade one of these to its latest version. Or, if you've installed a plugin that includes the Font Awesome plugin and you've also installed the Font Awesome plugin directly yourself, you might be able to resolve this conflict by deactivating the version of the Font Awesome plugin you installed yourself."),s.a.createElement("p",{className:x.a.explanation},"If you have reason to keep your own installation of the plugin in addition to another plugin and think you could resolve this problem by downgrading your own installation of the plugin, you find older releases of the plugin on ",s.a.createElement("a",{href:"https://fontawesome.com"},"our website"),"."),s.a.createElement("p",{className:x.a.explanation},"In most cases, if you've installed a plugin that embeds this plugin, you do not need to also have your own copy of this plugin installed, and it may be simpler to just deactivate and uninstall it, unless it's the only copy of the plugin."),s.a.createElement("p",{className:x.a.explanation},s.a.createElement("b",null,"Loaded Plugin Version: ")," ",e.pluginVersion),s.a.createElement("table",{className:E()("widefat","striped")},s.a.createElement("thead",null,s.a.createElement("tr",{className:x.a["table-header"]},s.a.createElement("th",null,"Name"),s.a.createElement("th",null,"Version Requirement"))),s.a.createElement("tbody",null,Object.keys(e.warnings).map(function(t,a){return s.a.createElement("tr",{key:a},s.a.createElement("td",{className:G.a.name},e.warnings[t].name),s.a.createElement("td",{className:G.a.name},e.warnings[t].constraint))}))))},B=a(17),T=a.n(B),X=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={data:null,error:null,isLoading:!0,isSubmitting:!1,hasSubmitted:!1,submitSuccess:!1,submitMessage:null},a.getData=a.getData.bind(Object(d.a)(Object(d.a)(a))),a.putData=a.putData.bind(Object(d.a)(Object(d.a)(a))),a.handlePutResponse=a.handlePutResponse.bind(Object(d.a)(Object(d.a)(a))),a.handlePutError=a.handlePutError.bind(Object(d.a)(Object(d.a)(a))),a.handleGetResponse=a.handleGetResponse.bind(Object(d.a)(Object(d.a)(a))),a.handleGetError=a.handleGetError.bind(Object(d.a)(Object(d.a)(a))),a.handleSnooze=a.handleSnooze.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleSnooze",value:function(){this.putData({snooze:!0})}},{key:"handleGetResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isLoading:!1}):this.setState({error:new Error("failed to get data"),isLoading:!1})}},{key:"handlePutResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!0,submitMessage:"Changes saved"}):this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:"Failed to save changes"})}},{key:"handlePutError",value:function(e){var t=e.response.data,a=t.code,n=t.message,s="";switch(a){case"cant_update":s=n;break;case"rest_no_route":case"rest_cookie_invalid_nonce":s="Sorry, we couldn't reach the server";break;default:s="Update failed"}this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:s})}},{key:"handleGetError",value:function(e){this.setState({error:e})}},{key:"getData",value:function(){p.a.get("".concat(this.props.wpApiSettings.api_url,"/v3deprecation"),{headers:{"X-WP-Nonce":this.props.wpApiSettings.api_nonce}}).then(this.handleGetResponse).catch(this.handleGetError)}},{key:"putData",value:function(e){this.setState({isSubmitting:!0,hasSubmitted:!1}),p.a.put("".concat(this.props.wpApiSettings.api_url,"/v3deprecation"),e,{headers:{"X-WP-Nonce":this.props.wpApiSettings.api_nonce}}).then(this.handlePutResponse).catch(this.handlePutError)}},{key:"componentDidMount",value:function(){this.setState({isLoading:!0}),this.getData()}},{key:"render",value:function(){if(this.state.error)throw this.state.error;if(!this.state.isLoading&&!this.state.data)throw new Error("missing data");if(this.state.isLoading)return null;if(this.state.data){if(!1===this.state.data.v3DeprecationWarning)return null;var e=this.state.data.v3DeprecationWarning,t=e.atts,a=e.v5name,n=e.v5prefix;return e.snooze?null:s.a.createElement("div",{className:T.a["v3-deprecation-warning"]},s.a.createElement("p",{className:x.a.explanation},s.a.createElement(b.a,{icon:g.d,size:"2x"})),s.a.createElement("p",{className:x.a.explanation},"Looks like you're using an ",s.a.createElement("code",null,"[icon]")," shortcode with an old Font Awesome 3 icon name:",s.a.createElement("code",null,t.name)),s.a.createElement("p",{className:x.a.explanation},"We discontinued support for ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/v3.2.1/icons/"},"Font Awesome 3")," quite some time ago, though we only recently inherited this WordPress plugin, which previously only supported up to Font Awesome 3."),s.a.createElement("p",{className:x.a.explanation},"Won't you jump into Font Awesome 5 with us? It's way better, and we're gonna make it really easy to upgrade. We've added some temporary magic to this plugin to translate your version 3 icon names into their version 5 equivalents."),s.a.createElement("p",{className:x.a.explanation},s.a.createElement("i",{className:"fas fa-magic fa-2x"})," ",s.a.createElement("em",null,"Bippity Boppity Boo!")),s.a.createElement("p",{className:x.a.explanation},"We just turned your",s.a.createElement("br",null),s.a.createElement("code",null,'[icon name="',t.name,'"]'),s.a.createElement("br",null),s.a.createElement("i",{className:"".concat(n," fa-").concat(a," fa-2x")})," into",s.a.createElement("br",null),s.a.createElement("code",null,'[icon name="',a,'" prefix="',n,'"]'),"."),s.a.createElement("p",{className:x.a.explanation},"Actually, we just converted it on the fly so it would look right in your web pages, without changing your saved web site content. So to make that change permanent (and get rid of this warning), you'll need to go change any version 3 icon names in ",s.a.createElement("code",null,"[icon]")," shortcodes in your pages, posts, widgets, templates, or wherever they're coming from."),s.a.createElement("p",{className:x.a.explanation},"What's that ",s.a.createElement("code",null,"prefix"),", you ask?"),s.a.createElement("p",{className:x.a.explanation},"Well...in Font Awesome 5, most icons come in three different styles. You use a style ",s.a.createElement("em",null,"prefix")," to indicate which style you want. The default style prefix is ",s.a.createElement("code",null,"fas")," for the Solid style. So when you're upgrading your shortcodes from v3 to v5 names, if you just want the Solid style icon, you can leave off that ",s.a.createElement("code",null,"prefix"),". Most v3 icons map to Solid style icons in v5. But some of the version 3 icon names map to the ",s.a.createElement("code",null,"fab")," style for Brands, or the ",s.a.createElement("code",null,"far")," style for Regular."),s.a.createElement("p",{className:x.a.explanation},"Icons for companies like ",s.a.createElement("i",{className:"fab fa-apple fa-2x"})," Apple, or products like ",s.a.createElement("i",{className:"fab fa-chrome fa-2x"}),"Chrome will be in the Brands style with the ",s.a.createElement("code",null,"fab")," prefix."),s.a.createElement("p",{className:x.a.explanation},"When you subscribe to ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/pro"},"Font Awesome Pro"),", you get a kajillion icons in All the Styles, including ",s.a.createElement("code",null,"fal"),", the Light style."),s.a.createElement("p",{className:x.a.explanation},"Head over to our ",s.a.createElement("a",{rel:"noopener noreferrer",target:"_blank",href:"https://fontawesome.com/icons?d=gallery"},"Icon Gallery")," to check out the vast array."),s.a.createElement("p",{className:x.a.explanation},"Guess what! In Font Awesome 3.2.1, you had 361 icons to choose from. Now, with Font Awesome 5 Free (as of v5.5.0) you've got ",s.a.createElement("b",null,"1,409"),", and with Pro you get...wait for it...",s.a.createElement("b",null,"4,566"),". (Rounds up to a kajillion.)"),s.a.createElement("p",{className:x.a.explanation},"So have a blast upgrading. We're gonna remove this v3-to-v5 magic soon, though, so don't wait forever."),s.a.createElement("p",{className:x.a.explanation},"Clear this warning by updating those icons, or you could hit snooze to get this warning of your way for a while."),s.a.createElement("div",null,s.a.createElement("button",{disabled:this.state.isSubmitting,onClick:this.handleSnooze,className:E()(T.a["snooze-button"],"button","button-primary")},this.state.isSubmitting?s.a.createElement(b.a,{icon:g.g,spin:!0,className:T.a.submitting}):this.state.hasSubmitted?this.state.submitSuccess?s.a.createElement(b.a,{icon:g.a,className:T.a.success}):s.a.createElement(b.a,{icon:g.f,className:T.a.fail}):s.a.createElement(b.a,{icon:g.b,className:T.a.snooze}),s.a.createElement("span",{className:T.a.label},"Snooze"))))}}}]),t}(s.a.Component),J=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"getStatus",value:function(e,t){return e?t?{statusLabel:"warning",statusIcon:g.d}:{statusLabel:"conflict",statusIcon:g.c}:{statusLabel:"good",statusIcon:g.h}}},{key:"render",value:function(){var e=this.props,t=e.data,a=e.putData,n=!!t.conflicts,i=this.getStatus(n,!!t.options.lockedLoadSpec),o=i.statusLabel,l=i.statusIcon;return s.a.createElement("div",{className:w.a["font-awesome-admin-view"]},s.a.createElement("h1",null,"Font Awesome"),s.a.createElement("div",null,s.a.createElement("p",{className:E()(w.a.status,w.a[o])},s.a.createElement("span",{className:w.a["status-label"]},"Status: "),s.a.createElement(b.a,{className:w.a.icon,icon:l})),s.a.createElement(X,{wpApiSettings:this.props.wpApiSettings}),t.options.lockedLoadSpec&&s.a.createElement(O,{spec:t.options.lockedLoadSpec,usePro:t.options.usePro}),n&&s.a.createElement(q,{clientRequirements:t.conflicts.conflictingClientRequirements,conflict:t.conflicts.requirement,hasLockedLoadSpec:!!t.options.lockedLoadSpec,adminClientInternal:t.adminClientInternal,adminClientExternal:t.adminClientExternal}),s.a.createElement(V,{releases:t.releases,currentOptions:t.options,putData:a,isSubmitting:this.props.isSubmitting,hasSubmitted:this.props.hasSubmitted,submitSuccess:this.props.submitSuccess,submitMessage:this.props.submitMessage,error:this.props.error,adminClientInternal:t.adminClientInternal,releaseProviderStatus:t.releaseProviderStatus}),!n&&s.a.createElement(q,{clientRequirements:Object(P.values)(t.clientRequirements),adminClientInternal:t.adminClientInternal,adminClientExternal:t.adminClientExternal}),s.a.createElement(M,{clients:t.unregisteredClients}),t.pluginVersionWarnings&&s.a.createElement(z,{warnings:Object(P.values)(t.pluginVersionWarnings),pluginVersion:t.pluginVersion})))}}]),t}(s.a.Component),H=function(e){function t(e){var a;Object(l.a)(this,t),a=Object(c.a)(this,Object(u.a)(t).call(this,e));var n=window.wpFontAwesomeOfficial;if(!n)throw Error("Well, this is embarrassing. The plugin doesn't seem to be installed correctly.");return a.state={data:null,error:null,isLoading:!0,isSubmitting:!1,hasSubmitted:!1,submitSuccess:!1,submitMessage:null,wpApiSettings:n},a.getData=a.getData.bind(Object(d.a)(Object(d.a)(a))),a.putData=a.putData.bind(Object(d.a)(Object(d.a)(a))),a.handlePutResponse=a.handlePutResponse.bind(Object(d.a)(Object(d.a)(a))),a.handlePutError=a.handlePutError.bind(Object(d.a)(Object(d.a)(a))),a.handleGetResponse=a.handleGetResponse.bind(Object(d.a)(Object(d.a)(a))),a.handleGetError=a.handleGetError.bind(Object(d.a)(Object(d.a)(a))),a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"handleGetResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isLoading:!1}):this.setState({error:new Error("failed to get data"),isLoading:!1})}},{key:"handlePutResponse",value:function(e){var t=e.status,a=e.data;200===t?this.setState({data:a,isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!0,submitMessage:"Changes saved"}):this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:"Failed to save changes"})}},{key:"handlePutError",value:function(e){var t=e.response.data,a=t.code,n=t.message,s="";switch(a){case"cant_update":s=n;break;case"rest_no_route":case"rest_cookie_invalid_nonce":s="Sorry, we couldn't reach the server";break;default:s="Update failed"}this.setState({isSubmitting:!1,hasSubmitted:!0,error:null,submitSuccess:!1,submitMessage:s})}},{key:"handleGetError",value:function(e){this.setState({error:e})}},{key:"getData",value:function(){p.a.get("".concat(this.state.wpApiSettings.api_url,"/config"),{headers:{"X-WP-Nonce":this.state.wpApiSettings.api_nonce}}).then(this.handleGetResponse).catch(this.handleGetError)}},{key:"putData",value:function(e){this.setState({isSubmitting:!0,hasSubmitted:!1}),p.a.put("".concat(this.state.wpApiSettings.api_url,"/config"),e,{headers:{"X-WP-Nonce":this.state.wpApiSettings.api_nonce}}).then(this.handlePutResponse).catch(this.handlePutError)}},{key:"componentDidMount",value:function(){this.setState({isLoading:!0}),this.getData()}},{key:"render",value:function(){if(this.state.error)throw this.state.error;if(!this.state.isLoading&&!this.state.data)throw new Error("missing data");return s.a.createElement("div",{className:"wrap"},this.state.isLoading?s.a.createElement(v,null):s.a.createElement(J,{data:this.state.data,putData:this.putData,isSubmitting:this.state.isSubmitting,hasSubmitted:this.state.hasSubmitted,submitSuccess:this.state.submitSuccess,submitMessage:this.state.submitMessage,wpApiSettings:this.state.wpApiSettings,error:this.state.error}))}}]),t}(n.Component),Y=function(e){function t(){return Object(l.a)(this,t),Object(c.a)(this,Object(u.a)(t).apply(this,arguments))}return Object(m.a)(t,e),Object(r.a)(t,[{key:"render",value:function(){var e=this.props.message;return s.a.createElement("div",{className:"error-fallback"},"Sorry, we've experienced some error.",e&&s.a.createElement("div",{className:"additional-message"},e))}}]),t}(s.a.Component),K=function(e){function t(e){var a;return Object(l.a)(this,t),(a=Object(c.a)(this,Object(u.a)(t).call(this,e))).state={error:null,errorInfo:null},a}return Object(m.a)(t,e),Object(r.a)(t,[{key:"componentDidCatch",value:function(e,t){this.setState({error:e,errorInfo:t})}},{key:"render",value:function(){return this.state.error?s.a.createElement(Y,null):this.props.children}}]),t}(s.a.Component);o.a.render(s.a.createElement(K,null,s.a.createElement(H,null)),document.getElementById("font-awesome-admin"))}},[[33,2,1]]]);
2
+ //# sourceMappingURL=main.6716b953.chunk.js.map
admin/build/static/js/main.6716b953.chunk.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["OptionsSetter.module.css","LoadSpecView.module.css","ClientRequirementsView.module.css","V3DeprecationWarning.module.css","App.module.css","FontAwesomeAdminView.module.css","PluginVersionWarningsView.module.css","UnregisteredClientsView.module.css","LoadingView.js","LoadSpecView.js","OptionsSetter.js","ClientRequirementsView.js","UnregisteredClientsView.js","PluginVersionWarningsView.js","V3DeprecationWarning.js","FontAwesomeAdminView.js","App.js","ErrorFallbackView.js","ErrorBoundary.js","index.js"],"names":["module","exports","submit-status","explanation","success","icon","release-provider-error","label-hint","label","load-spec","client-requirements","conflicted","v3-deprecation-warning","snooze-button","table-header","status","good","conflict","warning","plugin-version-warnings","unregistered-clients","LoadingView","react_default","a","createElement","className","index_es","faSpinner","size","spin","LoadSpecView","props","usePro","_props$spec","spec","method","v4shim","pseudoElements","version","licenseType","styles","classnames","UNSPECIFIED","METHOD_OPTIONS","REQUIRE_FORBID_OPTIONS","OptionsSetter","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","state","removeUnregisteredClients","versionOptions","lastProps","handleMethodSelect","bind","assertThisInitialized","handleProCheck","handleV4Select","handlePseudoElementsSelect","handleVersionSelect","handleRemoveUnregisteredCheck","handleSubmitClick","e","setState","target","value","preventDefault","_this$props","putData","options","adminClientLoadSpec","name","adminClientInternal","undefined","_this2","error","_this$props2","hasSubmitted","isSubmitting","submitSuccess","submitMessage","sharedStyles","scope","htmlFor","onChange","map","index","key","checked","type","rel","href","faExternalLinkAlt","option","keys","releaseProviderStatus","code","message","id","onClick","faCheck","faSkull","nextProps","prevState","isEqual","currentOptions","buildVersionOptions","_props$releases","releases","available","latest_version","previous_version","reduce","acc","concat","defineProperty","React","Component","ClientRequirementsView","find","clientRequirements","client","hasLockedLoadSpec","hasConflict","hasAdditionalClients","adminClientExternal","UnregisteredClientsView","detectedUnregisteredClients","clients","length","handle","src","PluginVersionWarningsView","pluginVersion","warnings","warningKey","constraint","V3DeprecationWarning","data","isLoading","getData","handlePutResponse","handlePutError","handleGetResponse","handleGetError","handleSnooze","snooze","response","Error","_error$response$data","axios","get","wpApiSettings","api_url","headers","X-WP-Nonce","api_nonce","then","catch","newData","put","v3DeprecationWarning","_this$state$data$v3De","atts","v5name","v5prefix","faExclamationTriangle","disabled","faClock","FontAwesomeAdminView","haslockedLoadSpec","statusLabel","statusIcon","faExclamationCircle","faThumbsUp","conflicts","_this$getStatus","getStatus","lockedLoadSpec","src_V3DeprecationWarning","src_LoadSpecView","src_ClientRequirementsView","conflictingClientRequirements","requirement","src_OptionsSetter","values","src_UnregisteredClientsView","unregisteredClients","pluginVersionWarnings","src_PluginVersionWarningsView","App","window","src_FontAwesomeAdminView","ErrorFallbackView","ErrorBoundary","errorInfo","src_ErrorFallbackView","children","ReactDOM","render","src_ErrorBoundary","src_App","document","getElementById"],"mappings":"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","file":"static/js/main.6716b953.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"submit-status\":\"OptionsSetter_submit-status__2A56R\",\"explanation\":\"OptionsSetter_explanation__XoKaX\",\"success\":\"OptionsSetter_success__uJCv9\",\"icon\":\"OptionsSetter_icon__l-DXD\",\"release-provider-error\":\"OptionsSetter_release-provider-error__2Wbm4\",\"label-hint\":\"OptionsSetter_label-hint__kpp6r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"LoadSpecView_label__34LBg\",\"load-spec\":\"LoadSpecView_load-spec__3SZje\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"client-requirements\":\"ClientRequirementsView_client-requirements__1v61H\",\"conflicted\":\"ClientRequirementsView_conflicted__5hmJU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"v3-deprecation-warning\":\"V3DeprecationWarning_v3-deprecation-warning__3EzKh\",\"snooze-button\":\"V3DeprecationWarning_snooze-button__2jHLk\",\"label\":\"V3DeprecationWarning_label__2oz_x\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"explanation\":\"App_explanation__2O1a5\",\"table-header\":\"App_table-header__3XfOL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"status\":\"FontAwesomeAdminView_status__1TvaT\",\"icon\":\"FontAwesomeAdminView_icon__AUm7s\",\"good\":\"FontAwesomeAdminView_good__3B1qV\",\"conflict\":\"FontAwesomeAdminView_conflict__2JlC8\",\"warning\":\"FontAwesomeAdminView_warning__mMIh9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"plugin-version-warnings\":\"PluginVersionWarningsView_plugin-version-warnings__RYKwJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"unregistered-clients\":\"UnregisteredClientsView_unregistered-clients__4czYv\"};","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons'\n\nexport default () =>\n <div className=\"loading-view\">\n <FontAwesomeIcon icon={ faSpinner } size=\"4x\" spin />\n </div>","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\nimport styles from './LoadSpecView.module.css'\n\nconst PRODUCT_BASE_NAME = 'Font Awesome'\n\nconst LoadSpecView = props => {\n const { usePro, spec: {\n method,\n v4shim,\n pseudoElements,\n version,\n }} = props\n\n const licenseType = usePro ? 'Pro' : 'Free'\n\n return <div className={styles['load-spec']}>\n <h2>Current Load Specification</h2>\n <table className={classnames('widefat', 'striped')}>\n <tbody>\n <tr>\n <td className={styles['label']}>Product</td>\n <td className={styles['value']}>{PRODUCT_BASE_NAME} <span\n className={classnames('license', licenseType)}>{ licenseType }</span></td>\n </tr>\n <tr>\n <td className={styles['label']}>Version</td>\n <td className={styles['value']}>{version}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Method</td>\n <td className={styles['value']}>{method}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Version 4 compatibility</td>\n <td className={styles['value']}>{v4shim ? 'true' : 'false'}</td>\n </tr>\n <tr>\n <td className={styles['label']}>Pseudo-elements support</td>\n <td className={styles['value']}>{pseudoElements ? 'true' : 'false'}</td>\n </tr>\n </tbody>\n </table>\n </div>\n}\n\nexport default LoadSpecView\n\nLoadSpecView.propTypes = {\n spec: PropTypes.object.isRequired,\n usePro: PropTypes.bool\n}\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinner, faCheck, faSkull, faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'\nimport styles from './OptionsSetter.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\nimport { isEqual } from 'lodash'\n\nconst UNSPECIFIED = ''\nconst METHOD_OPTIONS = ['webfont', 'svg', UNSPECIFIED]\nconst REQUIRE_FORBID_OPTIONS = ['require', 'forbid', UNSPECIFIED]\n\nclass OptionsSetter extends React.Component {\n constructor(props){\n super(props)\n\n this.state = {\n method: UNSPECIFIED,\n v4shim: UNSPECIFIED,\n pseudoElements: UNSPECIFIED,\n version: UNSPECIFIED,\n usePro: false,\n removeUnregisteredClients: false,\n versionOptions: null,\n lastProps: null\n }\n\n this.handleMethodSelect = this.handleMethodSelect.bind(this)\n this.handleProCheck = this.handleProCheck.bind(this)\n this.handleV4Select = this.handleV4Select.bind(this)\n this.handlePseudoElementsSelect = this.handlePseudoElementsSelect.bind(this)\n this.handleVersionSelect = this.handleVersionSelect.bind(this)\n this.handleRemoveUnregisteredCheck = this.handleRemoveUnregisteredCheck.bind(this)\n this.handleSubmitClick = this.handleSubmitClick.bind(this)\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if( nextProps.isSubmitting || isEqual(prevState.lastProps, nextProps) ) {\n return null\n }\n\n const newState = {\n lastProps: nextProps,\n pseudoElements: nextProps.currentOptions.adminClientLoadSpec.pseudoElements || UNSPECIFIED,\n version: nextProps.currentOptions.adminClientLoadSpec.version || UNSPECIFIED,\n v4shim: nextProps.currentOptions.adminClientLoadSpec.v4shim || UNSPECIFIED,\n method: nextProps.currentOptions.adminClientLoadSpec.method || UNSPECIFIED,\n usePro: !!nextProps.currentOptions.usePro,\n removeUnregisteredClients: !!nextProps.currentOptions.removeUnregisteredClients,\n versionOptions: OptionsSetter.buildVersionOptions(nextProps)\n }\n\n return newState\n }\n\n static buildVersionOptions(props) {\n const { releases: { available, latest_version, previous_version } } = props\n\n return available.reduce((acc, version) => {\n if( latest_version === version ) {\n acc[version] = `${ version } (latest)`\n } else if ( previous_version === version ) {\n acc[version] = `${ version } (previous minor release)`\n } else {\n acc[version] = version\n }\n return acc\n }, { [UNSPECIFIED]: '-' })\n }\n\n handleMethodSelect(e){\n this.setState({ method: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleVersionSelect(e){\n this.setState({ version: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handlePseudoElementsSelect(e){\n this.setState({ pseudoElements: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleProCheck(){\n this.setState({ usePro: !this.state.usePro })\n }\n\n handleRemoveUnregisteredCheck(){\n this.setState({ removeUnregisteredClients: !this.state.removeUnregisteredClients })\n }\n\n handleV4Select(e){\n this.setState({ v4shim: e.target.value === '-' ? UNSPECIFIED : e.target.value })\n }\n\n handleSubmitClick(e) {\n e.preventDefault()\n\n const { putData, adminClientInternal } = this.props\n\n putData({\n options: {\n adminClientLoadSpec: {\n name: adminClientInternal,\n method: this.state.method === UNSPECIFIED ? undefined : this.state.method,\n v4shim: this.state.v4shim === UNSPECIFIED ? undefined : this.state.v4shim,\n pseudoElements: this.state.pseudoElements === UNSPECIFIED ? undefined : this.state.pseudoElements,\n version: this.state.version === UNSPECIFIED ? undefined : this.state.version,\n },\n usePro: this.state.usePro,\n removeUnregisteredClients: this.state.removeUnregisteredClients\n }\n })\n }\n\n render() {\n if(this.state.error) throw this.state.error\n\n const { hasSubmitted, isSubmitting, submitSuccess, submitMessage } = this.props\n\n return <div className=\"options-setter\">\n <h2>Options</h2>\n <p className={ sharedStyles['explanation'] }>\n You can tune these options according to your preferences, as long as your preferences\n don't conflict with the specifications required by other plugins and themes that you've installed.\n </p>\n <p className={ sharedStyles['explanation'] }>\n If conflicts are detected, they'll be shown below, and\n you might be able to resolve them just by choosing different options here.\n </p>\n <table className=\"form-table\">\n <tbody>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"method\">Method</label>\n </th>\n <td>\n <select name=\"method\" onChange={ this.handleMethodSelect } value={ this.state.method }>\n {\n METHOD_OPTIONS.map((method, index) => {\n return <option key={ index } value={ method }>{ method ? method : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"use-pro\">Use Pro</label>\n </th>\n <td>\n <input name=\"use-pro\" checked={ this.state.usePro } value={ this.state.usePro } type=\"checkbox\" onChange={ this.handleProCheck }/>\n <span className={styles[\"label-hint\"]}>\n Requires a subscription.\n <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/pro\"><FontAwesomeIcon icon={faExternalLinkAlt} /> Learn more</a>\n <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/account/domains\"><FontAwesomeIcon icon={faExternalLinkAlt} /> Manage my allowed domains</a>\n </span>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"v4shim\">Version 4 Compatibility</label>\n </th>\n <td>\n <select name=\"v4shim\" onChange={ this.handleV4Select } value={ this.state.v4shim }>\n {\n REQUIRE_FORBID_OPTIONS.map((option, index) => {\n return <option key={ index } value={ option }>{ option ? option : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"pseudo-elements\">Pseudo-elements Support</label>\n </th>\n <td>\n <select name=\"pseudo-elements\" onChange={ this.handlePseudoElementsSelect } value={ this.state.pseudoElements }>\n {\n REQUIRE_FORBID_OPTIONS.map((option, index) => {\n return <option key={ index } value={ option }>{ option ? option : '-' }</option>\n })\n }\n </select>\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"version\">Version</label>\n </th>\n <td>\n <select name=\"version\" onChange={ this.handleVersionSelect } value={ this.state.version }>\n {\n Object.keys(this.state.versionOptions).map((version, index) => {\n return <option key={ index } value={ version }>\n { version === UNSPECIFIED ? '-' : this.state.versionOptions[version] }\n </option>\n })\n }\n </select>\n {\n this.props.releaseProviderStatus && this.props.releaseProviderStatus.code !== 200 &&\n <div className={ styles['release-provider-error'] }>\n { this.props.releaseProviderStatus.message }\n </div>\n }\n </td>\n </tr>\n <tr>\n <th scope=\"row\">\n <label htmlFor=\"remove-unregistered\">Remove unregistered clients</label>\n </th>\n <td>\n <input\n name=\"remove-unregistered\"\n checked={ this.state.removeUnregisteredClients }\n value={ this.state.removeUnregisteredClients }\n type=\"checkbox\"\n onChange={ this.handleRemoveUnregisteredCheck }\n />\n </td>\n </tr>\n </tbody>\n </table>\n <p className=\"submit\">\n <input\n type=\"submit\"\n name=\"submit\"\n id=\"submit\"\n className=\"button button-primary\"\n value=\"Save Changes\"\n onClick={ this.handleSubmitClick }\n />\n { hasSubmitted &&\n ( submitSuccess\n ? <span className={ classnames(styles['submit-status'], styles['success']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={ faCheck } />\n <span className={ styles['explanation'] }>\n { submitMessage }\n </span>\n </span>\n : <span className={ classnames(styles['submit-status'], styles['fail']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={ faSkull } />\n <span className={ styles['explanation'] }>\n { submitMessage }\n </span>\n </span>\n )\n }\n {isSubmitting &&\n <span className={ classnames(styles['submit-status'], styles['submitting']) }>\n <FontAwesomeIcon className={ styles['icon'] } icon={faSpinner} spin/>\n </span>\n }\n </p>\n </div>\n\n }\n}\n\nexport default OptionsSetter\n\nOptionsSetter.propTypes = {\n putData: PropTypes.func.isRequired,\n currentOptions: PropTypes.object.isRequired,\n releases: PropTypes.object.isRequired,\n adminClientInternal: PropTypes.string.isRequired,\n releaseProviderStatus: PropTypes.object,\n}\n","import React from 'react'\nimport styles from './ClientRequirementsView.module.css'\nimport sharedStyles from './App.module.css'\nimport { find } from 'lodash'\nimport classnames from 'classnames'\nimport PropTypes from 'prop-types'\n\n// TODO: refactor this with the one in OptionsSetter\nconst UNSPECIFIED_INDICATOR = '-'\n\nclass ClientRequirementsView extends React.Component {\n\n hasAdditionalClients() {\n return !!find(this.props.clientRequirements, client => client.name !== this.props.adminClientInternal )\n }\n\n render() {\n const { conflict, hasLockedLoadSpec } = this.props\n\n const hasConflict = !!conflict\n\n return <div className={ styles['client-requirements'] }>\n {\n hasConflict\n ? <h2>Conflicting Requirements</h2>\n : <h2>Client Requirements</h2>\n }\n {\n this.hasAdditionalClients()\n ?\n <div>\n { hasConflict\n ? <div>\n <p className={sharedStyles['explanation']}>\n We found conflicting requirements between two or more plugins or themes, shown below.\n </p>\n { hasLockedLoadSpec\n ? <p className={sharedStyles['explanation']}>\n We'll continue to load the last good load specification you've locked in, so things will\n keep working the way they've been working. However, until you resolve the conflict, whatever\n clients have introduced these new conflicting requirements may not work as expected.\n </p>\n : <p className={sharedStyles['explanation']}>\n Since you haven't yet locked in a working configuration, we can't load Font Awesome at all.\n So, until you resolve these conflicts, Font Awesome won't work!\n </p>\n }\n </div>\n : <p className={sharedStyles['explanation']}>\n Here are some other clients of the Font Awesome plugin, such as plugins or themes,\n along with their Font Awesome requirements shown side-by-side with your preferences.\n If you're trying to resolve a conflict, you might find the culprit at a glance here.\n </p>\n }\n <table className={ classnames( 'widefat', 'striped' ) }>\n <thead>\n <tr className={ sharedStyles['table-header'] }>\n <th>Name</th>\n <th className={ classnames({ [styles.conflicted]: 'method' === conflict }) }>Method</th>\n <th className={ classnames({ [styles.conflicted]: 'version' === conflict }) }>Version</th>\n <th className={ classnames({ [styles.conflicted]: 'v4shim' === conflict }) }>V4 Compat</th>\n <th className={ classnames({ [styles.conflicted]: 'pseudoElements' === conflict }) }>Pseudo-elements</th>\n </tr>\n </thead>\n <tbody>\n {\n this.props.clientRequirements.map((client, index) => {\n return <tr key={ index }>\n <td>{ client.name === this.props.adminClientInternal ? this.props.adminClientExternal : client.name }</td>\n <td className={ classnames({ [styles.conflicted]: 'method' === conflict }) }>{ client.method ? client.method : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'version' === conflict }) }>{ client.version ? client.version : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'v4shim' === conflict }) }>{ client.v4shim ? client.v4shim : UNSPECIFIED_INDICATOR }</td>\n <td className={ classnames({ [styles.conflicted]: 'pseudoElements' === conflict }) }>{ client.pseudoElements ? client.pseudoElements : UNSPECIFIED_INDICATOR }</td>\n </tr>\n })\n }\n </tbody>\n </table>\n </div>\n :\n <p className={ sharedStyles['explanation'] }>\n We don't detect any other active clients (like themes or plugins) that have registered\n requirements for Font Awesome.\n </p>\n }\n </div>\n }\n}\n\nexport default ClientRequirementsView\n\nClientRequirementsView.propTypes = {\n clientRequirements: PropTypes.array.isRequired,\n hasLockedLoadSpec: PropTypes.bool,\n conflict: PropTypes.string,\n adminClientInternal: PropTypes.string.isRequired,\n adminClientExternal: PropTypes.string.isRequired\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './UnregisteredClientsView.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\n\nconst UnregisteredClientsView = props => {\n\n const detectedUnregisteredClients = props.clients.length > 0\n\n return <div className={ classnames(styles['unregistered-clients'], { [styles['none-detected']]: !detectedUnregisteredClients }) }>\n <h2>Unregistered Clients</h2>\n {detectedUnregisteredClients\n ? <div>\n <p className={sharedStyles['explanation']}>\n These are plugins or themes we've detected that appear to be trying to load\n their own versions of Font Awesome. Loading more than one version of Font Awesome\n will almost certainly result in problems, eventually. So, even if all registered\n clients are satisfied with your configuration, they can be broken by an\n unexpected version of Font Awesome loaded by one of these unregistered clients.\n </p>\n <p className={sharedStyles['explanation']}>\n We recommend enabling the <code>Remove unregistered clients</code> option to avoid\n such conflicts. When enabled, our plugin will attempt to stop these other clients from loading\n their own versions of Font Awesome. Most likely, they will continue to operate normally,\n as long as they are compatible with the version configured here.\n </p>\n <p className={sharedStyles['explanation']}>\n If you enable <code>Remove unregistered clients</code> and the results\n produced by those unregistered clients aren't what you expect (for example, their icons are missing),\n then you could try to select different options here, trying to find a configuration\n that <em>is</em> compatible with them. Since they are <em>unregistered</em> clients, we don't know\n what their requirements are, so you kinda just have to guess. You'll know you've found a workable\n configuration when all of the registered clients are satisfied (no conflicts shown here),\n and the unregistered clients produce expected results (their icons look right to you).\n </p>\n <p className={sharedStyles['explanation']}>\n A couple other options for resolving problems with unregistered clients:\n </p>\n <ol className={ sharedStyles['explanation'] }>\n <li>\n Deactivate or replace it, if possible.\n </li>\n <li>\n Contact the developer for the unregistered client and ask them to consider updating their\n code to register with this Font Awesome Official plugin. Let them know they can reach us\n at <code>hello@fontawesome.com</code>.\n </li>\n </ol>\n <table className={classnames('widefat', 'striped')}>\n <tbody>\n <tr className={sharedStyles['table-header']}>\n <th>Name</th>\n <th>Type</th>\n <th>Loading</th>\n </tr>\n {\n props.clients.map((client, index) => (\n <tr key={index}>\n <td>\n {client.handle}\n </td>\n <td>\n {client.type}\n </td>\n <td>\n {client.src}\n </td>\n </tr>\n ))\n }\n </tbody>\n </table>\n </div>\n : <p className={ sharedStyles['explanation'] }>We detected no unregistered clients.</p>\n }\n </div>\n}\n\nUnregisteredClientsView.propTypes = {\n clients: PropTypes.array.isRequired\n}\n\nexport default UnregisteredClientsView\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styles from './PluginVersionWarningsView.module.css'\nimport sharedStyles from './App.module.css'\nimport classnames from 'classnames'\n\nconst PluginVersionWarningsView = props => (\n <div className={ styles['plugin-version-warnings'] } >\n <h2>Plugin Version Warnings</h2>\n <p className={ sharedStyles['explanation'] }>\n This plugin is designed to be loaded in a variety of ways by third-party plugins and themes, all in the hope\n that it makes your life easier by managing the complexity of their various requirements. But sometimes, they\n have a conflict over not just the version of Font Awesome to load, but on the version of this plugin that they\n require in order to get the job done. Behind the scenes, only one copy of the plugin is actually loaded. Any\n subsequent plugins are forced to use that version that's already loaded. Those subsequently loaded plugins\n might have a problem using the loaded version and this is where they'll warn you about that so you can\n see the problem clearly and (hopefully) quickly work out a solution.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Unfortunately, we've got one of those situations here. The likely solution is to upgrade one of these to\n its latest version. Or, if you've installed a plugin that includes the Font Awesome plugin and you've also\n installed the Font Awesome plugin directly yourself, you might be able to resolve this conflict by deactivating\n the version of the Font Awesome plugin you installed yourself.\n </p>\n <p className={ sharedStyles['explanation'] }>\n If you have reason to keep your own installation of the plugin in addition to another plugin and think you could\n resolve this problem by downgrading your own installation of the plugin, you find older releases of the plugin\n on <a href=\"https://fontawesome.com\">our website</a>.\n </p>\n <p className={ sharedStyles['explanation'] }>\n In most cases, if you've installed a plugin that embeds this plugin, you do not need to also have your own\n copy of this plugin installed, and it may be simpler to just deactivate and uninstall it, unless it's the\n only copy of the plugin.\n </p>\n <p className={ sharedStyles['explanation'] }>\n <b>Loaded Plugin Version: </b> { props.pluginVersion }\n </p>\n <table className={classnames('widefat', 'striped')}>\n <thead>\n <tr className={ sharedStyles['table-header'] }>\n <th>Name</th>\n <th>Version Requirement</th>\n </tr>\n </thead>\n <tbody>\n {\n Object.keys(props.warnings).map( (warningKey, index) => (\n <tr key={ index }>\n <td className={styles['name']}>{ props.warnings[warningKey].name }</td>\n <td className={styles['name']}>{ props.warnings[warningKey].constraint }</td>\n </tr>\n ))\n }\n </tbody>\n </table>\n </div>\n)\n\nexport default PluginVersionWarningsView\n\nPluginVersionWarningsView.propTypes = {\n warnings: PropTypes.array.isRequired,\n pluginVersion: PropTypes.string.isRequired\n}\n","import React from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faExclamationTriangle, faClock, faSpinner, faCheck, faSkull } from '@fortawesome/free-solid-svg-icons'\nimport PropTypes from 'prop-types'\nimport styles from './V3DeprecationWarning.module.css'\nimport sharedStyles from './App.module.css'\nimport axios from 'axios'\nimport classnames from 'classnames'\n\nclass V3DeprecationWarning extends React.Component {\n\n constructor(props){\n super(props)\n\n this.state = {\n data: null,\n error: null,\n isLoading: true,\n isSubmitting: false,\n hasSubmitted: false,\n submitSuccess: false,\n submitMessage: null,\n }\n\n this.getData = this.getData.bind(this)\n this.putData = this.putData.bind(this)\n this.handlePutResponse = this.handlePutResponse.bind(this)\n this.handlePutError = this.handlePutError.bind(this)\n this.handleGetResponse = this.handleGetResponse.bind(this)\n this.handleGetError = this.handleGetError.bind(this)\n this.handleSnooze = this.handleSnooze.bind(this)\n }\n\n handleSnooze() {\n const newData = {\n snooze: true\n }\n this.putData( newData )\n }\n\n handleGetResponse(response) {\n const { status, data } = response\n if(200 === status) {\n this.setState({ data, isLoading: false })\n } else {\n this.setState({ error: new Error(\"failed to get data\"), isLoading: false })\n }\n }\n\n handlePutResponse(response) {\n const { status, data } = response\n if (200 === status) {\n this.setState({\n data,\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: true,\n submitMessage: \"Changes saved\"\n })\n } else {\n this.setState({\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: false,\n submitMessage: \"Failed to save changes\"\n })\n }\n }\n\n handlePutError(error) {\n const { response: { data: { code, message }}} = error\n let submitMessage = \"\"\n\n switch(code) {\n case 'cant_update':\n submitMessage = message\n break\n case 'rest_no_route':\n case 'rest_cookie_invalid_nonce':\n submitMessage = \"Sorry, we couldn't reach the server\"\n break\n default:\n submitMessage = \"Update failed\"\n }\n this.setState({ isSubmitting: false, hasSubmitted: true, error: null, submitSuccess: false, submitMessage })\n }\n\n handleGetError(error) {\n this.setState({ error })\n }\n\n getData() {\n axios.get(\n `${this.props.wpApiSettings.api_url}/v3deprecation`,\n {\n headers: {\n 'X-WP-Nonce': this.props.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handleGetResponse )\n .catch( this.handleGetError )\n }\n\n putData(newData){\n this.setState({ isSubmitting: true, hasSubmitted: false })\n\n axios.put(\n `${this.props.wpApiSettings.api_url}/v3deprecation`,\n newData,\n {\n headers: {\n 'X-WP-Nonce': this.props.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handlePutResponse )\n .catch( this.handlePutError )\n }\n\n componentDidMount() {\n this.setState({ isLoading: true })\n this.getData()\n }\n\n render() {\n if(this.state.error) throw this.state.error\n if( !this.state.isLoading && !this.state.data ) throw new Error('missing data')\n\n if(this.state.isLoading) {\n return null\n } else if( this.state.data ) {\n if ( false === this.state.data.v3DeprecationWarning ) {\n return null\n }\n\n const { v3DeprecationWarning: { atts, v5name, v5prefix, snooze } } = this.state.data\n\n if( snooze ) return null\n\n return <div className={styles['v3-deprecation-warning']}>\n <p className={ sharedStyles['explanation'] }>\n <FontAwesomeIcon icon={ faExclamationTriangle } size=\"2x\"/>\n </p>\n\n <p className={ sharedStyles['explanation'] }>\n Looks like you're using an <code>[icon]</code> shortcode with an old Font Awesome 3 icon name:\n <code>{ atts.name }</code>\n </p>\n <p className={ sharedStyles['explanation'] }>\n We discontinued support for <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/v3.2.1/icons/\">Font Awesome 3</a> quite some time ago,\n though we only recently inherited this WordPress plugin,\n which previously only supported up to Font Awesome 3.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Won't you jump into Font Awesome 5 with us? It's way better, and we're gonna make\n it really easy to upgrade. We've added some temporary magic to this plugin to translate your version 3 icon\n names into their version 5 equivalents.\n </p>\n <p className={ sharedStyles['explanation'] }>\n <i className=\"fas fa-magic fa-2x\"></i> <em>Bippity Boppity Boo!</em>\n </p>\n <p className={ sharedStyles['explanation'] }>\n We just turned your<br/>\n <code>[icon name=\"{ atts.name }\"]</code><br/>\n <i className={ `${ v5prefix } fa-${ v5name } fa-2x` }></i> into<br/>\n <code>[icon name=\"{ v5name }\" prefix=\"{ v5prefix }\"]</code>.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Actually, we just converted it on the fly so it would look right in your web pages,\n without changing your saved web site content. So\n to make that change permanent (and get rid of this warning), you'll need to go change any version 3 icon\n names in <code>[icon]</code> shortcodes in your pages, posts, widgets, templates, or wherever they're coming from.\n </p>\n <p className={ sharedStyles['explanation'] }>\n What's that <code>prefix</code>, you ask?\n </p>\n <p className={ sharedStyles['explanation'] }>\n Well...in Font Awesome 5, most icons come in three different styles. You use a style <em>prefix</em> to indicate\n which style you want. The default style prefix is <code>fas</code> for the Solid style.\n So when you're upgrading your shortcodes from v3 to v5 names, if you just want the Solid style icon,\n you can leave off that <code>prefix</code>. Most v3 icons map to Solid style icons in v5. But some of\n the version 3 icon names map to the <code>fab</code> style for Brands, or the <code>far</code> style for Regular.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Icons for companies like <i className=\"fab fa-apple fa-2x\"></i> Apple, or products like <i className=\"fab fa-chrome fa-2x\"></i>\n Chrome will be in the Brands style with the <code>fab</code> prefix.\n </p>\n <p className={ sharedStyles['explanation'] }>\n When you subscribe to <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/pro\">Font Awesome Pro</a>,\n you get a kajillion icons in All the Styles, including <code>fal</code>,\n the Light style.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Head over to our <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://fontawesome.com/icons?d=gallery\">Icon Gallery</a> to\n check out the vast array.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Guess what! In Font Awesome 3.2.1, you had\n 361 icons to choose from. Now, with Font Awesome 5 Free (as of v5.5.0) you've got <b>1,409</b>,\n and with Pro you get...wait for it...<b>4,566</b>. (Rounds up to a kajillion.)\n </p>\n <p className={ sharedStyles['explanation'] }>\n So have a blast upgrading. We're gonna remove this v3-to-v5 magic soon, though,\n so don't wait forever.\n </p>\n <p className={ sharedStyles['explanation'] }>\n Clear this warning by updating those icons, or you could hit snooze to get this warning of your way for a while.\n </p>\n <div>\n <button disabled={ this.state.isSubmitting } onClick={ this.handleSnooze } className={ classnames( styles['snooze-button'], 'button', 'button-primary' ) }>\n {\n this.state.isSubmitting\n ? <FontAwesomeIcon icon={ faSpinner } spin className={ styles['submitting'] } />\n : this.state.hasSubmitted\n ? this.state.submitSuccess\n ? <FontAwesomeIcon icon={ faCheck } className={ styles['success'] }/>\n : <FontAwesomeIcon icon={ faSkull } className={ styles['fail'] }/>\n : <FontAwesomeIcon icon={ faClock } className={ styles['snooze'] }/>\n }\n <span className={ styles['label'] }>Snooze</span>\n </button>\n </div>\n\n </div>\n }\n }\n}\n\nexport default V3DeprecationWarning\n\nV3DeprecationWarning.propTypes = {\n wpApiSettings: PropTypes.object.isRequired,\n}\n\n\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classnames from 'classnames'\nimport styles from './FontAwesomeAdminView.module.css'\nimport LoadSpecView from './LoadSpecView'\nimport OptionsSetter from './OptionsSetter'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faThumbsUp, faExclamationCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'\nimport ClientRequirementsView from './ClientRequirementsView'\nimport UnregisteredClientsView from './UnregisteredClientsView'\nimport PluginVersionWarningsView from './PluginVersionWarningsView'\nimport V3DeprecationWarning from './V3DeprecationWarning'\nimport { values } from 'lodash'\n\nclass FontAwesomeAdminView extends React.Component {\n\n getStatus(hasConflict, haslockedLoadSpec) {\n if( hasConflict ) {\n if ( haslockedLoadSpec ) {\n return {\n statusLabel: 'warning',\n statusIcon: faExclamationTriangle\n }\n } else {\n return {\n statusLabel: 'conflict',\n statusIcon: faExclamationCircle\n }\n }\n } else {\n return {\n statusLabel: 'good',\n statusIcon: faThumbsUp\n }\n }\n }\n\n render(){\n const { data, putData } = this.props\n\n const hasConflict = !!data.conflicts\n\n const { statusLabel, statusIcon } = this.getStatus( hasConflict, !!data.options.lockedLoadSpec )\n\n return <div className={ styles['font-awesome-admin-view'] }>\n <h1>Font Awesome</h1>\n <div>\n <p className={ classnames( styles['status'], styles[statusLabel] ) }>\n <span className={ styles['status-label'] }>Status: </span>\n <FontAwesomeIcon className={ styles['icon'] } icon={ statusIcon }/>\n </p>\n <V3DeprecationWarning wpApiSettings={ this.props.wpApiSettings }/>\n { data.options.lockedLoadSpec &&\n <LoadSpecView spec={ data.options.lockedLoadSpec } usePro={ data.options.usePro } />\n }\n { hasConflict &&\n <ClientRequirementsView\n clientRequirements={data.conflicts.conflictingClientRequirements}\n conflict={data.conflicts.requirement}\n hasLockedLoadSpec={ !!data.options.lockedLoadSpec }\n adminClientInternal={data.adminClientInternal}\n adminClientExternal={data.adminClientExternal}\n />\n }\n <OptionsSetter\n releases={ data.releases }\n currentOptions={ data.options }\n putData={ putData }\n isSubmitting={ this.props.isSubmitting }\n hasSubmitted={ this.props.hasSubmitted }\n submitSuccess={ this.props.submitSuccess }\n submitMessage={ this.props.submitMessage }\n error={ this.props.error }\n adminClientInternal={ data.adminClientInternal }\n releaseProviderStatus={ data.releaseProviderStatus }\n />\n { !hasConflict &&\n <ClientRequirementsView\n clientRequirements={ values( data.clientRequirements ) }\n adminClientInternal={ data.adminClientInternal }\n adminClientExternal={ data.adminClientExternal }\n />\n }\n <UnregisteredClientsView clients={ data.unregisteredClients }/>\n {\n data.pluginVersionWarnings &&\n <PluginVersionWarningsView warnings={ values(data.pluginVersionWarnings) } pluginVersion={ data.pluginVersion }/>\n }\n </div>\n </div>\n }\n}\n\nexport default FontAwesomeAdminView\n\nFontAwesomeAdminView.propTypes = {\n data: PropTypes.object,\n putData: PropTypes.func.isRequired,\n wpApiSettings: PropTypes.object.isRequired\n // TODO: add the other props if we decide to keep them\n}\n","import React, { Component } from 'react'\nimport axios from 'axios'\nimport LoadingView from './LoadingView'\nimport FontAwesomeAdminView from './FontAwesomeAdminView'\n\nclass App extends Component {\n\n constructor(props) {\n super(props)\n\n const wpApiSettings = window['wpFontAwesomeOfficial']\n\n if(! wpApiSettings) {\n throw Error(\"Well, this is embarrassing. The plugin doesn't seem to be installed correctly.\")\n }\n\n this.state = {\n data: null,\n error: null,\n isLoading: true,\n isSubmitting: false,\n hasSubmitted: false,\n submitSuccess: false,\n submitMessage: null,\n wpApiSettings\n }\n\n this.getData = this.getData.bind(this)\n this.putData = this.putData.bind(this)\n this.handlePutResponse = this.handlePutResponse.bind(this)\n this.handlePutError = this.handlePutError.bind(this)\n this.handleGetResponse = this.handleGetResponse.bind(this)\n this.handleGetError = this.handleGetError.bind(this)\n }\n\n handleGetResponse(response) {\n const { status, data } = response\n if(200 === status) {\n this.setState({ data, isLoading: false })\n } else {\n this.setState({ error: new Error(\"failed to get data\"), isLoading: false })\n }\n }\n\n handlePutResponse(response) {\n const { status, data } = response\n if (200 === status) {\n this.setState({\n data,\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: true,\n submitMessage: \"Changes saved\"\n })\n } else {\n this.setState({\n isSubmitting: false,\n hasSubmitted: true,\n error: null,\n submitSuccess: false,\n submitMessage: \"Failed to save changes\"\n })\n }\n }\n\n handlePutError(error) {\n const { response: { data: { code, message }}} = error\n let submitMessage = \"\"\n\n switch(code) {\n case 'cant_update':\n submitMessage = message\n break\n case 'rest_no_route':\n case 'rest_cookie_invalid_nonce':\n submitMessage = \"Sorry, we couldn't reach the server\"\n break\n default:\n submitMessage = \"Update failed\"\n }\n this.setState({ isSubmitting: false, hasSubmitted: true, error: null, submitSuccess: false, submitMessage })\n }\n\n handleGetError(error) {\n this.setState({ error })\n }\n\n getData() {\n axios.get(\n `${this.state.wpApiSettings.api_url}/config`,\n {\n headers: {\n 'X-WP-Nonce': this.state.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handleGetResponse )\n .catch( this.handleGetError )\n }\n\n putData(newData){\n this.setState({ isSubmitting: true, hasSubmitted: false })\n\n axios.put(\n `${this.state.wpApiSettings.api_url}/config`,\n newData,\n {\n headers: {\n 'X-WP-Nonce': this.state.wpApiSettings.api_nonce\n }\n }\n )\n .then( this.handlePutResponse )\n .catch( this.handlePutError )\n }\n\n componentDidMount() {\n this.setState({ isLoading: true })\n this.getData()\n }\n\n render() {\n if(this.state.error) throw this.state.error\n if( !this.state.isLoading && !this.state.data ) throw new Error('missing data')\n\n return (\n <div className=\"wrap\">\n {\n this.state.isLoading\n ? <LoadingView/>\n : <FontAwesomeAdminView\n data={ this.state.data }\n putData={ this.putData }\n isSubmitting={ this.state.isSubmitting }\n hasSubmitted={ this.state.hasSubmitted }\n submitSuccess={ this.state.submitSuccess }\n submitMessage={ this.state.submitMessage }\n wpApiSettings={ this.state.wpApiSettings }\n error={ this.state.error }\n />\n }\n </div>\n )\n }\n}\n\nexport default App\n","import React from 'react'\n\nclass ErrorFallbackView extends React.Component {\n\n render() {\n const { message } = this.props\n\n return <div className={'error-fallback'}>\n Sorry, we've experienced some error.\n {\n message &&\n <div className={'additional-message'}>\n { message }\n </div>\n }\n </div>\n }\n}\n\nexport default ErrorFallbackView\n","import React from 'react'\nimport ErrorFallbackView from './ErrorFallbackView'\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n error: null,\n errorInfo: null\n }\n }\n\n componentDidCatch(error, errorInfo) {\n this.setState({error, errorInfo})\n }\n\n render() {\n if (this.state.error) {\n //render fallback UI\n return <ErrorFallbackView/>\n } else {\n //when there's not an error, render children untouched\n return this.props.children\n }\n }\n}\n\nexport default ErrorBoundary\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './App'\nimport ErrorBoundary from './ErrorBoundary'\n\nReactDOM.render(<ErrorBoundary><App /></ErrorBoundary>, document.getElementById('font-awesome-admin'));\n"],"sourceRoot":""}
font-awesome.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Font Awesome
4
  * Plugin URI: https://fontawesome.com/how-to-use/on-the-web/using-with/wordpress
5
  * Description: Adds Font Awesome 5 icons to your WordPress site. Supports Font Awesome Pro. Resolves conflicts across many plugins or themes that use Font Awesome.
6
- * Version: 4.0.0-rc5
7
  * Author: Font Awesome
8
  * Author URI: https://fontawesome.com/
9
  * License: GPLv2 (or later)
3
  * Plugin Name: Font Awesome
4
  * Plugin URI: https://fontawesome.com/how-to-use/on-the-web/using-with/wordpress
5
  * Description: Adds Font Awesome 5 icons to your WordPress site. Supports Font Awesome Pro. Resolves conflicts across many plugins or themes that use Font Awesome.
6
+ * Version: 4.0.0-rc6
7
  * Author: Font Awesome
8
  * Author URI: https://fontawesome.com/
9
  * License: GPLv2 (or later)
includes/class-fontawesome-release-provider.php CHANGED
@@ -118,7 +118,7 @@ class FontAwesome_Release_Provider {
118
  * - `0` if there was some code error that prevented the network request from completing
119
  * - otherwise some HTTP error code as returned by {@see \Guzzle\Client}
120
  *
121
- * @return FontAwesome_Release_Provider
122
  */
123
  public function get_status() {
124
  return $this->_status;
118
  * - `0` if there was some code error that prevented the network request from completing
119
  * - otherwise some HTTP error code as returned by {@see \Guzzle\Client}
120
  *
121
+ * @return array|null
122
  */
123
  public function get_status() {
124
  return $this->_status;
includes/class-fontawesome.php CHANGED
@@ -101,7 +101,7 @@ if ( ! class_exists( 'FontAwesome' ) ) :
101
  /**
102
  * The version of this WordPress plugin.
103
  */
104
- const PLUGIN_VERSION = '4.0.0-rc5';
105
  /**
106
  * The version of this plugin's REST API.
107
  *
101
  /**
102
  * The version of this WordPress plugin.
103
  */
104
+ const PLUGIN_VERSION = '4.0.0-rc6';
105
  /**
106
  * The version of this plugin's REST API.
107
  *
readme.txt CHANGED
@@ -1,6 +1,6 @@
1
  === Font Awesome ===
2
  Contributors: fontawesome, mlwilkerson, robmadole, rachelbaker
3
- Stable tag: 4.0.0-rc5
4
  Tags: font, awesome, fontawesome, font-awesome, icon, svg, webfont
5
  Requires at least: 4.7
6
  Tested up to: 5.0
@@ -184,6 +184,11 @@ Find the Font Awesome admin settings page either under the "Settings" menu on th
184
 
185
  == Changelog ==
186
 
 
 
 
 
 
187
  = 4.0.0-rc5 =
188
 
189
  * Remove tilde character from JavaScript filenames to avoid violating some URL security rules
1
  === Font Awesome ===
2
  Contributors: fontawesome, mlwilkerson, robmadole, rachelbaker
3
+ Stable tag: 4.0.0-rc6
4
  Tags: font, awesome, fontawesome, font-awesome, icon, svg, webfont
5
  Requires at least: 4.7
6
  Tested up to: 5.0
184
 
185
  == Changelog ==
186
 
187
+ = 4.0.0-rc6 =
188
+
189
+ * Fix error when updating options on admin page: handle null releaseProviderStatus in cases where the release provider
190
+ does not have to make a network request to update release metadata.
191
+
192
  = 4.0.0-rc5 =
193
 
194
  * Remove tilde character from JavaScript filenames to avoid violating some URL security rules
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit0fa3a45264fc9be9601c708429dbb707::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit2ff28475f41ec9be859940af6ffda0c9
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
- $includeFiles = Composer\Autoload\ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
- composerRequire2ff28475f41ec9be859940af6ffda0c9($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
- function composerRequire2ff28475f41ec9be859940af6ffda0c9($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit0fa3a45264fc9be9601c708429dbb707
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit0fa3a45264fc9be9601c708429dbb707', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit0fa3a45264fc9be9601c708429dbb707', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit0fa3a45264fc9be9601c708429dbb707::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
48
  $loader->register(true);
49
 
50
  if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInit0fa3a45264fc9be9601c708429dbb707::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire0fa3a45264fc9be9601c708429dbb707($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequire0fa3a45264fc9be9601c708429dbb707($fileIdentifier, $file)
64
  {
65
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9
8
  {
9
  public static $files = array (
10
  'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
@@ -56,8 +56,8 @@ class ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9
56
  public static function getInitializer(ClassLoader $loader)
57
  {
58
  return \Closure::bind(function () use ($loader) {
59
- $loader->prefixLengthsPsr4 = ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9::$prefixLengthsPsr4;
60
- $loader->prefixDirsPsr4 = ComposerStaticInit2ff28475f41ec9be859940af6ffda0c9::$prefixDirsPsr4;
61
 
62
  }, null, ClassLoader::class);
63
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit0fa3a45264fc9be9601c708429dbb707
8
  {
9
  public static $files = array (
10
  'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
56
  public static function getInitializer(ClassLoader $loader)
57
  {
58
  return \Closure::bind(function () use ($loader) {
59
+ $loader->prefixLengthsPsr4 = ComposerStaticInit0fa3a45264fc9be9601c708429dbb707::$prefixLengthsPsr4;
60
+ $loader->prefixDirsPsr4 = ComposerStaticInit0fa3a45264fc9be9601c708429dbb707::$prefixDirsPsr4;
61
 
62
  }, null, ClassLoader::class);
63
  }