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

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. המלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨

המלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
507 פוסטים 43 כותבים 34.5k צפיות 35 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א אהרן

    @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

    @אהרן בזמן השגיאה שאתה לא מצליח להכניס API

    את השגיאה הזו פתרתי כשהבנתי שצריך לסמן את התיבת סימון ואז לאשר, המפתח נקלט אח"כ [פשוט הופיע תיבה לאישור אך בלי הטקסט, כפי שהראתי קודם, ורק בסיוע גמיני שקרא את הסקריפט יכולתי להבין שצריך ללחוץ על אישור התיבה]. הבעיה שכעת גם התוסף לא מגיב בכלל לבקשת הסבר, לטענת גמיני כיון שהוא מכוון לקבלת סוג תשובה אחת ומקבל סוג אחר. לא בטוח שזה נכון כי בכלל לא נפתחת תיבה לתשובה, אלא זה כאילו לא לחצתי. בנוסף {כמובן פחות קריטי}, כנראה חוץ מזה שחסר המלל בעברית לתהליך אישור הAPI [כמו שכתבתי] גם לא מופיע בתוסף הסבר על האפשרויות מתחת לכל אפשרות כפי שהופיע פעם, כנראה גם זה לא מופיע בקובץ התרגום.
    02b8fb58-8042-45f9-b26f-8cd2b43724ce-image.png

    S מנותק
    S מנותק
    smct
    כתב נערך לאחרונה על ידי smct
    #492

    @אהרן
    עובד לך בנטפרי התוסף?
    @יוסי-רחמים
    איך אני משנה לעיברית?

    א תגובה 1 תגובה אחרונה
    0
    • S smct

      @אהרן
      עובד לך בנטפרי התוסף?
      @יוסי-רחמים
      איך אני משנה לעיברית?

      א מחובר
      א מחובר
      אהרן
      כתב נערך לאחרונה על ידי
      #493

      @smct כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

      @אהרן
      עובד לך בנטפרי התוסף?

      לא הבנתי את השאלה, אם השאלה אם יש לי נטפרי, כן ב"ה, אם השאלה אם עובד, עיין בהודעה לפניך [בקיצור, לא], גם בפנאל צד לא עובד, למרות ששם כן נפתחת תיבה.
      a74f06ca-0766-45cb-b24a-d02eb7e45900-image.png

      תגובה 1 תגובה אחרונה
      0
      • י מנותק
        י מנותק
        יוסי רחמים
        כתב נערך לאחרונה על ידי
        #494

        שיחזרתי לגירסא הקודמת תנסו לעדכן את התוסף ואז לבדוק

        מ תגובה 1 תגובה אחרונה
        0
        • י יוסי רחמים

          שיחזרתי לגירסא הקודמת תנסו לעדכן את התוסף ואז לבדוק

          מ מחובר
          מ מחובר
          מוח קודח
          כתב נערך לאחרונה על ידי
          #495

          @יוסי-רחמים אם תוכל להעלות לכאן, למנוטפרים. תודה.

          י תגובה 1 תגובה אחרונה
          0
          • מ מוח קודח

            @יוסי-רחמים אם תוכל להעלות לכאן, למנוטפרים. תודה.

            י מנותק
            י מנותק
            יוסי רחמים
            כתב נערך לאחרונה על ידי
            #496

            @מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx

            א תגובה 1 תגובה אחרונה
            1
            • י יוסי רחמים

              @מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx

              א מחובר
              א מחובר
              אהרן
              כתב נערך לאחרונה על ידי אהרן
              #497

              @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

              @מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx

              כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
              69a93ec1-a94c-4617-80c1-b676ca52f11d-image.png

              י תגובה 1 תגובה אחרונה
              1
              • א אהרן

                @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                @מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx

                כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
                69a93ec1-a94c-4617-80c1-b676ca52f11d-image.png

                י מנותק
                י מנותק
                יוסי רחמים
                כתב נערך לאחרונה על ידי
                #498

                @אהרן כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                @מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx

                כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
                69a93ec1-a94c-4617-80c1-b676ca52f11d-image.png

                נשלח לבדיקה

                תגובה 1 תגובה אחרונה
                2
                • י מנותק
                  י מנותק
                  יוסי רחמים
                  כתב נערך לאחרונה על ידי
                  #499

                  פורסם

                  א תגובה 1 תגובה אחרונה
                  2
                  • י יוסי רחמים

                    פורסם

                    א מחובר
                    א מחובר
                    אהרן
                    כתב נערך לאחרונה על ידי
                    #500

                    @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                    פורסם

                    יש קובץ למנוטפרים?

                    י תגובה 1 תגובה אחרונה
                    0
                    • א אהרן

                      @יוסי-רחמים כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                      פורסם

                      יש קובץ למנוטפרים?

                      י מנותק
                      י מנותק
                      יוסי רחמים
                      כתב נערך לאחרונה על ידי
                      #501

                      @אהרן 39e03375-ce15-4254-b35a-e8e4ca93509a-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx 😒

                      מ תגובה 1 תגובה אחרונה
                      0
                      • י יוסי רחמים

                        @אהרן 39e03375-ce15-4254-b35a-e8e4ca93509a-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx 😒

                        מ מחובר
                        מ מחובר
                        מוח קודח
                        כתב נערך לאחרונה על ידי
                        #502

                        @יוסי-רחמים שגיאת 418
                        גם במפתח אישי
                        אזלו הסיכויים למנוטפרים?

                        א תגובה 1 תגובה אחרונה
                        1
                        • מ מוח קודח

                          @יוסי-רחמים שגיאת 418
                          גם במפתח אישי
                          אזלו הסיכויים למנוטפרים?

                          א מחובר
                          א מחובר
                          אהרן
                          כתב נערך לאחרונה על ידי
                          #503

                          @מוח-קודח כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                          @יוסי-רחמים שגיאת 418
                          גם במפתח אישי
                          אזלו הסיכויים למנוטפרים?

                          עד ש@יוסי-רחמים יתאים את התוסף שלו למנוטפרים, הכנתי משהו זמני, שצריך להוסיף לתוסף tampermonkey, בלי אחריות, ולא ישבתי לדייק אותו, במיוחד שאפילו לא קראתי מה כתוב בו, סמכתי על בינה וראיתי שעובד. רק לשימוש לבינתיים, חובה להוסיף מפתח API של גוגל היכן שכתוב [לתמונות לא הצלחתי להפעיל, כנראה צריך תיקון קל]:

                          // ==UserScript==
                          // @name Gemini Universal Explainer (Text & Images) - Lite Model
                          // @namespace http://tampermonkey.net/
                          // @version 1.4
                          // @description מסביר טקסט מסומן או תמונות (Alt+Click) בכל אתר באמצעות Gemini API, כולל צ'אט המשך.
                          // @author You
                          // @match :///*
                          // @grant GM_xmlhttpRequest
                          // @grant GM_addStyle
                          // @connect generativelanguage.googleapis.com
                          // @connect *
                          // ==/UserScript==

                          (function() {
                          'use strict';

                          // ==========================================
                          // הגדרות משתמש - חובה למלא
                          // ==========================================
                          const GEMINI_API_KEY = 'כאן להוסיף את המפתח האישי בין הגרשיים';
                          // ==========================================
                          
                          const MODEL_NAME = 'gemini-2.5-flash-lite';
                          const API_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL_NAME}:generateContent?key=${GEMINI_API_KEY}`;
                          
                          let chatHistory = [];
                          let currentContext = null; // שומר את הטקסט או נתוני התמונה שנבחרו
                          let triggerButton, modal, chatContent, inputField, sendBtn, closeBtn, loadingIndicator;
                          
                          // --- הוספת סגנונות CSS (עיצוב) ---
                          GM_addStyle(`
                              #gemini-trigger-btn {
                                  position: absolute;
                                  z-index: 99999;
                                  background: #4285F4; /* Google Blue */
                                  color: white;
                                  border: none;
                                  border-radius: 50%;
                                  width: 32px;
                                  height: 32px;
                                  cursor: pointer;
                                  display: none;
                                  box-shadow: 0 2px 5px rgba(0,0,0,0.3);
                                  font-size: 16px;
                                  align-items: center;
                                  justify-content: center;
                                  transition: transform 0.2s;
                              }
                              #gemini-trigger-btn:hover { transform: scale(1.1); }
                          
                              #gemini-modal-overlay {
                                  position: fixed; top: 0; left: 0; width: 100%; height: 100%;
                                  background: rgba(0,0,0,0.5); z-index: 100000; display: none;
                                  justify-content: center; align-items: center;
                              }
                          
                              #gemini-modal {
                                  background: white; width: 500px; max-width: 90%; height: 600px;
                                  border-radius: 12px; display: flex; flex-direction: column;
                                  box-shadow: 0 10px 25px rgba(0,0,0,0.5); overflow: hidden;
                                  font-family: sans-serif; direction: rtl;
                              }
                          
                              #gemini-header {
                                  padding: 15px; background: #f1f3f4; border-bottom: 1px solid #ddd;
                                  display: flex; justify-content: space-between; align-items: center;
                                  font-weight: bold; color: #333;
                              }
                          
                              #gemini-close-btn { cursor: pointer; font-size: 20px; color: #666; }
                              #gemini-close-btn:hover { color: #000; }
                          
                              #gemini-chat-content {
                                  flex: 1; padding: 15px; overflow-y: auto; background: #fafafa;
                                  display: flex; flex-direction: column; gap: 10px;
                              }
                          
                              .gemini-message {
                                  padding: 10px 15px; border-radius: 18px; max-width: 80%;
                                  line-height: 1.5; word-wrap: break-word; white-space: pre-wrap;
                              }
                              .gemini-user-msg {
                                  background: #dcf8c6; align-self: flex-start; border-bottom-right-radius: 4px; color: #000;
                              }
                              .gemini-model-msg {
                                  background: #ffffff; border: 1px solid #eee; align-self: flex-end; border-bottom-left-radius: 4px; color: #000;
                              }
                              .gemini-context-preview {
                                  font-size: 0.8em; color: #666; font-style: italic; border-bottom: 1px dashed #ccc; margin-bottom: 5px; padding-bottom: 5px; max-height: 60px; overflow: hidden;
                              }
                              .gemini-context-preview img { max-height: 50px; border-radius: 4px; }
                          
                              #gemini-input-area {
                                  padding: 10px; border-top: 1px solid #ddd; background: white;
                                  display: flex; gap: 10px;
                              }
                          
                              #gemini-input {
                                  flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 20px; outline: none;
                              }
                              #gemini-send-btn {
                                  padding: 0 20px; background: #4285F4; color: white; border: none;
                                  border-radius: 20px; cursor: pointer; font-weight: bold;
                              }
                              #gemini-send-btn:disabled { background: #ccc; cursor: not-allowed; }
                          
                              #gemini-loading {
                                  display: none; align-self: center; margin: 10px; color: #666; font-style: italic;
                              }
                              /* Dark mode support for websites that have it */
                              @media (prefers-color-scheme: dark) {
                                  #gemini-modal { background: #2d2d2d; color: #e0e0e0; }
                                  #gemini-header { background: #1e1e1e; border-bottom-color: #444; color: #fff; }
                                  #gemini-chat-content { background: #252525; }
                                  #gemini-input-area { background: #1e1e1e; border-top-color: #444; }
                                  #gemini-input { background: #333; color: white; border-color: #555; }
                                  .gemini-model-msg { background: #333; border-color: #444; color: #e0e0e0; }
                                  .gemini-user-msg { background: #054740; color: #e0e0e0; }
                                  #gemini-close-btn { color: #aaa; }
                              }
                          `);
                          
                          // --- יצירת רכיבי הממשק (UI) ---
                          function createUI() {
                              // כפתור טריגר (נורה)
                              triggerButton = document.createElement('button');
                              triggerButton.id = 'gemini-trigger-btn';
                              triggerButton.innerHTML = '💡';
                              triggerButton.title = 'קבל הסבר מג\'מיני';
                              document.body.appendChild(triggerButton);
                          
                              // חלונית מודאלית
                              const overlay = document.createElement('div');
                              overlay.id = 'gemini-modal-overlay';
                              overlay.innerHTML = `
                                  <div id="gemini-modal">
                                      <div id="gemini-header">
                                          <span>Gemini Explainer</span>
                                          <span id="gemini-close-btn">&times;</span>
                                      </div>
                                      <div id="gemini-chat-content"></div>
                                      <div id="gemini-loading">חושב...</div>
                                      <div id="gemini-input-area">
                                          <input type="text" id="gemini-input" placeholder="שאל שאלת המשך..." disabled>
                                          <button id="gemini-send-btn" disabled>שלח</button>
                                      </div>
                                  </div>
                              `;
                              document.body.appendChild(overlay);
                          
                              // שמירת הפניות לאלמנטים
                              modal = overlay;
                              chatContent = overlay.querySelector('#gemini-chat-content');
                              inputField = overlay.querySelector('#gemini-input');
                              sendBtn = overlay.querySelector('#gemini-send-btn');
                              closeBtn = overlay.querySelector('#gemini-close-btn');
                              loadingIndicator = overlay.querySelector('#gemini-loading');
                          
                              // הגדרת מאזינים לאירועים בממשק
                              triggerButton.addEventListener('click', startExplanation);
                              closeBtn.addEventListener('click', closeModal);
                              modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); });
                              sendBtn.addEventListener('click', sendFollowUp);
                              inputField.addEventListener('keypress', (e) => { if (e.key === 'Enter') sendFollowUp(); });
                          }
                          
                          // --- לוגיקת אינטראקציה באתר (בחירה/קליק) ---
                          
                          // טיפול בבחירת טקסט
                          document.addEventListener('mouseup', (e) => {
                              // התעלם אם הקליק בתוך המודאל או על הכפתור
                              if (modal.style.display === 'flex' || e.target === triggerButton) return;
                          
                              const selection = window.getSelection();
                              const selectedText = selection.toString().trim();
                          
                              if (selectedText.length > 0) {
                                  currentContext = { type: 'text', data: selectedText };
                                  showTriggerButton(e.pageX, e.pageY);
                              } else {
                                  // אם זו לא תמונה, הסתר כפתור
                                  setTimeout(() => {
                                      if(triggerButton.style.display === 'flex') hideTriggerButton();
                                  }, 200);
                              }
                          });
                          
                          // טיפול בלחיצה על תמונה (Alt + Click כדי לא להפריע לגלישה רגילה)
                          document.addEventListener('click', (e) => {
                              if (e.altKey && e.target.tagName === 'IMG') {
                                  e.preventDefault();
                                  e.stopPropagation();
                                  const imgUrl = e.target.src;
                                  currentContext = { type: 'image', url: imgUrl };
                                  showTriggerButton(e.pageX, e.pageY);
                              }
                          }, true); // Use capture to intercept early
                          
                          function showTriggerButton(x, y) {
                              triggerButton.style.left = `${x + 10}px`;
                              triggerButton.style.top = `${y + 10}px`;
                              triggerButton.style.display = 'flex';
                          }
                          
                          function hideTriggerButton() {
                              triggerButton.style.display = 'none';
                          }
                          
                          // --- לוגיקת הצ'אט וה-API ---
                          
                          async function startExplanation() {
                              if (GEMINI_API_KEY === 'הכנס_את_מפתח_ה-API_שלך_כאן' || !GEMINI_API_KEY) {
                                  alert('נא להגדיר מפתח API של Gemini בקוד הסקריפט.');
                                  return;
                              }
                          
                              hideTriggerButton();
                              openModal();
                              clearChat();
                              setLoading(true);
                          
                              chatHistory = []; // איפוס היסטוריה
                              let initialPromptParts = [];
                          
                              // הצגת ההקשר שנבחר בחלונית
                              addMessageToChat('context', currentContext);
                          
                              if (currentContext.type === 'text') {
                                  const prompt = `הסבר בקצרה בעברית את הטקסט הבא: "${currentContext.data}"`;
                                  initialPromptParts = [{ text: prompt }];
                                  chatHistory.push({ role: 'user', parts: initialPromptParts });
                                  await callGeminiAPI(chatHistory);
                              }
                              else if (currentContext.type === 'image') {
                                  addMessageToChat('model', 'מוריד ומעבד את התמונה...');
                                  try {
                                      const base64Data = await fetchImageAsBase64(currentContext.url);
                                      // הסרת הכותרת של ה-base64 אם קיימת (data:image/png;base64,)
                                      const base64String = base64Data.split(',')[1];
                                      const mimeType = base64Data.split(';')[0].split(':')[1];
                          
                                      const prompt = "הסבר בקצרה בעברית מה רואים בתמונה הזו.";
                                      initialPromptParts = [
                                          { text: prompt },
                                          { inline_data: { mime_type: mimeType, data: base64String } }
                                      ];
                                      chatHistory.push({ role: 'user', parts: initialPromptParts });
                                      // מחיקת הודעת ה"מעבד" לפני שליחת הבקשה
                                      chatContent.lastChild.remove();
                                      await callGeminiAPI(chatHistory);
                                  } catch (error) {
                                      setLoading(false);
                                      addMessageToChat('model', 'שגיאה בטעינת התמונה: ' + error.message);
                                      console.error(error);
                                  }
                              }
                          }
                          
                          async function sendFollowUp() {
                              const text = inputField.value.trim();
                              if (!text) return;
                          
                              inputField.value = '';
                              addMessageToChat('user', text);
                              setLoading(true);
                          
                              chatHistory.push({ role: 'user', parts: [{ text: text }] });
                              await callGeminiAPI(chatHistory);
                          }
                          
                          async function callGeminiAPI(contents) {
                              const payload = {
                                  contents: contents,
                                  generationConfig: {
                                      temperature: 0.7,
                                      maxOutputTokens: 1024,
                                  }
                              };
                          
                              GM_xmlhttpRequest({
                                  method: "POST",
                                  url: API_URL,
                                  headers: {
                                      "Content-Type": "application/json"
                                  },
                                  data: JSON.stringify(payload),
                                  onload: function(response) {
                                      setLoading(false);
                                      if (response.status >= 200 && response.status < 300) {
                                          try {
                                              const data = JSON.parse(response.responseText);
                                              const reply = data.candidates[0].content.parts[0].text;
                                              chatHistory.push({ role: 'model', parts: [{ text: reply }] });
                                              addMessageToChat('model', reply);
                                          } catch (e) {
                                              addMessageToChat('model', 'שגיאה בפענוח התשובה מג\'מיני.');
                                              console.error('Parsing error:', e, response.responseText);
                                          }
                                      } else {
                                          const errorMsg = `שגיאת API: ${response.status} - ${response.statusText}. ייתכן ששם המודל שגוי או לא זמין.`;
                                          addMessageToChat('model', errorMsg);
                                          console.error('API Error:', response.responseText);
                                      }
                                  },
                                  onerror: function(error) {
                                      setLoading(false);
                                      addMessageToChat('model', 'שגיאת רשת בחיבור לג\'מיני.');
                                      console.error('Network error:', error);
                                  }
                              });
                          }
                          
                          // --- פונקציות עזר ---
                          
                          function fetchImageAsBase64(url) {
                              return new Promise((resolve, reject) => {
                                  GM_xmlhttpRequest({
                                      method: "GET",
                                      url: url,
                                      responseType: 'blob',
                                      onload: function(response) {
                                          if (response.status === 200) {
                                              const reader = new FileReader();
                                              reader.onloadend = () => resolve(reader.result);
                                              reader.onerror = reject;
                                              reader.readAsDataURL(response.response);
                                          } else {
                                              reject(new Error(`Failed to fetch image: ${response.status}`));
                                          }
                                      },
                                      onerror: (err) => reject(err)
                                  });
                              });
                          }
                          
                          // --- ניהול חלונית המודאל ---
                          
                          function openModal() {
                              modal.style.display = 'flex';
                              inputField.focus();
                          }
                          
                          function closeModal() {
                              modal.style.display = 'none';
                              currentContext = null;
                          }
                          
                          function clearChat() {
                              chatContent.innerHTML = '';
                          }
                          
                          function setLoading(isLoading) {
                              loadingIndicator.style.display = isLoading ? 'block' : 'none';
                              inputField.disabled = isLoading;
                              sendBtn.disabled = isLoading;
                              if (!isLoading) inputField.focus();
                              chatContent.scrollTop = chatContent.scrollHeight;
                          }
                          
                          function addMessageToChat(role, content) {
                              const msgDiv = document.createElement('div');
                          
                              if (role === 'context') {
                                  msgDiv.className = 'gemini-context-preview';
                                  if (content.type === 'text') {
                                      msgDiv.textContent = `נבחר: "${content.data.substring(0, 50)}${content.data.length > 50 ? '...' : ''}"`;
                                  } else {
                                      msgDiv.innerHTML = `נבחרה תמונה: <br><img src="${content.url}" style="max-height:50px;">`;
                                  }
                              } else {
                                  msgDiv.className = `gemini-message gemini-${role}-msg`;
                                  msgDiv.innerHTML = content.replace(/\n/g, '<br>');
                              }
                          
                              chatContent.appendChild(msgDiv);
                              chatContent.scrollTop = chatContent.scrollHeight;
                          }
                          
                          // אתחול ראשוני
                          createUI();
                          

                          })();

                          S תגובה 1 תגובה אחרונה
                          0
                          • א אהרן

                            @מוח-קודח כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                            @יוסי-רחמים שגיאת 418
                            גם במפתח אישי
                            אזלו הסיכויים למנוטפרים?

                            עד ש@יוסי-רחמים יתאים את התוסף שלו למנוטפרים, הכנתי משהו זמני, שצריך להוסיף לתוסף tampermonkey, בלי אחריות, ולא ישבתי לדייק אותו, במיוחד שאפילו לא קראתי מה כתוב בו, סמכתי על בינה וראיתי שעובד. רק לשימוש לבינתיים, חובה להוסיף מפתח API של גוגל היכן שכתוב [לתמונות לא הצלחתי להפעיל, כנראה צריך תיקון קל]:

                            // ==UserScript==
                            // @name Gemini Universal Explainer (Text & Images) - Lite Model
                            // @namespace http://tampermonkey.net/
                            // @version 1.4
                            // @description מסביר טקסט מסומן או תמונות (Alt+Click) בכל אתר באמצעות Gemini API, כולל צ'אט המשך.
                            // @author You
                            // @match :///*
                            // @grant GM_xmlhttpRequest
                            // @grant GM_addStyle
                            // @connect generativelanguage.googleapis.com
                            // @connect *
                            // ==/UserScript==

                            (function() {
                            'use strict';

                            // ==========================================
                            // הגדרות משתמש - חובה למלא
                            // ==========================================
                            const GEMINI_API_KEY = 'כאן להוסיף את המפתח האישי בין הגרשיים';
                            // ==========================================
                            
                            const MODEL_NAME = 'gemini-2.5-flash-lite';
                            const API_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL_NAME}:generateContent?key=${GEMINI_API_KEY}`;
                            
                            let chatHistory = [];
                            let currentContext = null; // שומר את הטקסט או נתוני התמונה שנבחרו
                            let triggerButton, modal, chatContent, inputField, sendBtn, closeBtn, loadingIndicator;
                            
                            // --- הוספת סגנונות CSS (עיצוב) ---
                            GM_addStyle(`
                                #gemini-trigger-btn {
                                    position: absolute;
                                    z-index: 99999;
                                    background: #4285F4; /* Google Blue */
                                    color: white;
                                    border: none;
                                    border-radius: 50%;
                                    width: 32px;
                                    height: 32px;
                                    cursor: pointer;
                                    display: none;
                                    box-shadow: 0 2px 5px rgba(0,0,0,0.3);
                                    font-size: 16px;
                                    align-items: center;
                                    justify-content: center;
                                    transition: transform 0.2s;
                                }
                                #gemini-trigger-btn:hover { transform: scale(1.1); }
                            
                                #gemini-modal-overlay {
                                    position: fixed; top: 0; left: 0; width: 100%; height: 100%;
                                    background: rgba(0,0,0,0.5); z-index: 100000; display: none;
                                    justify-content: center; align-items: center;
                                }
                            
                                #gemini-modal {
                                    background: white; width: 500px; max-width: 90%; height: 600px;
                                    border-radius: 12px; display: flex; flex-direction: column;
                                    box-shadow: 0 10px 25px rgba(0,0,0,0.5); overflow: hidden;
                                    font-family: sans-serif; direction: rtl;
                                }
                            
                                #gemini-header {
                                    padding: 15px; background: #f1f3f4; border-bottom: 1px solid #ddd;
                                    display: flex; justify-content: space-between; align-items: center;
                                    font-weight: bold; color: #333;
                                }
                            
                                #gemini-close-btn { cursor: pointer; font-size: 20px; color: #666; }
                                #gemini-close-btn:hover { color: #000; }
                            
                                #gemini-chat-content {
                                    flex: 1; padding: 15px; overflow-y: auto; background: #fafafa;
                                    display: flex; flex-direction: column; gap: 10px;
                                }
                            
                                .gemini-message {
                                    padding: 10px 15px; border-radius: 18px; max-width: 80%;
                                    line-height: 1.5; word-wrap: break-word; white-space: pre-wrap;
                                }
                                .gemini-user-msg {
                                    background: #dcf8c6; align-self: flex-start; border-bottom-right-radius: 4px; color: #000;
                                }
                                .gemini-model-msg {
                                    background: #ffffff; border: 1px solid #eee; align-self: flex-end; border-bottom-left-radius: 4px; color: #000;
                                }
                                .gemini-context-preview {
                                    font-size: 0.8em; color: #666; font-style: italic; border-bottom: 1px dashed #ccc; margin-bottom: 5px; padding-bottom: 5px; max-height: 60px; overflow: hidden;
                                }
                                .gemini-context-preview img { max-height: 50px; border-radius: 4px; }
                            
                                #gemini-input-area {
                                    padding: 10px; border-top: 1px solid #ddd; background: white;
                                    display: flex; gap: 10px;
                                }
                            
                                #gemini-input {
                                    flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 20px; outline: none;
                                }
                                #gemini-send-btn {
                                    padding: 0 20px; background: #4285F4; color: white; border: none;
                                    border-radius: 20px; cursor: pointer; font-weight: bold;
                                }
                                #gemini-send-btn:disabled { background: #ccc; cursor: not-allowed; }
                            
                                #gemini-loading {
                                    display: none; align-self: center; margin: 10px; color: #666; font-style: italic;
                                }
                                /* Dark mode support for websites that have it */
                                @media (prefers-color-scheme: dark) {
                                    #gemini-modal { background: #2d2d2d; color: #e0e0e0; }
                                    #gemini-header { background: #1e1e1e; border-bottom-color: #444; color: #fff; }
                                    #gemini-chat-content { background: #252525; }
                                    #gemini-input-area { background: #1e1e1e; border-top-color: #444; }
                                    #gemini-input { background: #333; color: white; border-color: #555; }
                                    .gemini-model-msg { background: #333; border-color: #444; color: #e0e0e0; }
                                    .gemini-user-msg { background: #054740; color: #e0e0e0; }
                                    #gemini-close-btn { color: #aaa; }
                                }
                            `);
                            
                            // --- יצירת רכיבי הממשק (UI) ---
                            function createUI() {
                                // כפתור טריגר (נורה)
                                triggerButton = document.createElement('button');
                                triggerButton.id = 'gemini-trigger-btn';
                                triggerButton.innerHTML = '💡';
                                triggerButton.title = 'קבל הסבר מג\'מיני';
                                document.body.appendChild(triggerButton);
                            
                                // חלונית מודאלית
                                const overlay = document.createElement('div');
                                overlay.id = 'gemini-modal-overlay';
                                overlay.innerHTML = `
                                    <div id="gemini-modal">
                                        <div id="gemini-header">
                                            <span>Gemini Explainer</span>
                                            <span id="gemini-close-btn">&times;</span>
                                        </div>
                                        <div id="gemini-chat-content"></div>
                                        <div id="gemini-loading">חושב...</div>
                                        <div id="gemini-input-area">
                                            <input type="text" id="gemini-input" placeholder="שאל שאלת המשך..." disabled>
                                            <button id="gemini-send-btn" disabled>שלח</button>
                                        </div>
                                    </div>
                                `;
                                document.body.appendChild(overlay);
                            
                                // שמירת הפניות לאלמנטים
                                modal = overlay;
                                chatContent = overlay.querySelector('#gemini-chat-content');
                                inputField = overlay.querySelector('#gemini-input');
                                sendBtn = overlay.querySelector('#gemini-send-btn');
                                closeBtn = overlay.querySelector('#gemini-close-btn');
                                loadingIndicator = overlay.querySelector('#gemini-loading');
                            
                                // הגדרת מאזינים לאירועים בממשק
                                triggerButton.addEventListener('click', startExplanation);
                                closeBtn.addEventListener('click', closeModal);
                                modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); });
                                sendBtn.addEventListener('click', sendFollowUp);
                                inputField.addEventListener('keypress', (e) => { if (e.key === 'Enter') sendFollowUp(); });
                            }
                            
                            // --- לוגיקת אינטראקציה באתר (בחירה/קליק) ---
                            
                            // טיפול בבחירת טקסט
                            document.addEventListener('mouseup', (e) => {
                                // התעלם אם הקליק בתוך המודאל או על הכפתור
                                if (modal.style.display === 'flex' || e.target === triggerButton) return;
                            
                                const selection = window.getSelection();
                                const selectedText = selection.toString().trim();
                            
                                if (selectedText.length > 0) {
                                    currentContext = { type: 'text', data: selectedText };
                                    showTriggerButton(e.pageX, e.pageY);
                                } else {
                                    // אם זו לא תמונה, הסתר כפתור
                                    setTimeout(() => {
                                        if(triggerButton.style.display === 'flex') hideTriggerButton();
                                    }, 200);
                                }
                            });
                            
                            // טיפול בלחיצה על תמונה (Alt + Click כדי לא להפריע לגלישה רגילה)
                            document.addEventListener('click', (e) => {
                                if (e.altKey && e.target.tagName === 'IMG') {
                                    e.preventDefault();
                                    e.stopPropagation();
                                    const imgUrl = e.target.src;
                                    currentContext = { type: 'image', url: imgUrl };
                                    showTriggerButton(e.pageX, e.pageY);
                                }
                            }, true); // Use capture to intercept early
                            
                            function showTriggerButton(x, y) {
                                triggerButton.style.left = `${x + 10}px`;
                                triggerButton.style.top = `${y + 10}px`;
                                triggerButton.style.display = 'flex';
                            }
                            
                            function hideTriggerButton() {
                                triggerButton.style.display = 'none';
                            }
                            
                            // --- לוגיקת הצ'אט וה-API ---
                            
                            async function startExplanation() {
                                if (GEMINI_API_KEY === 'הכנס_את_מפתח_ה-API_שלך_כאן' || !GEMINI_API_KEY) {
                                    alert('נא להגדיר מפתח API של Gemini בקוד הסקריפט.');
                                    return;
                                }
                            
                                hideTriggerButton();
                                openModal();
                                clearChat();
                                setLoading(true);
                            
                                chatHistory = []; // איפוס היסטוריה
                                let initialPromptParts = [];
                            
                                // הצגת ההקשר שנבחר בחלונית
                                addMessageToChat('context', currentContext);
                            
                                if (currentContext.type === 'text') {
                                    const prompt = `הסבר בקצרה בעברית את הטקסט הבא: "${currentContext.data}"`;
                                    initialPromptParts = [{ text: prompt }];
                                    chatHistory.push({ role: 'user', parts: initialPromptParts });
                                    await callGeminiAPI(chatHistory);
                                }
                                else if (currentContext.type === 'image') {
                                    addMessageToChat('model', 'מוריד ומעבד את התמונה...');
                                    try {
                                        const base64Data = await fetchImageAsBase64(currentContext.url);
                                        // הסרת הכותרת של ה-base64 אם קיימת (data:image/png;base64,)
                                        const base64String = base64Data.split(',')[1];
                                        const mimeType = base64Data.split(';')[0].split(':')[1];
                            
                                        const prompt = "הסבר בקצרה בעברית מה רואים בתמונה הזו.";
                                        initialPromptParts = [
                                            { text: prompt },
                                            { inline_data: { mime_type: mimeType, data: base64String } }
                                        ];
                                        chatHistory.push({ role: 'user', parts: initialPromptParts });
                                        // מחיקת הודעת ה"מעבד" לפני שליחת הבקשה
                                        chatContent.lastChild.remove();
                                        await callGeminiAPI(chatHistory);
                                    } catch (error) {
                                        setLoading(false);
                                        addMessageToChat('model', 'שגיאה בטעינת התמונה: ' + error.message);
                                        console.error(error);
                                    }
                                }
                            }
                            
                            async function sendFollowUp() {
                                const text = inputField.value.trim();
                                if (!text) return;
                            
                                inputField.value = '';
                                addMessageToChat('user', text);
                                setLoading(true);
                            
                                chatHistory.push({ role: 'user', parts: [{ text: text }] });
                                await callGeminiAPI(chatHistory);
                            }
                            
                            async function callGeminiAPI(contents) {
                                const payload = {
                                    contents: contents,
                                    generationConfig: {
                                        temperature: 0.7,
                                        maxOutputTokens: 1024,
                                    }
                                };
                            
                                GM_xmlhttpRequest({
                                    method: "POST",
                                    url: API_URL,
                                    headers: {
                                        "Content-Type": "application/json"
                                    },
                                    data: JSON.stringify(payload),
                                    onload: function(response) {
                                        setLoading(false);
                                        if (response.status >= 200 && response.status < 300) {
                                            try {
                                                const data = JSON.parse(response.responseText);
                                                const reply = data.candidates[0].content.parts[0].text;
                                                chatHistory.push({ role: 'model', parts: [{ text: reply }] });
                                                addMessageToChat('model', reply);
                                            } catch (e) {
                                                addMessageToChat('model', 'שגיאה בפענוח התשובה מג\'מיני.');
                                                console.error('Parsing error:', e, response.responseText);
                                            }
                                        } else {
                                            const errorMsg = `שגיאת API: ${response.status} - ${response.statusText}. ייתכן ששם המודל שגוי או לא זמין.`;
                                            addMessageToChat('model', errorMsg);
                                            console.error('API Error:', response.responseText);
                                        }
                                    },
                                    onerror: function(error) {
                                        setLoading(false);
                                        addMessageToChat('model', 'שגיאת רשת בחיבור לג\'מיני.');
                                        console.error('Network error:', error);
                                    }
                                });
                            }
                            
                            // --- פונקציות עזר ---
                            
                            function fetchImageAsBase64(url) {
                                return new Promise((resolve, reject) => {
                                    GM_xmlhttpRequest({
                                        method: "GET",
                                        url: url,
                                        responseType: 'blob',
                                        onload: function(response) {
                                            if (response.status === 200) {
                                                const reader = new FileReader();
                                                reader.onloadend = () => resolve(reader.result);
                                                reader.onerror = reject;
                                                reader.readAsDataURL(response.response);
                                            } else {
                                                reject(new Error(`Failed to fetch image: ${response.status}`));
                                            }
                                        },
                                        onerror: (err) => reject(err)
                                    });
                                });
                            }
                            
                            // --- ניהול חלונית המודאל ---
                            
                            function openModal() {
                                modal.style.display = 'flex';
                                inputField.focus();
                            }
                            
                            function closeModal() {
                                modal.style.display = 'none';
                                currentContext = null;
                            }
                            
                            function clearChat() {
                                chatContent.innerHTML = '';
                            }
                            
                            function setLoading(isLoading) {
                                loadingIndicator.style.display = isLoading ? 'block' : 'none';
                                inputField.disabled = isLoading;
                                sendBtn.disabled = isLoading;
                                if (!isLoading) inputField.focus();
                                chatContent.scrollTop = chatContent.scrollHeight;
                            }
                            
                            function addMessageToChat(role, content) {
                                const msgDiv = document.createElement('div');
                            
                                if (role === 'context') {
                                    msgDiv.className = 'gemini-context-preview';
                                    if (content.type === 'text') {
                                        msgDiv.textContent = `נבחר: "${content.data.substring(0, 50)}${content.data.length > 50 ? '...' : ''}"`;
                                    } else {
                                        msgDiv.innerHTML = `נבחרה תמונה: <br><img src="${content.url}" style="max-height:50px;">`;
                                    }
                                } else {
                                    msgDiv.className = `gemini-message gemini-${role}-msg`;
                                    msgDiv.innerHTML = content.replace(/\n/g, '<br>');
                                }
                            
                                chatContent.appendChild(msgDiv);
                                chatContent.scrollTop = chatContent.scrollHeight;
                            }
                            
                            // אתחול ראשוני
                            createUI();
                            

                            })();

                            S מנותק
                            S מנותק
                            smct
                            כתב נערך לאחרונה על ידי
                            #504

                            @אהרן
                            לא הבנתי את מה צריך להעתיק?
                            הקוד לא כולו בתוך הבלוק של הקוד

                            א תגובה 1 תגובה אחרונה
                            0
                            • S smct

                              @אהרן
                              לא הבנתי את מה צריך להעתיק?
                              הקוד לא כולו בתוך הבלוק של הקוד

                              א מחובר
                              א מחובר
                              אהרן
                              כתב נערך לאחרונה על ידי
                              #505

                              @smct כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                              @אהרן
                              לא הבנתי את מה צריך להעתיק?
                              הקוד לא כולו בתוך הבלוק של הקוד

                              לתצוגה פתרונים, צריך להכניס הכל [אולי זה לא נצרך אבל ודאי לא מזיק, אצלי בtampermonkey זה נמצא בסקריפט עצמו]

                              S תגובה 1 תגובה אחרונה
                              0
                              • א אהרן

                                @smct כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                                @אהרן
                                לא הבנתי את מה צריך להעתיק?
                                הקוד לא כולו בתוך הבלוק של הקוד

                                לתצוגה פתרונים, צריך להכניס הכל [אולי זה לא נצרך אבל ודאי לא מזיק, אצלי בtampermonkey זה נמצא בסקריפט עצמו]

                                S מנותק
                                S מנותק
                                smct
                                כתב נערך לאחרונה על ידי
                                #506

                                @אהרן
                                ומה זה אמור לעשות?

                                א תגובה 1 תגובה אחרונה
                                0
                                • S smct

                                  @אהרן
                                  ומה זה אמור לעשות?

                                  א מחובר
                                  א מחובר
                                  אהרן
                                  כתב נערך לאחרונה על ידי
                                  #507

                                  @smct כתב בהמלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨:

                                  @אהרן
                                  ומה זה אמור לעשות?

                                  c4d53f7a-11ba-4653-94e4-20c2ed213ae6-image.png
                                  ec2df547-9f0c-4757-9cc4-0423a254405e-image.png

                                  תגובה 1 תגובה אחרונה
                                  0

                                  • התחברות

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

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