להורדה | סימניה להורדת קבצי הקוד מ Base44
-
@לאצי הקוד הזה מוריד כZIP עם החלוקת מבנה תיקיות... אולי כדאי שתערוך למעלה...
javascript:(async function(){if(document.documentElement.classList.contains("translated-ltr")||document.documentElement.classList.contains("translated-rtl")||document.querySelector("title")&&document.querySelector("title").hasAttribute("_msthash"))return void alert("⚠️ תרגום הדפדפן זוהה. בטל תרגום ונסה שוב.");const e=e=>new Promise(t=>setTimeout(t,e));if(!window.JSZip){console.log("טוען את ספריית JSZip...");const t=window.define;try{window.define=void 0;const o=await fetch("https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"),l=await o.text();new Function(l)(),window.JSZip||new Error("JSZip did not attach to window object."),console.log("JSZip נטען בהצלחה.")}catch(e){return console.error("שגיאה קריטית בטעינת JSZip:",e),window.define=t,alert("לא ניתן היה לטעון את ספריית הדחיסה (JSZip). הסקריפט לא יכול להמשיך.")}finally{window.define=t}}console.log("שלב 1: פותח תיקיות באופן רקורסיבי...");for(let t=0;t<15;t++){const o=Array.from(document.querySelectorAll('nav button[data-state="closed"]')).filter((e=>e.querySelector(".lucide-folder")));if(!o.length)break;for(const t of o)t.click(),await e(50);await e(500)}await e(1e3),console.log("שלב 2: איסוף מבנה הקבצים והתיקיות...");const t=[];for(const o of Array.from(document.querySelectorAll("nav button")).filter((e=>!e.querySelector(".lucide-folder")))){const l=o.querySelector("span.truncate");if(!l)continue;let n=l.innerText.trim();n.includes(".")||(n+=".js");const r=[n];let a=o.parentElement;for(;a&&a.closest("nav");){const e=a.closest("div.group");if(!e)break;const t=e.querySelector(":scope > button");t&&t.querySelector(".lucide-folder")&&t.querySelector("span.truncate")&&r.unshift(t.querySelector("span.truncate").innerText.trim()),a=e.parentElement}const i=r.join("/");t.push({button:o,path:i})}if(!t.length)return alert("לא נמצאו קבצים להורדה.");console.log(`נמצאו ${t.length} קבצים. מתחיל הורדה...`);const o=new JSZip;for(const l of t){console.log(`מעבד את הקובץ: ${l.path}...`),l.button.click(),await e(850);const t=document.querySelector(".monaco-editor .view-lines");t?(o.file(l.path,Array.from(t.querySelectorAll(".view-line")).map((e=>e.innerText)).join("\n")),await e(200)):(console.error(`לא נמצא עורך קוד עבור הקובץ ${l.path}`),o.file(l.path,"// Error: Could not find code editor for this file."))}console.log("יוצר קובץ ZIP...");const l=await o.generateAsync({type:"blob"}),n=document.createElement("a"),r=document.title.split("|")[0].trim().replace(/\s+/g,"_")||"project";n.href=URL.createObjectURL(l),n.download=`${r}.zip`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(n.href),alert(`✅ הושלם! הורד קובץ ZIP עם ${t.length} קבצים במבנה תיקיות.`)})();@oryadaniely נוצר ע"י?
-
@oryadaniely נוצר ע"י?
@לאצי חצי חצי... אני יודע לכתוב קוד...
-
ס סקרנות התייחס לנושא זה
-
ע ע"ה דכו"ע התייחס לנושא זה
-
למי שמעוניין הנה שיחה שקיימתי עם GPT בנוגע להמרת קודי ריאקט:
https://chatgpt.com/share/68f4b5dd-4d0c-8008-9350-d08cebdbd18b -
למי שמעוניין הנה שיחה שקיימתי עם GPT בנוגע להמרת קודי ריאקט:
https://chatgpt.com/share/68f4b5dd-4d0c-8008-9350-d08cebdbd18b@לאצי כתב בלהורדה | סימניה להורדת קבצי הקוד מ Base44:
למי שמעוניין הנה שיחה שקיימתי עם GPT בנוגע להמרת קודי ריאקט:
https://chatgpt.com/share/68f4b5dd-4d0c-8008-9350-d08cebdbd18bזה לא כל כך קשור, כי אין בעיה גם להריץ ריאקט על המחשב או אפילו בדפי גיטהב, הבעיה היא שיש לך רק את הצד לקוח של הקוד, ואת הצד שרת אין לך בכלל.
-
@לאצי כתב בלהורדה | סימניה להורדת קבצי הקוד מ Base44:
למי שמעוניין הנה שיחה שקיימתי עם GPT בנוגע להמרת קודי ריאקט:
https://chatgpt.com/share/68f4b5dd-4d0c-8008-9350-d08cebdbd18bזה לא כל כך קשור, כי אין בעיה גם להריץ ריאקט על המחשב או אפילו בדפי גיטהב, הבעיה היא שיש לך רק את הצד לקוח של הקוד, ואת הצד שרת אין לך בכלל.
-
כתבתי [AI] גרסה שעובדת מעולה
אבל לוקח קצת זמן עד שהיא מסיימת, ממש כמה דקות [לעשרות קבצים]
הסימניה מבקשת הרשאת גישה ליצירת קבצים, ויוצרת תיקיות ומורידה את כל הקבצים באותו סדר עץ התיקיות שהם באתר.javascript:(async()=>{if(document.querySelector("html").className.includes("translated"))return alert("⚠ בטל תרגום דפדפן.");const sleep=ms=>new Promise(r=>setTimeout(r,ms));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 V13</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 V13 - Base44 Native Engine.");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 sleep(300);};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 sleep(200);n.btn.click();await sleep(500);expanded=!0;expStable=0;break;}}}if(!expanded){const oldScroll=nav.scrollTop;nav.scrollTop+=300;await sleep(300);if(nav.scrollTop===oldScroll)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 oldScroll=nav.scrollTop;nav.scrollTop+=300;await sleep(300);if(nav.scrollTop===oldScroll)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,"_");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 oldScroll=nav.scrollTop;nav.scrollTop+=300;await sleep(300);if(nav.scrollTop===oldScroll)sStable++;else sStable=0;}if(tgt){tgt.scrollIntoView({block:"center"});await sleep(200);logFn(%60Clicking file...%60);tgt.click();await sleep(2000);let content="";try{if(window.monaco?.editor){const m=window.monaco.editor.getModels();if(m.length){const md=m.find(x=>x.uri.path.toLowerCase().endsWith(file.name.toLowerCase()))||m[0];content=md.getValue();if(content)logFn(%60Read from Monaco API.%60);}}}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(%60ERROR: No content.%60);failed.push(file.path);}}else{logFn(%60ERROR: Node not found in tree.%60);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);})();