@מייבין-במקצת תודה רבה, עובד.
צמצם
-
הסבר | כתיבת פוסטים מסודרים בפורום כולל סקריפט ל-tampermonkey -
מדריך | חיפוש והחלפה בוורד - סדרת מדריכים@pcinfogmach
הנה קישור מג'ימייני פרו
https://gemini.google.com/share/f7035a143073 -
בירור | בינה מלאכותית והאנושות - לאן?@המלאך כתב בבירור | בינה מלאכותית והאנושות - לאן?:
על זה כבר נכתב בתורה: "ומותר האדם מן הבהמה עין.."
"ומותר האדם מן הבהמה אין..."
-
להורדה | סימניה להורדת קבצי הקוד מ Base44@לאצי @oryadaniely השתמשתי עם הקוד שלך ותודה רבה עליה...
מה שכן, זה לוקח הרבה זמן כי בקוד מוטמע שהוא מחכה בכל טעינת דף 2 שניות ולפעמים זה לחכות הרבה זמן עד שהוא גומר להוריד הכל,ביקשתי מקלוד שישנה את הקוד שהוא לא מחכה 2 שניות אלא מחכה עד שהדף נטען וזה אכן הוריד הרבה יותר מהר.
מצרף את הקוד ששיניתי.
javascript:(async()=>{if(document.querySelector("html").className.includes("translated"))return alert("⚠ בטל תרגום דפדפן.");const sleep=ms=>new Promise(r=>setTimeout(r,ms));const waitFor=async(checkFn,{maxWait=3000,interval=50,stableChecks=2}={})=>{ const start=Date.now(); let last=undefined,stable=0; while(Date.now()-start<maxWait){ let val; try{val=await checkFn();}catch(e){val=undefined;} if(val!==undefined&&val===last){ stable++; if(stable>=stableChecks)return val; }else{ stable=0; } last=val; await sleep(interval); } return last;};const nav=document.querySelector('nav.flex-1.overflow-y-auto');if(!nav)return alert("❌ לא נמצא עץ קבצים. ודא שאתה בלשונית 'Code'.");let root;try{root=await window.showDirectoryPicker({mode:"readwrite"})}catch{return}const panel=document.createElement("div");panel.style="position:fixed;top:12px;left:50%;transform:translateX(-50%);width:450px;background:#111;color:#fff;font:13px system-ui;padding:16px;border-radius:14px;z-index:999999;direction:rtl;box-shadow:0 10px 30px rgba(0,0,0,0.8);border:1px solid #333";panel.innerHTML=%60<div style="display:flex;gap:10px;align-items:center;margin-bottom:12px"><div style="width:16px;height:16px;border:3px solid #444;border-top-color:#4caf50;border-radius:50%;animation:spin 1s linear infinite"></div><b style="font-size:15px">Base44 Extractor V14 (Fast)</b></div><div id="stg" style="color:#aaa;margin-bottom:8px">מאתחל...</div><div style="background:#222;height:12px;border-radius:6px;overflow:hidden"><div id="bar" style="height:100%;width:0%;background:#4caf50;transition:width 0.3s"></div></div><div id="pct" style="margin-top:6px;color:#888;font-size:12px">0%</div><div id="logArea" style="margin-top:10px;height:150px;background:#000;border:1px solid #444;border-radius:6px;overflow-y:auto;font-family:monospace;font-size:11px;padding:6px;text-align:left;direction:ltr;white-space:nowrap;color:#0f0;"></div><style>@keyframes spin{to{transform:rotate(360deg)}}</style>%60;document.body.appendChild(panel);const stage=t=>{panel.querySelector("#stg").textContent=t;};let fullLog="";const logFn=m=>{console.log(m);fullLog+=m+"\r\n";const l=panel.querySelector("#logArea");if(l){l.innerHTML+='<div>> '+m+'</div>';l.scrollTop=l.scrollHeight;}};const progress=(d,t)=>{const p=Math.floor((d/t)*100);panel.querySelector("#bar").style.width=p+"%";panel.querySelector("#pct").textContent=%60${p}% (${d} מתוך ${t} קבצים)%60;};logFn("System Initialized V14 - Base44 Native Engine (Dynamic Wait).");const getNodes=()=>{ return Array.from(nav.querySelectorAll("button")).map(btn=>{ const span=btn.querySelector("span.truncate"); if(!span)return null; const text=span.innerText.trim(); const pl=parseInt(btn.style.paddingLeft||"8"); const chevron=btn.querySelector("svg.lucide-chevron-down"); const isFolder=!!chevron; const isClosed=isFolder&&chevron.classList.contains("-rotate-90"); return{btn,text,depth:pl,isFolder,isClosed,isFile:!isFolder}; }).filter(Boolean);};const scrollTop=async()=>{ logFn("Scrolling tree to top..."); nav.scrollTop=0; await waitFor(()=>nav.scrollTop,{maxWait:600,interval:50,stableChecks:2});};const scrollStep=async(px=300)=>{ const oldScroll=nav.scrollTop; nav.scrollTop+=px; await waitFor(()=>nav.scrollTop,{maxWait:400,interval:40,stableChecks:2}); return nav.scrollTop!==oldScroll;};stage("פותח תיקיות (Native)...");await scrollTop();let expStable=0,attempts=new Map();while(expStable<5){ const nodes=getNodes(); let expanded=!1; for(const n of nodes){ if(n.isClosed){ const tries=attempts.get(n.text)||0; if(tries<3){ attempts.set(n.text,tries+1); logFn(%60Expanding folder: ${n.text}%60); n.btn.scrollIntoView({block:"center"}); await waitFor(()=>true,{maxWait:250,interval:50,stableChecks:1}); const beforeCount=nav.querySelectorAll("button").length; n.btn.click(); await waitFor(()=>nav.querySelectorAll("button").length!==beforeCount?nav.querySelectorAll("button").length:undefined,{maxWait:800,interval:40,stableChecks:1}); expanded=!0; expStable=0; break; } } } if(!expanded){ const moved=await scrollStep(300); if(!moved)expStable++;else expStable=0; }}stage("ממפה פרויקט...");await scrollTop();let cStk=[],mappedFiles=new Map(),mapStable=0;while(mapStable<5){ const nodes=getNodes(); for(const n of nodes){ while(cStk.length>0&&cStk[cStk.length-1].depth>=n.depth)cStk.pop(); cStk.push(n); if(n.isFile){ const fullPath=cStk.map(p=>p.text).join("/"); if(!mappedFiles.has(fullPath)){ const saveName=n.text.includes(".")?n.text:n.text+".js"; mappedFiles.set(fullPath,{name:saveName,path:fullPath,dir:cStk.slice(0,-1).map(p=>p.text)}); logFn(%60Mapped: ${fullPath}%60); } } } const moved=await scrollStep(300); if(!moved)mapStable++;else mapStable=0;}const fList=Array.from(mappedFiles.values());logFn(%60Mapping complete. Found ${fList.length} files.%60);if(!fList.length){panel.remove();return alert("לא נמצאו קבצים. נסה לרענן את העמוד.");}const sanitize=s=>s.replace(/[<>:"\/\\|?*]/g,"_");const readMonacoContent=async(fileName)=>{ return await waitFor(()=>{ if(window.monaco?.editor){ const m=window.monaco.editor.getModels(); if(m.length){ const md=m.find(x=>x.uri.path.toLowerCase().endsWith(fileName.toLowerCase()))||m[0]; const val=md.getValue(); if(val)return val; } } return undefined; },{maxWait:3000,interval:50,stableChecks:2});};let saved=0,failed=[];for(let i=0;i<fList.length;i++){ const file=fList[i]; stage(%60מוריד: ${file.name}%60); progress(i,fList.length); logFn(%60--- Target: ${file.path} ---%60); await scrollTop(); let tgt=null,sStable=0; cStk=[]; while(sStable<5&&!tgt){ const nodes=getNodes(); for(const n of nodes){ while(cStk.length>0&&cStk[cStk.length-1].depth>=n.depth)cStk.pop(); cStk.push(n); const cp=cStk.map(p=>p.text).join("/"); if(cp===file.path){tgt=n.btn;break;} } if(tgt)break; const moved=await scrollStep(300); if(!moved)sStable++;else sStable=0; } if(tgt){ tgt.scrollIntoView({block:"center"}); await waitFor(()=>true,{maxWait:250,interval:50,stableChecks:1}); logFn(%60Clicking file...%60); tgt.click(); await sleep(120); let content=""; try{ content=await readMonacoContent(file.name)||""; if(content)logFn("Read from Monaco API."); }catch(e){logFn(%60Monaco error: ${e.message}%60);} if(content){ try{ let dH=root; for(const p of file.dir)dH=await dH.getDirectoryHandle(sanitize(p),{create:true}); const fH=await dH.getFileHandle(sanitize(file.name),{create:true}); const w=await fH.createWritable(); await w.write(content); await w.close(); saved++; logFn(%60Saved: ${file.name}%60); }catch(e){ logFn(%60Save error: ${e.message}%60); failed.push(file.path); } }else{ logFn("ERROR: No content."); failed.push(file.path); } }else{ logFn("ERROR: Node not found in tree."); failed.push(file.path); }}progress(fList.length,fList.length);stage("הושלם ✅");logFn(%60Done! Saved ${saved}/${fList.length}%60);try{ const logFH=await root.getFileHandle("extraction_log.txt",{create:true}); const logW=await logFH.createWritable(); await logW.write(fullLog); await logW.close();}catch(e){}setTimeout(()=>{ panel.remove(); alert(%60✅ החילוץ הסתיים!\nנשמרו ${saved}/${fList.length} קבצים.\n${failed.length?"נכשלו:\n"+failed.join("\n"):""}%60);},1500);})(); -
להורדה | סימניה להורדת קבצי הקוד מ Base44תיקנתי את הסקריפט שוב עם קלוד והתברר שהבעיה הייתה כי Base44 עברו למבנה role="treeitem" עם ARIA מלא, במקום button + SVG עם קלאס lucide. זה ההסבר לכל התקלה (לא באמת הבנתי... קלוד ניתח את זה עם בדיקות בקונסול וזה התוצאה)
מדביק את הסקריפט המעודכן, בהצלחה.
javascript:(async()=>{ if(document.querySelector("html").className.includes("translated"))return alert("⚠ בטל תרגום דפדפן."); const sleep=ms=>new Promise(r=>setTimeout(r,ms)); const waitFor=async(checkFn,{maxWait=2000,interval=30,stableChecks=2}={})=>{ const start=Date.now();let last=undefined,stable=0; while(Date.now()-start<maxWait){ let val;try{val=await checkFn();}catch(e){val=undefined;} if(val!==undefined&&val===last){stable++;if(stable>=stableChecks)return val;}else{stable=0;} last=val;await sleep(interval); } return last; }; const nav=document.querySelector('[data-testid="ds-file-tree"]')||document.querySelector('nav.flex-1.overflow-y-auto'); if(!nav)return alert("❌ לא נמצא עץ קבצים. ודא שאתה בלשונית 'Code'."); let root;try{root=await window.showDirectoryPicker({mode:"readwrite"})}catch{return} const panel=document.createElement("div"); panel.style="position:fixed;top:12px;left:50%;transform:translateX(-50%);width:450px;background:#111;color:#fff;font:13px system-ui;padding:16px;border-radius:14px;z-index:999999;direction:rtl;box-shadow:0 10px 30px rgba(0,0,0,0.8);border:1px solid #333"; panel.innerHTML=`<div style="display:flex;gap:10px;align-items:center;margin-bottom:12px"><div style="width:16px;height:16px;border:3px solid #444;border-top-color:#4caf50;border-radius:50%;animation:spin 1s linear infinite"></div><b style="font-size:15px">Base44 Extractor V16 (Fast)</b></div><div id="stg" style="color:#aaa;margin-bottom:8px">מאתחל...</div><div style="background:#222;height:12px;border-radius:6px;overflow:hidden"><div id="bar" style="height:100%;width:0%;background:#4caf50;transition:width 0.3s"></div></div><div id="pct" style="margin-top:6px;color:#888;font-size:12px">0%</div><div id="logArea" style="margin-top:10px;height:150px;background:#000;border:1px solid #444;border-radius:6px;overflow-y:auto;font-family:monospace;font-size:11px;padding:6px;text-align:left;direction:ltr;white-space:nowrap;color:#0f0;"></div><style>@keyframes spin{to{transform:rotate(360deg)}}</style>`; document.body.appendChild(panel); const stage=t=>{panel.querySelector("#stg").textContent=t;}; let fullLog=""; const logFn=m=>{console.log(m);fullLog+=m+"\r\n";const l=panel.querySelector("#logArea");if(l){l.innerHTML+='<div>> '+m+'</div>';l.scrollTop=l.scrollHeight;}}; const progress=(d,t)=>{const p=Math.floor((d/t)*100);panel.querySelector("#bar").style.width=p+"%";panel.querySelector("#pct").textContent=`${p}% (${d} מתוך ${t} קבצים)`;}; logFn("System Initialized V16 - Fast Mode."); const getNodes=()=>Array.from(nav.querySelectorAll('[role="treeitem"]')).map(el=>{ const isFolder=el.hasAttribute('data-group-id'); const isFile=el.hasAttribute('data-file-id'); const fullPath=isFolder?el.getAttribute('data-group-id'):el.getAttribute('data-file-id'); if(!fullPath)return null; const nameSpan=el.querySelector('span[data-testid="ds-text"]')||el.querySelector('span[data-ds-tooltip-anchor]'); const text=nameSpan?nameSpan.innerText.trim():fullPath.split('/').pop(); const isClosed=isFolder&&el.getAttribute('aria-expanded')==='false'; const clickTarget=el.querySelector('div.cursor-pointer')||el; return{el,clickTarget,text,fullPath,isFolder,isFile,isClosed}; }).filter(Boolean); const scrollTop=async()=>{nav.scrollTop=0;await waitFor(()=>nav.scrollTop,{maxWait:400,interval:30,stableChecks:2});}; const scrollStep=async(px=700)=>{const oldScroll=nav.scrollTop;nav.scrollTop+=px;await waitFor(()=>nav.scrollTop,{maxWait:250,interval:25,stableChecks:2});return nav.scrollTop!==oldScroll;}; stage("פותח תיקיות..."); await scrollTop(); let expStable=0,attempts=new Map(); while(expStable<5){ const nodes=getNodes(); let expanded=false; for(const n of nodes){ if(n.isClosed){ const tries=attempts.get(n.fullPath)||0; if(tries<3){ attempts.set(n.fullPath,tries+1); logFn(`Expanding folder: ${n.fullPath}`); n.el.scrollIntoView({block:"center"}); n.clickTarget.click(); await waitFor(()=>{const fresh=getNodes().find(x=>x.fullPath===n.fullPath);return fresh?(fresh.isClosed===false?true:undefined):undefined;},{maxWait:600,interval:25,stableChecks:1}); expanded=true;expStable=0;break; } } } if(!expanded){const moved=await scrollStep(700);if(!moved)expStable++;else expStable=0;} } stage("ממפה פרויקט..."); await scrollTop(); let mappedFiles=new Map(),mapStable=0; while(mapStable<5){ const nodes=getNodes(); for(const n of nodes){ if(n.isFile&&!mappedFiles.has(n.fullPath)){ const saveName=n.text.includes(".")?n.text:n.text+".js"; const parts=n.fullPath.split('/'); mappedFiles.set(n.fullPath,{name:saveName,path:n.fullPath,dir:parts.slice(0,-1)}); logFn(`Mapped: ${n.fullPath}`); } } const moved=await scrollStep(700); if(!moved)mapStable++;else mapStable=0; } const fList=Array.from(mappedFiles.values()); logFn(`Mapping complete. Found ${fList.length} files.`); if(!fList.length){panel.remove();return alert("לא נמצאו קבצים. נסה לרענן את העמוד.");} const sanitize=s=>s.replace(/[<>:"\/\\|?*]/g,"_"); const readMonacoContent=async(fileName)=>{ return await waitFor(()=>{ if(window.monaco?.editor){ const m=window.monaco.editor.getModels(); if(m.length){ const md=m.find(x=>x.uri.path.toLowerCase().endsWith(fileName.toLowerCase()))||m[0]; const val=md.getValue(); if(val)return val; } } return undefined; },{maxWait:2500,interval:30,stableChecks:2}); }; let saved=0,failed=[]; for(let i=0;i<fList.length;i++){ const file=fList[i]; stage(`מוריד: ${file.name}`); progress(i,fList.length); logFn(`--- Target: ${file.path} ---`); await scrollTop(); let tgt=null,tgtEl=null,sStable=0; while(sStable<5&&!tgt){ const nodes=getNodes(); const found=nodes.find(n=>n.fullPath===file.path); if(found){tgt=found.clickTarget;tgtEl=found.el;break;} const moved=await scrollStep(700); if(!moved)sStable++;else sStable=0; } let content=""; let retryCount=0; while(retryCount<2&&!content){ if(tgt){ tgtEl.scrollIntoView({block:"center"}); tgt.click(); await sleep(70); try{ content=await readMonacoContent(file.name)||""; if(content)logFn("Read from Monaco API."); }catch(e){logFn(`Monaco error: ${e.message}`);} } if(!content){ retryCount++; if(retryCount<2){logFn(`Retry ${retryCount} for ${file.name}...`);await sleep(300);} } } if(content){ try{ let dH=root; for(const p of file.dir)dH=await dH.getDirectoryHandle(sanitize(p),{create:true}); const fH=await dH.getFileHandle(sanitize(file.name),{create:true}); const w=await fH.createWritable(); await w.write(content); await w.close(); saved++; logFn(`Saved: ${file.name}`); }catch(e){ logFn(`Save error: ${e.message}`); failed.push(file.path); } }else{ logFn(`ERROR: No content after retries — ${file.path}`); failed.push(file.path); } } progress(fList.length,fList.length); stage("הושלם ✅"); logFn(`Done! Saved ${saved}/${fList.length}`); try{ const logFH=await root.getFileHandle("extraction_log.txt",{create:true}); const logW=await logFH.createWritable(); await logW.write(fullLog); await logW.close(); }catch(e){} setTimeout(()=>{ panel.remove(); alert(`✅ החילוץ הסתיים!\nנשמרו ${saved}/${fList.length} קבצים.\n${failed.length?"נכשלו:\n"+failed.join("\n"):""}`); },1200); })(); -
בקשת מידע | בניית תוכנה שלימה עם AI@עידו300 זה אתר לבניית אפליקציות וייב קוד, מאד קל זורם ויעיל, אפשר לבנות דרכו גם אפליקציות גדולות ומורכבות, אם כי כדי שזה יעבוד טוב באפליקציות מורכבות צריך כמובן לעבוד איתו נכון ולא להתפתות לבקש ממנו בבת אחת ליצור הכל בכל מכל כל, לבנות שלב שלב, ולהשתמש עם הרבה מצב דיון, אני מאד נהנה עם זה בניתי שם כבר כמה אפליקתיות גדולות ממש ומורכבות ממש.
בהצלחה. -
בקשת מידע | חישוב תאריך@ישיבישער מתנצל.
-
שיתוף | הכירו את QuickNote Genius! 🚀! התוכנה ליצירת פתקיות מהירות שתעשה לכם את החיים טובים יותר!!!! גירסה V17 -
בקשת מידע | הקלדה קולית בעברית ללא חיבור לאינטרנט@אלישע-מואב-0 אני לא יודע...
יש לי אינטרנט, ואני פותח את זה לפי ההוראות והוא לא מוריד לי את הקבצים לתיקייה. -
מה שקופיילוט בוורד היה אמור להיות
