1import{a as Q}from"./chunk-MDUSQAHS.js";import{a as de,b as Te}from"./chunk-F43U55TC.js";import{a as se}from"./chunk-XNUHVQ4S.js";import{a as Se}from"./chunk-ZKBM3KYW.js";import{a as oe}from"./chunk-PYTQLVPA.js";import{a as ae}from"./chunk-GIFRWRQT.js";import{a as Y}from"./chunk-QSZQDWP4.js";import{a as le}from"./chunk-HHVBHG3K.js";import{a as ne,b as y,c as re}from"./chunk-KMUSS2DH.js";import{b as Z,c as ee,g as te,o as _e,p as ie}from"./chunk-XGZ6VBXO.js";import{a as M}from"./chunk-WI7C6BUK.js";import{a as H}from"./chunk-KOJCDMBF.js";import{a as ce}from"./chunk-EXQPZIZF.js";import{c as q}from"./chunk-BRXHBXE3.js";import{c as j}from"./chunk-A6D5T2EF.js";import{Cc as F,Db as g,Hd as X,Ob as r,Pb as s,Qb as h,Rb as N,Sb as U,Ub as O,Uc as K,Yb as u,bc as m,cc as l,da as L,eb as a,kb as D,qa as c,qd as B,ra as d,rb as G,rc as S,sb as V,sc as A,td as z,ud as J,wb as w,wc as E,xc as C,yc as p}from"./chunk-TVZWCV2O.js";function Ee(o,_){if(o&1){let e=O();r(0,"div",13)(1,"div",14)(2,"tabs")(3,"tab",15)(4,"div",16)(5,"input",17),p("ngModelChange",function(t){c(e);let n=l();return C(n.crawlUrl,t)||(n.crawlUrl=t),d(t);}),m("keydown.enter",function(){c(e);let t=l();return d(t.crawl());}),s(),r(6,"div",18)(7,"div",19)(8,"radio",20),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),u(9,0),s(),r(10,"radio",21),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),S(11,"Desktop"),s()(),r(12,"button",22),m("click",function(){c(e);let t=l();return d(t.crawl());}),u(13,1),s()()()(),r(14,"tab",23)(15,"div",16)(16,"textarea",24),p("ngModelChange",function(t){c(e);let n=l();return C(n.urlList,t)||(n.urlList=t),d(t);}),s(),r(17,"div",18)(18,"div",19)(19,"radio",25),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),u(20,2),s(),r(21,"radio",26),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),S(22,"Desktop"),s()(),r(23,"button",22),m("click",function(){c(e);let t=l();return d(t.checkUrlList(t.urlList));}),u(24,3),s()()()(),r(25,"tab",27)(26,"div",16)(27,"input",28),p("ngModelChange",function(t){c(e);let n=l();return C(n.keyword,t)||(n.keyword=t),d(t);}),m("keydown.enter",function(){c(e);let t=l();return d(t.checkKeyword());}),s(),r(28,"div",18)(29,"div",19)(30,"radio",29),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),u(31,4),s(),r(32,"radio",30),p("selectedChange",function(t){c(e);let n=l();return C(n.strategy,t)||(n.strategy=t),d(t);}),S(33,"Desktop"),s()(),r(34,"button",22),m("click",function(){c(e);let t=l();return d(t.checkKeyword());}),u(35,5),s()()()()()()();}if(o&2){let e=l();a(5),E("ngModel",e.crawlUrl),a(3),E("selected",e.strategy),a(2),E("selected",e.strategy),a(6),E("ngModel",e.urlList),a(3),E("selected",e.strategy),a(2),E("selected",e.strategy),a(6),E("ngModel",e.keyword),a(3),E("selected",e.strategy),a(2),E("selected",e.strategy);}}function Ce(o,_){o&1&&h(0,"loading-indicator");}function pe(o,_){o&1&&h(0,"svg-icon",56);}function me(o,_){o&1&&h(0,"svg-icon",57);}function he(o,_){o&1&&h(0,"svg-icon",58);}function Re(o,_){if(o&1&&(N(0),r(1,"tr",47)(2,"td",48)(3,"div",49),w(4,Ce,1,0,"loading-indicator",50)(5,pe,1,0,"svg-icon",51)(6,me,1,0,"svg-icon",52)(7,he,1,0,"svg-icon",53),s()(),r(8,"td",54),S(9),s(),r(10,"td",55),S(11),s(),r(12,"td",55),S(13),s(),r(14,"td",55),S(15),s()(),U()),o&2){let e=_.$implicit;a(4),g("ngIf",e.status=="pending"),a(),g("ngIf",e.status=="success"),a(),g("ngIf",e.status=="failed"),a(),g("ngIf",e.status=="queued"),a(2),A(e.url),a(2),A(e.schema?e.schema.length:""),a(2),A(e.ogp?e.ogp.length:""),a(2),A(e.errors?e.errors.length:"");}}function Ae(o,_){if(o&1){let e=O();r(0,"div",31)(1,"div",32)(2,"button",33),m("click",function(){c(e);let t=l();return d(t.restart());}),h(3,"svg-icon",34),N(4),u(5,6),U(),s(),r(6,"button",35),m("click",function(){c(e);let t=l();return d(t.forceStop());}),h(7,"svg-icon",36),N(8),u(9,7),U(),s(),r(10,"button",37),m("click",function(){c(e);let t=l();return d(t.download());}),h(11,"svg-icon",38),N(12),u(13,8),U(),s()(),r(14,"div",39)(15,"table",40)(16,"thead")(17,"tr")(18,"th",41),u(19,9),s(),r(20,"th",42),S(21,"URL"),s(),r(22,"th",43),S(23,"Schema.org"),s(),r(24,"th",44),S(25,"Open Graph"),s(),r(26,"th",45),S(27,"Fehler"),s()()(),r(28,"tbody"),w(29,Re,16,8,"
1ng-container",46),s()()()();}if(o&2){let e=l();a(6),g("disabled",!e.running),a(23),g("ngForOf",e.display);}}function fe(o,_){if(o&1&&(r(0,"div",59)(1,"textarea",60),S(2),s()()),o&2){let e=l();a(2),A(e.log);}}var ue=class o{constructor(_,e,i,t){this.http=_;this.recaptcha=e;this.config=i;this.changeDetector=t;}yes="Yes";no="No";messages={awaitingUrls:"Waiting for URLs...",awaitingRecaptcha:"Waiting for reCaptcha...",noKeyword:"No Keyword entered",noUrl:"No valid URL",websocketError:"Error while retrieving the URL",invalidUrlRemoved:"invalid URL removed",emptyUrlList:"URL-List is empty",getPagespeed:"Retrieving Page Experience for",limitReached:"Error: max. Request Limit reached",pagespeedError:"Error while retrieving Page Experience for",serverCodes:{"serp-error":"Error while retrieving the SERPs","serp-success":"SERPs retrieved and URLs fetched","crawl-limit":"Crawl limit of 60s reached","crawl-finished":"All pages crawled","invalid-request":"Invalid request","botcheck-failed":"Anti-Bot Check failed"}};strategy="mobile";crawlUrl="";urlList="";keyword="";running=!1;runningTimer=!1;queue=[];results;display=[];websocket;logs=[];log;ngOnInit(){}start(){this.running=!0,this.results=this.results?this.results:{};}startCheck(){this.runningTimer||(this.runningTimer=!0,this.getResults(),setInterval(()=>this.getResults(),3e3));}forceStop(){this.stop(),this.websocket&&this.websocket.close();}stop(){this.running=!1,this.queue=[];}restart(){this.forceStop(),delete this.results,this.display=[],delete this.log;}retry(_){this.start(),this.results[_].status="queued",this.queue.unshift(_),this.startCheck();}getUrls(_,e){this.recaptcha.execute("structureddata").subscribe(i=>{i?(this.websocket=new WebSocket(M.endpoints.toolsws),this.websocket.onopen=t=>{this.websocket.send(JSON.stringify({action:"crawler",type:e,id:_,token:i,locale:this.config.locale}));},this.websocket.onmessage=t=>{let n=JSON.parse(t.data);n.url?this.checkUrl(n.url):n.success?this.showMessage({message:this.messages.serverCodes[n.success],type:"success"}):n.error&&this.showMessage({message:this.messages.serverCodes[n.error],type:"error"}),this.changeDetector.detectChanges();},this.websocket.onerror=t=>{this.showMessage({message:this.messages.websocketError,type:"error"});},this.showMessage({message:this.messages.awaitingUrls,type:"info"})):this.showMessage({message:this.messages.awaitingRecaptcha,type:"info"});});}checkKeyword(){if(this.start(),this.keyword.trim()==""){this.restart(),this.showMessage({message:this.messages.noKeyword,type:"error"});return;}this.getUrls(this.keyword,"keyword"),this.startCheck();}crawl(){if(this.start(),!this.isValidUrl(this.crawlUrl)&&this.isValidUrl("https://"+this.crawlUrl)&&(this.crawlUrl="https://"+this.crawlUrl),!this.isValidUrl(this.crawlUrl)){this.restart(),this.showMessage({message:this.messages.noUrl,type:"error"});return;}this.getUrls(this.crawlUrl,"url"),this.results[this.crawlUrl]={url:this.crawlUrl,status:"pending"},this.display.push(this.results[this.crawlUrl]),this.queue.push(this.crawlUrl),this.startCheck();}checkUrl(_){this.results[_]||(this.results[_]={url:_,status:"queued"},this.display.push(this.results[_]),this.queue.push(_));}checkUrlList(_){this.start();let e;Array.isArray(_)?e=_:e=_.match(/[^\r\n]+/g);let i=e.length;if(e=e.filter(t=>this.isValidUrl(t)),i!=e.length){let t=i-e.length;this.showMessage({message:t+this.messages.invalidUrlRemoved,type:"error"});}if(!e||e.length==0){this.showMessage({message:this.messages.emptyUrlList,type:"error"});return;}for(let t of e)this.results[t]||(this.results[t]={url:t,status:"queued"},this.display.push(this.results[t]),this.queue.push(t));this.startCheck();}getResults(){let _=this.queue.shift();if(_){this.results[_].status="pending",this.showMessage({message:this.messages.getPagespeed+_+" ...",type:"info"});let e=M.endpoints.toolsv2+"/structured-data?url="+_;this.http.get(e).subscribe(i=>{if(i.error)this.results[_].status="failed",this.showMessage({message:this.messages.pagespeedError+_,type:"error"});else if(i.data){this.results[_].status="success";let t=[...i.data.microdata,...i.data.rdfa,...i.data.microformat,...i.data["json-ld"]],n=[];for(let f of t){let R=f["@type"]?.join("");
1typeof R=="string"&&(R.startsWith("http://schema.org/")||R.startsWith("https://schema.org"))&&n.push(f);}this.results[_].schema=n,this.results[_].ogp=[],this.results[_].errors=[],this.changeDetector.detectChanges();}},i=>{this.results[_].status="failed",this.showMessage({message:this.messages.pagespeedError+_,type:"error"});});}else this.stop();}download(){let _=`"URL";"Status";"Largest Contentful Paint";"Total Blocking Time (~ First Input Delay)";"Cumulative Layout Shift";"HTTPS";"Mobile Friendly";"Safe Browsing" 2`;for(let i of this.display){let t=[i.url,i.status];_+='"'+t.join('";"')+`" 3`;}var e=document.createElement("a");e.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(_)),e.setAttribute("download","page-experience.csv"),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e);}showMessage(_){let e=B(new Date(),"HH:mm:ss",this.config.localeID);this.logs.unshift("["+e+"] "+_.message),this.log=this.logs.join(` 4`);}isValidUrl(_){var e=document.createElement("a");return e.href=_,e.host&&(e.host!=window.location.host||_.startsWith(this.config.url));}static ɵfac=function(e){return new(e||o)(D(q),D(y),D(j),D(K));};static ɵcmp=G({type:o,selectors:[["structured-data"]],hostAttrs:[1,"block","w-full"],standalone:!1,features:[F([y,{provide:ne,useValue:"6LdGprMUAAAAAJU4fyx2ySNSS0sxKo4CIOu9xfR_"}])],decls:3,vars:3,consts:()=>{let _;_="Crawl Website";let e;e="Enter URL (https://...)";let i;i="URL-List";let t;t="Keyword";let n;n="Enter Keyword";let f;f="Mobile";let R;R="Start Test";let x;x="Mobile";let b;b="Start Test";let I;I="Mobile";let v;v="Start Test";let P;P="New";let W;W="Stop";let k;k="Export";let $;return $="Status",[f,R,x,b,I,v,P,W,k,$,["class","w-full max-w-xl mx-auto",4,"ngIf"],["class","card p-3",4,"ngIf"],["class","card mt-5 p-3",4,"ngIf"],[1,"w-full","max-w-xl","mx-auto"],[1,"card"],["title",_],[1,"p-4"],["type","url","required","","placeholder",e,1,"input-text","input-text-lg",3,"ngModelChange","keydown.enter","ngModel"],[1,"flex","justify-between"],[1,"grid","gap-x-2","text-neutral-600","text-sm","leading-4","grid-cols-2","pt-3"],["name","strategy","value","mobile",3,"selectedChange","selected"],["name","strategy","value","desktop",3,"selectedChange","selected"],[1,"btn","btn-primary","btn-small","mt-2",3,"click"],["title",i],[1,"input-text","w-full","h-72","border","border-neutral-300","text-sm","text-neutral-600","leading-tight","rounded-sm","focus:outline-none",3,"ngModelChange","ngModel"],["name","strategy2","value","mobile",3,"selectedChange","selected"],["name","strategy2","value","desktop",3,"selectedChange","selected"],["title",t],["type","text","required","","placeholder",n,1,"input-text","input-text-lg",3,"ngModelChange","keydown.enter","ngModel"],["name","strategy3","value","mobile",3,"selectedChange","selected"],["name","strategy3","value","desktop",3,"selectedChange","selected"],[1,"card","p-3"],[1,"flex","justify-end"],[1,"btn","btn-neutral","mr-1",3,"click"],["icon","check-ui"],[1,"btn","btn-neutral","mr-1",3,"click","disabled"],["icon","cross-ui"],[1,"btn","btn-neutral",3,"click"],["width","16","height","16","icon","folder",1,"mr-1"],[1,"table-container","w-full","mt-4"],[1,"table-small",2,"table-layout","fixed"],[1,"table-th",2,"width","75px"],[1,"table-th",2,"width","400px"],["tooltip","Schema.org Structured Data",1,"table-th","text-center",2,"width","100px"],["tooltip","Open Graph Protocol",1,"table-th","text-center",2,"width","100px"],[1,"table-th","text-center",2,"width","100px"],[4,"ngFor","ngForOf"],[1,"h-10"],[1,"table-td"],[1,"mx-auto","w-fit-content"],[4,"ngIf"],["icon","check-done",4,"ngIf"],["icon","cross-sign",4,"ngIf"],["icon","wall-clock",4,"ngIf"],[1,"table-td","truncate"],[1,"table-td","text-center"],["icon","check-done"],["icon","cross-sign"],["icon","wall-clock"],[1,"card","mt-5","p-3"],[1,"input-text","w-full","text-neutral-500","overflow-y-scroll","h-10","text-sm","focus:outline-none"]];},template:function(e,i){e&1&&w(0,Ee,36,9,"div",10)(1,Ae,30,2,"div",11)(2,fe,3,1,"div",12),e&2&&(g("ngIf",!i.running&&!i.results),a(),g("ngIf",i.running||i.results),a(),g("ngIf",i.log));},dependencies:[z,J,Z,ee,_e,te,de,Te,Se,Q,Y,H],styles:[".screenshot[_ng
4content-%COMP%]:hover{max-height:400px;max-width:600px;position:absolute;z-index:100;margin-top:-20px}"]});},ge=class o{static ɵfac=function(e){return new(e||o)();};static ɵmod=V({type:o});static ɵinj=L({imports:[X,ie,se,oe,ae,le,ce,re]});};export{ge as PageExperienceModule,ue as StructuredDataComponent};/**i18n:5e5c29eb5a2b8b7d81c7cb256105db2252984439abfadc9fbcc9b15c9774eb6b*/
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.