Changeset 3778354
- Timestamp:
- 11/01/2026 05:37:51 PM (7 hours ago)
- Location:
- pfadfindr
- Files:
-
- 24 edited
- 1 copied
-
tags/1.1.1 (copied) (copied from pfadfindr/trunk )
-
tags/1.1.1/build/index.asset.php (modified) (1 diff)
-
tags/1.1.1/build/index.js (modified) (1 diff)
-
tags/1.1.1/includes/class-pfadfindr-api-client.php (modified) (4 diffs)
-
tags/1.1.1/includes/class-pfadfindr-errors.php (modified) (1 diff)
-
tags/1.1.1/includes/class-pfadfindr-rest-controller.php (modified) (1 diff)
-
tags/1.1.1/languages/pfadfindr.pot (modified) (11 diffs)
-
tags/1.1.1/package-lock.json (modified) (2 diffs)
-
tags/1.1.1/package.json (modified) (1 diff)
-
tags/1.1.1/pfadfindr.php (modified) (2 diffs)
-
tags/1.1.1/readme.txt (modified) (3 diffs)
-
tags/1.1.1/src/components/GeoCard.js (modified) (3 diffs)
-
tags/1.1.1/uninstall.php (modified) (1 diff)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/includes/class-pfadfindr-api-client.php (modified) (4 diffs)
-
trunk/includes/class-pfadfindr-errors.php (modified) (1 diff)
-
trunk/includes/class-pfadfindr-rest-controller.php (modified) (1 diff)
-
trunk/languages/pfadfindr.pot (modified) (11 diffs)
-
trunk/package-lock.json (modified) (2 diffs)
-
trunk/package.json (modified) (1 diff)
-
trunk/pfadfindr.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/src/components/GeoCard.js (modified) (3 diffs)
-
trunk/uninstall.php (modified) (1 diff)
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 7 7 (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 */ 8 8 (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" */ 11 11 (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 26 26 */ 27 27 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; 28 35 29 36 /** … … 184 191 */ 185 192 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; 187 202 } 188 203 … … 219 234 */ 220 235 private function request( $method, $path, $body = null, $query = array(), $timeout = 15 ) { 236 $this->last_failure = null; 221 237 if ( ! self::base_url_is_allowed() ) { 222 238 return Pfadfindr_Errors::make( 'insecure_base_url', 500 ); … … 262 278 263 279 $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 ); 264 285 if ( '' !== Pfadfindr_Connection::field( $api_error, 'code' ) ) { 265 286 $code = $api_error['code']; -
pfadfindr/tags/1.1.1/includes/class-pfadfindr-errors.php
r3778332 r3778354 172 172 'retryable' => false, 173 173 ), 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 ), 174 178 'invalid_code' => array( 175 179 '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 272 272 $geo = Pfadfindr_Connection::client()->get_geo( $request['run_id'], Pfadfindr_Connection::domain() ); 273 273 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 } 274 283 return self::handle_error( $geo ); 275 284 } -
pfadfindr/tags/1.1.1/languages/pfadfindr.pot
r3778332 r3778354 3 3 msgid "" 4 4 msgstr "" 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" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pfadfindr\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-11-01T1 6:16:41+00:00\n"12 "POT-Creation-Date: 2026-11-01T17:29:49+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 42 42 #: includes/class-pfadfindr-admin.php:47 43 43 #: includes/class-pfadfindr-admin.php:71 44 #: includes/class-pfadfindr-admin.php:1 7444 #: includes/class-pfadfindr-admin.php:190 45 45 msgid "Pfadfindr Website Check" 46 46 msgstr "" … … 50 50 msgstr "" 51 51 52 #: includes/class-pfadfindr-admin.php:15 152 #: includes/class-pfadfindr-admin.php:152 53 53 msgid "Your site is now connected to Pfadfindr." 54 54 msgstr "" 55 55 56 #: includes/class-pfadfindr-admin.php: 19356 #: includes/class-pfadfindr-admin.php:209 57 57 msgid "Audit your website for SEO, AI visibility (GEO) and accessibility. Connect it to Pfadfindr to get started." 58 58 msgstr "" 59 59 60 #: includes/class-pfadfindr-admin.php: 19460 #: includes/class-pfadfindr-admin.php:210 61 61 #: src/components/ConnectCard.js:87 62 62 msgid "Connect with Pfadfindr" 63 63 msgstr "" 64 64 65 #: includes/class-pfadfindr-admin.php: 19665 #: includes/class-pfadfindr-admin.php:212 66 66 msgid "No audit yet." 67 67 msgstr "" 68 68 69 #: includes/class-pfadfindr-admin.php: 19769 #: includes/class-pfadfindr-admin.php:213 70 70 msgid "Start first audit" 71 71 msgstr "" 72 72 73 #: includes/class-pfadfindr-admin.php:2 2273 #: includes/class-pfadfindr-admin.php:238 74 74 msgid "Very good" 75 75 msgstr "" 76 76 77 #: includes/class-pfadfindr-admin.php:2 2377 #: includes/class-pfadfindr-admin.php:239 78 78 msgid "Good" 79 79 msgstr "" 80 80 81 #: includes/class-pfadfindr-admin.php:2 2481 #: includes/class-pfadfindr-admin.php:240 82 82 msgid "Needs work" 83 83 msgstr "" 84 84 85 #: includes/class-pfadfindr-admin.php:2 2585 #: includes/class-pfadfindr-admin.php:241 86 86 #: src/lib/labels.js:12 87 87 msgid "Critical" … … 89 89 90 90 #. translators: %s: score from 0 to 100 91 #: includes/class-pfadfindr-admin.php:2 3091 #: includes/class-pfadfindr-admin.php:246 92 92 #: src/components/ScoreRing.js:37 93 93 #, php-format,js-format … … 95 95 msgstr "" 96 96 97 #: includes/class-pfadfindr-admin.php:2 3897 #: includes/class-pfadfindr-admin.php:254 98 98 #: src/components/HistoryCard.js:50 99 99 #: src/components/ResultCard.js:77 100 msgid "Health -Score"100 msgid "Health score" 101 101 msgstr "" 102 102 103 103 #. translators: %s: date and time of the audit 104 #: includes/class-pfadfindr-admin.php:2 46104 #: includes/class-pfadfindr-admin.php:262 105 105 #, php-format 106 106 msgid "Last audit: %s" 107 107 msgstr "" 108 108 109 #: includes/class-pfadfindr-admin.php:2 53109 #: includes/class-pfadfindr-admin.php:269 110 110 msgid "View findings and full report" 111 111 msgstr "" 112 112 113 #: includes/class-pfadfindr-admin.php:2 74113 #: includes/class-pfadfindr-admin.php:290 114 114 msgid "Open" 115 115 msgstr "" 116 116 117 #: includes/class-pfadfindr-connection.php:1 40117 #: includes/class-pfadfindr-connection.php:165 118 118 msgid "Sorry, you are not allowed to do that." 119 119 msgstr "" … … 123 123 msgstr "" 124 124 125 #: includes/class-pfadfindr-errors.php:14 1125 #: includes/class-pfadfindr-errors.php:143 126 126 msgid "This site is not connected to Pfadfindr yet." 127 127 msgstr "" 128 128 129 #: includes/class-pfadfindr-errors.php:14 5129 #: includes/class-pfadfindr-errors.php:147 130 130 msgid "The connection to Pfadfindr is no longer valid. Please connect again." 131 131 msgstr "" 132 132 133 #: includes/class-pfadfindr-errors.php:1 49133 #: includes/class-pfadfindr-errors.php:151 134 134 msgid "This key belongs to a different website." 135 135 msgstr "" 136 136 137 #: includes/class-pfadfindr-errors.php:15 3137 #: includes/class-pfadfindr-errors.php:155 138 138 msgid "The quota of your Pfadfindr plan is used up. Upgrade your plan to run more audits." 139 139 msgstr "" 140 140 141 #: includes/class-pfadfindr-errors.php:15 7141 #: includes/class-pfadfindr-errors.php:159 142 142 msgid "An audit for this website is already running." 143 143 msgstr "" 144 144 145 #: includes/class-pfadfindr-errors.php:16 1145 #: includes/class-pfadfindr-errors.php:163 146 146 msgid "Too many requests to Pfadfindr. Please wait a minute." 147 147 msgstr "" 148 148 149 #: includes/class-pfadfindr-errors.php:16 5149 #: includes/class-pfadfindr-errors.php:167 150 150 msgid "The report for this audit is not ready yet." 151 151 msgstr "" 152 152 153 #: includes/class-pfadfindr-errors.php:1 69153 #: includes/class-pfadfindr-errors.php:171 154 154 msgid "This audit could not be found." 155 155 msgstr "" 156 156 157 #: includes/class-pfadfindr-errors.php:173 157 #: includes/class-pfadfindr-errors.php:175 158 #: src/components/GeoCard.js:90 159 msgid "The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it." 160 msgstr "" 161 162 #: includes/class-pfadfindr-errors.php:179 158 163 msgid "The connection could not be completed because the confirmation has expired. Please connect again." 159 164 msgstr "" 160 165 161 #: includes/class-pfadfindr-errors.php:1 77166 #: includes/class-pfadfindr-errors.php:183 162 167 msgid "The connection could not be completed because the request was not started from this site or is too old. Please connect again." 163 168 msgstr "" 164 169 165 #: includes/class-pfadfindr-errors.php:18 1170 #: includes/class-pfadfindr-errors.php:187 166 171 msgid "The connection was cancelled on pfadfindr.com." 167 172 msgstr "" 168 173 169 #: includes/class-pfadfindr-errors.php:1 85174 #: includes/class-pfadfindr-errors.php:191 170 175 msgid "Your WordPress admin runs on a different host than your website (see Settings → General). Pfadfindr can only connect when both use the same domain." 171 176 msgstr "" 172 177 173 #: includes/class-pfadfindr-errors.php:189 178 #: includes/class-pfadfindr-errors.php:195 179 msgid "On this multisite network, all sites share one domain. Only a network administrator can connect a sub-site." 180 msgstr "" 181 182 #: includes/class-pfadfindr-errors.php:199 174 183 msgid "Your server could not reach pfadfindr.com. Your host may block outgoing connections." 175 184 msgstr "" 176 185 177 #: includes/class-pfadfindr-errors.php: 193186 #: includes/class-pfadfindr-errors.php:203 178 187 msgid "The Pfadfindr address must use HTTPS." 179 188 msgstr "" 180 189 181 #: includes/class-pfadfindr-errors.php: 197190 #: includes/class-pfadfindr-errors.php:207 182 191 msgid "Pfadfindr is temporarily unavailable." 183 192 msgstr "" 184 193 185 #: includes/class-pfadfindr-errors.php:2 01194 #: includes/class-pfadfindr-errors.php:211 186 195 msgid "Pfadfindr could not reach your website. Check that it is publicly accessible and not in maintenance mode." 187 196 msgstr "" 188 197 189 #: includes/class-pfadfindr-errors.php:2 05198 #: includes/class-pfadfindr-errors.php:215 190 199 msgid "Your robots.txt does not allow crawling your website. Allow crawling of your public pages, then start the audit again." 191 200 msgstr "" 192 201 193 #: includes/class-pfadfindr-errors.php:2 09202 #: includes/class-pfadfindr-errors.php:219 194 203 msgid "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." 195 204 msgstr "" 196 205 197 #: includes/class-pfadfindr-errors.php:2 13206 #: includes/class-pfadfindr-errors.php:223 198 207 msgid "Pfadfindr found no pages it could check on your website." 199 208 msgstr "" 200 209 201 #: includes/class-pfadfindr-errors.php:2 17210 #: includes/class-pfadfindr-errors.php:227 202 211 msgid "The audit was cancelled." 203 212 msgstr "" 204 213 205 #: includes/class-pfadfindr-errors.php:2 21214 #: includes/class-pfadfindr-errors.php:231 206 215 msgid "The audit was interrupted at Pfadfindr." 207 216 msgstr "" 208 217 209 #: includes/class-pfadfindr-errors.php:2 25218 #: includes/class-pfadfindr-errors.php:235 210 219 msgid "The audit could not be completed." 211 220 msgstr "" 212 221 213 #: includes/class-pfadfindr-rest-controller.php:5 47222 #: includes/class-pfadfindr-rest-controller.php:557 214 223 msgid "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." 215 224 msgstr "" 216 225 217 #: src/api.js:30 226 #: src/api.js:22 227 #: src/api.js:27 228 msgid "The connection to your WordPress site was interrupted. Please try again." 229 msgstr "" 230 231 #: src/api.js:32 232 msgid "Your WordPress site sent an unexpected response. Please try again." 233 msgstr "" 234 235 #: src/api.js:59 218 236 msgid "Something went wrong. Please reload the page." 219 237 msgstr "" 220 238 221 #: src/App.js:11 3239 #: src/App.js:114 222 240 msgid "Disconnected. The key was deleted here and revoked at Pfadfindr." 223 241 msgstr "" 224 242 225 #: src/App.js:12 0243 #: src/App.js:121 226 244 msgid "Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account." 227 245 msgstr "" 228 246 229 #: src/App.js:15 6247 #: src/App.js:157 230 248 msgid "Loading your Pfadfindr account…" 231 249 msgstr "" 232 250 233 #: src/components/AccountBar.js:31 251 #. translators: %s: email address of the Pfadfindr account 252 #: src/components/AccountBar.js:67 253 #, js-format 254 msgid "Connected as %s" 255 msgstr "" 256 257 #. translators: %s: plan name, e.g. Free 258 #: src/components/AccountBar.js:76 259 #, js-format 260 msgid "%s plan" 261 msgstr "" 262 263 #: src/components/AccountBar.js:107 264 msgid "Disconnect" 265 msgstr "" 266 267 #: src/components/AccountBar.js:117 234 268 msgid "Disconnect this site from Pfadfindr? The key will be deleted here and revoked at Pfadfindr. Your audits stay in your Pfadfindr account." 235 269 msgstr "" 236 270 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 272 msgid "Cancel" 273 msgstr "" 274 275 #: src/components/AccountBar.js:138 276 msgid "Yes, disconnect" 251 277 msgstr "" 252 278 … … 311 337 312 338 #: src/components/ConnectCard.js:41 313 msgid "Health -Score and the five most important findings"339 msgid "Health score and the five most important findings" 314 340 msgstr "" 315 341 … … 338 364 msgstr "" 339 365 340 #: src/components/ConnectCard.js:10 8366 #: src/components/ConnectCard.js:109 341 367 msgid "Privacy policy" 342 368 msgstr "" … … 400 426 msgstr "" 401 427 402 #: src/components/GeoCard.js: 68428 #: src/components/GeoCard.js:72 403 429 msgid "AI visibility checklist" 404 430 msgstr "" 405 431 406 #: src/components/GeoCard.js:7 5432 #: src/components/GeoCard.js:79 407 433 msgid "Loading the AI visibility checklist…" 408 434 msgstr "" 409 435 410 #: src/components/GeoCard.js: 86436 #: src/components/GeoCard.js:99 411 437 msgid "No AI visibility checklist is available for this audit." 412 438 msgstr "" 413 439 414 #: src/components/GeoCard.js:1 05440 #: src/components/GeoCard.js:118 415 441 msgid "The AI visibility check did not run in this audit, so nothing is shown as OK." 416 442 msgstr "" 417 443 418 444 #. translators: %s: number of findings 419 #: src/components/GeoCard.js:1 29445 #: src/components/GeoCard.js:142 420 446 #, js-format 421 447 msgid "%s finding" … … 424 450 msgstr[1] "" 425 451 426 #: src/components/GeoCard.js:1 42452 #: src/components/GeoCard.js:155 427 453 msgid "Checked, no problems found." 428 454 msgstr "" 429 455 430 #: src/components/GeoCard.js:1 45456 #: src/components/GeoCard.js:158 431 457 msgid "Not checked in this audit." 432 458 msgstr "" 433 459 434 #: src/components/GeoCard.js:1 74460 #: src/components/GeoCard.js:187 435 461 msgid "Show details" 436 462 msgstr "" -
pfadfindr/tags/1.1.1/package-lock.json
r3778332 r3778354 1 1 { 2 2 "name": "pfadfindr", 3 "version": "1.1. 0",3 "version": "1.1.1", 4 4 "lockfileVersion": 3, 5 5 "requires": true, … … 7 7 "": { 8 8 "name": "pfadfindr", 9 "version": "1.1. 0",9 "version": "1.1.1", 10 10 "license": "GPL-2.0-or-later", 11 11 "devDependencies": { -
pfadfindr/tags/1.1.1/package.json
r3778332 r3778354 1 1 { 2 2 "name": "pfadfindr", 3 "version": "1.1. 0",3 "version": "1.1.1", 4 4 "private": true, 5 5 "description": "Pfadfindr WordPress plugin – admin UI", -
pfadfindr/tags/1.1.1/pfadfindr.php
r3778332 r3778354 4 4 * Plugin URI: https://pfadfindr.com/wordpress 5 5 * 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. 06 * Version: 1.1.1 7 7 * Requires at least: 6.4 8 8 * Requires PHP: 7.4 … … 20 20 } 21 21 22 define( 'PFADFINDR_VERSION', '1.1. 0' );22 define( 'PFADFINDR_VERSION', '1.1.1' ); 23 23 define( 'PFADFINDR_FILE', __FILE__ ); 24 24 define( 'PFADFINDR_DIR', plugin_dir_path( __FILE__ ) ); -
pfadfindr/tags/1.1.1/readme.txt
r3778332 r3778354 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.1. 07 Stable tag: 1.1.1 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 131 131 == Changelog == 132 132 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 133 136 = 1.1.0 = 134 137 * New: AI visibility checklist below the result. Seven checks with a status each; a check that was not run is shown as "Not checked". … … 151 154 == Upgrade Notice == 152 155 156 = 1.1.1 = 157 Shows a calm notice instead of an error when the AI visibility checklist is not offered yet. No action needed. 158 153 159 = 1.1.0 = 154 160 Adds 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 36 36 .then( ( data ) => { 37 37 if ( current ) { 38 setState( { geo: normalizeGeo( data ) } ); 38 setState( 39 data && data.unavailable === true 40 ? { unavailable: true } 41 : { geo: normalizeGeo( data ) } 42 ); 39 43 } 40 44 } ) … … 56 60 useEffect( () => load(), [ load ] ); 57 61 58 const { loading, error, geo } = state;62 const { loading, error, geo, unavailable } = state; 59 63 60 64 return ( … … 82 86 { error && <ErrorNotice error={ error } onRetry={ load } /> } 83 87 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 && ( 85 98 <p className="pf-empty-line"> 86 99 { __( -
pfadfindr/tags/1.1.1/uninstall.php
r3778332 r3778354 11 11 12 12 if ( ! defined( 'PFADFINDR_VERSION' ) ) { 13 define( 'PFADFINDR_VERSION', '1.1. 0' );13 define( 'PFADFINDR_VERSION', '1.1.1' ); 14 14 } 15 15 -
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 7 7 (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 */ 8 8 (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" */ 11 11 (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 26 26 */ 27 27 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; 28 35 29 36 /** … … 184 191 */ 185 192 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; 187 202 } 188 203 … … 219 234 */ 220 235 private function request( $method, $path, $body = null, $query = array(), $timeout = 15 ) { 236 $this->last_failure = null; 221 237 if ( ! self::base_url_is_allowed() ) { 222 238 return Pfadfindr_Errors::make( 'insecure_base_url', 500 ); … … 262 278 263 279 $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 ); 264 285 if ( '' !== Pfadfindr_Connection::field( $api_error, 'code' ) ) { 265 286 $code = $api_error['code']; -
pfadfindr/trunk/includes/class-pfadfindr-errors.php
r3778332 r3778354 172 172 'retryable' => false, 173 173 ), 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 ), 174 178 'invalid_code' => array( 175 179 '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 272 272 $geo = Pfadfindr_Connection::client()->get_geo( $request['run_id'], Pfadfindr_Connection::domain() ); 273 273 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 } 274 283 return self::handle_error( $geo ); 275 284 } -
pfadfindr/trunk/languages/pfadfindr.pot
r3778332 r3778354 3 3 msgid "" 4 4 msgstr "" 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" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/pfadfindr\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-11-01T1 6:16:41+00:00\n"12 "POT-Creation-Date: 2026-11-01T17:29:49+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 42 42 #: includes/class-pfadfindr-admin.php:47 43 43 #: includes/class-pfadfindr-admin.php:71 44 #: includes/class-pfadfindr-admin.php:1 7444 #: includes/class-pfadfindr-admin.php:190 45 45 msgid "Pfadfindr Website Check" 46 46 msgstr "" … … 50 50 msgstr "" 51 51 52 #: includes/class-pfadfindr-admin.php:15 152 #: includes/class-pfadfindr-admin.php:152 53 53 msgid "Your site is now connected to Pfadfindr." 54 54 msgstr "" 55 55 56 #: includes/class-pfadfindr-admin.php: 19356 #: includes/class-pfadfindr-admin.php:209 57 57 msgid "Audit your website for SEO, AI visibility (GEO) and accessibility. Connect it to Pfadfindr to get started." 58 58 msgstr "" 59 59 60 #: includes/class-pfadfindr-admin.php: 19460 #: includes/class-pfadfindr-admin.php:210 61 61 #: src/components/ConnectCard.js:87 62 62 msgid "Connect with Pfadfindr" 63 63 msgstr "" 64 64 65 #: includes/class-pfadfindr-admin.php: 19665 #: includes/class-pfadfindr-admin.php:212 66 66 msgid "No audit yet." 67 67 msgstr "" 68 68 69 #: includes/class-pfadfindr-admin.php: 19769 #: includes/class-pfadfindr-admin.php:213 70 70 msgid "Start first audit" 71 71 msgstr "" 72 72 73 #: includes/class-pfadfindr-admin.php:2 2273 #: includes/class-pfadfindr-admin.php:238 74 74 msgid "Very good" 75 75 msgstr "" 76 76 77 #: includes/class-pfadfindr-admin.php:2 2377 #: includes/class-pfadfindr-admin.php:239 78 78 msgid "Good" 79 79 msgstr "" 80 80 81 #: includes/class-pfadfindr-admin.php:2 2481 #: includes/class-pfadfindr-admin.php:240 82 82 msgid "Needs work" 83 83 msgstr "" 84 84 85 #: includes/class-pfadfindr-admin.php:2 2585 #: includes/class-pfadfindr-admin.php:241 86 86 #: src/lib/labels.js:12 87 87 msgid "Critical" … … 89 89 90 90 #. translators: %s: score from 0 to 100 91 #: includes/class-pfadfindr-admin.php:2 3091 #: includes/class-pfadfindr-admin.php:246 92 92 #: src/components/ScoreRing.js:37 93 93 #, php-format,js-format … … 95 95 msgstr "" 96 96 97 #: includes/class-pfadfindr-admin.php:2 3897 #: includes/class-pfadfindr-admin.php:254 98 98 #: src/components/HistoryCard.js:50 99 99 #: src/components/ResultCard.js:77 100 msgid "Health -Score"100 msgid "Health score" 101 101 msgstr "" 102 102 103 103 #. translators: %s: date and time of the audit 104 #: includes/class-pfadfindr-admin.php:2 46104 #: includes/class-pfadfindr-admin.php:262 105 105 #, php-format 106 106 msgid "Last audit: %s" 107 107 msgstr "" 108 108 109 #: includes/class-pfadfindr-admin.php:2 53109 #: includes/class-pfadfindr-admin.php:269 110 110 msgid "View findings and full report" 111 111 msgstr "" 112 112 113 #: includes/class-pfadfindr-admin.php:2 74113 #: includes/class-pfadfindr-admin.php:290 114 114 msgid "Open" 115 115 msgstr "" 116 116 117 #: includes/class-pfadfindr-connection.php:1 40117 #: includes/class-pfadfindr-connection.php:165 118 118 msgid "Sorry, you are not allowed to do that." 119 119 msgstr "" … … 123 123 msgstr "" 124 124 125 #: includes/class-pfadfindr-errors.php:14 1125 #: includes/class-pfadfindr-errors.php:143 126 126 msgid "This site is not connected to Pfadfindr yet." 127 127 msgstr "" 128 128 129 #: includes/class-pfadfindr-errors.php:14 5129 #: includes/class-pfadfindr-errors.php:147 130 130 msgid "The connection to Pfadfindr is no longer valid. Please connect again." 131 131 msgstr "" 132 132 133 #: includes/class-pfadfindr-errors.php:1 49133 #: includes/class-pfadfindr-errors.php:151 134 134 msgid "This key belongs to a different website." 135 135 msgstr "" 136 136 137 #: includes/class-pfadfindr-errors.php:15 3137 #: includes/class-pfadfindr-errors.php:155 138 138 msgid "The quota of your Pfadfindr plan is used up. Upgrade your plan to run more audits." 139 139 msgstr "" 140 140 141 #: includes/class-pfadfindr-errors.php:15 7141 #: includes/class-pfadfindr-errors.php:159 142 142 msgid "An audit for this website is already running." 143 143 msgstr "" 144 144 145 #: includes/class-pfadfindr-errors.php:16 1145 #: includes/class-pfadfindr-errors.php:163 146 146 msgid "Too many requests to Pfadfindr. Please wait a minute." 147 147 msgstr "" 148 148 149 #: includes/class-pfadfindr-errors.php:16 5149 #: includes/class-pfadfindr-errors.php:167 150 150 msgid "The report for this audit is not ready yet." 151 151 msgstr "" 152 152 153 #: includes/class-pfadfindr-errors.php:1 69153 #: includes/class-pfadfindr-errors.php:171 154 154 msgid "This audit could not be found." 155 155 msgstr "" 156 156 157 #: includes/class-pfadfindr-errors.php:173 157 #: includes/class-pfadfindr-errors.php:175 158 #: src/components/GeoCard.js:90 159 msgid "The AI visibility checklist is not available for your Pfadfindr account yet. It appears here as soon as Pfadfindr enables it." 160 msgstr "" 161 162 #: includes/class-pfadfindr-errors.php:179 158 163 msgid "The connection could not be completed because the confirmation has expired. Please connect again." 159 164 msgstr "" 160 165 161 #: includes/class-pfadfindr-errors.php:1 77166 #: includes/class-pfadfindr-errors.php:183 162 167 msgid "The connection could not be completed because the request was not started from this site or is too old. Please connect again." 163 168 msgstr "" 164 169 165 #: includes/class-pfadfindr-errors.php:18 1170 #: includes/class-pfadfindr-errors.php:187 166 171 msgid "The connection was cancelled on pfadfindr.com." 167 172 msgstr "" 168 173 169 #: includes/class-pfadfindr-errors.php:1 85174 #: includes/class-pfadfindr-errors.php:191 170 175 msgid "Your WordPress admin runs on a different host than your website (see Settings → General). Pfadfindr can only connect when both use the same domain." 171 176 msgstr "" 172 177 173 #: includes/class-pfadfindr-errors.php:189 178 #: includes/class-pfadfindr-errors.php:195 179 msgid "On this multisite network, all sites share one domain. Only a network administrator can connect a sub-site." 180 msgstr "" 181 182 #: includes/class-pfadfindr-errors.php:199 174 183 msgid "Your server could not reach pfadfindr.com. Your host may block outgoing connections." 175 184 msgstr "" 176 185 177 #: includes/class-pfadfindr-errors.php: 193186 #: includes/class-pfadfindr-errors.php:203 178 187 msgid "The Pfadfindr address must use HTTPS." 179 188 msgstr "" 180 189 181 #: includes/class-pfadfindr-errors.php: 197190 #: includes/class-pfadfindr-errors.php:207 182 191 msgid "Pfadfindr is temporarily unavailable." 183 192 msgstr "" 184 193 185 #: includes/class-pfadfindr-errors.php:2 01194 #: includes/class-pfadfindr-errors.php:211 186 195 msgid "Pfadfindr could not reach your website. Check that it is publicly accessible and not in maintenance mode." 187 196 msgstr "" 188 197 189 #: includes/class-pfadfindr-errors.php:2 05198 #: includes/class-pfadfindr-errors.php:215 190 199 msgid "Your robots.txt does not allow crawling your website. Allow crawling of your public pages, then start the audit again." 191 200 msgstr "" 192 201 193 #: includes/class-pfadfindr-errors.php:2 09202 #: includes/class-pfadfindr-errors.php:219 194 203 msgid "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." 195 204 msgstr "" 196 205 197 #: includes/class-pfadfindr-errors.php:2 13206 #: includes/class-pfadfindr-errors.php:223 198 207 msgid "Pfadfindr found no pages it could check on your website." 199 208 msgstr "" 200 209 201 #: includes/class-pfadfindr-errors.php:2 17210 #: includes/class-pfadfindr-errors.php:227 202 211 msgid "The audit was cancelled." 203 212 msgstr "" 204 213 205 #: includes/class-pfadfindr-errors.php:2 21214 #: includes/class-pfadfindr-errors.php:231 206 215 msgid "The audit was interrupted at Pfadfindr." 207 216 msgstr "" 208 217 209 #: includes/class-pfadfindr-errors.php:2 25218 #: includes/class-pfadfindr-errors.php:235 210 219 msgid "The audit could not be completed." 211 220 msgstr "" 212 221 213 #: includes/class-pfadfindr-rest-controller.php:5 47222 #: includes/class-pfadfindr-rest-controller.php:557 214 223 msgid "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." 215 224 msgstr "" 216 225 217 #: src/api.js:30 226 #: src/api.js:22 227 #: src/api.js:27 228 msgid "The connection to your WordPress site was interrupted. Please try again." 229 msgstr "" 230 231 #: src/api.js:32 232 msgid "Your WordPress site sent an unexpected response. Please try again." 233 msgstr "" 234 235 #: src/api.js:59 218 236 msgid "Something went wrong. Please reload the page." 219 237 msgstr "" 220 238 221 #: src/App.js:11 3239 #: src/App.js:114 222 240 msgid "Disconnected. The key was deleted here and revoked at Pfadfindr." 223 241 msgstr "" 224 242 225 #: src/App.js:12 0243 #: src/App.js:121 226 244 msgid "Disconnected here, but Pfadfindr could not be reached to revoke the key. Please revoke it in your Pfadfindr account." 227 245 msgstr "" 228 246 229 #: src/App.js:15 6247 #: src/App.js:157 230 248 msgid "Loading your Pfadfindr account…" 231 249 msgstr "" 232 250 233 #: src/components/AccountBar.js:31 251 #. translators: %s: email address of the Pfadfindr account 252 #: src/components/AccountBar.js:67 253 #, js-format 254 msgid "Connected as %s" 255 msgstr "" 256 257 #. translators: %s: plan name, e.g. Free 258 #: src/components/AccountBar.js:76 259 #, js-format 260 msgid "%s plan" 261 msgstr "" 262 263 #: src/components/AccountBar.js:107 264 msgid "Disconnect" 265 msgstr "" 266 267 #: src/components/AccountBar.js:117 234 268 msgid "Disconnect this site from Pfadfindr? The key will be deleted here and revoked at Pfadfindr. Your audits stay in your Pfadfindr account." 235 269 msgstr "" 236 270 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 272 msgid "Cancel" 273 msgstr "" 274 275 #: src/components/AccountBar.js:138 276 msgid "Yes, disconnect" 251 277 msgstr "" 252 278 … … 311 337 312 338 #: src/components/ConnectCard.js:41 313 msgid "Health -Score and the five most important findings"339 msgid "Health score and the five most important findings" 314 340 msgstr "" 315 341 … … 338 364 msgstr "" 339 365 340 #: src/components/ConnectCard.js:10 8366 #: src/components/ConnectCard.js:109 341 367 msgid "Privacy policy" 342 368 msgstr "" … … 400 426 msgstr "" 401 427 402 #: src/components/GeoCard.js: 68428 #: src/components/GeoCard.js:72 403 429 msgid "AI visibility checklist" 404 430 msgstr "" 405 431 406 #: src/components/GeoCard.js:7 5432 #: src/components/GeoCard.js:79 407 433 msgid "Loading the AI visibility checklist…" 408 434 msgstr "" 409 435 410 #: src/components/GeoCard.js: 86436 #: src/components/GeoCard.js:99 411 437 msgid "No AI visibility checklist is available for this audit." 412 438 msgstr "" 413 439 414 #: src/components/GeoCard.js:1 05440 #: src/components/GeoCard.js:118 415 441 msgid "The AI visibility check did not run in this audit, so nothing is shown as OK." 416 442 msgstr "" 417 443 418 444 #. translators: %s: number of findings 419 #: src/components/GeoCard.js:1 29445 #: src/components/GeoCard.js:142 420 446 #, js-format 421 447 msgid "%s finding" … … 424 450 msgstr[1] "" 425 451 426 #: src/components/GeoCard.js:1 42452 #: src/components/GeoCard.js:155 427 453 msgid "Checked, no problems found." 428 454 msgstr "" 429 455 430 #: src/components/GeoCard.js:1 45456 #: src/components/GeoCard.js:158 431 457 msgid "Not checked in this audit." 432 458 msgstr "" 433 459 434 #: src/components/GeoCard.js:1 74460 #: src/components/GeoCard.js:187 435 461 msgid "Show details" 436 462 msgstr "" -
pfadfindr/trunk/package-lock.json
r3778332 r3778354 1 1 { 2 2 "name": "pfadfindr", 3 "version": "1.1. 0",3 "version": "1.1.1", 4 4 "lockfileVersion": 3, 5 5 "requires": true, … … 7 7 "": { 8 8 "name": "pfadfindr", 9 "version": "1.1. 0",9 "version": "1.1.1", 10 10 "license": "GPL-2.0-or-later", 11 11 "devDependencies": { -
pfadfindr/trunk/package.json
r3778332 r3778354 1 1 { 2 2 "name": "pfadfindr", 3 "version": "1.1. 0",3 "version": "1.1.1", 4 4 "private": true, 5 5 "description": "Pfadfindr WordPress plugin – admin UI", -
pfadfindr/trunk/pfadfindr.php
r3778332 r3778354 4 4 * Plugin URI: https://pfadfindr.com/wordpress 5 5 * 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. 06 * Version: 1.1.1 7 7 * Requires at least: 6.4 8 8 * Requires PHP: 7.4 … … 20 20 } 21 21 22 define( 'PFADFINDR_VERSION', '1.1. 0' );22 define( 'PFADFINDR_VERSION', '1.1.1' ); 23 23 define( 'PFADFINDR_FILE', __FILE__ ); 24 24 define( 'PFADFINDR_DIR', plugin_dir_path( __FILE__ ) ); -
pfadfindr/trunk/readme.txt
r3778332 r3778354 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.1. 07 Stable tag: 1.1.1 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 131 131 == Changelog == 132 132 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 133 136 = 1.1.0 = 134 137 * New: AI visibility checklist below the result. Seven checks with a status each; a check that was not run is shown as "Not checked". … … 151 154 == Upgrade Notice == 152 155 156 = 1.1.1 = 157 Shows a calm notice instead of an error when the AI visibility checklist is not offered yet. No action needed. 158 153 159 = 1.1.0 = 154 160 Adds the AI visibility checklist and copy-paste fixes, and fixes the missing logo. No action needed. -
pfadfindr/trunk/src/components/GeoCard.js
r3778332 r3778354 36 36 .then( ( data ) => { 37 37 if ( current ) { 38 setState( { geo: normalizeGeo( data ) } ); 38 setState( 39 data && data.unavailable === true 40 ? { unavailable: true } 41 : { geo: normalizeGeo( data ) } 42 ); 39 43 } 40 44 } ) … … 56 60 useEffect( () => load(), [ load ] ); 57 61 58 const { loading, error, geo } = state;62 const { loading, error, geo, unavailable } = state; 59 63 60 64 return ( … … 82 86 { error && <ErrorNotice error={ error } onRetry={ load } /> } 83 87 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 && ( 85 98 <p className="pf-empty-line"> 86 99 { __( -
pfadfindr/trunk/uninstall.php
r3778332 r3778354 11 11 12 12 if ( ! defined( 'PFADFINDR_VERSION' ) ) { 13 define( 'PFADFINDR_VERSION', '1.1. 0' );13 define( 'PFADFINDR_VERSION', '1.1.1' ); 14 14 } 15 15
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)