להורדה | סימניה להורדת קבצי הקוד מ Base44
-
לאחר זמן רב בו אני מתפלא מדוע אפשרות הורדת הקודים ב Base44 מתאפשרת רק לבעלי מנוי...

בעז"ה יצרתי בעזרת AI סימניית דפדפן שבלחיצה עליה יורדים כל קבצי הקוד של הפרויקט שלכם למחשב.
כמובן שלשם כך אתם אמורים להיות בדאשבורד של האפליקציה על קטעי הקודים. (התיקיות לא חייבות להיות פתוחות - הסימנייה פותחת את כולן אוטומטית כדי שהקודים יהיו גלויים)
תרגום הדפדפן בדף - צריך להיות כבוי. אם הוא דלוק הסימנייה תציג לכם אזהרה ולא תוריד את הקודים.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("⚠%EF%B8%8F תרגום הדפדפן זוהה כפועל בדף זה. זה עלול לגרום לקוד שגוי.\n\nאנא בטל את התרגום באופן ידני (בדרך כלל דרך אייקון בשורת הכתובת) והפעל את הסימנייה מחדש.");const e=e=>new Promise(t=>setTimeout(t,e)),t=(t,n)=>{const o=document.createElement("a"),r=new Blob([n],{type:"text/plain"});o.href=URL.createObjectURL(r),o.download=t,document.body.appendChild(o),o.click(),document.body.removeChild(o),URL.revokeObjectURL(o.href)};console.log("שלב 1: פותח תיקיות באופן רקורסיבי...");let n=0;for(;n<10;){const o=Array.from(document.querySelectorAll('nav button[data-state="closed"]')).filter((e=>e.querySelector(".lucide-folder")));if(0===o.length)break;for(const t of o)t.click(),await e(50);await e(400),n++}await e(500),console.log("שלב 2: איסוף והורדת כל הקבצים...");const o=document.querySelectorAll("nav button"),r=[];if(o.forEach((e=>{const t=e.querySelector("svg"),n=e.querySelector(".lucide-folder"),o=e.querySelector("span.truncate");if(t&&!n&&o){let t=o.innerText.trim();t.includes(".")||(t+=".js"),r.push({button:e,filename:t})}})),0===r.length)return void alert("לא נמצאו קבצים להורדה בתפריט.");for(const n of r){console.log(`מעבד את הקובץ: ${n.filename}...`),n.button.click(),await e(750);const r=document.querySelector(".monaco-editor .view-lines");if(r){const o=Array.from(r.querySelectorAll(".view-line")).map((e=>e.innerText)).join("\n");t(n.filename,o),await e(200)}else console.error(`לא נמצא עורך קוד עבור הקובץ ${n.filename}`)}alert(`ההורדה הושלמה! 👍 (הורדו ${r.length} קבצים בס"ד)`)})();שימו רק לב כי הקודים של Base44 לא בנויים כאתר סטטי עם html, css, js, אלא כולם קבצי js/jsx בהם נמצאים גם הפונקציונליות וגם העיצוב של האפליקציה עם ספריית React. (כך ע"פ AI Studio)
אם בכל זאת תרצו את ה html של האפליקציה, יהיה עליכם לשמור אותם מהאתר המוכן עצמו (ctrl+s)@לאצי הקוד הזה מוריד כ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} קבצים במבנה תיקיות.`)})(); -
@לאצי הקוד הזה מוריד כ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);})();