Plugin Directory

Changeset 3778354


Ignore:
Timestamp:
11/01/2026 05:37:51 PM (7 hours ago)
Author:
lazymaze43
Message:

Release 1.1.1

Location:
pfadfindr
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • pfadfindr/tags/1.1.1/build/index.asset.php

    r3778332 r3778354  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-date', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '5ed55a1b416a65f238c4');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-date', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => 'f47688363bcc4795eb27');
  • pfadfindr/tags/1.1.1/build/index.js

    r3778332 r3778354  
    77(0,s.__)("Audit %s for SEO, AI visibility (GEO) and accessibility. The audit runs on Pfadfindr servers and puts no load on your server.","pfadfindr"),e)),(0,t.createElement)(P,{quota:k,upgradeUrl:a&&a.upgrade_url}),N&&(0,t.createElement)(x,{error:N,onRetry:w,onRemove:()=>v(null)}),(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--primary pf-btn--large",onClick:w,disabled:g||k.exhausted,"aria-busy":g},(0,t.createElement)(_,{name:"play",size:14}),(0,s.__)("Start audit","pfadfindr"))))}function P({quota:e,upgradeUrl:a}){return(0,t.createElement)("div",{className:"pf-quota"},(0,t.createElement)("span",{className:"pf-quota__text"},e.text),null!==e.ratio&&(0,t.createElement)("span",{className:"pf-meter","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-meter__fill",style:{width:Math.round(100*e.ratio)+"%"}})),e.exhausted&&(0,t.createElement)("p",{className:"pf-quota__warning"},(0,s.__)("Your free quota is used up. With Light, Growth or Agency Pro you can keep auditing.","pfadfindr"),a&&(0,t.createElement)(t.Fragment,null," ",(0,t.createElement)("a",{className:"pf-link",href:a,target:"_blank",rel:"noopener noreferrer"},(0,s.__)("View pricing →","pfadfindr")))))}function S({run:e}){const a=e&&e.phase,n=e&&"number"==typeof e.percent?e.percent:null;let r=(0,s.__)("Waiting for a free crawler…","pfadfindr");return a&&k[a]?r=k[a]:e&&"running"===e.status&&(r=(0,s.__)("Checking your website…","pfadfindr")),(0,t.createElement)("div",{className:"pf-progress","aria-live":"polite"},(0,t.createElement)("div",{className:"pf-progress__head"},(0,t.createElement)("span",{className:"pf-progress__label"},r),null!==n&&(0,t.createElement)("span",{className:"pf-progress__percent"},n+"%")),(0,t.createElement)("div",{className:"pf-progress__track",role:"progressbar","aria-label":r,"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":null!==n?n:void 0},(0,t.createElement)("span",{className:"pf-progress__fill"+(null===n?" is-indeterminate":""),style:{width:(null!==n?n:30)+"%"}})),e&&null!==e.pages_done&&void 0!==e.pages_done&&(0,t.createElement)("p",{className:"pf-muted"},e.pages_total?(0,s.sprintf)(/* translators: 1: pages checked so far, 2: pages found */ /* translators: 1: pages checked so far, 2: pages found */
    88(0,s.__)("Pages checked: %1$s of %2$s","pfadfindr"),e.pages_done,e.pages_total):(0,s.sprintf)(/* translators: %s: number of pages checked so far */ /* translators: %s: number of pages checked so far */
    9 (0,s.__)("Pages checked: %s","pfadfindr"),e.pages_done)),(0,t.createElement)("p",{className:"pf-muted"},(0,s.__)("You can leave this page. The audit continues on Pfadfindr.","pfadfindr")))}function z(e){return null==e?"none":e>=75?"good":e>=50?"ok":"poor"}function R(e,t=389.5){return t*(1-Math.min(100,Math.max(0,Number(e)||0))/100)}const $={lg:{size:150,r:62,stroke:11,circumference:389.5},sm:{size:72,r:29,stroke:7,circumference:182.2}};function M({score:e,size:a="lg"}){const n=$[a],r=n.size/2,l=null!=e;return(0,t.createElement)("div",{className:`pf-ring pf-ring--${a} pf-ring--${z(e)}`,role:"img","aria-label":l?(0,s.sprintf)(/* translators: %s: score from 0 to 100 */ /* translators: %s: score from 0 to 100 */
    10 (0,s.__)("Health score: %s of 100","pfadfindr"),e):(0,s.__)("Health score: not available","pfadfindr")},(0,t.createElement)("svg",{width:n.size,height:n.size,viewBox:`0 0 ${n.size} ${n.size}`,"aria-hidden":"true"},(0,t.createElement)("circle",{className:"pf-ring__track",cx:r,cy:r,r:n.r,strokeWidth:n.stroke}),(0,t.createElement)("circle",{className:"pf-ring__arc",cx:r,cy:r,r:n.r,strokeWidth:n.stroke,strokeDasharray:n.circumference,strokeDashoffset:R(e,n.circumference),transform:`rotate(-90 ${r} ${r})`})),(0,t.createElement)("span",{className:"pf-ring__value","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-ring__number"},l?e:"–"),"lg"===a&&(0,t.createElement)("span",{className:"pf-ring__max"},"/ 100")))}function T({label:e,icon:a,children:n}){const[s,l]=(0,r.useState)(!1),i=(0,r.useId)();return(0,t.createElement)("div",{className:"pf-disclosure"+(s?" is-open":"")},(0,t.createElement)("button",{type:"button",className:"pf-disclosure__toggle","aria-expanded":s,"aria-controls":i,onClick:()=>l(!s)},(0,t.createElement)("span",{className:"pf-disclosure__chevron"},(0,t.createElement)(_,{name:"chevron",size:14})),a&&(0,t.createElement)(_,{name:a,size:14}),(0,t.createElement)("span",null,e)),(0,t.createElement)("div",{id:i,className:"pf-disclosure__body",hidden:!s},n))}function A({fix:e}){const[a,n]=(0,r.useState)(""),l=(0,r.useRef)(null);if((0,r.useEffect)(()=>()=>clearTimeout(l.current),[]),!e||!e.code)return null;const i=e.title||(0,s.__)("Copy-paste fix","pfadfindr");return(0,t.createElement)(T,{label:(0,s.__)("Copy-paste fix","pfadfindr")},(0,t.createElement)("p",{className:"pf-fix__title"},i),(0,t.createElement)("p",{className:"pf-fix__note"},e.note||(0,s.__)("Replace the placeholders. Pfadfindr does not change your site.","pfadfindr")),(0,t.createElement)("pre",{className:"pf-fix__code",tabIndex:0,role:"region","aria-label":i,"data-language":e.language},(0,t.createElement)("code",null,e.code)),(0,t.createElement)("div",{className:"pf-fix__actions"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:async()=>{const t=await async function(e){if(window.navigator.clipboard&&window.navigator.clipboard.writeText)try{return await window.navigator.clipboard.writeText(e),!0}catch(e){}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.setAttribute("aria-hidden","true"),t.style.position="fixed",t.style.top="0",t.style.opacity="0",document.body.appendChild(t);try{return t.select(),!!document.execCommand("copy")}catch(e){return!1}finally{document.body.removeChild(t)}}(e.code);n(t?"copied":"failed"),clearTimeout(l.current),l.current=setTimeout(()=>n(""),2500)}},(0,t.createElement)(_,{name:"copy",size:14}),(0,s.__)("Copy","pfadfindr")),(0,t.createElement)("span",{className:"pf-fix__status",role:"status","aria-live":"polite"},"copied"===a&&(0,s.__)("Copied","pfadfindr"),"failed"===a&&(0,s.__)("Could not copy. Select the text and copy it by hand.","pfadfindr"))))}function I({summary:e,onError:a}){const[n,l]=(0,r.useState)(""),i=e.scores||{},c=e.top_findings||[],d=t=>{const n=window.open("","_blank");l(t),o(`/audits/${encodeURIComponent(e.run_id)}/report`,"POST").then(e=>{const a="a11y"===t?e.a11y_url:e.url;if(!a)throw{message:(0,s.__)("This report is not available.","pfadfindr")};n?(n.opener=null,n.location.href=a):window.location.href=a}).catch(e=>{n&&n.close(),a(e)}).finally(()=>l(""))};return(0,t.createElement)("section",{className:"pf-card pf-result","aria-labelledby":"pf-result-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-result-title",className:"pf-eyebrow"},(0,s.__)("Result","pfadfindr")),e.finished_at&&(0,t.createElement)("span",{className:"pf-muted"},p(e.finished_at))),(0,t.createElement)("div",{className:"pf-result__overview"},(0,t.createElement)("div",{className:"pf-result__score"},(0,t.createElement)(M,{score:e.score}),(0,t.createElement)("span",{className:"pf-eyebrow"},(0,s.__)("Health score","pfadfindr")),e.verdict&&(0,t.createElement)("strong",{className:`pf-verdict pf-text--${z(e.score)}`},e.verdict.label),e.score_cap&&(0,t.createElement)("p",{className:"pf-result__cap"},(0,s.sprintf)(/* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */ /* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */
     9(0,s.__)("Pages checked: %s","pfadfindr"),e.pages_done)),(0,t.createElement)("p",{className:"pf-muted"},(0,s.__)("You can leave this page. The audit continues on Pfadfindr.","pfadfindr")))}function z(e){return null==e?"none":e>=75?"good":e>=50?"ok":"poor"}function R(e,t=389.5){return t*(1-Math.min(100,Math.max(0,Number(e)||0))/100)}const $={lg:{size:150,r:62,stroke:11,circumference:389.5},sm:{size:72,r:29,stroke:7,circumference:182.2}};function T({score:e,size:a="lg"}){const n=$[a],r=n.size/2,l=null!=e;return(0,t.createElement)("div",{className:`pf-ring pf-ring--${a} pf-ring--${z(e)}`,role:"img","aria-label":l?(0,s.sprintf)(/* translators: %s: score from 0 to 100 */ /* translators: %s: score from 0 to 100 */
     10(0,s.__)("Health score: %s of 100","pfadfindr"),e):(0,s.__)("Health score: not available","pfadfindr")},(0,t.createElement)("svg",{width:n.size,height:n.size,viewBox:`0 0 ${n.size} ${n.size}`,"aria-hidden":"true"},(0,t.createElement)("circle",{className:"pf-ring__track",cx:r,cy:r,r:n.r,strokeWidth:n.stroke}),(0,t.createElement)("circle",{className:"pf-ring__arc",cx:r,cy:r,r:n.r,strokeWidth:n.stroke,strokeDasharray:n.circumference,strokeDashoffset:R(e,n.circumference),transform:`rotate(-90 ${r} ${r})`})),(0,t.createElement)("span",{className:"pf-ring__value","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-ring__number"},l?e:"–"),"lg"===a&&(0,t.createElement)("span",{className:"pf-ring__max"},"/ 100")))}function I({label:e,icon:a,children:n}){const[s,l]=(0,r.useState)(!1),i=(0,r.useId)();return(0,t.createElement)("div",{className:"pf-disclosure"+(s?" is-open":"")},(0,t.createElement)("button",{type:"button",className:"pf-disclosure__toggle","aria-expanded":s,"aria-controls":i,onClick:()=>l(!s)},(0,t.createElement)("span",{className:"pf-disclosure__chevron"},(0,t.createElement)(_,{name:"chevron",size:14})),a&&(0,t.createElement)(_,{name:a,size:14}),(0,t.createElement)("span",null,e)),(0,t.createElement)("div",{id:i,className:"pf-disclosure__body",hidden:!s},n))}function M({fix:e}){const[a,n]=(0,r.useState)(""),l=(0,r.useRef)(null);if((0,r.useEffect)(()=>()=>clearTimeout(l.current),[]),!e||!e.code)return null;const i=e.title||(0,s.__)("Copy-paste fix","pfadfindr");return(0,t.createElement)(I,{label:(0,s.__)("Copy-paste fix","pfadfindr")},(0,t.createElement)("p",{className:"pf-fix__title"},i),(0,t.createElement)("p",{className:"pf-fix__note"},e.note||(0,s.__)("Replace the placeholders. Pfadfindr does not change your site.","pfadfindr")),(0,t.createElement)("pre",{className:"pf-fix__code",tabIndex:0,role:"region","aria-label":i,"data-language":e.language},(0,t.createElement)("code",null,e.code)),(0,t.createElement)("div",{className:"pf-fix__actions"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:async()=>{const t=await async function(e){if(window.navigator.clipboard&&window.navigator.clipboard.writeText)try{return await window.navigator.clipboard.writeText(e),!0}catch(e){}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.setAttribute("aria-hidden","true"),t.style.position="fixed",t.style.top="0",t.style.opacity="0",document.body.appendChild(t);try{return t.select(),!!document.execCommand("copy")}catch(e){return!1}finally{document.body.removeChild(t)}}(e.code);n(t?"copied":"failed"),clearTimeout(l.current),l.current=setTimeout(()=>n(""),2500)}},(0,t.createElement)(_,{name:"copy",size:14}),(0,s.__)("Copy","pfadfindr")),(0,t.createElement)("span",{className:"pf-fix__status",role:"status","aria-live":"polite"},"copied"===a&&(0,s.__)("Copied","pfadfindr"),"failed"===a&&(0,s.__)("Could not copy. Select the text and copy it by hand.","pfadfindr"))))}function A({summary:e,onError:a}){const[n,l]=(0,r.useState)(""),i=e.scores||{},c=e.top_findings||[],d=t=>{const n=window.open("","_blank");l(t),o(`/audits/${encodeURIComponent(e.run_id)}/report`,"POST").then(e=>{const a="a11y"===t?e.a11y_url:e.url;if(!a)throw{message:(0,s.__)("This report is not available.","pfadfindr")};n?(n.opener=null,n.location.href=a):window.location.href=a}).catch(e=>{n&&n.close(),a(e)}).finally(()=>l(""))};return(0,t.createElement)("section",{className:"pf-card pf-result","aria-labelledby":"pf-result-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-result-title",className:"pf-eyebrow"},(0,s.__)("Result","pfadfindr")),e.finished_at&&(0,t.createElement)("span",{className:"pf-muted"},p(e.finished_at))),(0,t.createElement)("div",{className:"pf-result__overview"},(0,t.createElement)("div",{className:"pf-result__score"},(0,t.createElement)(T,{score:e.score}),(0,t.createElement)("span",{className:"pf-eyebrow"},(0,s.__)("Health score","pfadfindr")),e.verdict&&(0,t.createElement)("strong",{className:`pf-verdict pf-text--${z(e.score)}`},e.verdict.label),e.score_cap&&(0,t.createElement)("p",{className:"pf-result__cap"},(0,s.sprintf)(/* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */ /* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */
    1111(0,s.__)("max. %1$s, because %2$s","pfadfindr"),e.score_cap.max,e.score_cap.reason))),(0,t.createElement)("ul",{className:"pf-tiles"},Object.keys(v).map(e=>(0,t.createElement)(U,{key:e,label:v[e],score:i[e]})))),e.a11y_error&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"alert",size:14}),(0,t.createElement)("span",null,(0,t.createElement)("strong",null,e.a11y_error.title||e.a11y_error.message),e.a11y_error.hint&&" "+e.a11y_error.hint)),(0,t.createElement)("h3",{className:"pf-section-title"},(0,s.__)("Most important findings","pfadfindr")),0===c.length?(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No open findings.","pfadfindr")):(0,t.createElement)("ol",{className:"pf-findings"},c.map((e,a)=>(0,t.createElement)(O,{key:a,finding:e}))),(0,t.createElement)("footer",{className:"pf-card__footer"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--primary",onClick:()=>d("seo"),disabled:!!n,"aria-busy":"seo"===n},(0,s.__)("Open full report","pfadfindr"),(0,t.createElement)(_,{name:"external",size:14})),null!==i.a11y&&void 0!==i.a11y&&(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:()=>d("a11y"),disabled:!!n,"aria-busy":"a11y"===n},(0,s.__)("Open accessibility report","pfadfindr"),(0,t.createElement)(_,{name:"external",size:14}))))}function U({label:e,score:a}){const n=null!=a,r=z(n?a:null);return(0,t.createElement)("li",{className:"pf-tile"},(0,t.createElement)("span",{className:"pf-tile__label"},e),n?(0,t.createElement)("span",{className:`pf-tile__score pf-text--${r}`},a,(0,t.createElement)("span",{className:"pf-tile__max"},"/100")):(0,t.createElement)("span",{className:"pf-tile__score pf-tile__score--none"},(0,s.__)("Not measured","pfadfindr")),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${r}`,style:{width:(n?a:0)+"%"}})))}function O({finding:e}){return(0,t.createElement)("li",{className:"pf-finding"},(0,t.createElement)("div",{className:"pf-finding__meta"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("span",{className:"pf-muted"},v[e.area])),(0,t.createElement)("strong",{className:"pf-finding__title"},e.title),e.url&&(0,t.createElement)("div",{className:"pf-finding__url"},(0,t.createElement)("a",{className:"pf-chip-link",href:e.url,target:"_blank",rel:"noopener noreferrer"},e.url),e.affected_count>1&&(0,t.createElement)("span",{className:"pf-muted"},(0,s.sprintf)(/* translators: %s: number of further pages with the same issue */ /* translators: %s: number of further pages with the same issue */
    12 (0,s._n)("and %s more page","and %s more pages",e.affected_count-1,"pfadfindr"),e.affected_count-1))),e.recommendation&&(0,t.createElement)("p",{className:"pf-finding__fix"},e.recommendation),(0,t.createElement)(A,{fix:e.fix}))}const D=["bots_search","bots_user_fetch","bots_training","firewall","llms_txt","schema_entities","citability"],F={bots_search:(0,s.__)("AI search bots are allowed","pfadfindr"),bots_user_fetch:(0,s.__)("Bots that fetch pages for users","pfadfindr"),bots_training:(0,s.__)("AI training bots (your policy)","pfadfindr"),firewall:(0,s.__)("Firewall or CDN lets AI search bots in","pfadfindr"),llms_txt:(0,s.__)("llms.txt","pfadfindr"),schema_entities:(0,s.__)("Structured data and entities","pfadfindr"),citability:(0,s.__)("Citability of your content","pfadfindr")},H=["ok","issue","info","not_checked"];function q(e){if(!e||!Array.isArray(e.items))return null;const t=!0===e.checked,a={};return e.items.forEach(e=>{e&&D.includes(e.id)&&!a[e.id]&&(a[e.id]=e)}),{checked:t,score:"number"==typeof e.score?e.score:null,methodNote:"string"==typeof e.method_note&&""!==e.method_note?e.method_note:(0,s.__)("Tested with the user agent, not with the bots' real IP addresses.","pfadfindr"),items:D.map(e=>{const n=a[e]||{},r=t&&Array.isArray(n.findings)?n.findings.filter(Boolean).map(e=>{return{...e,fix:(t=e.fix,t&&"string"==typeof t.code&&""!==t.code?t:null)};var t}):[];return{id:e,status:t?(s=n.status,H.includes(s)?s:"not_checked"):"not_checked",note:"string"==typeof n.note?n.note:"",findings:r};var s})}}const W={ok:{icon:"check",label:(0,s.__)("OK","pfadfindr")},issue:{icon:"alert",label:(0,s.__)("Needs attention","pfadfindr")},info:{icon:"info",label:(0,s.__)("Note","pfadfindr")},not_checked:{icon:"minus",label:(0,s.__)("Not checked","pfadfindr")}},L="pf-geo-note";function Y({runId:e,onError:a}){const[n,l]=(0,r.useState)({loading:!0}),i=(0,r.useCallback)(()=>{let t=!0;return l({loading:!0}),o(`/audits/${encodeURIComponent(e)}/geo`).then(e=>{t&&l({geo:q(e)})}).catch(e=>{t&&(m(f(e))?a(e):l({error:f(e)}))}),()=>{t=!1}},[e,a]);(0,r.useEffect)(()=>i(),[i]);const{loading:c,error:d,geo:p}=n;return(0,t.createElement)("section",{className:"pf-card pf-geo","aria-labelledby":"pf-geo-title","aria-busy":!!c},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-geo-title",className:"pf-eyebrow"},(0,s.__)("AI visibility checklist","pfadfindr"))),c&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading the AI visibility checklist…","pfadfindr")),d&&(0,t.createElement)(x,{error:d,onRetry:i}),!c&&!d&&!p&&(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No AI visibility checklist is available for this audit.","pfadfindr")),p&&(0,t.createElement)(B,{geo:p}))}function B({geo:e}){return(0,t.createElement)(t.Fragment,null,!e.checked&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"info",size:14}),(0,t.createElement)("span",null,(0,s.__)("The AI visibility check did not run in this audit, so nothing is shown as OK.","pfadfindr"))),(0,t.createElement)("ul",{className:"pf-geo__list"},e.items.map(e=>(0,t.createElement)(j,{key:e.id,item:e}))),(0,t.createElement)("p",{id:L,className:"pf-geo__footnote"},(0,t.createElement)("span",{"aria-hidden":"true"},"* "),e.methodNote))}function j({item:e}){const a=W[e.status],n=function(e){return"issue"===e.status?(0,s.sprintf)(/* translators: %s: number of findings */ /* translators: %s: number of findings */
    13 (0,s._n)("%s finding","%s findings",e.findings.length,"pfadfindr"),e.findings.length):e.note?e.note:"ok"===e.status?(0,s.__)("Checked, no problems found.","pfadfindr"):"not_checked"===e.status?(0,s.__)("Not checked in this audit.","pfadfindr"):""}(e);return(0,t.createElement)("li",{className:`pf-geo__row pf-geo__row--${e.status}`,"data-geo":e.id,"aria-describedby":"firewall"===e.id?L:void 0},(0,t.createElement)("div",{className:"pf-geo__head"},(0,t.createElement)("span",{className:"pf-geo__status"},(0,t.createElement)(_,{name:a.icon,size:14}),a.label),(0,t.createElement)("strong",{className:"pf-geo__title"},F[e.id],"firewall"===e.id&&(0,t.createElement)("span",{"aria-hidden":"true"}," *"))),n&&(0,t.createElement)("p",{className:"pf-geo__detail"},n),e.findings.length>0&&(0,t.createElement)(T,{label:(0,s.__)("Show details","pfadfindr")},(0,t.createElement)("ul",{className:"pf-geo__findings"},e.findings.map((e,a)=>(0,t.createElement)("li",{key:a,className:"pf-geo__finding"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("strong",null,e.title),e.recommendation&&(0,t.createElement)("p",null,e.recommendation),(0,t.createElement)(A,{fix:e.fix}))))))}const G={queued:(0,s.__)("Waiting","pfadfindr"),running:(0,s.__)("Running","pfadfindr"),error:(0,s.__)("Failed","pfadfindr"),cancelled:(0,s.__)("Cancelled","pfadfindr")};function V({items:e,selectedRunId:a,onSelect:n}){return(0,t.createElement)("section",{className:"pf-card","aria-labelledby":"pf-history-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-history-title",className:"pf-eyebrow"},(0,s.__)("History","pfadfindr"))),null===e&&(0,t.createElement)("p",{className:"pf-muted pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading…","pfadfindr")),e&&0===e.length&&(0,t.createElement)("div",{className:"pf-empty"},(0,t.createElement)("span",{className:"pf-empty__icon"},(0,t.createElement)(_,{name:"search",size:22})),(0,t.createElement)("p",null,(0,s.__)("No audits yet.","pfadfindr"))),e&&e.length>0&&(0,t.createElement)("table",{className:"pf-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col"},(0,s.__)("Date","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Health score","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Accessibility","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,t.createElement)("span",{className:"screen-reader-text"},(0,s.__)("Actions","pfadfindr"))))),(0,t.createElement)("tbody",null,e.map(e=>(0,t.createElement)("tr",{key:e.run_id},(0,t.createElement)("td",null,p(e.finished_at||e.created_at)),(0,t.createElement)("td",null,"done"===e.status?(0,t.createElement)(K,{score:e.score}):(0,t.createElement)("span",{className:"pf-muted"},G[e.status]||"–")),(0,t.createElement)("td",null,"done"===e.status&&null!==e.a11y_score&&void 0!==e.a11y_score?(0,t.createElement)(K,{score:e.a11y_score}):(0,t.createElement)("span",{className:"pf-muted"},"–")),(0,t.createElement)("td",{className:"pf-table__action"},"done"===e.status&&(e.run_id===a?(0,t.createElement)("span",{className:"pf-muted"},(0,s.__)("Shown above","pfadfindr")):(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--link",onClick:()=>n(e.run_id)},(0,s.__)("Show","pfadfindr")))))))))}function K({score:e}){const a=z(e);return(0,t.createElement)("span",{className:"pf-scorecell"},(0,t.createElement)("span",{className:`pf-dot pf-dot--${a}`,"aria-hidden":"true"}),(0,t.createElement)("span",{className:`pf-scorecell__value pf-text--${a}`},null!=e?e:"–"),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${a}`,style:{width:(e||0)+"%"}})))}function Q({settings:e}){const[a,n]=(0,r.useState)(e.connected),[l,i]=(0,r.useState)(null),[c,d]=(0,r.useState)(e.notice),[p,u]=(0,r.useState)(null),[_,E]=(0,r.useState)(null),[g,y]=(0,r.useState)(null);(0,r.useEffect)(()=>{const e=new URL(window.location.href);(e.searchParams.has("pfadfindr_notice")||e.searchParams.has("pfadfindr_error"))&&(e.searchParams.delete("pfadfindr_notice"),e.searchParams.delete("pfadfindr_error"),window.history.replaceState(null,"",e.toString()))},[]);const v=(0,r.useCallback)(e=>{const t=f(e);if(m(t))return n(!1),i(null),void d({status:"warning",message:t.message});y(t)},[]),w=(0,r.useCallback)(()=>o("/status").then(e=>(n(e.connected),i(e),e.notice&&d({status:"error",message:e.notice.message}),e)).catch(v),[v]),k=(0,r.useCallback)(()=>o("/audits").then(e=>u(e.items)).catch(v),[v]),P=(0,r.useCallback)(e=>o(`/audits/${encodeURIComponent(e)}/summary`).then(E).catch(v),[v]);(0,r.useEffect)(()=>{a&&w().then(e=>{e&&e.connected&&(k(),!e.current_run&&e.last_audit&&P(e.last_audit.run_id))})},[a,w,k,P]);const S=(0,r.useCallback)(e=>{E(e),w(),k()},[w,k]),z=(0,r.useCallback)(e=>{y(null),n(!1),i(null),u(null),E(null),d(e?{status:"success",message:(0,s.__)("Disconnected. The key was deleted here and revoked at Pfadfindr.","pfadfindr")}:{status:"warning",message:(0,s.__)("Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account.","pfadfindr")})},[]);return(0,t.createElement)("div",{className:"pfadfindr-app"},c&&("error"===c.status?(0,t.createElement)(x,{error:c,onRemove:()=>d(null)}):(0,t.createElement)(h,{status:c.status,onRemove:()=>d(null)},c.message)),g&&(0,t.createElement)(x,{error:g,onRemove:()=>y(null)}),!a&&(0,t.createElement)(b,{settings:e}),a&&!l&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading your Pfadfindr account…","pfadfindr")),a&&l&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(N,{status:l,logoUrl:e.logoUrl,onDisconnected:z,onError:v}),(0,t.createElement)(C,{domain:l.domain,account:l.account,currentRun:l.current_run,onStarted:k,onFinished:k,onDone:S,onError:v}),_&&(0,t.createElement)(I,{summary:_,onError:v}),_&&(0,t.createElement)(Y,{key:_.run_id,runId:_.run_id,onError:v}),(0,t.createElement)(V,{items:p,selectedRunId:_&&_.run_id,onSelect:P})))}n()(()=>{const e=document.getElementById("pfadfindr-root");e&&(0,r.createRoot)(e).render((0,t.createElement)(Q,{settings:window.pfadfindrSettings}))})})();
     12(0,s._n)("and %s more page","and %s more pages",e.affected_count-1,"pfadfindr"),e.affected_count-1))),e.recommendation&&(0,t.createElement)("p",{className:"pf-finding__fix"},e.recommendation),(0,t.createElement)(M,{fix:e.fix}))}const D=["bots_search","bots_user_fetch","bots_training","firewall","llms_txt","schema_entities","citability"],F={bots_search:(0,s.__)("AI search bots are allowed","pfadfindr"),bots_user_fetch:(0,s.__)("Bots that fetch pages for users","pfadfindr"),bots_training:(0,s.__)("AI training bots (your policy)","pfadfindr"),firewall:(0,s.__)("Firewall or CDN lets AI search bots in","pfadfindr"),llms_txt:(0,s.__)("llms.txt","pfadfindr"),schema_entities:(0,s.__)("Structured data and entities","pfadfindr"),citability:(0,s.__)("Citability of your content","pfadfindr")},H=["ok","issue","info","not_checked"];function q(e){if(!e||!Array.isArray(e.items))return null;const t=!0===e.checked,a={};return e.items.forEach(e=>{e&&D.includes(e.id)&&!a[e.id]&&(a[e.id]=e)}),{checked:t,score:"number"==typeof e.score?e.score:null,methodNote:"string"==typeof e.method_note&&""!==e.method_note?e.method_note:(0,s.__)("Tested with the user agent, not with the bots' real IP addresses.","pfadfindr"),items:D.map(e=>{const n=a[e]||{},r=t&&Array.isArray(n.findings)?n.findings.filter(Boolean).map(e=>{return{...e,fix:(t=e.fix,t&&"string"==typeof t.code&&""!==t.code?t:null)};var t}):[];return{id:e,status:t?(s=n.status,H.includes(s)?s:"not_checked"):"not_checked",note:"string"==typeof n.note?n.note:"",findings:r};var s})}}const W={ok:{icon:"check",label:(0,s.__)("OK","pfadfindr")},issue:{icon:"alert",label:(0,s.__)("Needs attention","pfadfindr")},info:{icon:"info",label:(0,s.__)("Note","pfadfindr")},not_checked:{icon:"minus",label:(0,s.__)("Not checked","pfadfindr")}},L="pf-geo-note";function Y({runId:e,onError:a}){const[n,l]=(0,r.useState)({loading:!0}),i=(0,r.useCallback)(()=>{let t=!0;return l({loading:!0}),o(`/audits/${encodeURIComponent(e)}/geo`).then(e=>{t&&l(e&&!0===e.unavailable?{unavailable:!0}:{geo:q(e)})}).catch(e=>{t&&(m(f(e))?a(e):l({error:f(e)}))}),()=>{t=!1}},[e,a]);(0,r.useEffect)(()=>i(),[i]);const{loading:c,error:d,geo:p,unavailable:u}=n;return(0,t.createElement)("section",{className:"pf-card pf-geo","aria-labelledby":"pf-geo-title","aria-busy":!!c},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-geo-title",className:"pf-eyebrow"},(0,s.__)("AI visibility checklist","pfadfindr"))),c&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading the AI visibility checklist…","pfadfindr")),d&&(0,t.createElement)(x,{error:d,onRetry:i}),u&&(0,t.createElement)("p",{className:"pf-empty-line",role:"status"},(0,s.__)("The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.","pfadfindr")),!c&&!d&&!p&&!u&&(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No AI visibility checklist is available for this audit.","pfadfindr")),p&&(0,t.createElement)(B,{geo:p}))}function B({geo:e}){return(0,t.createElement)(t.Fragment,null,!e.checked&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"info",size:14}),(0,t.createElement)("span",null,(0,s.__)("The AI visibility check did not run in this audit, so nothing is shown as OK.","pfadfindr"))),(0,t.createElement)("ul",{className:"pf-geo__list"},e.items.map(e=>(0,t.createElement)(j,{key:e.id,item:e}))),(0,t.createElement)("p",{id:L,className:"pf-geo__footnote"},(0,t.createElement)("span",{"aria-hidden":"true"},"* "),e.methodNote))}function j({item:e}){const a=W[e.status],n=function(e){return"issue"===e.status?(0,s.sprintf)(/* translators: %s: number of findings */ /* translators: %s: number of findings */
     13(0,s._n)("%s finding","%s findings",e.findings.length,"pfadfindr"),e.findings.length):e.note?e.note:"ok"===e.status?(0,s.__)("Checked, no problems found.","pfadfindr"):"not_checked"===e.status?(0,s.__)("Not checked in this audit.","pfadfindr"):""}(e);return(0,t.createElement)("li",{className:`pf-geo__row pf-geo__row--${e.status}`,"data-geo":e.id,"aria-describedby":"firewall"===e.id?L:void 0},(0,t.createElement)("div",{className:"pf-geo__head"},(0,t.createElement)("span",{className:"pf-geo__status"},(0,t.createElement)(_,{name:a.icon,size:14}),a.label),(0,t.createElement)("strong",{className:"pf-geo__title"},F[e.id],"firewall"===e.id&&(0,t.createElement)("span",{"aria-hidden":"true"}," *"))),n&&(0,t.createElement)("p",{className:"pf-geo__detail"},n),e.findings.length>0&&(0,t.createElement)(I,{label:(0,s.__)("Show details","pfadfindr")},(0,t.createElement)("ul",{className:"pf-geo__findings"},e.findings.map((e,a)=>(0,t.createElement)("li",{key:a,className:"pf-geo__finding"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("strong",null,e.title),e.recommendation&&(0,t.createElement)("p",null,e.recommendation),(0,t.createElement)(M,{fix:e.fix}))))))}const G={queued:(0,s.__)("Waiting","pfadfindr"),running:(0,s.__)("Running","pfadfindr"),error:(0,s.__)("Failed","pfadfindr"),cancelled:(0,s.__)("Cancelled","pfadfindr")};function V({items:e,selectedRunId:a,onSelect:n}){return(0,t.createElement)("section",{className:"pf-card","aria-labelledby":"pf-history-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-history-title",className:"pf-eyebrow"},(0,s.__)("History","pfadfindr"))),null===e&&(0,t.createElement)("p",{className:"pf-muted pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading…","pfadfindr")),e&&0===e.length&&(0,t.createElement)("div",{className:"pf-empty"},(0,t.createElement)("span",{className:"pf-empty__icon"},(0,t.createElement)(_,{name:"search",size:22})),(0,t.createElement)("p",null,(0,s.__)("No audits yet.","pfadfindr"))),e&&e.length>0&&(0,t.createElement)("table",{className:"pf-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col"},(0,s.__)("Date","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Health score","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Accessibility","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,t.createElement)("span",{className:"screen-reader-text"},(0,s.__)("Actions","pfadfindr"))))),(0,t.createElement)("tbody",null,e.map(e=>(0,t.createElement)("tr",{key:e.run_id},(0,t.createElement)("td",null,p(e.finished_at||e.created_at)),(0,t.createElement)("td",null,"done"===e.status?(0,t.createElement)(K,{score:e.score}):(0,t.createElement)("span",{className:"pf-muted"},G[e.status]||"–")),(0,t.createElement)("td",null,"done"===e.status&&null!==e.a11y_score&&void 0!==e.a11y_score?(0,t.createElement)(K,{score:e.a11y_score}):(0,t.createElement)("span",{className:"pf-muted"},"–")),(0,t.createElement)("td",{className:"pf-table__action"},"done"===e.status&&(e.run_id===a?(0,t.createElement)("span",{className:"pf-muted"},(0,s.__)("Shown above","pfadfindr")):(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--link",onClick:()=>n(e.run_id)},(0,s.__)("Show","pfadfindr")))))))))}function K({score:e}){const a=z(e);return(0,t.createElement)("span",{className:"pf-scorecell"},(0,t.createElement)("span",{className:`pf-dot pf-dot--${a}`,"aria-hidden":"true"}),(0,t.createElement)("span",{className:`pf-scorecell__value pf-text--${a}`},null!=e?e:"–"),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${a}`,style:{width:(e||0)+"%"}})))}function Q({settings:e}){const[a,n]=(0,r.useState)(e.connected),[l,i]=(0,r.useState)(null),[c,d]=(0,r.useState)(e.notice),[p,u]=(0,r.useState)(null),[_,E]=(0,r.useState)(null),[g,y]=(0,r.useState)(null);(0,r.useEffect)(()=>{const e=new URL(window.location.href);(e.searchParams.has("pfadfindr_notice")||e.searchParams.has("pfadfindr_error"))&&(e.searchParams.delete("pfadfindr_notice"),e.searchParams.delete("pfadfindr_error"),window.history.replaceState(null,"",e.toString()))},[]);const v=(0,r.useCallback)(e=>{const t=f(e);if(m(t))return n(!1),i(null),void d({status:"warning",message:t.message});y(t)},[]),w=(0,r.useCallback)(()=>o("/status").then(e=>(n(e.connected),i(e),e.notice&&d({status:"error",message:e.notice.message}),e)).catch(v),[v]),k=(0,r.useCallback)(()=>o("/audits").then(e=>u(e.items)).catch(v),[v]),P=(0,r.useCallback)(e=>o(`/audits/${encodeURIComponent(e)}/summary`).then(E).catch(v),[v]);(0,r.useEffect)(()=>{a&&w().then(e=>{e&&e.connected&&(k(),!e.current_run&&e.last_audit&&P(e.last_audit.run_id))})},[a,w,k,P]);const S=(0,r.useCallback)(e=>{E(e),w(),k()},[w,k]),z=(0,r.useCallback)(e=>{y(null),n(!1),i(null),u(null),E(null),d(e?{status:"success",message:(0,s.__)("Disconnected. The key was deleted here and revoked at Pfadfindr.","pfadfindr")}:{status:"warning",message:(0,s.__)("Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account.","pfadfindr")})},[]);return(0,t.createElement)("div",{className:"pfadfindr-app"},c&&("error"===c.status?(0,t.createElement)(x,{error:c,onRemove:()=>d(null)}):(0,t.createElement)(h,{status:c.status,onRemove:()=>d(null)},c.message)),g&&(0,t.createElement)(x,{error:g,onRemove:()=>y(null)}),!a&&(0,t.createElement)(b,{settings:e}),a&&!l&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading your Pfadfindr account…","pfadfindr")),a&&l&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(N,{status:l,logoUrl:e.logoUrl,onDisconnected:z,onError:v}),(0,t.createElement)(C,{domain:l.domain,account:l.account,currentRun:l.current_run,onStarted:k,onFinished:k,onDone:S,onError:v}),_&&(0,t.createElement)(A,{summary:_,onError:v}),_&&(0,t.createElement)(Y,{key:_.run_id,runId:_.run_id,onError:v}),(0,t.createElement)(V,{items:p,selectedRunId:_&&_.run_id,onSelect:P})))}n()(()=>{const e=document.getElementById("pfadfindr-root");e&&(0,r.createRoot)(e).render((0,t.createElement)(Q,{settings:window.pfadfindrSettings}))})})();
  • pfadfindr/tags/1.1.1/includes/class-pfadfindr-api-client.php

    r3778332 r3778354  
    2626         */
    2727        private $api_key;
     28
     29        /**
     30         * Status and error-format info of the last failed request, null after a successful one.
     31         *
     32         * @var array|null
     33         */
     34        private $last_failure = null;
    2835
    2936        /**
    … …  
    184191         */
    185192        public function get_geo( $run_id, $domain ) {
    186                 return $this->request( 'GET', '/audits/' . rawurlencode( $run_id ) . '/geo', null, array( 'domain' => $domain ) );
     193                $result = $this->request( 'GET', '/audits/' . rawurlencode( $run_id ) . '/geo', null, array( 'domain' => $domain ) );
     194
     195                // A backend that does not know the route yet answers a plain 404/405/501 without the error format. That is
     196                // not a failure of the plugin or of the audit: the checklist is simply not offered (PRJ-209).
     197                if ( is_wp_error( $result ) && null !== $this->last_failure && in_array( $this->last_failure['status'], array( 404, 405, 501 ), true ) && ! $this->last_failure['has_code'] ) {
     198                        return Pfadfindr_Errors::make( 'geo_unavailable', 404 );
     199                }
     200
     201                return $result;
    187202        }
    188203
    … …  
    219234         */
    220235        private function request( $method, $path, $body = null, $query = array(), $timeout = 15 ) {
     236                $this->last_failure = null;
    221237                if ( ! self::base_url_is_allowed() ) {
    222238                        return Pfadfindr_Errors::make( 'insecure_base_url', 500 );
    … …  
    262278
    263279                $api_error = ( is_array( $data ) && isset( $data['error'] ) && is_array( $data['error'] ) ) ? $data['error'] : array();
     280
     281                $this->last_failure = array(
     282                        'status'   => $status,
     283                        'has_code' => '' !== Pfadfindr_Connection::field( $api_error, 'code' ),
     284                );
    264285                if ( '' !== Pfadfindr_Connection::field( $api_error, 'code' ) ) {
    265286                        $code = $api_error['code'];
  • pfadfindr/tags/1.1.1/includes/class-pfadfindr-errors.php

    r3778332 r3778354  
    172172                                'retryable' => false,
    173173                        ),
     174                        'geo_unavailable'             => array(
     175                                'message'   => __( 'The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.', 'pfadfindr' ),
     176                                'retryable' => false,
     177                        ),
    174178                        'invalid_code'                => array(
    175179                                'message'   => __( 'The connection could not be completed because the confirmation has expired. Please connect again.', 'pfadfindr' ),
  • pfadfindr/tags/1.1.1/includes/class-pfadfindr-rest-controller.php

    r3778332 r3778354  
    272272                $geo = Pfadfindr_Connection::client()->get_geo( $request['run_id'], Pfadfindr_Connection::domain() );
    273273                if ( is_wp_error( $geo ) ) {
     274                        // An older backend without the route is no error: the UI shows a calm notice (PRJ-209).
     275                        if ( 'pfadfindr_geo_unavailable' === $geo->get_error_code() ) {
     276                                return rest_ensure_response(
     277                                        array(
     278                                                'run_id'      => $request['run_id'],
     279                                                'unavailable' => true,
     280                                        )
     281                                );
     282                        }
    274283                        return self::handle_error( $geo );
    275284                }
  • pfadfindr/tags/1.1.1/languages/pfadfindr.pot

    r3778332 r3778354  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Pfadfindr – Website Check for SEO, AI Visibility and Accessibility 1.1.0\n"
     5"Project-Id-Version: Pfadfindr – Website Check for SEO, AI Visibility and Accessibility 1.1.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pfadfindr\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-11-01T16:16:41+00:00\n"
     12"POT-Creation-Date: 2026-11-01T17:29:49+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    4242#: includes/class-pfadfindr-admin.php:47
    4343#: includes/class-pfadfindr-admin.php:71
    44 #: includes/class-pfadfindr-admin.php:174
     44#: includes/class-pfadfindr-admin.php:190
    4545msgid "Pfadfindr Website Check"
    4646msgstr ""
    … …  
    5050msgstr ""
    5151
    52 #: includes/class-pfadfindr-admin.php:151
     52#: includes/class-pfadfindr-admin.php:152
    5353msgid "Your site is now connected to Pfadfindr."
    5454msgstr ""
    5555
    56 #: includes/class-pfadfindr-admin.php:193
     56#: includes/class-pfadfindr-admin.php:209
    5757msgid "Audit your website for SEO, AI visibility (GEO) and accessibility. Connect it to Pfadfindr to get started."
    5858msgstr ""
    5959
    60 #: includes/class-pfadfindr-admin.php:194
     60#: includes/class-pfadfindr-admin.php:210
    6161#: src/components/ConnectCard.js:87
    6262msgid "Connect with Pfadfindr"
    6363msgstr ""
    6464
    65 #: includes/class-pfadfindr-admin.php:196
     65#: includes/class-pfadfindr-admin.php:212
    6666msgid "No audit yet."
    6767msgstr ""
    6868
    69 #: includes/class-pfadfindr-admin.php:197
     69#: includes/class-pfadfindr-admin.php:213
    7070msgid "Start first audit"
    7171msgstr ""
    7272
    73 #: includes/class-pfadfindr-admin.php:222
     73#: includes/class-pfadfindr-admin.php:238
    7474msgid "Very good"
    7575msgstr ""
    7676
    77 #: includes/class-pfadfindr-admin.php:223
     77#: includes/class-pfadfindr-admin.php:239
    7878msgid "Good"
    7979msgstr ""
    8080
    81 #: includes/class-pfadfindr-admin.php:224
     81#: includes/class-pfadfindr-admin.php:240
    8282msgid "Needs work"
    8383msgstr ""
    8484
    85 #: includes/class-pfadfindr-admin.php:225
     85#: includes/class-pfadfindr-admin.php:241
    8686#: src/lib/labels.js:12
    8787msgid "Critical"
    … …  
    8989
    9090#. translators: %s: score from 0 to 100
    91 #: includes/class-pfadfindr-admin.php:230
     91#: includes/class-pfadfindr-admin.php:246
    9292#: src/components/ScoreRing.js:37
    9393#, php-format,js-format
    … …  
    9595msgstr ""
    9696
    97 #: includes/class-pfadfindr-admin.php:238
     97#: includes/class-pfadfindr-admin.php:254
    9898#: src/components/HistoryCard.js:50
    9999#: src/components/ResultCard.js:77
    100 msgid "Health-Score"
     100msgid "Health score"
    101101msgstr ""
    102102
    103103#. translators: %s: date and time of the audit
    104 #: includes/class-pfadfindr-admin.php:246
     104#: includes/class-pfadfindr-admin.php:262
    105105#, php-format
    106106msgid "Last audit: %s"
    107107msgstr ""
    108108
    109 #: includes/class-pfadfindr-admin.php:253
     109#: includes/class-pfadfindr-admin.php:269
    110110msgid "View findings and full report"
    111111msgstr ""
    112112
    113 #: includes/class-pfadfindr-admin.php:274
     113#: includes/class-pfadfindr-admin.php:290
    114114msgid "Open"
    115115msgstr ""
    116116
    117 #: includes/class-pfadfindr-connection.php:140
     117#: includes/class-pfadfindr-connection.php:165
    118118msgid "Sorry, you are not allowed to do that."
    119119msgstr ""
    … …  
    123123msgstr ""
    124124
    125 #: includes/class-pfadfindr-errors.php:141
     125#: includes/class-pfadfindr-errors.php:143
    126126msgid "This site is not connected to Pfadfindr yet."
    127127msgstr ""
    128128
    129 #: includes/class-pfadfindr-errors.php:145
     129#: includes/class-pfadfindr-errors.php:147
    130130msgid "The connection to Pfadfindr is no longer valid. Please connect again."
    131131msgstr ""
    132132
    133 #: includes/class-pfadfindr-errors.php:149
     133#: includes/class-pfadfindr-errors.php:151
    134134msgid "This key belongs to a different website."
    135135msgstr ""
    136136
    137 #: includes/class-pfadfindr-errors.php:153
     137#: includes/class-pfadfindr-errors.php:155
    138138msgid "The quota of your Pfadfindr plan is used up. Upgrade your plan to run more audits."
    139139msgstr ""
    140140
    141 #: includes/class-pfadfindr-errors.php:157
     141#: includes/class-pfadfindr-errors.php:159
    142142msgid "An audit for this website is already running."
    143143msgstr ""
    144144
    145 #: includes/class-pfadfindr-errors.php:161
     145#: includes/class-pfadfindr-errors.php:163
    146146msgid "Too many requests to Pfadfindr. Please wait a minute."
    147147msgstr ""
    148148
    149 #: includes/class-pfadfindr-errors.php:165
     149#: includes/class-pfadfindr-errors.php:167
    150150msgid "The report for this audit is not ready yet."
    151151msgstr ""
    152152
    153 #: includes/class-pfadfindr-errors.php:169
     153#: includes/class-pfadfindr-errors.php:171
    154154msgid "This audit could not be found."
    155155msgstr ""
    156156
    157 #: includes/class-pfadfindr-errors.php:173
     157#: includes/class-pfadfindr-errors.php:175
     158#: src/components/GeoCard.js:90
     159msgid "The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it."
     160msgstr ""
     161
     162#: includes/class-pfadfindr-errors.php:179
    158163msgid "The connection could not be completed because the confirmation has expired. Please connect again."
    159164msgstr ""
    160165
    161 #: includes/class-pfadfindr-errors.php:177
     166#: includes/class-pfadfindr-errors.php:183
    162167msgid "The connection could not be completed because the request was not started from this site or is too old. Please connect again."
    163168msgstr ""
    164169
    165 #: includes/class-pfadfindr-errors.php:181
     170#: includes/class-pfadfindr-errors.php:187
    166171msgid "The connection was cancelled on pfadfindr.com."
    167172msgstr ""
    168173
    169 #: includes/class-pfadfindr-errors.php:185
     174#: includes/class-pfadfindr-errors.php:191
    170175msgid "Your WordPress admin runs on a different host than your website (see Settings → General). Pfadfindr can only connect when both use the same domain."
    171176msgstr ""
    172177
    173 #: includes/class-pfadfindr-errors.php:189
     178#: includes/class-pfadfindr-errors.php:195
     179msgid "On this multisite network, all sites share one domain. Only a network administrator can connect a sub-site."
     180msgstr ""
     181
     182#: includes/class-pfadfindr-errors.php:199
    174183msgid "Your server could not reach pfadfindr.com. Your host may block outgoing connections."
    175184msgstr ""
    176185
    177 #: includes/class-pfadfindr-errors.php:193
     186#: includes/class-pfadfindr-errors.php:203
    178187msgid "The Pfadfindr address must use HTTPS."
    179188msgstr ""
    180189
    181 #: includes/class-pfadfindr-errors.php:197
     190#: includes/class-pfadfindr-errors.php:207
    182191msgid "Pfadfindr is temporarily unavailable."
    183192msgstr ""
    184193
    185 #: includes/class-pfadfindr-errors.php:201
     194#: includes/class-pfadfindr-errors.php:211
    186195msgid "Pfadfindr could not reach your website. Check that it is publicly accessible and not in maintenance mode."
    187196msgstr ""
    188197
    189 #: includes/class-pfadfindr-errors.php:205
     198#: includes/class-pfadfindr-errors.php:215
    190199msgid "Your robots.txt does not allow crawling your website. Allow crawling of your public pages, then start the audit again."
    191200msgstr ""
    192201
    193 #: includes/class-pfadfindr-errors.php:209
     202#: includes/class-pfadfindr-errors.php:219
    194203msgid "Your website requires a login or blocks Pfadfindr (for example a firewall or security plugin), so it cannot be read. Remove the block, then start the audit again."
    195204msgstr ""
    196205
    197 #: includes/class-pfadfindr-errors.php:213
     206#: includes/class-pfadfindr-errors.php:223
    198207msgid "Pfadfindr found no pages it could check on your website."
    199208msgstr ""
    200209
    201 #: includes/class-pfadfindr-errors.php:217
     210#: includes/class-pfadfindr-errors.php:227
    202211msgid "The audit was cancelled."
    203212msgstr ""
    204213
    205 #: includes/class-pfadfindr-errors.php:221
     214#: includes/class-pfadfindr-errors.php:231
    206215msgid "The audit was interrupted at Pfadfindr."
    207216msgstr ""
    208217
    209 #: includes/class-pfadfindr-errors.php:225
     218#: includes/class-pfadfindr-errors.php:235
    210219msgid "The audit could not be completed."
    211220msgstr ""
    212221
    213 #: includes/class-pfadfindr-rest-controller.php:547
     222#: includes/class-pfadfindr-rest-controller.php:557
    214223msgid "The firewall check uses the bots' user agent, not their real IP addresses. A hint can be a deliberate protection against fake bots; only your server log gives certainty."
    215224msgstr ""
    216225
    217 #: src/api.js:30
     226#: src/api.js:22
     227#: src/api.js:27
     228msgid "The connection to your WordPress site was interrupted. Please try again."
     229msgstr ""
     230
     231#: src/api.js:32
     232msgid "Your WordPress site sent an unexpected response. Please try again."
     233msgstr ""
     234
     235#: src/api.js:59
    218236msgid "Something went wrong. Please reload the page."
    219237msgstr ""
    220238
    221 #: src/App.js:113
     239#: src/App.js:114
    222240msgid "Disconnected. The key was deleted here and revoked at Pfadfindr."
    223241msgstr ""
    224242
    225 #: src/App.js:120
     243#: src/App.js:121
    226244msgid "Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account."
    227245msgstr ""
    228246
    229 #: src/App.js:156
     247#: src/App.js:157
    230248msgid "Loading your Pfadfindr account…"
    231249msgstr ""
    232250
    233 #: src/components/AccountBar.js:31
     251#. translators: %s: email address of the Pfadfindr account
     252#: src/components/AccountBar.js:67
     253#, js-format
     254msgid "Connected as %s"
     255msgstr ""
     256
     257#. translators: %s: plan name, e.g. Free
     258#: src/components/AccountBar.js:76
     259#, js-format
     260msgid "%s plan"
     261msgstr ""
     262
     263#: src/components/AccountBar.js:107
     264msgid "Disconnect"
     265msgstr ""
     266
     267#: src/components/AccountBar.js:117
    234268msgid "Disconnect this site from Pfadfindr? The key will be deleted here and revoked at Pfadfindr. Your audits stay in your Pfadfindr account."
    235269msgstr ""
    236270
    237 #. translators: %s: email address of the Pfadfindr account
    238 #: src/components/AccountBar.js:56
    239 #, js-format
    240 msgid "Connected as %s"
    241 msgstr ""
    242 
    243 #. translators: %s: plan name, e.g. Free
    244 #: src/components/AccountBar.js:65
    245 #, js-format
    246 msgid "%s plan"
    247 msgstr ""
    248 
    249 #: src/components/AccountBar.js:93
    250 msgid "Disconnect"
     271#: src/components/AccountBar.js:130
     272msgid "Cancel"
     273msgstr ""
     274
     275#: src/components/AccountBar.js:138
     276msgid "Yes, disconnect"
    251277msgstr ""
    252278
    … …  
    311337
    312338#: src/components/ConnectCard.js:41
    313 msgid "Health-Score and the five most important findings"
     339msgid "Health score and the five most important findings"
    314340msgstr ""
    315341
    … …  
    338364msgstr ""
    339365
    340 #: src/components/ConnectCard.js:108
     366#: src/components/ConnectCard.js:109
    341367msgid "Privacy policy"
    342368msgstr ""
    … …  
    400426msgstr ""
    401427
    402 #: src/components/GeoCard.js:68
     428#: src/components/GeoCard.js:72
    403429msgid "AI visibility checklist"
    404430msgstr ""
    405431
    406 #: src/components/GeoCard.js:75
     432#: src/components/GeoCard.js:79
    407433msgid "Loading the AI visibility checklist…"
    408434msgstr ""
    409435
    410 #: src/components/GeoCard.js:86
     436#: src/components/GeoCard.js:99
    411437msgid "No AI visibility checklist is available for this audit."
    412438msgstr ""
    413439
    414 #: src/components/GeoCard.js:105
     440#: src/components/GeoCard.js:118
    415441msgid "The AI visibility check did not run in this audit, so nothing is shown as OK."
    416442msgstr ""
    417443
    418444#. translators: %s: number of findings
    419 #: src/components/GeoCard.js:129
     445#: src/components/GeoCard.js:142
    420446#, js-format
    421447msgid "%s finding"
    … …  
    424450msgstr[1] ""
    425451
    426 #: src/components/GeoCard.js:142
     452#: src/components/GeoCard.js:155
    427453msgid "Checked, no problems found."
    428454msgstr ""
    429455
    430 #: src/components/GeoCard.js:145
     456#: src/components/GeoCard.js:158
    431457msgid "Not checked in this audit."
    432458msgstr ""
    433459
    434 #: src/components/GeoCard.js:174
     460#: src/components/GeoCard.js:187
    435461msgid "Show details"
    436462msgstr ""
  • pfadfindr/tags/1.1.1/package-lock.json

    r3778332 r3778354  
    11{
    22        "name": "pfadfindr",
    3         "version": "1.1.0",
     3        "version": "1.1.1",
    44        "lockfileVersion": 3,
    55        "requires": true,
    … …  
    77                "": {
    88                        "name": "pfadfindr",
    9                         "version": "1.1.0",
     9                        "version": "1.1.1",
    1010                        "license": "GPL-2.0-or-later",
    1111                        "devDependencies": {
  • pfadfindr/tags/1.1.1/package.json

    r3778332 r3778354  
    11{
    22        "name": "pfadfindr",
    3         "version": "1.1.0",
     3        "version": "1.1.1",
    44        "private": true,
    55        "description": "Pfadfindr WordPress plugin – admin UI",
  • pfadfindr/tags/1.1.1/pfadfindr.php

    r3778332 r3778354  
    44 * Plugin URI:        https://pfadfindr.com/wordpress
    55 * Description:       Audit your own website with Pfadfindr right from the WordPress admin: health score, the five most important findings and the full report on pfadfindr.com.
    6  * Version:           1.1.0
     6 * Version:           1.1.1
    77 * Requires at least: 6.4
    88 * Requires PHP:      7.4
    … …  
    2020}
    2121
    22 define( 'PFADFINDR_VERSION', '1.1.0' );
     22define( 'PFADFINDR_VERSION', '1.1.1' );
    2323define( 'PFADFINDR_FILE', __FILE__ );
    2424define( 'PFADFINDR_DIR', plugin_dir_path( __FILE__ ) );
  • pfadfindr/tags/1.1.1/readme.txt

    r3778332 r3778354  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.1.0
     7Stable tag: 1.1.1
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    131131== Changelog ==
    132132
     133= 1.1.1 =
     134* Fix: the AI visibility checklist shows a calm notice instead of an error while the Pfadfindr service does not offer it yet.
     135
    133136= 1.1.0 =
    134137* New: AI visibility checklist below the result. Seven checks with a status each; a check that was not run is shown as "Not checked".
    … …  
    151154== Upgrade Notice ==
    152155
     156= 1.1.1 =
     157Shows a calm notice instead of an error when the AI visibility checklist is not offered yet. No action needed.
     158
    153159= 1.1.0 =
    154160Adds the AI visibility checklist and copy-paste fixes, and fixes the missing logo. No action needed.
  • pfadfindr/tags/1.1.1/src/components/GeoCard.js

    r3778332 r3778354  
    3636                        .then( ( data ) => {
    3737                                if ( current ) {
    38                                         setState( { geo: normalizeGeo( data ) } );
     38                                        setState(
     39                                                data && data.unavailable === true
     40                                                        ? { unavailable: true }
     41                                                        : { geo: normalizeGeo( data ) }
     42                                        );
    3943                                }
    4044                        } )
    … …  
    5660        useEffect( () => load(), [ load ] );
    5761
    58         const { loading, error, geo } = state;
     62        const { loading, error, geo, unavailable } = state;
    5963
    6064        return (
    … …  
    8286                        { error && <ErrorNotice error={ error } onRetry={ load } /> }
    8387
    84                         { ! loading && ! error && ! geo && (
     88                        { unavailable && (
     89                                <p className="pf-empty-line" role="status">
     90                                        { __(
     91                                                'The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.',
     92                                                'pfadfindr'
     93                                        ) }
     94                                </p>
     95                        ) }
     96
     97                        { ! loading && ! error && ! geo && ! unavailable && (
    8598                                <p className="pf-empty-line">
    8699                                        { __(
  • pfadfindr/tags/1.1.1/uninstall.php

    r3778332 r3778354  
    1111
    1212if ( ! defined( 'PFADFINDR_VERSION' ) ) {
    13         define( 'PFADFINDR_VERSION', '1.1.0' );
     13        define( 'PFADFINDR_VERSION', '1.1.1' );
    1414}
    1515
  • pfadfindr/trunk/build/index.asset.php

    r3778332 r3778354  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-date', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '5ed55a1b416a65f238c4');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-date', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => 'f47688363bcc4795eb27');
  • pfadfindr/trunk/build/index.js

    r3778332 r3778354  
    77(0,s.__)("Audit %s for SEO, AI visibility (GEO) and accessibility. The audit runs on Pfadfindr servers and puts no load on your server.","pfadfindr"),e)),(0,t.createElement)(P,{quota:k,upgradeUrl:a&&a.upgrade_url}),N&&(0,t.createElement)(x,{error:N,onRetry:w,onRemove:()=>v(null)}),(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--primary pf-btn--large",onClick:w,disabled:g||k.exhausted,"aria-busy":g},(0,t.createElement)(_,{name:"play",size:14}),(0,s.__)("Start audit","pfadfindr"))))}function P({quota:e,upgradeUrl:a}){return(0,t.createElement)("div",{className:"pf-quota"},(0,t.createElement)("span",{className:"pf-quota__text"},e.text),null!==e.ratio&&(0,t.createElement)("span",{className:"pf-meter","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-meter__fill",style:{width:Math.round(100*e.ratio)+"%"}})),e.exhausted&&(0,t.createElement)("p",{className:"pf-quota__warning"},(0,s.__)("Your free quota is used up. With Light, Growth or Agency Pro you can keep auditing.","pfadfindr"),a&&(0,t.createElement)(t.Fragment,null," ",(0,t.createElement)("a",{className:"pf-link",href:a,target:"_blank",rel:"noopener noreferrer"},(0,s.__)("View pricing →","pfadfindr")))))}function S({run:e}){const a=e&&e.phase,n=e&&"number"==typeof e.percent?e.percent:null;let r=(0,s.__)("Waiting for a free crawler…","pfadfindr");return a&&k[a]?r=k[a]:e&&"running"===e.status&&(r=(0,s.__)("Checking your website…","pfadfindr")),(0,t.createElement)("div",{className:"pf-progress","aria-live":"polite"},(0,t.createElement)("div",{className:"pf-progress__head"},(0,t.createElement)("span",{className:"pf-progress__label"},r),null!==n&&(0,t.createElement)("span",{className:"pf-progress__percent"},n+"%")),(0,t.createElement)("div",{className:"pf-progress__track",role:"progressbar","aria-label":r,"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":null!==n?n:void 0},(0,t.createElement)("span",{className:"pf-progress__fill"+(null===n?" is-indeterminate":""),style:{width:(null!==n?n:30)+"%"}})),e&&null!==e.pages_done&&void 0!==e.pages_done&&(0,t.createElement)("p",{className:"pf-muted"},e.pages_total?(0,s.sprintf)(/* translators: 1: pages checked so far, 2: pages found */ /* translators: 1: pages checked so far, 2: pages found */
    88(0,s.__)("Pages checked: %1$s of %2$s","pfadfindr"),e.pages_done,e.pages_total):(0,s.sprintf)(/* translators: %s: number of pages checked so far */ /* translators: %s: number of pages checked so far */
    9 (0,s.__)("Pages checked: %s","pfadfindr"),e.pages_done)),(0,t.createElement)("p",{className:"pf-muted"},(0,s.__)("You can leave this page. The audit continues on Pfadfindr.","pfadfindr")))}function z(e){return null==e?"none":e>=75?"good":e>=50?"ok":"poor"}function R(e,t=389.5){return t*(1-Math.min(100,Math.max(0,Number(e)||0))/100)}const $={lg:{size:150,r:62,stroke:11,circumference:389.5},sm:{size:72,r:29,stroke:7,circumference:182.2}};function M({score:e,size:a="lg"}){const n=$[a],r=n.size/2,l=null!=e;return(0,t.createElement)("div",{className:`pf-ring pf-ring--${a} pf-ring--${z(e)}`,role:"img","aria-label":l?(0,s.sprintf)(/* translators: %s: score from 0 to 100 */ /* translators: %s: score from 0 to 100 */
    10 (0,s.__)("Health score: %s of 100","pfadfindr"),e):(0,s.__)("Health score: not available","pfadfindr")},(0,t.createElement)("svg",{width:n.size,height:n.size,viewBox:`0 0 ${n.size} ${n.size}`,"aria-hidden":"true"},(0,t.createElement)("circle",{className:"pf-ring__track",cx:r,cy:r,r:n.r,strokeWidth:n.stroke}),(0,t.createElement)("circle",{className:"pf-ring__arc",cx:r,cy:r,r:n.r,strokeWidth:n.stroke,strokeDasharray:n.circumference,strokeDashoffset:R(e,n.circumference),transform:`rotate(-90 ${r} ${r})`})),(0,t.createElement)("span",{className:"pf-ring__value","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-ring__number"},l?e:"–"),"lg"===a&&(0,t.createElement)("span",{className:"pf-ring__max"},"/ 100")))}function T({label:e,icon:a,children:n}){const[s,l]=(0,r.useState)(!1),i=(0,r.useId)();return(0,t.createElement)("div",{className:"pf-disclosure"+(s?" is-open":"")},(0,t.createElement)("button",{type:"button",className:"pf-disclosure__toggle","aria-expanded":s,"aria-controls":i,onClick:()=>l(!s)},(0,t.createElement)("span",{className:"pf-disclosure__chevron"},(0,t.createElement)(_,{name:"chevron",size:14})),a&&(0,t.createElement)(_,{name:a,size:14}),(0,t.createElement)("span",null,e)),(0,t.createElement)("div",{id:i,className:"pf-disclosure__body",hidden:!s},n))}function A({fix:e}){const[a,n]=(0,r.useState)(""),l=(0,r.useRef)(null);if((0,r.useEffect)(()=>()=>clearTimeout(l.current),[]),!e||!e.code)return null;const i=e.title||(0,s.__)("Copy-paste fix","pfadfindr");return(0,t.createElement)(T,{label:(0,s.__)("Copy-paste fix","pfadfindr")},(0,t.createElement)("p",{className:"pf-fix__title"},i),(0,t.createElement)("p",{className:"pf-fix__note"},e.note||(0,s.__)("Replace the placeholders. Pfadfindr does not change your site.","pfadfindr")),(0,t.createElement)("pre",{className:"pf-fix__code",tabIndex:0,role:"region","aria-label":i,"data-language":e.language},(0,t.createElement)("code",null,e.code)),(0,t.createElement)("div",{className:"pf-fix__actions"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:async()=>{const t=await async function(e){if(window.navigator.clipboard&&window.navigator.clipboard.writeText)try{return await window.navigator.clipboard.writeText(e),!0}catch(e){}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.setAttribute("aria-hidden","true"),t.style.position="fixed",t.style.top="0",t.style.opacity="0",document.body.appendChild(t);try{return t.select(),!!document.execCommand("copy")}catch(e){return!1}finally{document.body.removeChild(t)}}(e.code);n(t?"copied":"failed"),clearTimeout(l.current),l.current=setTimeout(()=>n(""),2500)}},(0,t.createElement)(_,{name:"copy",size:14}),(0,s.__)("Copy","pfadfindr")),(0,t.createElement)("span",{className:"pf-fix__status",role:"status","aria-live":"polite"},"copied"===a&&(0,s.__)("Copied","pfadfindr"),"failed"===a&&(0,s.__)("Could not copy. Select the text and copy it by hand.","pfadfindr"))))}function I({summary:e,onError:a}){const[n,l]=(0,r.useState)(""),i=e.scores||{},c=e.top_findings||[],d=t=>{const n=window.open("","_blank");l(t),o(`/audits/${encodeURIComponent(e.run_id)}/report`,"POST").then(e=>{const a="a11y"===t?e.a11y_url:e.url;if(!a)throw{message:(0,s.__)("This report is not available.","pfadfindr")};n?(n.opener=null,n.location.href=a):window.location.href=a}).catch(e=>{n&&n.close(),a(e)}).finally(()=>l(""))};return(0,t.createElement)("section",{className:"pf-card pf-result","aria-labelledby":"pf-result-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-result-title",className:"pf-eyebrow"},(0,s.__)("Result","pfadfindr")),e.finished_at&&(0,t.createElement)("span",{className:"pf-muted"},p(e.finished_at))),(0,t.createElement)("div",{className:"pf-result__overview"},(0,t.createElement)("div",{className:"pf-result__score"},(0,t.createElement)(M,{score:e.score}),(0,t.createElement)("span",{className:"pf-eyebrow"},(0,s.__)("Health score","pfadfindr")),e.verdict&&(0,t.createElement)("strong",{className:`pf-verdict pf-text--${z(e.score)}`},e.verdict.label),e.score_cap&&(0,t.createElement)("p",{className:"pf-result__cap"},(0,s.sprintf)(/* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */ /* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */
     9(0,s.__)("Pages checked: %s","pfadfindr"),e.pages_done)),(0,t.createElement)("p",{className:"pf-muted"},(0,s.__)("You can leave this page. The audit continues on Pfadfindr.","pfadfindr")))}function z(e){return null==e?"none":e>=75?"good":e>=50?"ok":"poor"}function R(e,t=389.5){return t*(1-Math.min(100,Math.max(0,Number(e)||0))/100)}const $={lg:{size:150,r:62,stroke:11,circumference:389.5},sm:{size:72,r:29,stroke:7,circumference:182.2}};function T({score:e,size:a="lg"}){const n=$[a],r=n.size/2,l=null!=e;return(0,t.createElement)("div",{className:`pf-ring pf-ring--${a} pf-ring--${z(e)}`,role:"img","aria-label":l?(0,s.sprintf)(/* translators: %s: score from 0 to 100 */ /* translators: %s: score from 0 to 100 */
     10(0,s.__)("Health score: %s of 100","pfadfindr"),e):(0,s.__)("Health score: not available","pfadfindr")},(0,t.createElement)("svg",{width:n.size,height:n.size,viewBox:`0 0 ${n.size} ${n.size}`,"aria-hidden":"true"},(0,t.createElement)("circle",{className:"pf-ring__track",cx:r,cy:r,r:n.r,strokeWidth:n.stroke}),(0,t.createElement)("circle",{className:"pf-ring__arc",cx:r,cy:r,r:n.r,strokeWidth:n.stroke,strokeDasharray:n.circumference,strokeDashoffset:R(e,n.circumference),transform:`rotate(-90 ${r} ${r})`})),(0,t.createElement)("span",{className:"pf-ring__value","aria-hidden":"true"},(0,t.createElement)("span",{className:"pf-ring__number"},l?e:"–"),"lg"===a&&(0,t.createElement)("span",{className:"pf-ring__max"},"/ 100")))}function I({label:e,icon:a,children:n}){const[s,l]=(0,r.useState)(!1),i=(0,r.useId)();return(0,t.createElement)("div",{className:"pf-disclosure"+(s?" is-open":"")},(0,t.createElement)("button",{type:"button",className:"pf-disclosure__toggle","aria-expanded":s,"aria-controls":i,onClick:()=>l(!s)},(0,t.createElement)("span",{className:"pf-disclosure__chevron"},(0,t.createElement)(_,{name:"chevron",size:14})),a&&(0,t.createElement)(_,{name:a,size:14}),(0,t.createElement)("span",null,e)),(0,t.createElement)("div",{id:i,className:"pf-disclosure__body",hidden:!s},n))}function M({fix:e}){const[a,n]=(0,r.useState)(""),l=(0,r.useRef)(null);if((0,r.useEffect)(()=>()=>clearTimeout(l.current),[]),!e||!e.code)return null;const i=e.title||(0,s.__)("Copy-paste fix","pfadfindr");return(0,t.createElement)(I,{label:(0,s.__)("Copy-paste fix","pfadfindr")},(0,t.createElement)("p",{className:"pf-fix__title"},i),(0,t.createElement)("p",{className:"pf-fix__note"},e.note||(0,s.__)("Replace the placeholders. Pfadfindr does not change your site.","pfadfindr")),(0,t.createElement)("pre",{className:"pf-fix__code",tabIndex:0,role:"region","aria-label":i,"data-language":e.language},(0,t.createElement)("code",null,e.code)),(0,t.createElement)("div",{className:"pf-fix__actions"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:async()=>{const t=await async function(e){if(window.navigator.clipboard&&window.navigator.clipboard.writeText)try{return await window.navigator.clipboard.writeText(e),!0}catch(e){}const t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.setAttribute("aria-hidden","true"),t.style.position="fixed",t.style.top="0",t.style.opacity="0",document.body.appendChild(t);try{return t.select(),!!document.execCommand("copy")}catch(e){return!1}finally{document.body.removeChild(t)}}(e.code);n(t?"copied":"failed"),clearTimeout(l.current),l.current=setTimeout(()=>n(""),2500)}},(0,t.createElement)(_,{name:"copy",size:14}),(0,s.__)("Copy","pfadfindr")),(0,t.createElement)("span",{className:"pf-fix__status",role:"status","aria-live":"polite"},"copied"===a&&(0,s.__)("Copied","pfadfindr"),"failed"===a&&(0,s.__)("Could not copy. Select the text and copy it by hand.","pfadfindr"))))}function A({summary:e,onError:a}){const[n,l]=(0,r.useState)(""),i=e.scores||{},c=e.top_findings||[],d=t=>{const n=window.open("","_blank");l(t),o(`/audits/${encodeURIComponent(e.run_id)}/report`,"POST").then(e=>{const a="a11y"===t?e.a11y_url:e.url;if(!a)throw{message:(0,s.__)("This report is not available.","pfadfindr")};n?(n.opener=null,n.location.href=a):window.location.href=a}).catch(e=>{n&&n.close(),a(e)}).finally(()=>l(""))};return(0,t.createElement)("section",{className:"pf-card pf-result","aria-labelledby":"pf-result-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-result-title",className:"pf-eyebrow"},(0,s.__)("Result","pfadfindr")),e.finished_at&&(0,t.createElement)("span",{className:"pf-muted"},p(e.finished_at))),(0,t.createElement)("div",{className:"pf-result__overview"},(0,t.createElement)("div",{className:"pf-result__score"},(0,t.createElement)(T,{score:e.score}),(0,t.createElement)("span",{className:"pf-eyebrow"},(0,s.__)("Health score","pfadfindr")),e.verdict&&(0,t.createElement)("strong",{className:`pf-verdict pf-text--${z(e.score)}`},e.verdict.label),e.score_cap&&(0,t.createElement)("p",{className:"pf-result__cap"},(0,s.sprintf)(/* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */ /* translators: 1: maximum score, 2: reason, e.g. "a critical finding is open" */
    1111(0,s.__)("max. %1$s, because %2$s","pfadfindr"),e.score_cap.max,e.score_cap.reason))),(0,t.createElement)("ul",{className:"pf-tiles"},Object.keys(v).map(e=>(0,t.createElement)(U,{key:e,label:v[e],score:i[e]})))),e.a11y_error&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"alert",size:14}),(0,t.createElement)("span",null,(0,t.createElement)("strong",null,e.a11y_error.title||e.a11y_error.message),e.a11y_error.hint&&" "+e.a11y_error.hint)),(0,t.createElement)("h3",{className:"pf-section-title"},(0,s.__)("Most important findings","pfadfindr")),0===c.length?(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No open findings.","pfadfindr")):(0,t.createElement)("ol",{className:"pf-findings"},c.map((e,a)=>(0,t.createElement)(O,{key:a,finding:e}))),(0,t.createElement)("footer",{className:"pf-card__footer"},(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--primary",onClick:()=>d("seo"),disabled:!!n,"aria-busy":"seo"===n},(0,s.__)("Open full report","pfadfindr"),(0,t.createElement)(_,{name:"external",size:14})),null!==i.a11y&&void 0!==i.a11y&&(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--secondary",onClick:()=>d("a11y"),disabled:!!n,"aria-busy":"a11y"===n},(0,s.__)("Open accessibility report","pfadfindr"),(0,t.createElement)(_,{name:"external",size:14}))))}function U({label:e,score:a}){const n=null!=a,r=z(n?a:null);return(0,t.createElement)("li",{className:"pf-tile"},(0,t.createElement)("span",{className:"pf-tile__label"},e),n?(0,t.createElement)("span",{className:`pf-tile__score pf-text--${r}`},a,(0,t.createElement)("span",{className:"pf-tile__max"},"/100")):(0,t.createElement)("span",{className:"pf-tile__score pf-tile__score--none"},(0,s.__)("Not measured","pfadfindr")),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${r}`,style:{width:(n?a:0)+"%"}})))}function O({finding:e}){return(0,t.createElement)("li",{className:"pf-finding"},(0,t.createElement)("div",{className:"pf-finding__meta"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("span",{className:"pf-muted"},v[e.area])),(0,t.createElement)("strong",{className:"pf-finding__title"},e.title),e.url&&(0,t.createElement)("div",{className:"pf-finding__url"},(0,t.createElement)("a",{className:"pf-chip-link",href:e.url,target:"_blank",rel:"noopener noreferrer"},e.url),e.affected_count>1&&(0,t.createElement)("span",{className:"pf-muted"},(0,s.sprintf)(/* translators: %s: number of further pages with the same issue */ /* translators: %s: number of further pages with the same issue */
    12 (0,s._n)("and %s more page","and %s more pages",e.affected_count-1,"pfadfindr"),e.affected_count-1))),e.recommendation&&(0,t.createElement)("p",{className:"pf-finding__fix"},e.recommendation),(0,t.createElement)(A,{fix:e.fix}))}const D=["bots_search","bots_user_fetch","bots_training","firewall","llms_txt","schema_entities","citability"],F={bots_search:(0,s.__)("AI search bots are allowed","pfadfindr"),bots_user_fetch:(0,s.__)("Bots that fetch pages for users","pfadfindr"),bots_training:(0,s.__)("AI training bots (your policy)","pfadfindr"),firewall:(0,s.__)("Firewall or CDN lets AI search bots in","pfadfindr"),llms_txt:(0,s.__)("llms.txt","pfadfindr"),schema_entities:(0,s.__)("Structured data and entities","pfadfindr"),citability:(0,s.__)("Citability of your content","pfadfindr")},H=["ok","issue","info","not_checked"];function q(e){if(!e||!Array.isArray(e.items))return null;const t=!0===e.checked,a={};return e.items.forEach(e=>{e&&D.includes(e.id)&&!a[e.id]&&(a[e.id]=e)}),{checked:t,score:"number"==typeof e.score?e.score:null,methodNote:"string"==typeof e.method_note&&""!==e.method_note?e.method_note:(0,s.__)("Tested with the user agent, not with the bots' real IP addresses.","pfadfindr"),items:D.map(e=>{const n=a[e]||{},r=t&&Array.isArray(n.findings)?n.findings.filter(Boolean).map(e=>{return{...e,fix:(t=e.fix,t&&"string"==typeof t.code&&""!==t.code?t:null)};var t}):[];return{id:e,status:t?(s=n.status,H.includes(s)?s:"not_checked"):"not_checked",note:"string"==typeof n.note?n.note:"",findings:r};var s})}}const W={ok:{icon:"check",label:(0,s.__)("OK","pfadfindr")},issue:{icon:"alert",label:(0,s.__)("Needs attention","pfadfindr")},info:{icon:"info",label:(0,s.__)("Note","pfadfindr")},not_checked:{icon:"minus",label:(0,s.__)("Not checked","pfadfindr")}},L="pf-geo-note";function Y({runId:e,onError:a}){const[n,l]=(0,r.useState)({loading:!0}),i=(0,r.useCallback)(()=>{let t=!0;return l({loading:!0}),o(`/audits/${encodeURIComponent(e)}/geo`).then(e=>{t&&l({geo:q(e)})}).catch(e=>{t&&(m(f(e))?a(e):l({error:f(e)}))}),()=>{t=!1}},[e,a]);(0,r.useEffect)(()=>i(),[i]);const{loading:c,error:d,geo:p}=n;return(0,t.createElement)("section",{className:"pf-card pf-geo","aria-labelledby":"pf-geo-title","aria-busy":!!c},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-geo-title",className:"pf-eyebrow"},(0,s.__)("AI visibility checklist","pfadfindr"))),c&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading the AI visibility checklist…","pfadfindr")),d&&(0,t.createElement)(x,{error:d,onRetry:i}),!c&&!d&&!p&&(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No AI visibility checklist is available for this audit.","pfadfindr")),p&&(0,t.createElement)(B,{geo:p}))}function B({geo:e}){return(0,t.createElement)(t.Fragment,null,!e.checked&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"info",size:14}),(0,t.createElement)("span",null,(0,s.__)("The AI visibility check did not run in this audit, so nothing is shown as OK.","pfadfindr"))),(0,t.createElement)("ul",{className:"pf-geo__list"},e.items.map(e=>(0,t.createElement)(j,{key:e.id,item:e}))),(0,t.createElement)("p",{id:L,className:"pf-geo__footnote"},(0,t.createElement)("span",{"aria-hidden":"true"},"* "),e.methodNote))}function j({item:e}){const a=W[e.status],n=function(e){return"issue"===e.status?(0,s.sprintf)(/* translators: %s: number of findings */ /* translators: %s: number of findings */
    13 (0,s._n)("%s finding","%s findings",e.findings.length,"pfadfindr"),e.findings.length):e.note?e.note:"ok"===e.status?(0,s.__)("Checked, no problems found.","pfadfindr"):"not_checked"===e.status?(0,s.__)("Not checked in this audit.","pfadfindr"):""}(e);return(0,t.createElement)("li",{className:`pf-geo__row pf-geo__row--${e.status}`,"data-geo":e.id,"aria-describedby":"firewall"===e.id?L:void 0},(0,t.createElement)("div",{className:"pf-geo__head"},(0,t.createElement)("span",{className:"pf-geo__status"},(0,t.createElement)(_,{name:a.icon,size:14}),a.label),(0,t.createElement)("strong",{className:"pf-geo__title"},F[e.id],"firewall"===e.id&&(0,t.createElement)("span",{"aria-hidden":"true"}," *"))),n&&(0,t.createElement)("p",{className:"pf-geo__detail"},n),e.findings.length>0&&(0,t.createElement)(T,{label:(0,s.__)("Show details","pfadfindr")},(0,t.createElement)("ul",{className:"pf-geo__findings"},e.findings.map((e,a)=>(0,t.createElement)("li",{key:a,className:"pf-geo__finding"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("strong",null,e.title),e.recommendation&&(0,t.createElement)("p",null,e.recommendation),(0,t.createElement)(A,{fix:e.fix}))))))}const G={queued:(0,s.__)("Waiting","pfadfindr"),running:(0,s.__)("Running","pfadfindr"),error:(0,s.__)("Failed","pfadfindr"),cancelled:(0,s.__)("Cancelled","pfadfindr")};function V({items:e,selectedRunId:a,onSelect:n}){return(0,t.createElement)("section",{className:"pf-card","aria-labelledby":"pf-history-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-history-title",className:"pf-eyebrow"},(0,s.__)("History","pfadfindr"))),null===e&&(0,t.createElement)("p",{className:"pf-muted pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading…","pfadfindr")),e&&0===e.length&&(0,t.createElement)("div",{className:"pf-empty"},(0,t.createElement)("span",{className:"pf-empty__icon"},(0,t.createElement)(_,{name:"search",size:22})),(0,t.createElement)("p",null,(0,s.__)("No audits yet.","pfadfindr"))),e&&e.length>0&&(0,t.createElement)("table",{className:"pf-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col"},(0,s.__)("Date","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Health score","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Accessibility","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,t.createElement)("span",{className:"screen-reader-text"},(0,s.__)("Actions","pfadfindr"))))),(0,t.createElement)("tbody",null,e.map(e=>(0,t.createElement)("tr",{key:e.run_id},(0,t.createElement)("td",null,p(e.finished_at||e.created_at)),(0,t.createElement)("td",null,"done"===e.status?(0,t.createElement)(K,{score:e.score}):(0,t.createElement)("span",{className:"pf-muted"},G[e.status]||"–")),(0,t.createElement)("td",null,"done"===e.status&&null!==e.a11y_score&&void 0!==e.a11y_score?(0,t.createElement)(K,{score:e.a11y_score}):(0,t.createElement)("span",{className:"pf-muted"},"–")),(0,t.createElement)("td",{className:"pf-table__action"},"done"===e.status&&(e.run_id===a?(0,t.createElement)("span",{className:"pf-muted"},(0,s.__)("Shown above","pfadfindr")):(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--link",onClick:()=>n(e.run_id)},(0,s.__)("Show","pfadfindr")))))))))}function K({score:e}){const a=z(e);return(0,t.createElement)("span",{className:"pf-scorecell"},(0,t.createElement)("span",{className:`pf-dot pf-dot--${a}`,"aria-hidden":"true"}),(0,t.createElement)("span",{className:`pf-scorecell__value pf-text--${a}`},null!=e?e:"–"),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${a}`,style:{width:(e||0)+"%"}})))}function Q({settings:e}){const[a,n]=(0,r.useState)(e.connected),[l,i]=(0,r.useState)(null),[c,d]=(0,r.useState)(e.notice),[p,u]=(0,r.useState)(null),[_,E]=(0,r.useState)(null),[g,y]=(0,r.useState)(null);(0,r.useEffect)(()=>{const e=new URL(window.location.href);(e.searchParams.has("pfadfindr_notice")||e.searchParams.has("pfadfindr_error"))&&(e.searchParams.delete("pfadfindr_notice"),e.searchParams.delete("pfadfindr_error"),window.history.replaceState(null,"",e.toString()))},[]);const v=(0,r.useCallback)(e=>{const t=f(e);if(m(t))return n(!1),i(null),void d({status:"warning",message:t.message});y(t)},[]),w=(0,r.useCallback)(()=>o("/status").then(e=>(n(e.connected),i(e),e.notice&&d({status:"error",message:e.notice.message}),e)).catch(v),[v]),k=(0,r.useCallback)(()=>o("/audits").then(e=>u(e.items)).catch(v),[v]),P=(0,r.useCallback)(e=>o(`/audits/${encodeURIComponent(e)}/summary`).then(E).catch(v),[v]);(0,r.useEffect)(()=>{a&&w().then(e=>{e&&e.connected&&(k(),!e.current_run&&e.last_audit&&P(e.last_audit.run_id))})},[a,w,k,P]);const S=(0,r.useCallback)(e=>{E(e),w(),k()},[w,k]),z=(0,r.useCallback)(e=>{y(null),n(!1),i(null),u(null),E(null),d(e?{status:"success",message:(0,s.__)("Disconnected. The key was deleted here and revoked at Pfadfindr.","pfadfindr")}:{status:"warning",message:(0,s.__)("Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account.","pfadfindr")})},[]);return(0,t.createElement)("div",{className:"pfadfindr-app"},c&&("error"===c.status?(0,t.createElement)(x,{error:c,onRemove:()=>d(null)}):(0,t.createElement)(h,{status:c.status,onRemove:()=>d(null)},c.message)),g&&(0,t.createElement)(x,{error:g,onRemove:()=>y(null)}),!a&&(0,t.createElement)(b,{settings:e}),a&&!l&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading your Pfadfindr account…","pfadfindr")),a&&l&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(N,{status:l,logoUrl:e.logoUrl,onDisconnected:z,onError:v}),(0,t.createElement)(C,{domain:l.domain,account:l.account,currentRun:l.current_run,onStarted:k,onFinished:k,onDone:S,onError:v}),_&&(0,t.createElement)(I,{summary:_,onError:v}),_&&(0,t.createElement)(Y,{key:_.run_id,runId:_.run_id,onError:v}),(0,t.createElement)(V,{items:p,selectedRunId:_&&_.run_id,onSelect:P})))}n()(()=>{const e=document.getElementById("pfadfindr-root");e&&(0,r.createRoot)(e).render((0,t.createElement)(Q,{settings:window.pfadfindrSettings}))})})();
     12(0,s._n)("and %s more page","and %s more pages",e.affected_count-1,"pfadfindr"),e.affected_count-1))),e.recommendation&&(0,t.createElement)("p",{className:"pf-finding__fix"},e.recommendation),(0,t.createElement)(M,{fix:e.fix}))}const D=["bots_search","bots_user_fetch","bots_training","firewall","llms_txt","schema_entities","citability"],F={bots_search:(0,s.__)("AI search bots are allowed","pfadfindr"),bots_user_fetch:(0,s.__)("Bots that fetch pages for users","pfadfindr"),bots_training:(0,s.__)("AI training bots (your policy)","pfadfindr"),firewall:(0,s.__)("Firewall or CDN lets AI search bots in","pfadfindr"),llms_txt:(0,s.__)("llms.txt","pfadfindr"),schema_entities:(0,s.__)("Structured data and entities","pfadfindr"),citability:(0,s.__)("Citability of your content","pfadfindr")},H=["ok","issue","info","not_checked"];function q(e){if(!e||!Array.isArray(e.items))return null;const t=!0===e.checked,a={};return e.items.forEach(e=>{e&&D.includes(e.id)&&!a[e.id]&&(a[e.id]=e)}),{checked:t,score:"number"==typeof e.score?e.score:null,methodNote:"string"==typeof e.method_note&&""!==e.method_note?e.method_note:(0,s.__)("Tested with the user agent, not with the bots' real IP addresses.","pfadfindr"),items:D.map(e=>{const n=a[e]||{},r=t&&Array.isArray(n.findings)?n.findings.filter(Boolean).map(e=>{return{...e,fix:(t=e.fix,t&&"string"==typeof t.code&&""!==t.code?t:null)};var t}):[];return{id:e,status:t?(s=n.status,H.includes(s)?s:"not_checked"):"not_checked",note:"string"==typeof n.note?n.note:"",findings:r};var s})}}const W={ok:{icon:"check",label:(0,s.__)("OK","pfadfindr")},issue:{icon:"alert",label:(0,s.__)("Needs attention","pfadfindr")},info:{icon:"info",label:(0,s.__)("Note","pfadfindr")},not_checked:{icon:"minus",label:(0,s.__)("Not checked","pfadfindr")}},L="pf-geo-note";function Y({runId:e,onError:a}){const[n,l]=(0,r.useState)({loading:!0}),i=(0,r.useCallback)(()=>{let t=!0;return l({loading:!0}),o(`/audits/${encodeURIComponent(e)}/geo`).then(e=>{t&&l(e&&!0===e.unavailable?{unavailable:!0}:{geo:q(e)})}).catch(e=>{t&&(m(f(e))?a(e):l({error:f(e)}))}),()=>{t=!1}},[e,a]);(0,r.useEffect)(()=>i(),[i]);const{loading:c,error:d,geo:p,unavailable:u}=n;return(0,t.createElement)("section",{className:"pf-card pf-geo","aria-labelledby":"pf-geo-title","aria-busy":!!c},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-geo-title",className:"pf-eyebrow"},(0,s.__)("AI visibility checklist","pfadfindr"))),c&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading the AI visibility checklist…","pfadfindr")),d&&(0,t.createElement)(x,{error:d,onRetry:i}),u&&(0,t.createElement)("p",{className:"pf-empty-line",role:"status"},(0,s.__)("The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.","pfadfindr")),!c&&!d&&!p&&!u&&(0,t.createElement)("p",{className:"pf-empty-line"},(0,s.__)("No AI visibility checklist is available for this audit.","pfadfindr")),p&&(0,t.createElement)(B,{geo:p}))}function B({geo:e}){return(0,t.createElement)(t.Fragment,null,!e.checked&&(0,t.createElement)("p",{className:"pf-inline-warning",role:"status"},(0,t.createElement)(_,{name:"info",size:14}),(0,t.createElement)("span",null,(0,s.__)("The AI visibility check did not run in this audit, so nothing is shown as OK.","pfadfindr"))),(0,t.createElement)("ul",{className:"pf-geo__list"},e.items.map(e=>(0,t.createElement)(j,{key:e.id,item:e}))),(0,t.createElement)("p",{id:L,className:"pf-geo__footnote"},(0,t.createElement)("span",{"aria-hidden":"true"},"* "),e.methodNote))}function j({item:e}){const a=W[e.status],n=function(e){return"issue"===e.status?(0,s.sprintf)(/* translators: %s: number of findings */ /* translators: %s: number of findings */
     13(0,s._n)("%s finding","%s findings",e.findings.length,"pfadfindr"),e.findings.length):e.note?e.note:"ok"===e.status?(0,s.__)("Checked, no problems found.","pfadfindr"):"not_checked"===e.status?(0,s.__)("Not checked in this audit.","pfadfindr"):""}(e);return(0,t.createElement)("li",{className:`pf-geo__row pf-geo__row--${e.status}`,"data-geo":e.id,"aria-describedby":"firewall"===e.id?L:void 0},(0,t.createElement)("div",{className:"pf-geo__head"},(0,t.createElement)("span",{className:"pf-geo__status"},(0,t.createElement)(_,{name:a.icon,size:14}),a.label),(0,t.createElement)("strong",{className:"pf-geo__title"},F[e.id],"firewall"===e.id&&(0,t.createElement)("span",{"aria-hidden":"true"}," *"))),n&&(0,t.createElement)("p",{className:"pf-geo__detail"},n),e.findings.length>0&&(0,t.createElement)(I,{label:(0,s.__)("Show details","pfadfindr")},(0,t.createElement)("ul",{className:"pf-geo__findings"},e.findings.map((e,a)=>(0,t.createElement)("li",{key:a,className:"pf-geo__finding"},(0,t.createElement)("span",{className:`pf-badge pf-badge--${e.severity}`},w[e.severity]),(0,t.createElement)("strong",null,e.title),e.recommendation&&(0,t.createElement)("p",null,e.recommendation),(0,t.createElement)(M,{fix:e.fix}))))))}const G={queued:(0,s.__)("Waiting","pfadfindr"),running:(0,s.__)("Running","pfadfindr"),error:(0,s.__)("Failed","pfadfindr"),cancelled:(0,s.__)("Cancelled","pfadfindr")};function V({items:e,selectedRunId:a,onSelect:n}){return(0,t.createElement)("section",{className:"pf-card","aria-labelledby":"pf-history-title"},(0,t.createElement)("header",{className:"pf-card__header"},(0,t.createElement)("h2",{id:"pf-history-title",className:"pf-eyebrow"},(0,s.__)("History","pfadfindr"))),null===e&&(0,t.createElement)("p",{className:"pf-muted pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading…","pfadfindr")),e&&0===e.length&&(0,t.createElement)("div",{className:"pf-empty"},(0,t.createElement)("span",{className:"pf-empty__icon"},(0,t.createElement)(_,{name:"search",size:22})),(0,t.createElement)("p",null,(0,s.__)("No audits yet.","pfadfindr"))),e&&e.length>0&&(0,t.createElement)("table",{className:"pf-table"},(0,t.createElement)("thead",null,(0,t.createElement)("tr",null,(0,t.createElement)("th",{scope:"col"},(0,s.__)("Date","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Health score","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,s.__)("Accessibility","pfadfindr")),(0,t.createElement)("th",{scope:"col"},(0,t.createElement)("span",{className:"screen-reader-text"},(0,s.__)("Actions","pfadfindr"))))),(0,t.createElement)("tbody",null,e.map(e=>(0,t.createElement)("tr",{key:e.run_id},(0,t.createElement)("td",null,p(e.finished_at||e.created_at)),(0,t.createElement)("td",null,"done"===e.status?(0,t.createElement)(K,{score:e.score}):(0,t.createElement)("span",{className:"pf-muted"},G[e.status]||"–")),(0,t.createElement)("td",null,"done"===e.status&&null!==e.a11y_score&&void 0!==e.a11y_score?(0,t.createElement)(K,{score:e.a11y_score}):(0,t.createElement)("span",{className:"pf-muted"},"–")),(0,t.createElement)("td",{className:"pf-table__action"},"done"===e.status&&(e.run_id===a?(0,t.createElement)("span",{className:"pf-muted"},(0,s.__)("Shown above","pfadfindr")):(0,t.createElement)("button",{type:"button",className:"pf-btn pf-btn--link",onClick:()=>n(e.run_id)},(0,s.__)("Show","pfadfindr")))))))))}function K({score:e}){const a=z(e);return(0,t.createElement)("span",{className:"pf-scorecell"},(0,t.createElement)("span",{className:`pf-dot pf-dot--${a}`,"aria-hidden":"true"}),(0,t.createElement)("span",{className:`pf-scorecell__value pf-text--${a}`},null!=e?e:"–"),(0,t.createElement)("span",{className:"pf-minibar","aria-hidden":"true"},(0,t.createElement)("span",{className:`pf-minibar__fill pf-bg--${a}`,style:{width:(e||0)+"%"}})))}function Q({settings:e}){const[a,n]=(0,r.useState)(e.connected),[l,i]=(0,r.useState)(null),[c,d]=(0,r.useState)(e.notice),[p,u]=(0,r.useState)(null),[_,E]=(0,r.useState)(null),[g,y]=(0,r.useState)(null);(0,r.useEffect)(()=>{const e=new URL(window.location.href);(e.searchParams.has("pfadfindr_notice")||e.searchParams.has("pfadfindr_error"))&&(e.searchParams.delete("pfadfindr_notice"),e.searchParams.delete("pfadfindr_error"),window.history.replaceState(null,"",e.toString()))},[]);const v=(0,r.useCallback)(e=>{const t=f(e);if(m(t))return n(!1),i(null),void d({status:"warning",message:t.message});y(t)},[]),w=(0,r.useCallback)(()=>o("/status").then(e=>(n(e.connected),i(e),e.notice&&d({status:"error",message:e.notice.message}),e)).catch(v),[v]),k=(0,r.useCallback)(()=>o("/audits").then(e=>u(e.items)).catch(v),[v]),P=(0,r.useCallback)(e=>o(`/audits/${encodeURIComponent(e)}/summary`).then(E).catch(v),[v]);(0,r.useEffect)(()=>{a&&w().then(e=>{e&&e.connected&&(k(),!e.current_run&&e.last_audit&&P(e.last_audit.run_id))})},[a,w,k,P]);const S=(0,r.useCallback)(e=>{E(e),w(),k()},[w,k]),z=(0,r.useCallback)(e=>{y(null),n(!1),i(null),u(null),E(null),d(e?{status:"success",message:(0,s.__)("Disconnected. The key was deleted here and revoked at Pfadfindr.","pfadfindr")}:{status:"warning",message:(0,s.__)("Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account.","pfadfindr")})},[]);return(0,t.createElement)("div",{className:"pfadfindr-app"},c&&("error"===c.status?(0,t.createElement)(x,{error:c,onRemove:()=>d(null)}):(0,t.createElement)(h,{status:c.status,onRemove:()=>d(null)},c.message)),g&&(0,t.createElement)(x,{error:g,onRemove:()=>y(null)}),!a&&(0,t.createElement)(b,{settings:e}),a&&!l&&(0,t.createElement)("p",{className:"pf-loading"},(0,t.createElement)("span",{className:"pf-spinner","aria-hidden":"true"}),(0,s.__)("Loading your Pfadfindr account…","pfadfindr")),a&&l&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)(N,{status:l,logoUrl:e.logoUrl,onDisconnected:z,onError:v}),(0,t.createElement)(C,{domain:l.domain,account:l.account,currentRun:l.current_run,onStarted:k,onFinished:k,onDone:S,onError:v}),_&&(0,t.createElement)(A,{summary:_,onError:v}),_&&(0,t.createElement)(Y,{key:_.run_id,runId:_.run_id,onError:v}),(0,t.createElement)(V,{items:p,selectedRunId:_&&_.run_id,onSelect:P})))}n()(()=>{const e=document.getElementById("pfadfindr-root");e&&(0,r.createRoot)(e).render((0,t.createElement)(Q,{settings:window.pfadfindrSettings}))})})();
  • pfadfindr/trunk/includes/class-pfadfindr-api-client.php

    r3778332 r3778354  
    2626         */
    2727        private $api_key;
     28
     29        /**
     30         * Status and error-format info of the last failed request, null after a successful one.
     31         *
     32         * @var array|null
     33         */
     34        private $last_failure = null;
    2835
    2936        /**
    … …  
    184191         */
    185192        public function get_geo( $run_id, $domain ) {
    186                 return $this->request( 'GET', '/audits/' . rawurlencode( $run_id ) . '/geo', null, array( 'domain' => $domain ) );
     193                $result = $this->request( 'GET', '/audits/' . rawurlencode( $run_id ) . '/geo', null, array( 'domain' => $domain ) );
     194
     195                // A backend that does not know the route yet answers a plain 404/405/501 without the error format. That is
     196                // not a failure of the plugin or of the audit: the checklist is simply not offered (PRJ-209).
     197                if ( is_wp_error( $result ) && null !== $this->last_failure && in_array( $this->last_failure['status'], array( 404, 405, 501 ), true ) && ! $this->last_failure['has_code'] ) {
     198                        return Pfadfindr_Errors::make( 'geo_unavailable', 404 );
     199                }
     200
     201                return $result;
    187202        }
    188203
    … …  
    219234         */
    220235        private function request( $method, $path, $body = null, $query = array(), $timeout = 15 ) {
     236                $this->last_failure = null;
    221237                if ( ! self::base_url_is_allowed() ) {
    222238                        return Pfadfindr_Errors::make( 'insecure_base_url', 500 );
    … …  
    262278
    263279                $api_error = ( is_array( $data ) && isset( $data['error'] ) && is_array( $data['error'] ) ) ? $data['error'] : array();
     280
     281                $this->last_failure = array(
     282                        'status'   => $status,
     283                        'has_code' => '' !== Pfadfindr_Connection::field( $api_error, 'code' ),
     284                );
    264285                if ( '' !== Pfadfindr_Connection::field( $api_error, 'code' ) ) {
    265286                        $code = $api_error['code'];
  • pfadfindr/trunk/includes/class-pfadfindr-errors.php

    r3778332 r3778354  
    172172                                'retryable' => false,
    173173                        ),
     174                        'geo_unavailable'             => array(
     175                                'message'   => __( 'The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.', 'pfadfindr' ),
     176                                'retryable' => false,
     177                        ),
    174178                        'invalid_code'                => array(
    175179                                'message'   => __( 'The connection could not be completed because the confirmation has expired. Please connect again.', 'pfadfindr' ),
  • pfadfindr/trunk/includes/class-pfadfindr-rest-controller.php

    r3778332 r3778354  
    272272                $geo = Pfadfindr_Connection::client()->get_geo( $request['run_id'], Pfadfindr_Connection::domain() );
    273273                if ( is_wp_error( $geo ) ) {
     274                        // An older backend without the route is no error: the UI shows a calm notice (PRJ-209).
     275                        if ( 'pfadfindr_geo_unavailable' === $geo->get_error_code() ) {
     276                                return rest_ensure_response(
     277                                        array(
     278                                                'run_id'      => $request['run_id'],
     279                                                'unavailable' => true,
     280                                        )
     281                                );
     282                        }
    274283                        return self::handle_error( $geo );
    275284                }
  • pfadfindr/trunk/languages/pfadfindr.pot

    r3778332 r3778354  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Pfadfindr – Website Check for SEO, AI Visibility and Accessibility 1.1.0\n"
     5"Project-Id-Version: Pfadfindr – Website Check for SEO, AI Visibility and Accessibility 1.1.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pfadfindr\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-11-01T16:16:41+00:00\n"
     12"POT-Creation-Date: 2026-11-01T17:29:49+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    4242#: includes/class-pfadfindr-admin.php:47
    4343#: includes/class-pfadfindr-admin.php:71
    44 #: includes/class-pfadfindr-admin.php:174
     44#: includes/class-pfadfindr-admin.php:190
    4545msgid "Pfadfindr Website Check"
    4646msgstr ""
    … …  
    5050msgstr ""
    5151
    52 #: includes/class-pfadfindr-admin.php:151
     52#: includes/class-pfadfindr-admin.php:152
    5353msgid "Your site is now connected to Pfadfindr."
    5454msgstr ""
    5555
    56 #: includes/class-pfadfindr-admin.php:193
     56#: includes/class-pfadfindr-admin.php:209
    5757msgid "Audit your website for SEO, AI visibility (GEO) and accessibility. Connect it to Pfadfindr to get started."
    5858msgstr ""
    5959
    60 #: includes/class-pfadfindr-admin.php:194
     60#: includes/class-pfadfindr-admin.php:210
    6161#: src/components/ConnectCard.js:87
    6262msgid "Connect with Pfadfindr"
    6363msgstr ""
    6464
    65 #: includes/class-pfadfindr-admin.php:196
     65#: includes/class-pfadfindr-admin.php:212
    6666msgid "No audit yet."
    6767msgstr ""
    6868
    69 #: includes/class-pfadfindr-admin.php:197
     69#: includes/class-pfadfindr-admin.php:213
    7070msgid "Start first audit"
    7171msgstr ""
    7272
    73 #: includes/class-pfadfindr-admin.php:222
     73#: includes/class-pfadfindr-admin.php:238
    7474msgid "Very good"
    7575msgstr ""
    7676
    77 #: includes/class-pfadfindr-admin.php:223
     77#: includes/class-pfadfindr-admin.php:239
    7878msgid "Good"
    7979msgstr ""
    8080
    81 #: includes/class-pfadfindr-admin.php:224
     81#: includes/class-pfadfindr-admin.php:240
    8282msgid "Needs work"
    8383msgstr ""
    8484
    85 #: includes/class-pfadfindr-admin.php:225
     85#: includes/class-pfadfindr-admin.php:241
    8686#: src/lib/labels.js:12
    8787msgid "Critical"
    … …  
    8989
    9090#. translators: %s: score from 0 to 100
    91 #: includes/class-pfadfindr-admin.php:230
     91#: includes/class-pfadfindr-admin.php:246
    9292#: src/components/ScoreRing.js:37
    9393#, php-format,js-format
    … …  
    9595msgstr ""
    9696
    97 #: includes/class-pfadfindr-admin.php:238
     97#: includes/class-pfadfindr-admin.php:254
    9898#: src/components/HistoryCard.js:50
    9999#: src/components/ResultCard.js:77
    100 msgid "Health-Score"
     100msgid "Health score"
    101101msgstr ""
    102102
    103103#. translators: %s: date and time of the audit
    104 #: includes/class-pfadfindr-admin.php:246
     104#: includes/class-pfadfindr-admin.php:262
    105105#, php-format
    106106msgid "Last audit: %s"
    107107msgstr ""
    108108
    109 #: includes/class-pfadfindr-admin.php:253
     109#: includes/class-pfadfindr-admin.php:269
    110110msgid "View findings and full report"
    111111msgstr ""
    112112
    113 #: includes/class-pfadfindr-admin.php:274
     113#: includes/class-pfadfindr-admin.php:290
    114114msgid "Open"
    115115msgstr ""
    116116
    117 #: includes/class-pfadfindr-connection.php:140
     117#: includes/class-pfadfindr-connection.php:165
    118118msgid "Sorry, you are not allowed to do that."
    119119msgstr ""
    … …  
    123123msgstr ""
    124124
    125 #: includes/class-pfadfindr-errors.php:141
     125#: includes/class-pfadfindr-errors.php:143
    126126msgid "This site is not connected to Pfadfindr yet."
    127127msgstr ""
    128128
    129 #: includes/class-pfadfindr-errors.php:145
     129#: includes/class-pfadfindr-errors.php:147
    130130msgid "The connection to Pfadfindr is no longer valid. Please connect again."
    131131msgstr ""
    132132
    133 #: includes/class-pfadfindr-errors.php:149
     133#: includes/class-pfadfindr-errors.php:151
    134134msgid "This key belongs to a different website."
    135135msgstr ""
    136136
    137 #: includes/class-pfadfindr-errors.php:153
     137#: includes/class-pfadfindr-errors.php:155
    138138msgid "The quota of your Pfadfindr plan is used up. Upgrade your plan to run more audits."
    139139msgstr ""
    140140
    141 #: includes/class-pfadfindr-errors.php:157
     141#: includes/class-pfadfindr-errors.php:159
    142142msgid "An audit for this website is already running."
    143143msgstr ""
    144144
    145 #: includes/class-pfadfindr-errors.php:161
     145#: includes/class-pfadfindr-errors.php:163
    146146msgid "Too many requests to Pfadfindr. Please wait a minute."
    147147msgstr ""
    148148
    149 #: includes/class-pfadfindr-errors.php:165
     149#: includes/class-pfadfindr-errors.php:167
    150150msgid "The report for this audit is not ready yet."
    151151msgstr ""
    152152
    153 #: includes/class-pfadfindr-errors.php:169
     153#: includes/class-pfadfindr-errors.php:171
    154154msgid "This audit could not be found."
    155155msgstr ""
    156156
    157 #: includes/class-pfadfindr-errors.php:173
     157#: includes/class-pfadfindr-errors.php:175
     158#: src/components/GeoCard.js:90
     159msgid "The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it."
     160msgstr ""
     161
     162#: includes/class-pfadfindr-errors.php:179
    158163msgid "The connection could not be completed because the confirmation has expired. Please connect again."
    159164msgstr ""
    160165
    161 #: includes/class-pfadfindr-errors.php:177
     166#: includes/class-pfadfindr-errors.php:183
    162167msgid "The connection could not be completed because the request was not started from this site or is too old. Please connect again."
    163168msgstr ""
    164169
    165 #: includes/class-pfadfindr-errors.php:181
     170#: includes/class-pfadfindr-errors.php:187
    166171msgid "The connection was cancelled on pfadfindr.com."
    167172msgstr ""
    168173
    169 #: includes/class-pfadfindr-errors.php:185
     174#: includes/class-pfadfindr-errors.php:191
    170175msgid "Your WordPress admin runs on a different host than your website (see Settings → General). Pfadfindr can only connect when both use the same domain."
    171176msgstr ""
    172177
    173 #: includes/class-pfadfindr-errors.php:189
     178#: includes/class-pfadfindr-errors.php:195
     179msgid "On this multisite network, all sites share one domain. Only a network administrator can connect a sub-site."
     180msgstr ""
     181
     182#: includes/class-pfadfindr-errors.php:199
    174183msgid "Your server could not reach pfadfindr.com. Your host may block outgoing connections."
    175184msgstr ""
    176185
    177 #: includes/class-pfadfindr-errors.php:193
     186#: includes/class-pfadfindr-errors.php:203
    178187msgid "The Pfadfindr address must use HTTPS."
    179188msgstr ""
    180189
    181 #: includes/class-pfadfindr-errors.php:197
     190#: includes/class-pfadfindr-errors.php:207
    182191msgid "Pfadfindr is temporarily unavailable."
    183192msgstr ""
    184193
    185 #: includes/class-pfadfindr-errors.php:201
     194#: includes/class-pfadfindr-errors.php:211
    186195msgid "Pfadfindr could not reach your website. Check that it is publicly accessible and not in maintenance mode."
    187196msgstr ""
    188197
    189 #: includes/class-pfadfindr-errors.php:205
     198#: includes/class-pfadfindr-errors.php:215
    190199msgid "Your robots.txt does not allow crawling your website. Allow crawling of your public pages, then start the audit again."
    191200msgstr ""
    192201
    193 #: includes/class-pfadfindr-errors.php:209
     202#: includes/class-pfadfindr-errors.php:219
    194203msgid "Your website requires a login or blocks Pfadfindr (for example a firewall or security plugin), so it cannot be read. Remove the block, then start the audit again."
    195204msgstr ""
    196205
    197 #: includes/class-pfadfindr-errors.php:213
     206#: includes/class-pfadfindr-errors.php:223
    198207msgid "Pfadfindr found no pages it could check on your website."
    199208msgstr ""
    200209
    201 #: includes/class-pfadfindr-errors.php:217
     210#: includes/class-pfadfindr-errors.php:227
    202211msgid "The audit was cancelled."
    203212msgstr ""
    204213
    205 #: includes/class-pfadfindr-errors.php:221
     214#: includes/class-pfadfindr-errors.php:231
    206215msgid "The audit was interrupted at Pfadfindr."
    207216msgstr ""
    208217
    209 #: includes/class-pfadfindr-errors.php:225
     218#: includes/class-pfadfindr-errors.php:235
    210219msgid "The audit could not be completed."
    211220msgstr ""
    212221
    213 #: includes/class-pfadfindr-rest-controller.php:547
     222#: includes/class-pfadfindr-rest-controller.php:557
    214223msgid "The firewall check uses the bots' user agent, not their real IP addresses. A hint can be a deliberate protection against fake bots; only your server log gives certainty."
    215224msgstr ""
    216225
    217 #: src/api.js:30
     226#: src/api.js:22
     227#: src/api.js:27
     228msgid "The connection to your WordPress site was interrupted. Please try again."
     229msgstr ""
     230
     231#: src/api.js:32
     232msgid "Your WordPress site sent an unexpected response. Please try again."
     233msgstr ""
     234
     235#: src/api.js:59
    218236msgid "Something went wrong. Please reload the page."
    219237msgstr ""
    220238
    221 #: src/App.js:113
     239#: src/App.js:114
    222240msgid "Disconnected. The key was deleted here and revoked at Pfadfindr."
    223241msgstr ""
    224242
    225 #: src/App.js:120
     243#: src/App.js:121
    226244msgid "Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account."
    227245msgstr ""
    228246
    229 #: src/App.js:156
     247#: src/App.js:157
    230248msgid "Loading your Pfadfindr account…"
    231249msgstr ""
    232250
    233 #: src/components/AccountBar.js:31
     251#. translators: %s: email address of the Pfadfindr account
     252#: src/components/AccountBar.js:67
     253#, js-format
     254msgid "Connected as %s"
     255msgstr ""
     256
     257#. translators: %s: plan name, e.g. Free
     258#: src/components/AccountBar.js:76
     259#, js-format
     260msgid "%s plan"
     261msgstr ""
     262
     263#: src/components/AccountBar.js:107
     264msgid "Disconnect"
     265msgstr ""
     266
     267#: src/components/AccountBar.js:117
    234268msgid "Disconnect this site from Pfadfindr? The key will be deleted here and revoked at Pfadfindr. Your audits stay in your Pfadfindr account."
    235269msgstr ""
    236270
    237 #. translators: %s: email address of the Pfadfindr account
    238 #: src/components/AccountBar.js:56
    239 #, js-format
    240 msgid "Connected as %s"
    241 msgstr ""
    242 
    243 #. translators: %s: plan name, e.g. Free
    244 #: src/components/AccountBar.js:65
    245 #, js-format
    246 msgid "%s plan"
    247 msgstr ""
    248 
    249 #: src/components/AccountBar.js:93
    250 msgid "Disconnect"
     271#: src/components/AccountBar.js:130
     272msgid "Cancel"
     273msgstr ""
     274
     275#: src/components/AccountBar.js:138
     276msgid "Yes, disconnect"
    251277msgstr ""
    252278
    … …  
    311337
    312338#: src/components/ConnectCard.js:41
    313 msgid "Health-Score and the five most important findings"
     339msgid "Health score and the five most important findings"
    314340msgstr ""
    315341
    … …  
    338364msgstr ""
    339365
    340 #: src/components/ConnectCard.js:108
     366#: src/components/ConnectCard.js:109
    341367msgid "Privacy policy"
    342368msgstr ""
    … …  
    400426msgstr ""
    401427
    402 #: src/components/GeoCard.js:68
     428#: src/components/GeoCard.js:72
    403429msgid "AI visibility checklist"
    404430msgstr ""
    405431
    406 #: src/components/GeoCard.js:75
     432#: src/components/GeoCard.js:79
    407433msgid "Loading the AI visibility checklist…"
    408434msgstr ""
    409435
    410 #: src/components/GeoCard.js:86
     436#: src/components/GeoCard.js:99
    411437msgid "No AI visibility checklist is available for this audit."
    412438msgstr ""
    413439
    414 #: src/components/GeoCard.js:105
     440#: src/components/GeoCard.js:118
    415441msgid "The AI visibility check did not run in this audit, so nothing is shown as OK."
    416442msgstr ""
    417443
    418444#. translators: %s: number of findings
    419 #: src/components/GeoCard.js:129
     445#: src/components/GeoCard.js:142
    420446#, js-format
    421447msgid "%s finding"
    … …  
    424450msgstr[1] ""
    425451
    426 #: src/components/GeoCard.js:142
     452#: src/components/GeoCard.js:155
    427453msgid "Checked, no problems found."
    428454msgstr ""
    429455
    430 #: src/components/GeoCard.js:145
     456#: src/components/GeoCard.js:158
    431457msgid "Not checked in this audit."
    432458msgstr ""
    433459
    434 #: src/components/GeoCard.js:174
     460#: src/components/GeoCard.js:187
    435461msgid "Show details"
    436462msgstr ""
  • pfadfindr/trunk/package-lock.json

    r3778332 r3778354  
    11{
    22        "name": "pfadfindr",
    3         "version": "1.1.0",
     3        "version": "1.1.1",
    44        "lockfileVersion": 3,
    55        "requires": true,
    … …  
    77                "": {
    88                        "name": "pfadfindr",
    9                         "version": "1.1.0",
     9                        "version": "1.1.1",
    1010                        "license": "GPL-2.0-or-later",
    1111                        "devDependencies": {
  • pfadfindr/trunk/package.json

    r3778332 r3778354  
    11{
    22        "name": "pfadfindr",
    3         "version": "1.1.0",
     3        "version": "1.1.1",
    44        "private": true,
    55        "description": "Pfadfindr WordPress plugin – admin UI",
  • pfadfindr/trunk/pfadfindr.php

    r3778332 r3778354  
    44 * Plugin URI:        https://pfadfindr.com/wordpress
    55 * Description:       Audit your own website with Pfadfindr right from the WordPress admin: health score, the five most important findings and the full report on pfadfindr.com.
    6  * Version:           1.1.0
     6 * Version:           1.1.1
    77 * Requires at least: 6.4
    88 * Requires PHP:      7.4
    … …  
    2020}
    2121
    22 define( 'PFADFINDR_VERSION', '1.1.0' );
     22define( 'PFADFINDR_VERSION', '1.1.1' );
    2323define( 'PFADFINDR_FILE', __FILE__ );
    2424define( 'PFADFINDR_DIR', plugin_dir_path( __FILE__ ) );
  • pfadfindr/trunk/readme.txt

    r3778332 r3778354  
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.1.0
     7Stable tag: 1.1.1
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    131131== Changelog ==
    132132
     133= 1.1.1 =
     134* Fix: the AI visibility checklist shows a calm notice instead of an error while the Pfadfindr service does not offer it yet.
     135
    133136= 1.1.0 =
    134137* New: AI visibility checklist below the result. Seven checks with a status each; a check that was not run is shown as "Not checked".
    … …  
    151154== Upgrade Notice ==
    152155
     156= 1.1.1 =
     157Shows a calm notice instead of an error when the AI visibility checklist is not offered yet. No action needed.
     158
    153159= 1.1.0 =
    154160Adds the AI visibility checklist and copy-paste fixes, and fixes the missing logo. No action needed.
  • pfadfindr/trunk/src/components/GeoCard.js

    r3778332 r3778354  
    3636                        .then( ( data ) => {
    3737                                if ( current ) {
    38                                         setState( { geo: normalizeGeo( data ) } );
     38                                        setState(
     39                                                data && data.unavailable === true
     40                                                        ? { unavailable: true }
     41                                                        : { geo: normalizeGeo( data ) }
     42                                        );
    3943                                }
    4044                        } )
    … …  
    5660        useEffect( () => load(), [ load ] );
    5761
    58         const { loading, error, geo } = state;
     62        const { loading, error, geo, unavailable } = state;
    5963
    6064        return (
    … …  
    8286                        { error && <ErrorNotice error={ error } onRetry={ load } /> }
    8387
    84                         { ! loading && ! error && ! geo && (
     88                        { unavailable && (
     89                                <p className="pf-empty-line" role="status">
     90                                        { __(
     91                                                'The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it.',
     92                                                'pfadfindr'
     93                                        ) }
     94                                </p>
     95                        ) }
     96
     97                        { ! loading && ! error && ! geo && ! unavailable && (
    8598                                <p className="pf-empty-line">
    8699                                        { __(
  • pfadfindr/trunk/uninstall.php

    r3778332 r3778354  
    1111
    1212if ( ! defined( 'PFADFINDR_VERSION' ) ) {
    13         define( 'PFADFINDR_VERSION', '1.1.0' );
     13        define( 'PFADFINDR_VERSION', '1.1.1' );
    1414}
    1515
Note: See TracChangeset for help on using the changeset viewer.