diff --git a/Changelog.md b/Changelog.md index 7e3aa6b5..c1bfed20 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,9 +1,20 @@ # Changelog +## 2.1.1 - September 2018 + +### New Features +* It's now possible to search for content. This can be done through a search box on the home page. This uses XIVAPI's search mechanism. + +### Minor Tweaks +* Custom URLs for supporters are now slightly faster than they used to be. +* A typo has been fixed on the achievements page. "dispalyed" -> "displayed". +* An issue where Apkallu Falls would not load on Microsoft Edge has been resolved. +* Data caching is now a lot more efficient. + ## 2.1 - August 2018 ### New Features -* Orchestrion Rolls and Chocobo Barding is now listed. ([Blog entry](https://www.patreon.com/posts/did-someone-say-20213110)) +* Orchestrion Rolls and sets of Chocobo Barding are now listed. ([Blog entry](https://www.patreon.com/posts/did-someone-say-20213110)) * https://apkallufalls.com/connect - Users can now log in to Apkallu Falls with email, Facebook, Google and Twitter. ([Blog entry](https://www.patreon.com/posts/sign-in-page-19563395)) * Logged-in users can verify ownership their characters by visiting their character profile pages. * Logged-in users can manually track content like Emotes, which are not automatically trackable. ([Blog entry](https://www.patreon.com/posts/19810553)) @@ -42,7 +53,7 @@ ### Discussion Points #### When will the census be implemented? -Due to the news about XIVDB, and the fact it still hasn't updated to patch 4.6, this is currently on hold until further notice. +Due to the news about XIVDB, and the fact it still hasn't updated to patch 4.36, this is currently on hold until further notice. #### You said hairstyles would be trackable, where are they? There are only 8 hairstyles available in-game that aren't available by default. Dedicating a section of the site to track such a small quantity of content would be expensive with little reward. For now, this is on hold. \ No newline at end of file diff --git a/docs/!/cyr/avatar.png b/docs/!/cyr/avatar.png index be822d68..bc5fa638 100644 Binary files a/docs/!/cyr/avatar.png and b/docs/!/cyr/avatar.png differ diff --git a/docs/!/emma/avatar.png b/docs/!/emma/avatar.png index 53f56be6..61951d1e 100644 Binary files a/docs/!/emma/avatar.png and b/docs/!/emma/avatar.png differ diff --git a/docs/!/thalele/avatar.png b/docs/!/thalele/avatar.png index 42255901..83225ef6 100644 Binary files a/docs/!/thalele/avatar.png and b/docs/!/thalele/avatar.png differ diff --git a/docs/character/10804858/avatar.png b/docs/character/10804858/avatar.png index d567476a..d72ddf4f 100644 Binary files a/docs/character/10804858/avatar.png and b/docs/character/10804858/avatar.png differ diff --git a/docs/character/13686251/avatar.png b/docs/character/13686251/avatar.png index b713eb44..2f384cc5 100644 Binary files a/docs/character/13686251/avatar.png and b/docs/character/13686251/avatar.png differ diff --git a/docs/character/15183266/avatar.png b/docs/character/15183266/avatar.png index be822d68..bc5fa638 100644 Binary files a/docs/character/15183266/avatar.png and b/docs/character/15183266/avatar.png differ diff --git a/docs/character/1550413/avatar.png b/docs/character/1550413/avatar.png index 53f56be6..61951d1e 100644 Binary files a/docs/character/1550413/avatar.png and b/docs/character/1550413/avatar.png differ diff --git a/docs/character/15885758/avatar.png b/docs/character/15885758/avatar.png index 5202e152..22448e1c 100644 Binary files a/docs/character/15885758/avatar.png and b/docs/character/15885758/avatar.png differ diff --git a/docs/character/20188222/avatar.png b/docs/character/20188222/avatar.png index 752033da..69c30a44 100644 Binary files a/docs/character/20188222/avatar.png and b/docs/character/20188222/avatar.png differ diff --git a/docs/character/8115985/avatar.png b/docs/character/8115985/avatar.png index 42255901..83225ef6 100644 Binary files a/docs/character/8115985/avatar.png and b/docs/character/8115985/avatar.png differ diff --git a/docs/character/9065567/avatar.png b/docs/character/9065567/avatar.png index 4617ee62..872f3b39 100644 Binary files a/docs/character/9065567/avatar.png and b/docs/character/9065567/avatar.png differ diff --git a/docs/compiled/app.min.js b/docs/compiled/app.min.js index 6b1ea75b..a1070a67 100644 --- a/docs/compiled/app.min.js +++ b/docs/compiled/app.min.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[,,,function(e,n,t){e.exports=t(260)()},,function(e,n,t){var a={},r=function(e){var n;return function(){return void 0===n&&(n=e.apply(this,arguments)),n}}(function(){return window&&document&&document.all&&!window.atob}),o=function(e){var n={};return function(e){if("function"==typeof e)return e();if(void 0===n[e]){var t=function(e){return document.querySelector(e)}.call(this,e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}}(),i=null,l=0,s=[],c=t(255);function d(e,n){for(var t=0;t=0&&s.splice(n,1)}function f(e){var n=document.createElement("style");return void 0===e.attrs.type&&(e.attrs.type="text/css"),m(n,e.attrs),p(e,n),n}function m(e,n){Object.keys(n).forEach(function(t){e.setAttribute(t,n[t])})}function g(e,n){var t,a,r,o;if(n.transform&&e.css){if(!(o=n.transform(e.css)))return function(){};e.css=o}if(n.singleton){var s=l++;t=i||(i=f(n)),a=w.bind(null,t,s,!1),r=w.bind(null,t,s,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(t=function(e){var n=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",m(n,e.attrs),p(e,n),n}(n),a=function(e,n,t){var a=t.css,r=t.sourceMap,o=void 0===n.convertToAbsoluteUrls&&r;(n.convertToAbsoluteUrls||o)&&(a=c(a));r&&(a+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var i=new Blob([a],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(i),l&&URL.revokeObjectURL(l)}.bind(null,t,n),r=function(){h(t),t.href&&URL.revokeObjectURL(t.href)}):(t=f(n),a=function(e,n){var t=n.css,a=n.media;a&&e.setAttribute("media",a);if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}.bind(null,t),r=function(){h(t)});return a(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap)return;a(e=n)}else r()}}e.exports=function(e,n){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(n=n||{}).attrs="object"==typeof n.attrs?n.attrs:{},n.singleton||"boolean"==typeof n.singleton||(n.singleton=r()),n.insertInto||(n.insertInto="head"),n.insertAt||(n.insertAt="bottom");var t=u(e,n);return d(t,n),function(e){for(var r=[],o=0;o1&&void 0!==arguments[1]?arguments[1]:"",t=e&&e.split("/")||[],a=n&&n.split("/")||[],r=e&&b(e),o=n&&b(n),i=r||o;if(e&&b(e)?a=t:t.length&&(a.pop(),a=a.concat(t)),!a.length)return"/";var l=void 0;if(a.length){var s=a[a.length-1];l="."===s||".."===s||""===s}else l=!1;for(var c=0,d=a.length;d>=0;d--){var u=a[d];"."===u?w(a,d):".."===u?(w(a,d),c++):c&&(w(a,d),c--)}if(!i)for(;c--;c)a.unshift("..");!i||""===a[0]||a[0]&&b(a[0])||a.unshift("");var p=a.join("/");return l&&"/"!==p.substr(-1)&&(p+="/"),p};"function"==typeof Symbol&&Symbol.iterator;var y=function(e){return"/"===e.charAt(0)?e:"/"+e},x=function(e,n){return new RegExp("^"+n+"(\\/|\\?|#|$)","i").test(e)},k=function(e,n){return x(e,n)?e.substr(n.length):e},E=function(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e},S=function(e){var n=e.pathname,t=e.search,a=e.hash,r=n||"/";return t&&"?"!==t&&(r+="?"===t.charAt(0)?t:"?"+t),a&&"#"!==a&&(r+="#"===a.charAt(0)?a:"#"+a),r},C=Object.assign||function(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};g()(N,"Browser history needs a DOM");var n=window.history,t=function(){var e=window.navigator.userAgent;return(-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history}(),a=!(-1===window.navigator.userAgent.indexOf("Trident")),r=e.forceRefresh,o=void 0!==r&&r,i=e.getUserConfirmation,l=void 0===i?O:i,s=e.keyLength,c=void 0===s?6:s,d=e.basename?E(y(e.basename)):"",u=function(e){var n=e||{},t=n.key,a=n.state,r=window.location,o=r.pathname+r.search+r.hash;return f()(!d||x(o,d),'You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path "'+o+'" to begin with "'+d+'".'),d&&(o=k(o,d)),P(o,a,t)},p=function(){return Math.random().toString(36).substr(2,c)},h=I(),m=function(e){L(B,e),B.length=n.length,h.notifyListeners(B.location,B.action)},b=function(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||C(u(e.state))},w=function(){C(u(_()))},v=!1,C=function(e){v?(v=!1,m()):h.confirmTransitionTo(e,"POP",l,function(n){n?m({action:"POP",location:e}):z(e)})},z=function(e){var n=B.location,t=U.indexOf(n.key);-1===t&&(t=0);var a=U.indexOf(e.key);-1===a&&(a=0);var r=t-a;r&&(v=!0,D(r))},F=u(_()),U=[F.key],R=function(e){return d+S(e)},D=function(e){n.go(e)},q=0,M=function(e){1===(q+=e)?(A(window,"popstate",b),a&&A(window,"hashchange",w)):0===q&&(j(window,"popstate",b),a&&j(window,"hashchange",w))},V=!1,B={length:n.length,action:"POP",location:F,createHref:R,push:function(e,a){f()(!("object"===(void 0===e?"undefined":T(e))&&void 0!==e.state&&void 0!==a),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var r=P(e,a,p(),B.location);h.confirmTransitionTo(r,"PUSH",l,function(e){if(e){var a=R(r),i=r.key,l=r.state;if(t)if(n.pushState({key:i,state:l},null,a),o)window.location.href=a;else{var s=U.indexOf(B.location.key),c=U.slice(0,-1===s?0:s+1);c.push(r.key),U=c,m({action:"PUSH",location:r})}else f()(void 0===l,"Browser history cannot push state in browsers that do not support HTML5 history"),window.location.href=a}})},replace:function(e,a){f()(!("object"===(void 0===e?"undefined":T(e))&&void 0!==e.state&&void 0!==a),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var r=P(e,a,p(),B.location);h.confirmTransitionTo(r,"REPLACE",l,function(e){if(e){var a=R(r),i=r.key,l=r.state;if(t)if(n.replaceState({key:i,state:l},null,a),o)window.location.replace(a);else{var s=U.indexOf(B.location.key);-1!==s&&(U[s]=r.key),m({action:"REPLACE",location:r})}else f()(void 0===l,"Browser history cannot replace state in browsers that do not support HTML5 history"),window.location.replace(a)}})},go:D,goBack:function(){return D(-1)},goForward:function(){return D(1)},block:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=h.setPrompt(e);return V||(M(1),V=!0),function(){return V&&(V=!1,M(-1)),n()}},listen:function(e){var n=h.appendListener(e);return M(1),function(){M(-1),n()}}};return B},F=(Object.assign,"function"==typeof Symbol&&Symbol.iterator,Object.assign,t(76)),U=t.n(F),R=Object.assign||function(e){for(var n=1;n may have only one child element"),this.unlisten=a.listen(function(){e.setState({match:e.computeMatch(a.location.pathname)})})},n.prototype.componentWillReceiveProps=function(e){d()(this.props.history===e.history,"You cannot change ")},n.prototype.componentWillUnmount=function(){this.unlisten()},n.prototype.render=function(){var e=this.props.children;return e?r.a.Children.only(e):null},n}(r.a.Component);q.propTypes={history:p.a.object.isRequired,children:p.a.node},q.contextTypes={router:p.a.object},q.childContextTypes={router:p.a.object.isRequired};var M=q;function V(e,n){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!n||"object"!=typeof n&&"function"!=typeof n?e:n}var B=function(e){function n(){var t,a;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,n);for(var r=arguments.length,o=Array(r),i=0;i ignores the history prop. To use a custom history, use `import { Router }` instead of `import { BrowserRouter as Router }`.")},n.prototype.render=function(){return r.a.createElement(M,{history:this.history,children:this.props.children})},n}(r.a.Component);B.propTypes={basename:p.a.string,forceRefresh:p.a.bool,getUserConfirmation:p.a.func,keyLength:p.a.number,children:p.a.node};var H=B,W=t(156),G=t.n(W),J={},X=0,K=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments[2];"string"==typeof n&&(n={path:n});var a=n,r=a.path,o=a.exact,i=void 0!==o&&o,l=a.strict,s=void 0!==l&&l,c=a.sensitive,d=void 0!==c&&c;if(null==r)return t;var u=function(e,n){var t=""+n.end+n.strict+n.sensitive,a=J[t]||(J[t]={});if(a[e])return a[e];var r=[],o={re:G()(e,r,n),keys:r};return X<1e4&&(a[e]=o,X++),o}(r,{end:i,strict:s,sensitive:d}),p=u.re,h=u.keys,f=p.exec(e);if(!f)return null;var m=f[0],g=f.slice(1),b=e===m;return i&&!b?null:{path:r,url:"/"===r&&""===m?"/":m,isExact:b,params:h.reduce(function(e,n,t){return e[n.name]=g[t],e},{})}},Y=Object.assign||function(e){for(var n=1;n or withRouter() outside a ");var s=n.route,c=(a||s.location).pathname;return K(c,{path:r,strict:o,exact:i,sensitive:l},s.match)},n.prototype.componentWillMount=function(){d()(!(this.props.component&&this.props.render),"You should not use and in the same route; will be ignored"),d()(!(this.props.component&&this.props.children&&!Q(this.props.children)),"You should not use and in the same route; will be ignored"),d()(!(this.props.render&&this.props.children&&!Q(this.props.children)),"You should not use and in the same route; will be ignored")},n.prototype.componentWillReceiveProps=function(e,n){d()(!(e.location&&!this.props.location),' elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),d()(!(!e.location&&this.props.location),' elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,n.router)})},n.prototype.render=function(){var e=this.state.match,n=this.props,t=n.children,a=n.component,o=n.render,i=this.context.router,l=i.history,s=i.route,c=i.staticContext,d={match:e,location:this.props.location||s.location,history:l,staticContext:c};return a?e?r.a.createElement(a,d):null:o?e?o(d):null:"function"==typeof t?t(d):t&&!Q(t)?r.a.Children.only(t):null},n}(r.a.Component);$.propTypes={computedMatch:p.a.object,path:p.a.string,exact:p.a.bool,strict:p.a.bool,sensitive:p.a.bool,component:p.a.func,render:p.a.func,children:p.a.oneOfType([p.a.func,p.a.node]),location:p.a.object},$.contextTypes={router:p.a.shape({history:p.a.object.isRequired,route:p.a.object.isRequired,staticContext:p.a.object})},$.childContextTypes={router:p.a.object.isRequired};var ee=$,ne=ee,te=[{path:"/",exact:!0},{path:"/connect",exact:!0},{path:"/translate",exact:!0},{path:"/!/:supporterCharacterUrl"},{path:"/character/:characterId/:name?"},{path:"/character-select",exact:!0},{path:"/patches",exact:!0},{path:"/achievements",exact:!0},{path:"/achievements/tagged/:tag"},{path:"/achievement/:id/:name?"},{path:"/chocobo-barding",exact:!0},{path:"/chocobo-barding/tagged/:tag"},{path:"/chocobo-barding/:id/:name?"},{path:"/emotes",exact:!0},{path:"/emotes/tagged/:tag"},{path:"/emote/:id/:name?"},{path:"/minions",exact:!0},{path:"/minions/tagged/:tag"},{path:"/minion/:id/:name?"},{path:"/mounts",exact:!0},{path:"/mounts/tagged/:tag"},{path:"/mount/:id/:name?"},{path:"/orchestrion-rolls",exact:!0},{path:"/orchestrion-rolls/category/:category"},{path:"/orchestrion-rolls/tagged/:tag"},{path:"/orchestrion-roll/:id/:name?"},{path:"/titles",exact:!0},{path:"/titles/tagged/:tag"}],ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},re=function(){function e(e,n){for(var t=0;tc?s:c,i.achievements=l.map(function(e){return{id:e.ID,date:+t(e.Date)}}).sort(function(e,n){return+e.date1&&void 0!==arguments[1])||arguments[1];if(function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),!n||"number"!=typeof n)throw new Error("Character class instantiated with non-number value: "+n);this.id=n,this.recentlyUpdated=!1,this.data=oe.call(this),t&&(window.character=this,localStorage&&localStorage.setItem("active",this.id),"function"==typeof window.config.reloadProfile&&window.config.reloadProfile())}return re(e,[{key:"info",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.info,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"isPrivate",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.isPrivate,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"achievements",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.achievements,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"minions",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.minions,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"mounts",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.mounts,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"barding",value:function(){var e=de(regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",[]);case 1:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"emotes",value:function(){var e=de(regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",[]);case 1:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"orchestrionRolls",value:function(){var e=de(regeneratorRuntime.mark(function e(){return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",[]);case 1:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"counts",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:return n=e.sent,t=n.counts,e.abrupt("return",t);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"achievementStats",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t,a,r,o,i;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.data;case 2:if(n=e.sent,(t=n.achievements)&&t.length){e.next=6;break}return e.abrupt("return",null);case 6:return e.next=8,window.api.json("achievements",!1,"v3");case 8:return a=e.sent,r={},o=t[0],r.first={obtained:o.date,data:a.data.filter(function(e){return e.id===o.id})[0]},i=t[t.length-1],r.last={obtained:i.date,data:a.data.filter(function(e){return e.id===i.id})[0]},e.abrupt("return",r);case 15:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"isTracked",value:function(){var e=this;if(!localStorage)return!0;var n=JSON.parse(localStorage.getItem("tracked"));return!(!n||!n.filter(function(n){return n.id===e.id})[0])}},{key:"track",value:function(){var e=de(regeneratorRuntime.mark(function e(){var n,t;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.isTracked()){e.next=2;break}return e.abrupt("return",!0);case 2:return(n=JSON.parse(localStorage.getItem("tracked")))||(n=[]),e.next=6,this.info();case 6:t=e.sent,n.push({id:this.id,img:t.avatar,name:t.name,world:t.server}),localStorage.setItem("tracked",JSON.stringify(n));case 9:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"cache",get:function(){return localStorage&&JSON.parse(localStorage.getItem("character."+this.id))||null}}]),e}(),pe=t(106),he=t.n(pe),fe=Object.assign||function(e){for(var n=1;n=0||Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}(e,["replace","to","innerRef"]);he()(this.context.router,"You should not use outside a "),he()(void 0!==n,'You must specify the "to" property');var o=this.context.router.history,i="string"==typeof n?P(n,null,null,o.location):n,l=o.createHref(i);return r.a.createElement("a",fe({},a,{onClick:this.handleClick,href:l,ref:t}))},n}(r.a.Component);be.propTypes={onClick:p.a.func,target:p.a.string,replace:p.a.bool,to:p.a.oneOfType([p.a.string,p.a.object]).isRequired,innerRef:p.a.oneOfType([p.a.string,p.a.func])},be.defaultProps={replace:!1},be.contextTypes={router:p.a.shape({history:p.a.shape({push:p.a.func.isRequired,replace:p.a.func.isRequired,createHref:p.a.func.isRequired}).isRequired}).isRequired};var we=be,ve=Object.assign||function(e){for(var n=1;n=0||Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}(e,["to","exact","strict","location","activeClassName","className","activeStyle","style","isActive","aria-current"]),h="object"===(void 0===n?"undefined":ye(n))?n.pathname:n,f=h&&h.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1");return r.a.createElement(ne,{path:f,exact:t,strict:a,location:o,children:function(e){var t=e.location,a=e.match,o=!!(d?d(a,t):a);return r.a.createElement(we,ve({to:n,className:o?[l,i].filter(function(e){return e}).join(" "):l,style:o?ve({},c,s):c,"aria-current":o&&u||null},p))}})};xe.propTypes={to:we.propTypes.to,exact:p.a.bool,strict:p.a.bool,location:p.a.object,activeClassName:p.a.string,className:p.a.string,activeStyle:p.a.object,style:p.a.object,isActive:p.a.func,"aria-current":p.a.oneOf(["page","step","location","date","time","true"])},xe.defaultProps={activeClassName:"active","aria-current":"page"};var ke=xe,Ee=function(e,n,t){if("home"===t)return"/"===n.pathname;if(e)return!0;var a=n.pathname.split("/");if(!a.length||1===a.length)return!1;switch(a[1]){case"character-select":return"character-select"===t;case"achievement":case"achievements":return"achievement"===t;case"minion":case"minions":return"minion"===t;case"mount":case"mounts":return"mount"===t;case"titles":return"title"===t;case"":return"home"===t;default:return t===a[1]}},Se=function(){return r.a.createElement("div",null,r.a.createElement("h1",null,r.a.createElement(ke,{to:"/",activeClassName:"active"},"Apkallu Falls")),r.a.createElement("div",null,r.a.createElement("ul",null,r.a.createElement("li",null,r.a.createElement(ke,{to:"/character-select",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"character-select")}},r.a.createElement("i",{className:"fal fa-user-astronaut"}),r.a.createElement("span",null," ",window.locale("Character Select")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/achievements",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"achievement")}},r.a.createElement("i",{className:"fal fa-trophy"}),r.a.createElement("span",null," ",window.locale("Achievements")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/minions",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"minion")}},r.a.createElement("i",{className:"fal fa-paw"}),r.a.createElement("span",null," ",window.locale("Minions")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/mounts",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"mount")}},r.a.createElement("i",{className:"fal fa-crow"}),r.a.createElement("span",null," ",window.locale("Mounts")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/titles",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"title")}},r.a.createElement("i",{className:"fal fa-tag"}),r.a.createElement("span",null," ",window.locale("Titles")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/emotes",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"emote")}},r.a.createElement("i",{className:"fal fa-smile"}),r.a.createElement("span",null," ",window.locale("Emotes")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/orchestrion-rolls",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"orchestrion-roll")}},r.a.createElement("i",{className:"fal fa-music"}),r.a.createElement("span",null," ",window.locale("Orchestrion Rolls")))),r.a.createElement("li",null,r.a.createElement(ke,{to:"/chocobo-barding",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"chocobo-barding")}},r.a.createElement("i",{className:"fal fa-loveseat"}),r.a.createElement("span",null," ",window.locale("Chocobo Barding")))))))},Ce=(t(257),function(e){var n=e.dataFor,t=e.prefix,a=e.total,o=e.unknown,i=e.value,l=100/(a/t),s=100/(a/i),c=o&&100/(a/o),d=i,u=a,p="";return"Patreon"===n&&(d=i/100,u=a/100,p="$"),r.a.createElement("figure",{className:"progress"},r.a.createElement("span",{className:"bar",role:"progressbar","aria-valuemin":"0","aria-valuenow":d,"aria-valuemax":u},c?r.a.createElement("span",{className:"unknown",title:window.locale("There are {0} {1} Apkallu Falls does not know how to obtain yet...",o,window.locale(n)),style:{width:c+"%"}}):void 0,l?r.a.createElement("span",{className:"prefix",style:{width:l+"%"}}):void 0,r.a.createElement("span",{className:"percentage",style:{marginLeft:l?l+"%":void 0,width:s+"%"}})),r.a.createElement("figcaption",null,r.a.createElement("span",{className:"amount"},r.a.createElement("span",{className:"v"},p,d.toLocaleString()),r.a.createElement("span",{className:"separator"},window.locale("of")),r.a.createElement("span",{className:"t"},p,u.toLocaleString())),r.a.createElement("span",{className:"percent"},Math.floor(s),"%")))}),Pe=Object.assign||function(e){for(var n=1;n60&&(i=114),t.style.height=window.innerHeight-(r+o+i)+"px"}}},{key:"getFriendInfo",value:function(){var e=this.state.friend;if(e){var n={};switch(e["?"]){case"Jonathas":n.title=window.locale("Creator of Apkallu Falls."),n.icon="fab fa-node-js";break;case"XIVDB":n.title=window.locale("Creator of XIVAPI."),n.icon="fal fa-database";break;case"Lauren":n.title=window.locale("Visionary."),n.icon="fal fa-heart";break;case"Tester":n.title=window.locale("Tester."),n.icon="fas fa-bug";break;case"GamerEscape":n.title=window.locale('"Gamer Escape Wiki Guru or something prolly, idk." - Hezkezl'),n.icon="fas fa-gamepad";break;default:return}return r.a.createElement("span",{className:"friend",title:n.title},r.a.createElement("span",{className:n.icon}))}}},{key:"getSupporterInfo",value:function(){var e=this.state.supporter;if(!e)return r.a.createElement("span",{className:"patreon-supporter inactive",title:window.locale("Not a Patreon supporter.")},r.a.createElement("span",{className:"fab fa-patreon"}));if(!e["@"])return r.a.createElement("span",{className:"patreon-supporter expired",title:window.locale(1!==n?"Patreon supporter for {0} months.":"Patreon supporter for {0} month.",e.inactive)},r.a.createElement("span",{className:"fab fa-patreon"})," ",e.inactive);var n=window.config.monthsSince(e["@"]);return r.a.createElement("span",{className:"patreon-supporter",title:window.locale(1!==n?"Patreon supporter for {0} months.":"Patreon supporter for {0} month.",n)},r.a.createElement("span",{className:"fab fa-patreon"})," ",n.toLocaleString())}},{key:"getTranslatorInfo",value:function(){var e=this.state.translator;if(e){var n=void 0;switch(e["?"]){case"French":n="French translator.";break;case"German":n="German translator.";break;case"Japanese":n="Japanese translator.";break;default:n="English translator."}return r.a.createElement("span",{className:"translator",title:window.locale(n)},r.a.createElement("span",{className:"fas fa-globe"}))}}},{key:"updateCounters",value:function(e,n){var t=this.state.counterOffsets,a=Pe({},t);a[e]=(a[e]?a[e]:0)+n,this.setState({counterOffsets:a})}},{key:"render",value:function(){if(!this.state.loaded)return r.a.createElement(Se,null);var e=this.state.info;if(!e)return r.a.createElement(Se,null);var n=this.state,t=n.counterOffsets,a=n.counts,o=e.avatar,i=e.name,l=window,s=l.character,c=(l.totals,window.signedInUser&&window.signedInUser.characters instanceof Array&&window.signedInUser.characters.filter(function(e){return e.id===window.character.id}).length),d=this.props.match.params.supporterCharacterUrl;return r.a.createElement("div",{className:"tracking"},r.a.createElement("h1",{ref:this.h1},r.a.createElement(ke,{to:"/",activeClassName:"active"},"Apkallu Falls")),r.a.createElement("header",{ref:this.header},r.a.createElement("figure",{className:"tracked-character"},r.a.createElement(ke,{to:d?"/!/"+d:window.config.characterUrl(s.id),activeClassName:"active",isActive:function(e,n){return Ee(e,n,"character")}},r.a.createElement("span",{className:"avatar",title:i},r.a.createElement("img",{src:o,alt:i}),this.getFriendInfo(),this.getTranslatorInfo(),this.getSupporterInfo()),r.a.createElement("br",null),r.a.createElement("span",{className:"name"},i))),r.a.createElement("a",{className:"go-back",href:"/character-select",onClick:window.config.resetActiveCharacter},r.a.createElement("i",{className:"fal fa-caret-left"})," ",r.a.createElement("span",{className:"fs-extra"},window.locale("Track another character")),r.a.createElement("span",{className:"phone-tablet-extra"},window.locale("Back")))),r.a.createElement("div",null,r.a.createElement("ul",{ref:this.navLinks},r.a.createElement("li",{className:"nav-link-with-progress"},r.a.createElement(ke,{to:"/achievements",className:"achievement-link",activeClassName:"achievement-link active",isActive:function(e,n){return Ee(e,n,"achievement")}},r.a.createElement("i",{className:"fal fa-trophy"}),r.a.createElement("span",null,window.locale("Achievements")),r.a.createElement(Ce,{dataFor:"Achievements",value:a.achievementPoints,total:window.totals.achievements.points.total-window.totals.achievements.points.unavailable}))),r.a.createElement("li",{className:"nav-link-with-progress"},r.a.createElement(ke,{to:"/minions",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"minion")}},r.a.createElement("i",{className:"fal fa-paw"}),r.a.createElement("span",null,window.locale("Minions")),r.a.createElement(Ce,{dataFor:"Minions",value:a.minions,total:window.totals.minions.total-window.totals.minions.unavailable,unknown:window.totals.minions.unknown}))),r.a.createElement("li",{className:"nav-link-with-progress"},r.a.createElement(ke,{to:"/mounts",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"mount")}},r.a.createElement("i",{className:"fal fa-crow"}),r.a.createElement("span",null,window.locale("Mounts")),r.a.createElement(Ce,{dataFor:"Mounts",value:a.mounts,total:window.totals.mounts.total-window.totals.mounts.unavailable,unknown:window.totals.mounts.unknown}))),r.a.createElement("li",{className:"nav-link-with-progress"},r.a.createElement(ke,{to:"/titles",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"title")}},r.a.createElement("i",{className:"fal fa-tag"}),r.a.createElement("span",null,window.locale("Titles")),r.a.createElement(Ce,{dataFor:"Titles",value:a.titles,total:window.totals.titles.total-window.totals.titles.unavailable,unknown:window.totals.titles.unknown}))),r.a.createElement("li",{className:(c?"nav-link-with-progress":"")+(t.emotes?" unsaved":""),title:t.emotes?window.locale("Unsaved changes"):void 0},r.a.createElement(ke,{to:"/emotes",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"emote")}},r.a.createElement("i",{className:"fal fa-smile"}),r.a.createElement("span",null,window.locale("Emotes")),c?r.a.createElement(Ce,{dataFor:"Emotes",value:window.signedInUser.counts.emotes.filter(function(e){return e.character===window.character.id}).length+(t.emotes?t.emotes:0),total:window.totals.emotes.total-window.totals.emotes.unavailable-window.totals.emotes.byDefault,unknown:window.totals.emotes.unknown}):void 0)),r.a.createElement("li",{className:(c?"nav-link-with-progress":"")+(t["orchestrion-rolls"]?" unsaved":""),title:t["orchestrion-rolls"]?window.locale("Unsaved changes"):void 0},r.a.createElement(ke,{to:"/orchestrion-rolls",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"orchestrion-roll")}},r.a.createElement("i",{className:"fal fa-music"}),r.a.createElement("span",null,window.locale("Orchestrion Rolls")),c?r.a.createElement(Ce,{dataFor:"Orchestrion Rolls",value:window.signedInUser.counts["orchestrion-rolls"].filter(function(e){return e.character===window.character.id}).length+(t["orchestrion-rolls"]?t["orchestrion-rolls"]:0),total:window.totals["orchestrion-rolls"].total-window.totals["orchestrion-rolls"].unavailable,unknown:window.totals["orchestrion-rolls"].unknown}):void 0)),r.a.createElement("li",{className:(c?"nav-link-with-progress":"")+(t.barding?" unsaved":""),title:t.barding?window.locale("Unsaved changes"):void 0},r.a.createElement(ke,{to:"/chocobo-barding",activeClassName:"active",isActive:function(e,n){return Ee(e,n,"chocobo-barding")}},r.a.createElement("i",{className:"fal fa-loveseat"}),r.a.createElement("span",null,window.locale("Chocobo Barding")),c?r.a.createElement(Ce,{dataFor:"Chocobo Barding",value:window.signedInUser.counts.barding.filter(function(e){return e.character===window.character.id}).length+(t.barding?t.barding:0),total:window.totals.barding.total-window.totals.barding.unavailable,unknown:window.totals.barding.unknown}):void 0)))))}}]),n}();var Ae={"/":function(){return window.character?Ne:Se},"/connect":function(){return window.character?Ne:Se},"/patches":function(){return window.character?Ne:Se},"/translate":function(){return window.character?Ne:Se},"/character/:characterId/:name?":function(){return Ne},"/character-select":function(){return Se},"/achievements":function(){return window.character?Ne:Se},"/achievement/:id/:name?":function(){return window.character?Ne:Se},"/chocobo-barding":function(){return window.character?Ne:Se},"/chocobo-barding/:id/:name?":function(){return window.character?Ne:Se},"/emotes":function(){return window.character?Ne:Se},"/emote/:id/:name?":function(){return window.character?Ne:Se},"/minions":function(){return window.character?Ne:Se},"/minion/:id/:name?":function(){return window.character?Ne:Se},"/mounts":function(){return window.character?Ne:Se},"/mount/:id/:name?":function(){return window.character?Ne:Se},"/orchestrion-rolls":function(){return window.character?Ne:Se},"/orchestrion-roll/:id/:name?":function(){return window.character?Ne:Se},"/titles":function(){return window.character?Ne:Se}};Ae["/achievements/tagged/:tag"]=Ae["/achievements"],Ae["/!/:supporterCharacterUrl"]=Ae["/character/:characterId/:name?"],Ae["/chocobo-barding/tagged/:tag"]=Ae["/chocobo-barding"],Ae["/emotes/tagged/:tag"]=Ae["/emotes"],Ae["/minions/tagged/:tag"]=Ae["/minions"],Ae["/mounts/tagged/:tag"]=Ae["/mounts"],Ae["/orchestrion-rolls/category/:category"]=Ae["/orchestrion-rolls"],Ae["/orchestrion-rolls/tagged/:tag"]=Ae["/orchestrion-rolls"],Ae["/titles/tagged/:tag"]=Ae["/titles"];var je=Ae,Oe=function(){function e(e,n){for(var t=0;t Patron')}})," ",window.locale("to have your own character added to this list"),"."," ")),r.a.createElement("nav",{className:"friends"},r.a.createElement("h2",null,window.locale("Friends of Apkallu Falls")),r.a.createElement(We,{type:"friends"}))))}}]),n}(),Xe=function(){var e=window.locale("Character Select");return window.config.pageTitle(e),r.a.createElement("section",{id:"Page-Character-Select"},r.a.createElement("h1",null,e),r.a.createElement(Je,null))},Ke=(t(230),function(e){return r.a.createElement("div",{className:"popup"},r.a.createElement("div",null,e.loading?r.a.createElement("article",null,r.a.createElement(Fe,null)):r.a.createElement("article",null,e.noClose?void 0:r.a.createElement("button",{className:"popup-close",type:"button",onClick:e.closePopup},r.a.createElement("span",{className:"fal fa-times"})),r.a.createElement("div",null,e.children),e.button&&e.buttonCallback?r.a.createElement("footer",null,r.a.createElement("button",{type:"button",onClick:e.buttonCallback},e.button)):void 0)))}),Ye=(t(228),function(){return r.a.createElement(Ue,{className:"patreon-info-box"},r.a.createElement("h2",null,r.a.createElement("span",{className:"fab fa-patreon"})," ",window.locale("Become a {0}","Patron")),r.a.createElement("p",null,window.locale("Apkallu Falls is a fan-made website with only one developer and a tiny team of volunteer translators who are all avid Final Fantasy XIV players just like you. To give the best experience possible, Apkallu Falls features no adverts or tracking tools whatsoever. The running cost and continued development incentive is funded solely by our wonderful supporters over on Patreon.")),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("{0} to find out how you can support Apkallu Falls, have your character distinguished for everyone to see and, most importantly, get rid of this annoying box!","__patreon__").replace("__patreon__",''+window.locale("Visit our Patreon page")+"")}}),r.a.createElement("p",{className:"help"},window.locale("Already a Patron? Jump into the #supporters-lounge room on our Discord server and let us know who your character is.")))}),Ze=(t(226),function(e){var n={};window.signedInUser.characters.forEach(function(e){return n[e.id]=e.name});var t=e.data,a=Object.keys(n).map(function(e){var a={id:e,name:n[e]},r=t.emotes.filter(function(n){return n.character==e}).length;return r&&(a.emotes=r),a});return r.a.createElement(Ue,{className:"unsaved-changes-panel"},r.a.createElement("h2",null,r.a.createElement("span",{className:"fal fa-save"})," ",window.locale("Unsaved changes")),r.a.createElement("p",null,window.locale("You have unsaved changes for the following character(s):")),r.a.createElement("ul",null,a.map(function(e){return r.a.createElement("li",{key:"unsaved-character-"+e.id},r.a.createElement(we,{to:window.config.characterUrl(e.id,e.name)},e.name))})))}),Qe=(t(224),function(e){if(!e.characters||!e.characters.length||!e.supporters)return r.a.createElement(Ue,{className:"verified-characters"},r.a.createElement("h2",null,window.locale("Your Characters")),r.a.createElement("p",{className:"none-verified"},r.a.createElement("span",null,r.a.createElement("span",{className:"fal fa-user-slash"}))," ",window.locale('You have no verified characters. To verify ownership of a character, visit the profile page of the character you wish to verify and click on the "Verify Ownership" button.')));var n=Object.values(e.supporters);return r.a.createElement(Ue,{className:"verified-characters"},r.a.createElement("h2",null,window.locale("Your Characters")),e.characters.map(function(e){var t=n.filter(function(n){return n.id===e.id})[0];return t?r.a.createElement(Be,{key:"verified-characters-"+e.id,type:"supporter",data:t}):r.a.createElement(Be,{key:"verified-characters-"+e.id,data:e})}))}),$e=(t(222),function(){function e(e,n){for(var t=0;t Google Firebase')}}),r.a.createElement("p",{className:"help"},window.locale("No personally-identifiable information is stored by Apkallu Falls."))),u?f?r.a.createElement(Ke,{loading:!0}):r.a.createElement(Ke,{button:window.locale("Close"),buttonCallback:this.handlePopupClose,closePopup:this.handlePopupClose},r.a.createElement("h2",null,window.locale("I've forgotten my password")),r.a.createElement("p",null,window.locale("A password reset email has been sent to your email address."))):void 0)}}]),n}(),nn=(t(220),function(){return r.a.createElement(Ue,{className:"help-translating icon-alert-panel"},r.a.createElement("div",null,r.a.createElement("div",null,r.a.createElement("i",{className:"fal fa-exclamation-circle"})),r.a.createElement("p",null,"We need help translating Apkallu Falls into your language.",r.a.createElement("br",null),"Visit the ",r.a.createElement(we,{to:"/translate"},"Translate")," page to find out how you can help.")))}),tn=(t(218),function(e){return r.a.createElement(Ue,{className:"news-panel"},e.children)}),an=function(){function e(e,n){for(var t=0;t div").scrollTo(0,0),setTimeout(function(){window.twttr&&window.twttr.widgets&&"function"==typeof window.twttr.widgets.load&&window.twttr.widgets.load()},1)}},{key:"getNewsStories",value:function(){var e=this.state,n=e.news,t=e.patches;return r.a.createElement("section",{id:"Site-News"},n.filter(function(e){return"patch"===e["?"]}).map(function(e,n){if(!(n>=1)){var a=e["@"],o=config.formatDate(a),i=t.filter(function(n){return n.id===e.value})[0],l=i.name[window.lang],s=i.counts,c=[];s&&(s.achievements&&c.push(window.locale("{0} new {1}",s.achievements.change,window.locale("achievement"+(1===s.achievements.change?"":"s")))),s.minions&&c.push(window.locale("{0} new {1}",s.minions.change,window.locale("minion"+(1===s.minions.change?"":"s")))),s.mounts&&c.push(window.locale("{0} new {1}",s.mounts.change,window.locale("mount"+(1===s.mounts.change?"":"s")))),s.titles&&c.push(window.locale("{0} new {1}",s.titles.change,window.locale("title"+(1===s.titles.change?"":"s")))),s.emotes&&c.push(window.locale("{0} new {1}",s.emotes.change,window.locale("emote"+(1===s.emotes.change?"":"s")))),s["orchestrion-rolls"]&&c.push(window.locale("{0} new {1}",s["orchestrion-rolls"].change,window.locale("orchestrion roll"+(1===s["orchestrion-rolls"].change?"":"s")))),s.barding&&c.push(window.locale("{0} new {1}",s.barding.change,window.locale("chocobo barding"))));var d=window.locale("{0} is now live!",l),u=r.a.createElement("div",null,e.image?r.a.createElement("img",{src:"https://api.apkallufalls.com/"+e.image}):void 0,r.a.createElement("p",null,window.locale("{0} is now available on Apkallu Falls, introducing:",l)),r.a.createElement("ul",null,s&&c.length?c.map(function(e){return r.a.createElement("li",{key:e},e)}):r.a.createElement("li",null,window.locale("No new content")," ",r.a.createElement("span",{className:"fal fa-frown"}))),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("See the {0} page for a full breakdown of all patches.","__pageLink__").replace("__pageLink__",''+window.locale("Patches")+"")}}));return r.a.createElement(tn,{key:a},r.a.createElement("h2",null,d),u,r.a.createElement("footer",null,o))}}))}},{key:"handlePopupClose",value:function(){this.setState({isPopupVisible:!1})}},{key:"handleWhatsHiddenClick",value:function(e){e.preventDefault(),this.setState({isPopupVisible:!0})}},{key:"toggleDarkMode",value:function(){var e=this.state.darkMode;e?(localStorage&&localStorage.removeItem("theme"),document.querySelector("body").classList.remove("dark-mode")):(localStorage&&localStorage.setItem("theme","dark"),document.querySelector("body").classList.add("dark-mode")),this.setState({darkMode:!e})}},{key:"render",value:function(){var e=this.state,n=e.darkMode,t=e.isPopupVisible,a=e.news;return r.a.createElement("section",{id:"Page-Home"},r.a.createElement("h1",null,window.locale("Welcome to Apkallu Falls")),r.a.createElement("p",null,window.locale("Apkallu Falls is a character content tracking website which by default hides anything which is unobtainable, time-limited or promotional. It also provides details of how to obtain everything it tracks.")," ",r.a.createElement("a",{className:"help-link",title:window.locale("Click for help"),onClick:this.handleWhatsHiddenClick},r.a.createElement("small",null,r.a.createElement("span",{className:"far fa-info-circle"})," ",window.locale("What is hidden?")))),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("For website-specific updates and notices, keep an eye on our {0}, join our {1} or click on the button below to follow us on Twitter!","__patreonBlogLink__","__discordLink__").replace("__patreonBlogLink__",''+window.locale("Patreon blog")+"").replace("__discordLink__",''+window.locale("Discord server")+"")}}),r.a.createElement("p",null,r.a.createElement("a",{href:"https://twitter.com/ApkalluFalls?ref_src=twsrc%5Etfw",className:"twitter-follow-button","data-size":"large","data-show-count":"true"},"Follow @ApkalluFalls")),r.a.createElement("h2",null,window.locale("Updates")),"en"!==window.lang?r.a.createElement(nn,null):void 0,a?this.getNewsStories():r.a.createElement(tn,null,r.a.createElement(Fe,{inline:!0})),r.a.createElement(Ue,null,r.a.createElement("p",null,window.locale(n?"Not a fan of dark mode?":"Is Apkallu Falls too bright?")," ",r.a.createElement("button",{className:"link-button",type:"button",onClick:this.toggleDarkMode},window.locale(n?"Switch back to Light Mode":"Enable Dark Mode"))),r.a.createElement("p",{className:"help"},window.locale("Dark Mode is currently an expermiental feature, and may still require work to iron out the creases."))),t?r.a.createElement(Ke,{button:window.locale("Close"),buttonCallback:this.handlePopupClose,closePopup:this.handlePopupClose},r.a.createElement("h2",null,window.locale("What content does Apkallu Falls hide?")),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("By default, Apkallu Falls hides any content which is unobtainable, time-limited or promotional. This is split into two categories, {i0} and {i1}, and includes:",window.locale("Promotional"),window.locale("Unavailable"))}}),r.a.createElement("ul",null,r.a.createElement("li",null,window.locale("In-game events")),r.a.createElement("li",null,window.locale("The Feast season rewards")),r.a.createElement("li",null,window.locale("Marketing campaigns and fan festivals")),r.a.createElement("li",null,window.locale("Lodestone contest rewards")),r.a.createElement("li",null,window.locale("Mog Station and Square Enix Store purchases")),r.a.createElement("li",null,window.locale("Disused Legacy (1.0) content")),r.a.createElement("li",null,window.locale("Starting city achievements"))),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("This content is still accessible, take the {0} for example, it just doesn't display within the content lists without first applying a filter, nor does this hidden content count towards character progress displayed in the sidebar when tracking a character.","__minionLink__").replace("__minionLink__",''+window.locale("Cait Sith Doll")+"")}})):void 0)}}]),n}(),on=t(155),ln=t.n(on),sn=Object.assign||function(e){for(var n=1;n=0||Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t}(n,["wrappedComponentRef"]);return r.a.createElement(ee,{children:function(n){return r.a.createElement(e,sn({},a,n,{ref:t}))}})};return n.displayName="withRouter("+(e.displayName||e.name)+")",n.WrappedComponent=e,n.propTypes={wrappedComponentRef:p.a.func},ln()(n,e)},dn=(t(216),function(e){var n=e.icon,t=e.name,a=e.resource,o=e.special,i=window.iconPositions&&window.iconPositions[a]&&window.iconPositions[a][n];return e.iconQualified?r.a.createElement("div",{className:"sprite"},r.a.createElement("span",{style:{backgroundImage:"url("+n+")",backgroundSize:"cover"},title:t})):"items"===a?r.a.createElement("div",{className:"sprite"},r.a.createElement("span",{style:{backgroundImage:"url(https://api.apkallufalls.com/icons/item/"+n+".png)",backgroundSize:"cover"},title:t})):"orchestrion-rolls"===a?r.a.createElement("div",{className:"sprite"},r.a.createElement("span",{className:"orchestrion-roll-icon orchestrion-category-"+n},r.a.createElement("span",{className:"frame"},o))):r.a.createElement("div",{className:"sprite"},n&&i?r.a.createElement("span",{style:{backgroundImage:"url(https://api.apkallufalls.com/icons/"+a+".png)",backgroundPositionX:-i[0],backgroundPositionY:-i[1]},title:t}):r.a.createElement("span",{className:"missing-icon"},r.a.createElement("i",{className:"fal fa-question-square"})))}),un=(t(214),function(){function e(e,n){for(var t=0;t@ApkalluFalls')}}));return r.a.createElement("ol",{className:"obtain-method-list"+(!i||l.length<2?" single":"")},l)};t(210);var mn=function(e){var n=e.data,t=e.subresource,a=e.tags,o=e.uniq,i=window.api.getRefInfo,l=void 0,s=void 0;switch(t){case"barding":s="/chocobo-barding";break;default:s="/"+t+"s"}if(s+="/tagged/",n)if("achievement"===t||"title"===t){var c=n[0],d=n[1];l=r.a.createElement(we,{to:s+d+"-"+c},window.config.getTitleTagName(n,a))}else l=n.filter(function(e,n,t){return n===t.findIndex(function(n){return i(n.method.text).text===i(e.method.text).text})}).sort(function(e,n){return i(e.method.text).text0&&n.order<1e4)&&window.character&&o&&window.signedInUser&&window.signedInUser.characters&&window.signedInUser.characters.filter(function(e){return e.id===window.character.id})[0],C=void 0,P=void 0;if(S)if(n.ref instanceof Array&&n.ref.filter(function(e){return"isDefault"===e.method.text}).length)C="always",g=!1;else if(n.ref instanceof Array&&0!==n.ref.filter(function(e){return e.available&&!e.promo}).length){var I=window.signedInUser.data.uid;if(f&&f[I]&&f[I][s]){var N=f[I][s].filter(function(e){return e.id===n.id})[0];N?(C=N.obtained,P=!0):C=!g}else C=!g}else C="never";var A=n.untradable;return"titles"===s&&(A=!0),r.a.createElement("article",{className:g?"unobtained":"obtained",key:"list-entry-"+n.id},w,r.a.createElement(pn,{resource:"title"===d?"achievements":"barding"===d?"barding":d+"s",icon:"orchestrion-roll"===d?n.category:n.icon,name:m,awaitingSave:P,checkbox:S,isChecked:C,checkboxChangeHandler:function(t){return e.handleCheckboxChange(n,t)},special:"orchestrion-roll"===d&&n.order<1e4&&n.order>0?n.order:void 0},g||o?void 0:r.a.createElement("i",{className:"fal fa-check"+("title"===d&&n.female?" title-female-checkmark":"")}),"title"===d?r.a.createElement("span",{className:"title-name"},function(e){var n=void 0,t=void 0;n=e.prefix?"..."+e.name[window.lang]:e.name[window.lang]+"...";e.female&&e.female[window.lang]&&(t=e.prefix?"..."+e.female[window.lang]:e.female[window.lang]+"...");return r.a.createElement("span",{className:"title-gender-variants"},r.a.createElement("span",{title:window.locale(t?"Male":"Unisex")},t?r.a.createElement("i",{className:"fal fa-mars"}):r.a.createElement("i",{className:"fal fa-venus-mars"})," ",n),t?r.a.createElement("span",{className:"female-title",title:window.locale("Female")},r.a.createElement("i",{className:"fal fa-venus"})," ",t):void 0)}(n)):r.a.createElement(we,{to:window.config.wikiUrl(d,n.id,m)},m),"achievement"===d?void 0:r.a.createElement("div",{className:"method"},r.a.createElement("h5",null,window.locale("How to obtain")),r.a.createElement(fn,{data:n,localisation:a,noImages:!0,subresource:d}),A?void 0:r.a.createElement("p",{className:"mb-purchase"},window.locale("Tradeable"))),u?void 0:"title"===d?r.a.createElement(mn,{data:n.tag,tags:p,subresource:d,uniq:n.id}):r.a.createElement(mn,{data:n.ref,subresource:d,uniq:n.id})))}):r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-exclamation-circle"})," ",window.locale("No {0} found matching the above filters.",window.locale(d+"s"))))}}]),n}();t(206);var wn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vn=function(){function e(e,n){for(var t=0;t div").scrollTo(0,0)})}},{key:"componentDidUpdate",value:function(e){var n=e.match,t=(e.resource,n.params);if(t&&"object"===(void 0===t?"undefined":wn(t))&&t.tag)if("achievements"===e.resource||"titles"===e.resource){var a=t.tag.split("-");this.tag[0]===a[0]&&this.tag[1]===a[1]||(this.tag=a,this.applyFilter())}else t.tag!==this.tag&&(this.tag=t.tag,this.applyFilter())}},{key:"componentwillUnmount",value:function(){window.config.reloadList=void 0}},{key:"applyFilter",value:function(){var e=this,n=JSON.parse(JSON.stringify(this.content.data)),t=this.props,a=t.noTrack,r=t.resource,o=this.patch,i=0,l=0,s=0,c=0;n.filter(function(e){if(e.hasParent)return!1;if(o&&"any"!==o)switch(o){case"legacy":if(1!==e.patch)return!1;break;case"arealmreborn":if(e.patch<2||e.patch>18)return!1;break;case"heavensward":if(e.patch<19||e.patch>35)return!1;break;case"stormblood":if(e.patch<36)return!1;break;default:if(e.patch!==+o)return!1}return!0}).forEach(function(e){var n=e.ref;if(!n)return c+=1;n.filter(function(e){return!e.promo&&e.available}).length&&(i+=1),n.filter(function(e){return e.promo}).length&&(l+=1),n.filter(function(e){return!e.available}).length&&(s+=1)});var d=n.filter(function(e){return!e.hasParent}).length;this.setState({availableCount:i,promotionalCount:l,unavailableCount:s,unknownCount:c,data:null},function(){setTimeout(function(){var t=n.filter(function(n){if(e.category&&+e.category!=+n.category)return!1;var t=n.ref;if(o&&"any"!==o)switch(o){case"legacy":if(1!==n.patch)return!1;break;case"arealmreborn":if(n.patch<2||n.patch>18)return!1;break;case"heavensward":if(n.patch<19||n.patch>35)return!1;break;case"stormblood":if(n.patch<36)return!1;break;default:if(n.patch!==+o)return!1}if(n.hasParent)return!1;if("unknown"===e.tag&&!t)return!0;if(e.tag&&"achievements"!==r&&!t)return!1;if(!e.unknown&&!t)return!1;if(window.character)if("achievements"===r){if("obtained"===e.show&&-1===e.obtained.indexOf(n.id))return!1;if("unobtained"===e.show&&-1!==e.obtained.indexOf(n.id))return!1}else if("titles"===r){if("obtained"===e.show&&-1===e.obtained.indexOf(n.ref[0].extra.achievement.id))return!1;if("unobtained"===e.show&&-1!==e.obtained.indexOf(n.ref[0].extra.achievement.id))return!1}else if(a){if("all"!==e.show||localStorage&&window.character&&window.signedInUser){var i=JSON.parse(localStorage.getItem("store")),l=JSON.parse(localStorage.getItem("unsaved-changes")),s=!1;if(n.ref&&n.ref.filter(function(e){return e.method&&"isDefault"===e.method.text}).length){if("unobtained"===e.show)return!1}else{if(l&&l[window.signedInUser.data.uid]&&l[window.signedInUser.data.uid][r]){var c=l[window.signedInUser.data.uid][r].filter(function(e){return e.character===window.character.id&&e.id===n.id})[0];if(c){if(s=!0,"obtained"===e.show&&!c.obtained)return!1;if("unobtained"===e.show&&c.obtained)return!1}}if(!s&&i&&i[r]){var d=i[r].filter(function(e){return e.character===window.character.id&&e.id===n.id})[0];if(d){if(s=!0,"obtained"===e.show&&!d.obtained)return!1;if("unobtained"===e.show&&d.obtained)return!1}}if(!s&&"obtained"===e.show)return!1}}}else{if("obtained"===e.show&&-1===e.obtained.indexOf(n.id))return!1;if("unobtained"===e.show&&-1!==e.obtained.indexOf(n.id))return!1}if("achievements"!==r&&!t)return!0;if(e.tag)if("achievements"===r||"titles"===r){var u=n.tag;if(u[1]!==+e.tag[0])return!1;if(u[0]!==+e.tag[1])return!1;if("achievements"===r)return!0}else if(0===t.filter(function(n){return window.api.getRefInfo(n.method.text).url===e.tag}).length)return!1;return e.tag||e.availableFilter||(t=t.filter(function(e){return e.promo||!e.available})),e.tag||e.promotional||(t=t.filter(function(e){return!e.promo})),e.tag||e.unavailable||(t=t.filter(function(e){return e.available})),n.ref=t,t.length}).sort(function(e,n){return e.patch===n.patch?e.name[window.lang]=e&&t.id<=n:e?t.id>=e:n?t.id<=n:void 0}).filter(function(e){return t.content.data.filter(function(n){return n.patch===e.id}).length}).map(function(e){e.expansion;var n=e.id,t=e.version;return r.a.createElement("option",{key:t,value:n},e.version," · ",e.name[window.lang])})}},{key:"handlePatchChange",value:function(e){this.patch=e.target.value,this.applyFilter()}},{key:"handleShowChange",value:function(e){this.show=e.target.value,this.applyFilter()}},{key:"handleAvailableChange",value:function(e){this.availableFilter=e.target.checked,this.applyFilter()}},{key:"handlePromotionalChange",value:function(e){this.promotional=e.target.checked,this.applyFilter()}},{key:"handleUnavailableChange",value:function(e){this.unavailable=e.target.checked,this.applyFilter()}},{key:"handleUnknownChange",value:function(e){this.unknown=e.target.checked,this.applyFilter()}},{key:"render",value:function(){if(!this.state.loaded||!this.state.data)return r.a.createElement(Fe,null);var e=this.state,n=e.availableCount,t=e.promotionalCount,a=e.unavailableCount,o=e.unknownCount,i=e.availableFilter,l=e.data,s=e.patch,c=e.promotional,d=e.total,u=e.unavailable,p=e.show,h=e.unknown,f=this.props,m=f.icon,g=f.noTrack,b=f.resource,w=f.subresource,v=this.pageTitle,y=g&&window.character&&!window.signedInUser,x=g&&window.character&&window.signedInUser&&(window.signedInUser.characters&&!window.signedInUser.characters.filter(function(e){return e.id===window.character.id})[0]||!window.signedInUser.characters);return r.a.createElement("section",{id:"Page-List"},r.a.createElement("h1",null,r.a.createElement("span",{className:m})," ",this.tag?window.locale('{0} tagged "{1}"',v,"achievements"===b||"titles"===b?window.config.getTitleTagName(this.tag,this.tags,!0):window.api.getRefInfo(this.tag).text):this.category?r.a.createElement("span",null,v," – ",window.config.orchestrionRollCategories[this.category].name[window.lang]):v),r.a.createElement("p",{className:"subtitle"},window.locale("Showing {0} of {1} available"+(d-l.length>0?" ({2} hidden)":""),l.length,n,d-l.length)),this.tag?void 0:r.a.createElement(Ue,{className:"filter-panel"},r.a.createElement("form",{className:"list-filter"},r.a.createElement("div",null,r.a.createElement("div",{className:"checkbox"},r.a.createElement("label",{htmlFor:"available",className:i?"checked":void 0},r.a.createElement("input",{id:"available",type:"checkbox",checked:i,onChange:this.handleAvailableChange}),r.a.createElement("span",null,window.locale("Available")," ",r.a.createElement("small",null,"(",n,")")))),"achievements"===b||"titles"===b?void 0:r.a.createElement("div",{className:"checkbox"},r.a.createElement("label",{htmlFor:"unknown",className:h?"checked":void 0},r.a.createElement("input",{id:"unknown",type:"checkbox",checked:h,onChange:this.handleUnknownChange}),r.a.createElement("span",null,window.locale("Unknown")," ",r.a.createElement("small",null,"(",o,")")))),r.a.createElement("div",{className:"checkbox"},r.a.createElement("label",{htmlFor:"unavailable",className:u?"checked":void 0},r.a.createElement("input",{id:"unavailable",type:"checkbox",checked:u,onChange:this.handleUnavailableChange}),r.a.createElement("span",null,window.locale("Unavailable")," ",r.a.createElement("small",null,"(",a,")")))),"achievements"===b||"titles"===b?void 0:r.a.createElement("div",{className:"checkbox"},r.a.createElement("label",{htmlFor:"promotional",className:c?"checked":void 0},r.a.createElement("input",{id:"promotional",type:"checkbox",checked:c,onChange:this.handlePromotionalChange}),r.a.createElement("span",null,window.locale("Promotional")," ",r.a.createElement("small",null,"(",t,")"))))),r.a.createElement("div",null,r.a.createElement("div",null,r.a.createElement("label",{htmlFor:"patch",className:"any"!==s?"checked":void 0},window.locale("Patch")),r.a.createElement("select",{id:"patch",onChange:this.handlePatchChange,value:s},r.a.createElement("optgroup",{label:window.locale("Expansions")},r.a.createElement("option",{key:"any-patch",value:"any"},window.locale("Any")),r.a.createElement("option",{key:"stormblood",value:"stormblood"},window.locale("Stormblood")),r.a.createElement("option",{key:"heavensward",value:"heavensward"},window.locale("Heavensward")),r.a.createElement("option",{key:"arealmreborn",value:"arealmreborn"},window.locale("A Realm Reborn"))),r.a.createElement("optgroup",{label:window.locale("Stormblood")},this.getPatches(36)),r.a.createElement("optgroup",{label:window.locale("Heavensward")},this.getPatches(19,35)),r.a.createElement("optgroup",{label:window.locale("A Realm Reborn")},this.getPatches(2,18)))),window.character&&(!g||g&&window.signedInUser)?r.a.createElement("div",null,r.a.createElement("label",{htmlFor:"show",className:"all"!==p?"checked":void 0},window.locale("Show")),r.a.createElement("select",{id:"show",onChange:this.handleShowChange,value:p},r.a.createElement("option",{key:"show-all",value:"all"},window.locale("All")),r.a.createElement("option",{key:"show-obtained",value:"obtained"},window.locale("Obtained")),r.a.createElement("option",{key:"show-unobtained",value:"unobtained"},window.locale("Unobtained")))):void 0)),r.a.createElement("p",{className:"help"},r.a.createElement("span",{className:"fal fa-info-circle"})," ",window.locale("Clicking on a tag next to any {0} below will reveal all {1} which share that tag.",this.lowerSingular,this.lowerPlural))),"en"!==window.lang?r.a.createElement(nn,null):void 0,y?r.a.createElement(Ue,null,r.a.createElement("h5",null,window.locale("Note")),r.a.createElement("p",null,window.locale("{0} data is not publicly accessible. Because of this, Apkallu Falls cannot automatically determine whether any of the below {1} have already been unlocked by any character.",this.upperPlural,this.lowerPlural)),r.a.createElement("p",{className:"big",dangerouslySetInnerHTML:{__html:window.locale("{0} to make use of manual tracking features.","__signin__").replace("__signin__",' '+window.locale("Sign in to Apkallu Falls")+"")}})):x?r.a.createElement(Ue,null,r.a.createElement("h5",null,window.locale("Note")),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("If this is your character, verify it as yours on your character's {0} to be able to check off the {1} you've obtained.","__profile__",b).replace("__profile__",''+window.locale("profile")+"")}})):void 0,this.tag?r.a.createElement("nav",{className:"tag-return-link"},r.a.createElement(we,{to:"/"+this.tagReturnLink},r.a.createElement("i",{className:"fal fa-caret-left"})," ","achievements"===b?window.locale("Achievements"):window.locale("Return to the {0} list.",this.tagReturnText))):void 0,r.a.createElement(bn,{data:l,localisation:this.content.localisation,noTrack:g,tags:this.tags,obtained:this.obtained,patches:this.patches,resource:b,subresource:w,show:this.show,tag:this.tag}))}}]),n}(),xn=cn(function(e){return r.a.createElement(yn,e)}),kn=(t(204),function(e){var n=e.categories;e.obtained;return r.a.createElement(Ue,{className:"orchestrion-group-panel"},r.a.createElement("div",null,r.a.createElement("nav",null,r.a.createElement("ul",null,n.filter(function(e){return!e.hideProgress}).map(function(e){return En(e)})),r.a.createElement("hr",null),r.a.createElement("ul",null,n.filter(function(e){return e.hideProgress}).map(function(e){return En(e)})))))});function En(e){return r.a.createElement("li",{key:"ac"+e.id},r.a.createElement(we,{to:"/orchestrion-rolls/category/"+e.id},r.a.createElement("span",null,r.a.createElement("span",{className:"orchestrion-roll-icon orchestrion-category-"+e.id},r.a.createElement("span",{className:"frame"})),r.a.createElement("span",{className:"category-name"},r.a.createElement("h4",null,e.name[window.lang]),r.a.createElement("p",null,window.locale("There are {0} orchestrion rolls in this category.",e["orchestrion-rolls"].length)))),window.character&&!e.hideProgress?r.a.createElement(Ce,{total:e["orchestrion-rolls"].length,value:e.obtained}):void 0))}t(201);var Sn=function(){function e(e,n){for(var t=0;t1376725649e3&&e.date>=n&&e.date<=t}).length;a>g.total&&(g={total:a,min:n,max:t})}),c=r.a.createElement("ul",null,r.a.createElement("li",{dangerouslySetInnerHTML:{__html:window.locale("__achievement__ was {0}'s first achievement, unlocked {1} days ago.",s,window.config.daysSince(p.obtained)).replace("__achievement__",''+f+"")}}),r.a.createElement("li",{dangerouslySetInnerHTML:{__html:window.locale("__achievement__ is {0}'s latest achievement, unlocked {1} days ago.",s,window.config.daysSince(h.obtained)).replace("__achievement__",''+m+"")}}),r.a.createElement("li",{dangerouslySetInnerHTML:{__html:window.locale("The most achievements {0} unlocked on a single day was {i1} on {2}.",s,g.total,config.formatDate(g.min))}}))}var b=void 0;if(window.signedInUser&&0!==window.signedInUser.characters.filter(function(e){return e.id===window.character.id}).length){var w=window.signedInUser.counts.emotes.filter(function(e){return e.character===window.character.id}).length,v=window.signedInUser.counts["orchestrion-rolls"].filter(function(e){return e.character===window.character.id}).length,y=window.signedInUser.counts.barding.filter(function(e){return e.character===window.character.id}).length,x=l.emotes.total-l.emotes.unavailable-l.emotes.byDefault-l.emotes.unknown,k=l["orchestrion-rolls"].total-l["orchestrion-rolls"].unavailable-l["orchestrion-rolls"].unknown,E=l.barding.total-l.barding.unavailable-l.barding.unknown;b=[r.a.createElement("li",{key:"emotes-progress"},r.a.createElement(we,{to:"/emotes"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":x},w)),r.a.createElement("small",null,window.locale("Emotes"))),r.a.createElement(Ce,{dataFor:"Emotes",value:w,total:x}))),r.a.createElement("li",{key:"orchestrion-rolls-progress"},r.a.createElement(we,{to:"/orchestrion-rolls"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":k},v)),r.a.createElement("small",null,window.locale("Orchestrion rolls"))),r.a.createElement(Ce,{dataFor:"Orchestrion",value:v,total:k}))),r.a.createElement("li",{key:"barding-progress"},r.a.createElement(we,{to:"/chocobo-barding"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":E},y)),r.a.createElement("small",null,window.locale("Chocobo barding"))),r.a.createElement(Ce,{dataFor:"Barding",value:y,total:E})))]}return r.a.createElement(Ue,{className:"character-stats-panel"},r.a.createElement("h2",null,window.locale("Stats")),c,r.a.createElement("section",{className:"counts"},r.a.createElement("ul",null,r.a.createElement("li",null,r.a.createElement(we,{to:"/achievements"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":l.achievements.points.total-l.achievements.points.unavailable},o.achievementPoints)),r.a.createElement("small",null,window.locale("Achievement points"))),r.a.createElement(Ce,{dataFor:"Achievements",value:o.achievementPoints,total:l.achievements.points.total-l.achievements.points.unavailable}))),r.a.createElement("li",null,r.a.createElement(we,{to:"/titles"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":l.titles.total-l.titles.unavailable},o.titles)),r.a.createElement("small",null,window.locale("Titles"))),r.a.createElement(Ce,{dataFor:"Titles",value:o.titles,total:l.titles.total-l.titles.unavailable}))),r.a.createElement("li",null,r.a.createElement(we,{to:"/minions"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":l.minions.total-l.minions.unavailable-l.minions.unknown},o.minions)),r.a.createElement("small",null,window.locale("Minions"))),r.a.createElement(Ce,{dataFor:"Minions",value:o.minions,total:l.minions.total-l.minions.unavailable-l.minions.unknown}))),r.a.createElement("li",null,r.a.createElement(we,{to:"/mounts"},r.a.createElement("span",{className:"text"},r.a.createElement("span",null,r.a.createElement("strong",{"data-total":l.mounts.total-l.mounts.unavailable-l.mounts.unknown},o.mounts)),r.a.createElement("small",null,window.locale("Mounts"))),r.a.createElement(Ce,{dataFor:"Mounts",value:o.mounts,total:l.mounts.total-l.mounts.unavailable-l.mounts.unknown}))),b)),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Combined Levels")),r.a.createElement(Ce,{dataFor:"Combined Levels",value:o.combinedLevel,total:window.totals.levels.total})),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Achievements")),r.a.createElement(Ce,{dataFor:"Achievements",value:o.achievements,total:window.totals.achievements.total-window.totals.achievements.unavailable})),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Achievement Item Rewards")),r.a.createElement(Ce,{dataFor:"Achievement Item Rewards",value:o.achievementRewards,total:window.totals.rewards.total-window.totals.rewards.unavailable})),r.a.createElement("p",null,window.locale("The statistics below are based on the achievements this character has unlocked and can therefore wildly vary and jump quickly. Using Carpenter Levequests as an example, the III and IV achievements leap from 40 to 80, this means if a character has completed 79 unique leves in this category, the statistic below will only count 40 of them.")),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Unique Levequests")),r.a.createElement(Ce,{dataFor:"Unique Levequests",value:d,total:window.totals.levequests.total})),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Relic Weapon Progress")),On("Relic Weapon Progress",window.totals.weapons.relic,i)),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Aetherpool Gear Upgrades")),On("Aetherpool Gear Upgrades",window.totals.weapons.aetherpool,i)),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Anima Weapon Progress")),On("Anima Weapon Progress",window.totals.weapons.anima,i)),r.a.createElement("section",{className:"progress-container"},r.a.createElement("span",null,window.locale("Eureka Weapon Progress")),On("Eureka Weapon Progress",window.totals.weapons.eureka,i)))};function jn(e,n,t){for(var a=function(a){var r=t.filter(function(n){return n.id===e[a]})[0];if(r)return{v:n.filter(function(e){return e.id===r.id})[0].weight}},r=e.length-1;r>=0;r--){var o=a(r);if("object"===(void 0===o?"undefined":Nn(o)))return o.v}return 0}function On(e,n,t){var a=n.weight||1,o=0,i=0;return n.ids.forEach(function(e){var n=void 0,r=void 0;e&&"object"===(void 0===e?"undefined":Nn(e))?(n=e.id,r=e.weight):(n=e,r=a),o+=r,t.filter(function(e){return e.id===n})[0]&&(i+=r)}),r.a.createElement(Ce,{dataFor:e,value:i,total:o})}t(193);var Tn=function(){function e(e,n){for(var t=0;t'+window.locale("Sign in to Apkallu Falls")+"")}})));var e=this.state,n=e.isPopupVisible,t=e.verified;if(!n&&t)return r.a.createElement(Ue,{className:"verify-ownership"},r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-check"})," ",window.locale("This is your character.")));var a=this.props.name,o=this.state,i=o.popupError,l=o.verifying,s=void 0;if(n)switch(window.lang){case"de":s="de";break;case"en":s="na";break;case"fr":s="fr";break;case"jp":s="jp"}return r.a.createElement(Ue,{className:"verify-ownership"},r.a.createElement("h2",null,window.locale("Verify Ownership")),r.a.createElement("p",null,window.locale("Is this your character? If so, you can link it to your Apkallu Falls account by clicking on the button below.")),r.a.createElement("button",{type:"button",onClick:this.handleVerifyOwnershipClick,disabled:n},r.a.createElement("span",{className:"fal fa-user-plus"})," ",window.locale("Verify Ownership")),n?l?r.a.createElement(Ke,{loading:!0}):t?r.a.createElement(Ke,{noClose:!0},r.a.createElement("div",{className:"verified"},r.a.createElement("span",null,r.a.createElement("span",{className:"fal fa-3x fa-check"}),r.a.createElement("p",null,window.locale("Verified"))))):r.a.createElement(Ke,{button:window.locale(i?"Try again":"Verify my character"),buttonCallback:this.handleVerificationClick,closePopup:this.handlePopupClose},r.a.createElement("h2",null,window.locale("Verify Ownership")),i?r.a.createElement("p",{className:"error"},r.a.createElement("span",{className:"fal fa-exclamation-circle"})," ",i):void 0,r.a.createElement("p",null,window.locale("In order to verify ownership of {0}, please perform the following steps:",a)),r.a.createElement("ol",null,r.a.createElement("li",{dangerouslySetInnerHTML:{__html:window.locale("Log in to this character's account on The Lodestone ({0}).","__lodestone__").replace("__lodestone__",''+window.locale("link")+"")}}),r.a.createElement("li",null,window.locale("Edit your character's profile to include this verification code:"),r.a.createElement("br",null),r.a.createElement("code",null,window.signedInUser.data.uid.split("").reverse().join("")))),r.a.createElement("p",{className:"help"},window.locale("You can remove the verification code from your profile after the verification is complete."))):void 0)}}]),n}(),_n=(t(191),"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e}),zn=function(){function e(e,n){for(var t=0;t div").scrollTo(0,0),this.character=window.character,Promise.all([this.character.info(),this.character.achievements(),this.character.achievementStats(),this.character.counts(),this.character.isPrivate(),this.character.data,window.api.json("achievements",!1,"v3"),this.character.isTracked(),window.api.json("titles",!1,"v3"),window.api.json("totals")]).then(function(e){if(window.config.reloadNav(),e[5].state){var n=localStorage&&JSON.parse(localStorage.getItem("tracked")),t=n instanceof Array&&n.filter(function(e){return+e.id==+i.character.id})[0];return window.config.pageTitle(t&&t.name||window.locale("Unknown")),i.setState({loaded:!0,newCharacterData:t||!0,xivapiState:e[5].state},function(){window.character=void 0})}window.config.pageTitle(e[0].name),i.setState({info:e[0],characterAchievements:e[1],achievementStats:e[2],counts:e[3],isPrivate:e[4],xivapiLastUpdated:e[5].xivapiLastUpdated,allAchievements:e[6],isTracked:e[7],allTitles:e[8],totals:e[9],loaded:!0})});case 21:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"handleForceUpdateClick",value:function(){var e=this,n=window.character.id;if(!n||!localStorage)return!1;this.setState({updating:!0,updated:!1},function(){var t="character."+n,a=JSON.parse(localStorage.getItem(t));if(!a)return window.location.reload();a.xivapiLastUpdated=0,localStorage.setItem(t,JSON.stringify(a)),fetch("https://xivapi.com/character/"+n+"/update?key=f5e2c6eac7604e07b2cd&af="+ +new Date).then(function(e){return e.json()}).then(function(n){return e.setState({updating:!1,updated:!0})}).catch(window.config.handleXIVAPIError)})}},{key:"handleVerifyOwnershipClick",value:function(){this.setState({verified:!0})}},{key:"trackCharacter",value:function(){var e=this;this.setState({isTracked:!0},function(){e.character.track()})}},{key:"render",value:function(){if(!this.state.loaded)return r.a.createElement(Fe,null);var e=this.state,n=e.newCharacterData,t=e.xivapiState;if(t)return r.a.createElement("section",{id:"Page-Profile"},r.a.createElement("header",{className:"content-heading"},r.a.createElement("h1",null,"object"===(void 0===n?"undefined":_n(n))&&n.name||window.locale("Unknown"),r.a.createElement("small",null,"object"===(void 0===n?"undefined":_n(n))&&n.world||window.locale("Unknown")))),function(e){switch(e){case"new":return r.a.createElement(Ue,null,r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-user-plus"})," ",window.locale("This character is not synchronised with XIVAPI, but should be within the next 2-3 minutes. Please check back soon.")),r.a.createElement("br",null),r.a.createElement("h5",null,window.locale("Why am I seeing this?")),r.a.createElement("p",{className:"help"},window.locale("With the version 2.1 upgrade of Apkallu Falls, XIVDB support has been completely dropped and now we're using XIVAPI instead."),r.a.createElement("br",null),window.locale("XIVAPI has not seen this character before, so needs to fetch its data from the Lodestone. Once done, you shouldn't ever see this message again for this character.")));case"not-found":return r.a.createElement(Ue,null,r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-user-times"})," ",window.locale("No character exists with this ID.")));case"blacklisted":return r.a.createElement(Ue,null,r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-user-lock"})," ",window.locale("This character is blacklisted by XIVAPI.")));default:return r.a.createElement(Ue,null,r.a.createElement("p",null,r.a.createElement("span",{className:"fal fa-user-secret"})," ",window.locale('Unhandled XIVAPI response state "{0}". This is a bug, please let Tequila know about it on Discord.',decodeURIComponent(e))))}}(t));var a=this.state,o=a.achievementStats,i=a.allAchievements,l=a.allTitles,s=a.characterAchievements,c=a.counts,d=a.info,u=a.isPrivate,p=a.isTracked,h=a.totals,f=a.updated,m=a.updating,g=(a.verified,a.xivapiLastUpdated),b=(d.fc,d.gender),w=d.name,v=d.server,y=d.title,x=void 0,k=void 0;if(y&&247!=+y){var E=l.data.filter(function(e){return e.id===y})[0];E?(x=E.female&&E.female[window.lang]?E["male"===b?"name":"female"][window.lang]:E.name[window.lang],E.ref&&E.ref[0]&&(k=E.ref[0].extra.achievement.id)):x=y}return r.a.createElement("section",{id:"Page-Profile"},r.a.createElement("header",{className:"content-heading"},r.a.createElement("h1",null,w,r.a.createElement("small",null,r.a.createElement("span",null,r.a.createElement("span",{className:"fal fa-globe-stand"})," ",v),y&&247!=+y?r.a.createElement("span",null,r.a.createElement("span",{className:"fal fa-tag"})," ",r.a.createElement(we,{to:"/achievement/"+k},x)):void 0)),r.a.createElement("div",null,p?r.a.createElement("button",{type:"button",disabled:!0,title:window.locale("You are already tracking this character.")},r.a.createElement("span",{className:"fa fa-user-check"})," ",r.a.createElement("span",null,window.locale("Tracked"))):r.a.createElement("button",{type:"button",onClick:this.trackCharacter,title:window.locale("Add this character to your tracked characters list.")},r.a.createElement("span",{className:"fa fa-user-plus"})," ",r.a.createElement("span",null,window.locale("Track"))))),u?r.a.createElement(In,{character:{info:d}}):void 0,r.a.createElement(An,{obtainedAchievements:s,character:d,counts:c,achievements:o,allAchievements:i.data,totals:h}),m?r.a.createElement(Ue,{className:"update-character"},r.a.createElement(Fe,null)):f?r.a.createElement(Ue,{className:"update-character updated"},r.a.createElement("h2",null,window.locale("A sync request has been sent to XIVAPI")),r.a.createElement("p",null,window.locale("Please come back in 2-3 minutes when this character's data will be up to date."))):r.a.createElement(Ue,{className:"update-character"},r.a.createElement("h2",null,window.locale("Sync with XIVAPI")),r.a.createElement("p",null,window.locale("{0}'s data was last updated {1}.",d.name,config.formatDate(g))),r.a.createElement("p",null,window.locale("Sometimes a character's data can get a little out of sync. Click on the {0} button below to re-sync this data.",window.locale("Force Update"))),r.a.createElement("button",{type:"button",onClick:this.handleForceUpdateClick},r.a.createElement("span",{className:"fal fa-sync"})," ",window.locale("Force Update"))),r.a.createElement(Ln,{info:d,name:w,id:window.character.id}))}}],[{key:"getDerivedStateFromProps",value:function(e,n){var t=e.match.params.characterId;return!t||window.character&&+t===window.character.id?n:(window.character=new ue(+t),{loaded:!1})}}]),n}();var Un=cn(function(e){return r.a.createElement(Fn,e)}),Rn=(t(189),function(){function e(e,n){for(var t=0;t(this.order||this.id)?"before":"current"}.call(n,e),key:"achievement-series-id-"+n.id},n.icon?r.a.createElement("img",{src:"https://api.apkallufalls.com/icons/achievement/"+n.icon+".png",alt:n.name[window.lang]}):r.a.createElement("span",{className:"missing-icon"},r.a.createElement("i",{className:"fal fa-question-square"})),r.a.createElement(we,{to:window.config.wikiUrl("achievement",n.id,n.name[window.lang])},n.name[window.lang]),n.weight?r.a.createElement("small",null," (",n.weight.toLocaleString(),")"):void 0)}))},Jn=(t(176),function(e){var n=e.age,t=e.data,a=e.image,o=e.items,i=(e.name,e.number),l=e.smallImage,s=e.titles,c=e.type,d=e.xivdbVersion,u=function(e,n){if("achievement"===e){var t=n.data,a=t.unavailable;if(!a)return{className:"available",icon:"fa-check",jsx:window.locale("Available")};switch(a){case"start-city":return{className:"promo-only",icon:"fa-map-pin",jsx:window.locale("Start City")};case"seasonal":return{className:"unavailable",icon:"fa-jack-o-lantern",jsx:window.locale("Seasonal Event")};case"legacy":return{className:"unavailable",icon:"fa-clock",jsx:window.locale("Legacy (1.0)")};case"ranked-pvp":return{className:"unavailable",icon:"fa-clock",jsx:window.locale("Ranked PvP")};case"unknown":return{className:"unavailable",icon:"fa-poo",jsx:window.locale("Unknown")}}}var r=n.available,o=n.promo,i=void 0,l=void 0,s=void 0;return"?"===r?(i="availability-unknown",l="fa-question-circle",s=o&&o.length?window.locale("Promotional?"):window.locale("Info needed")):r.filter(function(e){return!1===e.promo}).length?(i="available",l="fa-check",s=window.locale("Available")):r.filter(function(e){return e.promo}).length?(i="promo-only",l="fa-usd-circle",s=window.locale("Promotional")):(i="unavailable",l="fa-times",s=o&&o.length?window.locale("Promotion expired"):window.locale("Unavailable")),{className:i,icon:l,jsx:s}}(c,e),p=r.a.createElement("div",null,r.a.createElement("div",{className:"availability"},r.a.createElement("div",{className:"image-container"},l||t.img&&("achievement"===c||"emote"===c||"orchestrion-roll"===c||"barding"===c)?r.a.createElement("div",{className:"image-filler"},r.a.createElement("span",{style:{backgroundImage:"url("+(l||("v3"!==d?window.config.fullImagePath:window.config.partialImagePathV3)+e.data.img)+")"}}),a):a),r.a.createElement("dl",null,r.a.createElement("dd",null,r.a.createElement("i",{className:"fal "+u.icon}),u.jsx))));return r.a.createElement(Ue,{className:"data-panel"},r.a.createElement("figure",{className:u.className},p,r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,"Added"),r.a.createElement("dd",null,n)),function(e,n){switch(e){case"achievement":return function(e){e.category;var n=e.name;return e.xivdb,r.a.createElement("dl",{className:"tablet-fs-extra"},Qn(n))}(n);case"minion":return function(e){var n=e.behavior,t=e.name,a=e.parent,o=e.race;return e.xivdb,a?void 0:r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,window.locale("Behavior")),r.a.createElement("dd",null,n[window.lang]),r.a.createElement("dt",null,window.locale("Race")),r.a.createElement("dd",null,o[window.lang]),r.a.createElement("dt",null,window.locale("More information")),Qn(t),$n(t,"minion"))}(n);case"mount":return function(e){var n=e.name;return e.xivdb,r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,window.locale("More information")),Qn(n),$n(n,"mount"))}(n);case"emote":return function(e){var n=e.category,t=e.name;return e.xivdb,r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,window.locale("Category")),r.a.createElement("dd",null,n[window.lang]),r.a.createElement("dt",null,window.locale("More information")),Qn(t))}(n);case"orchestrion-roll":return function(e){var n=e.name;return e.xivdb,r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,window.locale("More information")),Qn(n,{suffix:"_Orchestrion_Roll"}))}(n);case"barding":return function(e){var n=e.name;return e.xivdb,r.a.createElement("dl",{className:"tablet-fs-extra"},r.a.createElement("dt",null,window.locale("More information")),Qn(n))}(n)}}(c,t)),r.a.createElement("section",null,i,function(e,n,t,a){switch(e){case"achievement":return function(e,n,t,a){var o=n.id,i=n.mastery,l=n.order,s=n.points,c=n.reward,d=n.series,u=n.weight,p=i||d,h=void 0,f=void 0,m=void 0;if(c){var g=c.item,b=c.title;if(g){var w=a.achievements.filter(function(e){return e.source===o})[0],v=w.name[window.lang];m=r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Item")),r.a.createElement(pn,{resource:"items",icon:window.config.partialImagePathV3+w.icon,name:v,iconQualified:!0},w.special?r.a.createElement(we,{to:"/"+w.special.type+"/"+w.special.id},v):v,r.a.createElement("p",{className:"localised-with-image",dangerouslySetInnerHTML:{__html:window.locale("Speak with {i0} at {1} in {img2} {i3} (x: {4}, y: {5}).",window.locale("Jonathas"),window.locale("Apkallu Falls"),"loc",window.locale("Old Gridania"),10.6,6.3)}})))}if(b){var y=b?t.data.filter(function(e){return e.id===b})[0]:void 0,x=y.name[window.lang],k=y.female&&y.female[window.lang];m=r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Title")),r.a.createElement(pn,{resource:"items",icon:"title",name:x},r.a.createElement("span",{className:"separate",title:window.locale(k?"Male title":"Unisex title")},k?r.a.createElement("i",{className:"fal fa-mars"}):r.a.createElement("i",{className:"fal fa-venus-mars"})," ",y.is_prefix?"..."+x:x+"..."),k?r.a.createElement("span",{className:"separate",title:window.locale("Female title")},r.a.createElement("i",{className:"fal fa-venus"})," ",y.is_prefix?"..."+k:k+"..."):void 0))}}if(p&&localStorage){var E=localStorage&&JSON.parse(localStorage.getItem("api")).achievements.data;f=r.a.createElement("div",null,r.a.createElement("h5",null,window.locale(i?"Mastery":"Series")),r.a.createElement(Gn,{current:i||!l?o:l,data:p.map(function(e){return E.filter(function(n){return n.id===e})[0]}),mastery:!!i}))}return 310!==o&&311!==o&&312!==o||(h=r.a.createElement(Wn,{icon:"fa-info-circle"},window.locale("This is one of three achievements which depend on the character's starting city. Characters can only have one of these achievements unlocked unless they unlocked the achievement during Legacy, then started in a different city on the same character on A Relam Reborn."))),r.a.createElement("div",null,h,r.a.createElement("h5",null,window.locale("Requirement")),r.a.createElement("p",null,function(e,n){return n.help[window.lang]||r.a.createElement("em",null,window.locale("This {0} has no {1} information.",e,window.locale("requirement")))}(e,n)),r.a.createElement("h5",null,window.locale("Points")),r.a.createElement("p",{className:"achievement-points"},"+",s),u?r.a.createElement("span",{className:"curious-description fs-extra"},r.a.createElement("h5",null,r.a.createElement("span",null,window.locale("Weight"))),r.a.createElement("p",null,(+u).toLocaleString())):void 0,m,f)}(e,n,t,a);case"minion":return function(e,n,t){var a=n.name,o=n.parent,i=n.sound;return o?r.a.createElement("div",null,r.a.createElement(Wn,{icon:"fa-info-circle"},window.locale("{0} is a special minion and will randomly appear when summoning {1}",a[window.lang]),r.a.createElement(we,{to:window.config.wikiUrl("minion",o.id,o.name[window.lang])},o.name[window.lang]),".")):r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Description")),r.a.createElement("p",null,Kn(e,n)),Xn("minions",n.id,t),r.a.createElement("h5",{className:"tablet-fs-extra"},window.locale("Summon")),Zn("minion",n),r.a.createElement("h5",{className:"tablet-fs-extra"},window.locale("Quote")),r.a.createElement("blockquote",{className:"tablet-fs-extra"},Yn(e,n)),i&&"en"===window.lang?r.a.createElement("span",{className:"curious-description fs-extra"},r.a.createElement("h5",null,r.a.createElement("span",null,window.locale("Says"))),r.a.createElement("blockquote",null,!0===i?n.quote.fr:i)):void 0)}(e,n,a);case"mount":return function(e,n,t){n.name;var a=n.sound;return r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Description")),r.a.createElement("p",null,Kn(e,n)),Xn("mounts",n.id,t),r.a.createElement("h5",{className:"tablet-fs-extra"},window.locale("Summon")),Zn(e,n),r.a.createElement("h5",{className:"tablet-fs-extra"},window.locale("Quote")),r.a.createElement("blockquote",{className:"tablet-fs-extra"},Yn(e,n)),a&&"en"===window.lang?r.a.createElement("span",{className:"curious-description fs-extra"},r.a.createElement("h5",null,r.a.createElement("span",null,window.locale("Says"))),r.a.createElement("blockquote",null,!0===a?n.quote.fr:a)):void 0)}(e,n,a);case"emote":return function(e,n,t){var a=n.commands,o=(n.name,n.targeted),i=n.untargeted,l=a.main,s=a.alias,c=a.short,d=window.locale("Haurchefant"),u=window.locale("Khloe Aliapoh"),p=window.locale("Noraxia"),h=window.locale("Gigi"),f=window.locale("Slowfix"),m=[];return l[window.lang]&&m.push(l[window.lang]),s[window.lang]&&m.push(s[window.lang]),c[window.lang]&&m.push(c[window.lang]),r.a.createElement("div",null,"en"===window.lang||"de"===window.lang?r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Description")),r.a.createElement("p",null,Kn(e,n))):void 0,r.a.createElement("h5",null,window.locale("Commands")),r.a.createElement("ul",{className:"slash-commands"},m.map(function(e){return r.a.createElement("li",{key:e},r.a.createElement("code",null,e))})),Xn("emotes",n.id,t,n.itemOffset),"en"===window.lang?r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Log Text")),i?r.a.createElement("blockquote",{className:"log-text"},i.self?r.a.createElement("p",null,i.self):void 0,i.unisex?r.a.createElement("p",null,i.unisex.replace("CHARACTER",p)):void 0,i.female?r.a.createElement("p",null,i.female.replace("CHARACTER",u)):void 0,i.male?r.a.createElement("p",null,i.male.replace("CHARACTER",d)):void 0,o&&o.self?r.a.createElement("p",null,o.self.replace("ALTCHARACTER",h)):void 0,o&&o.unisex?r.a.createElement("p",null,o.unisex.replace("ALTCHARACTER",f)):void 0,o&&o.female?r.a.createElement("p",null,o.female.replace("ALTCHARACTER",u)):void 0,o&&o.male?r.a.createElement("p",null,o.male.replace("ALTCHARACTER",d)):void 0):r.a.createElement("p",null,window.locale("This emote does not display any messages."))):void 0)}(e,n,a);case"orchestrion-roll":return function(e,n,t){var a=n.category,o=n.categoryName,i=n.order;return r.a.createElement("div",null,"en"===window.lang||"de"===window.lang?r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Description")),r.a.createElement("p",null,n.description[window.lang])):void 0,Xn("orchestrion-rolls",n.id,t),r.a.createElement("h5",null,window.locale("Category")),r.a.createElement(pn,{resource:"orchestrion-rolls",icon:a,name:o[window.lang]},r.a.createElement(we,{to:"/orchestrion-rolls/category/"+a},o[window.lang]),r.a.createElement("p",null,"(",i<1e4&&i>0?i:"—",")")))}(0,n,a);case"barding":return function(e,n,t){var a=n.grandCompany,o=n.iconBody,i=n.iconHead,l=n.iconLegs,s=n.name[window.lang];return r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Unlocks")),i?r.a.createElement("div",null,r.a.createElement(pn,{resource:"items",icon:config.partialImagePathV3+i,iconQualified:!0,name:s},s," ",r.a.createElement("small",{className:"help"},"(",window.locale("Head"),")"),r.a.createElement("p",{className:"localised-with-image"},window.locale("This can be equipped in your Chocobo Companion's {0} slot.",window.locale("Head"))))):void 0,o?r.a.createElement("div",null,r.a.createElement(pn,{resource:"items",icon:config.partialImagePathV3+o,iconQualified:!0,name:s},s," ",r.a.createElement("small",{className:"help"},"(",window.locale("Body"),")"),r.a.createElement("p",{className:"localised-with-image"},window.locale("This can be equipped in your Chocobo Companion's {0} slot.",window.locale("Body"))))):void 0,l?r.a.createElement("div",null,r.a.createElement(pn,{resource:"items",icon:config.partialImagePathV3+l,iconQualified:!0,name:s},s," ",r.a.createElement("small",{className:"help"},"(",window.locale("Legs"),")"),r.a.createElement("p",{className:"localised-with-image"},window.locale("This can be equipped in your Chocobo Companion's {0} slot.",window.locale("Legs"))))):void 0,a?r.a.createElement("div",null,r.a.createElement("h5",null,window.locale("Grand Company")),r.a.createElement("p",null,a[window.lang])):void 0,Xn("barding",n.id,t))}(0,n,a)}}(c,t,s,o)))});function Xn(e,n,t,a){var o=t[e].filter(function(e){return e.awards===(a||n)})[0];if(o){var i=o.name[window.lang];return r.a.createElement("div",{className:"tablet-fs-extra"},r.a.createElement("h5",null,window.locale("Acquired From")),r.a.createElement(pn,{resource:"items",icon:config.partialImagePathV3+o.icon,iconQualified:!0,name:i},i,r.a.createElement("p",{className:"localised-with-image"},o.info[window.lang])))}}function Kn(e,n){return n.info[window.lang]||r.a.createElement("em",null,window.locale("This {0} has no {1} information.",e,window.locale("description")))}function Yn(e,n){return n.quote[window.lang]||r.a.createElement("em",null,window.locale("This {0} has no {1} information.",e,window.locale("quote")))}function Zn(e,n){return r.a.createElement(pn,{resource:e+"s",icon:n.icon,name:n.name[window.lang],className:"tablet-fs-extra"},n.summon[window.lang]||r.a.createElement("em",null,window.locale("This {0} has no {1} information.",window.locale(e),window.locale("summon"))))}function Qn(e,n){var t="https://ffxiv.gamerescape.com/wiki/"+e.en.toLowerCase().replace(/ /g,"_").replace("#","");return n&&n.suffix&&(t+=n.suffix.toLowerCase()),r.a.createElement("dd",null,r.a.createElement("span",{className:"logo ge"})," ",r.a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener"},"Gamer Escape"))}function $n(e,n){return r.a.createElement("dd",null,r.a.createElement("span",{className:"logo mg"})," ",r.a.createElement("a",{href:"https://minionguide.com/"+n+"/"+e.en.toLowerCase().replace(/ /g,"-").replace("#","-"),target:"_blank",rel:"noreferrer noopener"},"Minion Guide"))}t(170);var et=function(e){var n=e.data,t=e.items,a=e.localisation,o=e.resource,i=e.type,l=n.id,s=n.name,c=n.ref,d=n.untradable,u=void 0;return d||(u=t[o].filter(function(e){return e.awards===l})[0]),r.a.createElement(Ue,{className:"obtain-method-panel",id:"method"},r.a.createElement("h2",null,window.locale("How to get {0}",s[window.lang])),c?r.a.createElement(fn,{data:n,localisation:a,subresource:i}):r.a.createElement("div",null,r.a.createElement("p",null,window.locale("Sorry! We don't know how to obtain this {0} yet.",window.locale("barding"===i?"chocobo barding":i))),r.a.createElement("p",{dangerouslySetInnerHTML:{__html:window.locale("Please tweet us at {0} or raise a bug on our {1} page if you know how.","__twitterlink__","__githublink__").replace("__twitterlink__",'@ApkalluFalls').replace("__githublink__",'GitHub')}})),d||!u?void 0:r.a.createElement("div",{className:"mb-purchase"},r.a.createElement("p",null,r.a.createElement("span",null),window.locale("{0} can be purchased from the in-game market board.",u.name[window.lang]))))},nt=function(){function e(e,n){for(var t=0;t div").scrollTo(0,0)}},{key:"getData",value:function(e){var n=this,t=e=e||this.props,a=t.match,r=t.resource,o=t.subresource,i=t.xivdbVersion,l=a.params.id;if("tagged"===l)return this.setState({data:"tagged"});window.api.consolidate(r,o,l,i).then(function(e){window.config.pageTitle(e&&e.data&&e.data.name[window.lang]||"404"),"achievements"===r?Promise.all([window.api.json("titles",!1,"v3"),window.api.json("items",!1,"v3")]).then(function(t){e.titles=t[0],e.items=t[1],n.setState({data:e})}):window.api.json("items",!1,"v3").then(function(t){e.items=t,n.setState({data:e})})})}},{key:"getAvailability",value:function(){var e=this.state.data.data.ref;return e&&e instanceof Array?e.filter(function(e){return e.available}):"?"}},{key:"getPromo",value:function(){var e=this.state.data.data.ref;return!!(e&&e instanceof Array)&&e.filter(function(e){return e.promo})}},{key:"createHeader",value:function(){var e=this.state.data.data,n=e.name,t=e.patch;return r.a.createElement(Hn,{patch:t,subtitle:"en"===window.lang?n.jp:n.en},r.a.createElement("span",{className:this.props.icon})," ",n[window.lang])}},{key:"createWikiDataPanel",value:function(){var e=this.props,n=e.subresource,t=e.xivdbVersion,a=this.state.data,o=a.data,i=a.items,l=a.titles,s=o.name,c=o.patch,d=window.locale("{0} days ago",Math.floor((+new Date-c.date)/864e5).toLocaleString()),u=this.createImage(),p=this.createWikiPrevNext();return r.a.createElement(Jn,{age:d,available:this.getAvailability(),data:o,image:u,items:i,name:s,number:p,promo:this.getPromo(),smallImage:this.smallImage,titles:l,type:n,xivdbVersion:t})}},{key:"createWikiObtainMethodPanel",value:function(){var e=this.props,n=e.resource,t=e.subresource,a=this.state.data,o=a.data,i=a.items,l=a.localisation;return r.a.createElement(et,{data:o,items:i,localisation:l,type:t,resource:n})}},{key:"createImage",value:function(){var e=this.props,n=e.resource,t=e.xivdbVersion,a=this.state.data.data,o=a.iconBody,i=a.iconHead,l=a.iconLegs,s=a.img;return this.smallImage=void 0,s?"v3"===t?r.a.createElement("img",{src:window.config.partialImagePathV3+s,alt:name[window.lang]}):r.a.createElement("img",{src:window.config.fullImagePath+s,alt:name[window.lang]}):"barding"===n&&(o||i||l)?(this.smallImage=window.config.partialImagePathV3+(o||i||l),r.a.createElement("img",{src:window.config.partialImagePathV3+(o||i||l),alt:name[window.lang]})):r.a.createElement("span",{className:"missing-image"},r.a.createElement("i",{className:"fal fa-question-square"}))}},{key:"createWikiPrevNext",value:function(){var e=this.state.data.data,n=e.id,t=e.nextEntry,a=e.previousEntry,o=void 0,i=void 0,l=void 0,s=void 0;return a.id&&(o=r.a.createElement(we,{to:a.url,title:a.title},"#",a.id),i=r.a.createElement("i",{className:"fal fa-long-arrow-alt-left"})),t.id&&(l=r.a.createElement(we,{to:t.url,title:t.title},"#",t.id),s=r.a.createElement("i",{className:"fal fa-long-arrow-alt-right"})),r.a.createElement("span",{className:"wiki-prev-next"},o,i,r.a.createElement("strong",null,"#",n),s,l)}},{key:"render",value:function(){var e=this.state.data;if(null===e)return r.a.createElement(Fe,null);if(!1===e)return r.a.createElement(Bn,null);if("tagged"===e)return r.a.createElement("span",null);var n=this.props.subresource,t=e.data,a=t.name,o=t.ref;return r.a.createElement("section",{id:"Page-Wiki"},this.createHeader(),this.createWikiDataPanel(),"en"!==window.lang?r.a.createElement(nn,null):void 0,"achievement"!==n?this.createWikiObtainMethodPanel():void 0,"achievement"!==n?r.a.createElement(mn,{data:o,subresource:n}):r.a.createElement(mn,{data:e.data.tag,tags:e.tags,subresource:n}),r.a.createElement(Mn,{subresource:n,title:a.en}))}}],[{key:"getDerivedStateFromProps",value:function(e,n){var t=n.data;return t&&t.data&&+t.data.id!=+e.match.params.id?{data:null}:null}}]),n}(),at=(t(168),function(e){var n=e.patch,t=e.totals,a=config.formatDate(n.date),o=n.counts,i=[];o&&(o.achievements&&i.push({icon:"fal fa-trophy",text:window.locale("{0} new {1}",o.achievements.change,window.locale("achievement"+(1===o.achievements.change?"":"s"))),percentage:window.locale("(+{0}%)",o.achievements.percent),diff:r.a.createElement(Ce,{prefix:o.achievements.total-o.achievements.change,value:o.achievements.change,total:t.achievements.total})}),o.minions&&i.push({icon:"fal fa-paw",text:window.locale("{0} new {1}",o.minions.change,window.locale("minion"+(1===o.minions.change?"":"s"))),percentage:window.locale("(+{0}%)",o.minions.percent),diff:r.a.createElement(Ce,{prefix:o.minions.total-o.minions.change,value:o.minions.change,total:t.minions.total})}),o.mounts&&i.push({icon:"fal fa-crow",text:window.locale("{0} new {1}",o.mounts.change,window.locale("mount"+(1===o.mounts.change?"":"s"))),percentage:window.locale("(+{0}%)",o.mounts.percent),diff:r.a.createElement(Ce,{prefix:o.mounts.total-o.mounts.change,value:o.mounts.change,total:t.mounts.total})}),o.titles&&i.push({icon:"fal fa-tag",text:window.locale("{0} new {1}",o.titles.change,window.locale("title"+(1===o.titles.change?"":"s"))),percentage:window.locale("(+{0}%)",o.titles.percent),diff:r.a.createElement(Ce,{prefix:o.titles.total-o.titles.change,value:o.titles.change,total:t.titles.total})}),o.emotes&&i.push({icon:"fal fa-smile",text:window.locale("{0} new {1}",o.emotes.change,window.locale("emote"+(1===o.emotes.change?"":"s"))),percentage:window.locale("(+{0}%)",o.emotes.percent),diff:r.a.createElement(Ce,{prefix:o.emotes.total-o.emotes.change,value:o.emotes.change,total:t.emotes.total})}),o["orchestrion-rolls"]&&i.push({icon:"fal fa-music",text:window.locale("{0} new {1}",o["orchestrion-rolls"].change,window.locale("orchestrion roll"+(1===o["orchestrion-rolls"].change?"":"s"))),percentage:window.locale("(+{0}%)",o["orchestrion-rolls"].percent),diff:r.a.createElement(Ce,{prefix:o["orchestrion-rolls"].total-o["orchestrion-rolls"].change,value:o["orchestrion-rolls"].change,total:t["orchestrion-rolls"].total})}),o.barding&&i.push({icon:"fal fa-loveseat",text:window.locale("{0} new {1}",o.barding.change,window.locale("chocobo barding")),percentage:window.locale("(+{0}%)",o.barding.percent),diff:r.a.createElement(Ce,{prefix:o.barding.total-o.barding.change,value:o.barding.change,total:t.barding.total})}));var l=n.name[window.lang];return r.a.createElement(Ue,{className:"patch-panel"},n.image?r.a.createElement("figure",null,r.a.createElement("img",{src:"https://api.apkallufalls.com"+n.image,alt:l})):void 0,r.a.createElement("header",null,r.a.createElement("h2",null,n.version," · ",l)),r.a.createElement("ul",null,o&&i.length?i.map(function(e){return r.a.createElement("li",{key:e.text},r.a.createElement("span",{className:e.icon}),e.text," ",r.a.createElement("small",null,e.percentage),e.diff)}):r.a.createElement("li",null,window.locale("No new content")," ",r.a.createElement("span",{className:"fal fa-frown"}))),r.a.createElement("footer",null,a))}),rt=function(){function e(e,n){for(var t=0;t div").scrollTo(0,0)}},{key:"getPatchBoxes",value:function(){var e=this.state.patches;return r.a.createElement("section",{id:"Site-News"},e.reverse().map(function(e){var n=e.id+"-"+e.date;return r.a.createElement(at,{key:n,patch:e,totals:totals})}))}},{key:"render",value:function(){return this.state.patches?r.a.createElement("section",{id:"Page-Patches"},r.a.createElement("h1",null,window.locale("Patches")),this.getPatchBoxes()):r.a.createElement(Fe,null)}}]),n}()},"/achievements":{component:Ve,xivdbVersion:"v3"},"/achievements/tagged/:tag":{component:xn,props:{icon:"fal fa-trophy",resource:"achievements",subresource:"achievement",xivdbVersion:"v3"}},"/achievement/:id/:name?":{component:tt,props:{icon:"fal fa-trophy",resource:"achievements",subresource:"achievement",xivdbVersion:"v3"}},"/chocobo-barding":{component:xn,props:{icon:"fal fa-loveseat",noTrack:!0,resource:"barding",subresource:"barding",xivdbVersion:"v3"}},"/chocobo-barding/:id/:name?":{component:tt,props:{icon:"fal fa-loveseat",noTrack:!0,resource:"barding",subresource:"barding",xivdbVersion:"v3"}},"/emotes":{component:xn,props:{icon:"fal fa-smile",noTrack:!0,resource:"emotes",subresource:"emote",xivdbVersion:"v3"}},"/emote/:id/:name?":{component:tt,props:{icon:"fal fa-smile",noTrack:!0,resource:"emotes",subresource:"emote",xivdbVersion:"v3"}},"/minions":{component:xn,props:{icon:"fal fa-paw",resource:"minions",subresource:"minion",xivdbVersion:"v3"}},"/minion/:id/:name?":{component:tt,props:{icon:"fal fa-paw",resource:"minions",subresource:"minion",xivdbVersion:"v3"}},"/mounts":{component:xn,props:{icon:"fal fa-crow",resource:"mounts",subresource:"mount",xivdbVersion:"v3"}},"/mount/:id/:name?":{component:tt,props:{icon:"fal fa-crow",resource:"mounts",subresource:"mount",xivdbVersion:"v3"}},"/orchestrion-rolls":{component:Pn,props:{icon:"fal fa-music",noTrack:!0,resource:"orchestrion-rolls",subresource:"orchestrion-roll",xivdbVersion:"v3"}},"/orchestrion-rolls/category/:category":{component:xn,props:{icon:"fal fa-music",noTrack:!0,resource:"orchestrion-rolls",subresource:"orchestrion-roll",xivdbVersion:"v3"}},"/orchestrion-roll/:id/:name?":{component:tt,props:{icon:"fal fa-music",noTrack:!0,resource:"orchestrion-rolls",subresource:"orchestrion-roll",xivdbVersion:"v3"}},"/titles":{component:xn,props:{icon:"fal fa-tag",resource:"titles",subresource:"title",xivdbVersion:"v3"}}};ot["/!/:supporterCharacterUrl"]=ot["/character/:characterId/:name?"],ot["/chocobo-barding/tagged/:tag"]=ot["/chocobo-barding"],ot["/emotes/tagged/:tag"]=ot["/emotes"],ot["/minions/tagged/:tag"]=ot["/minions"],ot["/mounts/tagged/:tag"]=ot["/mounts"],ot["/orchestrion-rolls/tagged/:tag"]=ot["/orchestrion-rolls/category/:category"],ot["/titles/tagged/:tag"]=ot["/titles"];var it=ot,lt=Object.assign||function(e){for(var n=1;n