דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • בהיר
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • כהה
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
צ

צמצם

@צמצם
הפסקת מעקב מעקב
אודות
פוסטים
56
נושאים
0
שיתופים
0
קבוצות
0
עוקבים
0
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • בקשת מידע | בניית תוכנה שלימה עם AI
    צ צמצם

    @עידו300 זה אתר לבניית אפליקציות וייב קוד, מאד קל זורם ויעיל, אפשר לבנות דרכו גם אפליקציות גדולות ומורכבות, אם כי כדי שזה יעבוד טוב באפליקציות מורכבות צריך כמובן לעבוד איתו נכון ולא להתפתות לבקש ממנו בבת אחת ליצור הכל בכל מכל כל, לבנות שלב שלב, ולהשתמש עם הרבה מצב דיון, אני מאד נהנה עם זה בניתי שם כבר כמה אפליקתיות גדולות ממש ומורכבות ממש.
    בהצלחה.

    עזרה הדדית - בינה מלאכותית

  • בקשת מידע | בניית תוכנה שלימה עם AI
    צ צמצם

    @אברהם-גלסר כתב:

    @צמצם שים לב, באתרים שמבוססים על Base44 שכוללים מערכת משתמשים, הם ברוב גדול מאוד של המקרים לא מוגנים. בעבר פתחתי פה נושא על זה, אבל הוא ירד.

    מה המשמעות?

    עזרה הדדית - בינה מלאכותית

  • בקשת מידע | בניית תוכנה שלימה עם AI
    צ צמצם

    @עידו300 נכון, תנסה להתחבר דרך חשבון גוגל בדרך כלל זה הולך בקלות.

    עזרה הדדית - בינה מלאכותית

  • בקשת מידע | בניית תוכנה שלימה עם AI
    צ צמצם

    @לנציצ https://app.base44.com/ למשל.

    עזרה הדדית - בינה מלאכותית

  • להורדה | סימניה להורדת קבצי הקוד מ 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);
    })();
    עזרה הדדית - בינה מלאכותית

  • להורדה | סימניה להורדת קבצי הקוד מ Base44
    צ צמצם

    @רציונל כתב:

    @צמצם נראה לי הוא עשה את זה בשביל שבייס לא יראו איך הוא עושה את זה, ואז יחסמו ( כמו הסקריפט הקודם ז''ל)

    והם אכן חסמו...😕

    עזרה הדדית - בינה מלאכותית

  • להורדה | סימניה להורדת קבצי הקוד מ Base44
    צ צמצם

    @רציונל ויש הבדל ביניהם? בגירסה הקודמת יש פחות סיכויים שיראו איך הוא עשה את זה?

    עזרה הדדית - בינה מלאכותית

  • להורדה | סימניה להורדת קבצי הקוד מ 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);})();
    עזרה הדדית - בינה מלאכותית

  • המלצה | חדש חדש!! צ'אט ישיר בין מחשבים כולל שיחות וידאו ואודיו והעברת קבצים ישירה פתוח לכולם!!!!
    צ צמצם

    @רוטב-שום גם אם אתה מרענן את הדף?

    עזרה הדדית - מחשבים וטכנולוגיה

  • המלצה | חדש חדש!! צ'אט ישיר בין מחשבים כולל שיחות וידאו ואודיו והעברת קבצים ישירה פתוח לכולם!!!!
    צ צמצם

    @רוטב-שום לא יודע...
    אצלי זה עובד מצוין
    209e53fa-c3c9-4b62-9f99-6fa5870e47ef-image.jpeg

    עזרה הדדית - מחשבים וטכנולוגיה

  • המלצה | חדש חדש!! צ'אט ישיר בין מחשבים כולל שיחות וידאו ואודיו והעברת קבצים ישירה פתוח לכולם!!!!
    צ צמצם

    @רוטב-שום תחליף את סיומת הקובץ ל-HTML

    עזרה הדדית - מחשבים וטכנולוגיה
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר