דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • 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

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

לאצי

@לאצי
אודות
פוסטים
959
נושאים
92
שיתופים
0
קבוצות
0
עוקבים
8
עוקב אחרי
10

פוסטים

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

  • הצעת ייעול | מיזם התנדבות בפיתוח - מה אתם אומרים?
    לאציל לאצי

    בעקבות כך שלאחרונה ראיתי בפורום יותר ויותר את התופעה המבורכת בה מפתחים מציעים לבנות תוכנה/אפליקציה כלשהי לתועלת המשתמשים חשבתי לעצמי כי יהיה יותר טוב אם תהיה לכך קטגוריה מיוחדת בפורום בשם 'הצעות פיתוח' (או כל שם אחר שתבחרו...) בה יוכלו משתמשי הפורום להציע רעיונות לפיתוח דברים שימושיים ונחוצים, וכן המפתחים יוכלו להציג שם את פרי עבודתם שביקשו המשתמשים.
    וכך יצאו כל הצדדים מורווחים: המתכנתים והמפתחים שלפעמים מחפשים רעיונות מה לפתח וכן הסטאז'יסטים שמעוניינים לפתח משהו ימצאו את מבוקשם ורעיונות מספקים ביתר קלות, וכן משתמשי הפורום שזקוקים לעזרה בנושא ייענו על הצד הטוב ביותר.
    אז מיזם פיתוח בהתנדבות יוצא לדרך? (אבל מפתחים יקרים, אל תרגישו פרייארים... 😋 )
    אשמח לשמוע את דעתכם וכמובן את דעת מרנן מנהלי הפורום החשובים שליט"א.

    באגים/הצעות ייעול

  • הצעת ייעול | קמפיין מתמחים טופ לשרת חזק
    לאציל לאצי

    בהמשך לנושא הזה ולפוסטים הבאים;

    לרגל המצב כיום ששרת המערכת קורס בתדירות גבוהה מפני שאין ביכולתו להחזיק כ"כ הרבה משתמשים בו זמנית, מובן מאליו שנדרש (בדחיפות!) להחליף לשרת חזק יותר שיעמוד בעומס שנוצר (ב"ה!) אי לכך, במקום שכל אחד יאמר לעצמו 'מה כבר תועיל התרומה הקטנה שלי...' על הנהלת הפורום לצאת בקמפיין נרחב של גיוס כספים למען הפורום. ומלבד ההרגשה שתתן לתורמים ש 'הכסף שלי לא נבלע אי שם' זה גם יעלה את גודל והיקף התרומות, כי כל אחד רואה 'הנה, עוד סכום כזה ומגיעים לסכום הנדרש לשרת חזק יותר.' וזה כמובן מדרבן לתרום הרבה יותר.
    בברכת והריקותי לכם ברכה עד בלי די. (כדי שגם תוכלו לתרום בלי די...)

    קרדיט ל @סוף-הרחוב על הרעיון כאן, ואל תשכחו 'ללייק' גם אותו.

    באגים/הצעות ייעול

  • שיתוף | אתר שבניתי ב WIX - רינגטונים להורדה - חסידישע קלאנגען
    לאציל לאצי

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

    קידום אתרים

  • להורדה | Noti - תוסף להתראות חכמות בזמן אמת מכל סוגי הפורומים
    לאציל לאצי

    בהשראת התוסף הנפלא של @אביי ובשילוב התוסף המשלים של @א-ל-0
    בניתי (כלומר AI) תוסף מנצח המשלב את כל המעלות מכולם יחד.
    הכירו את Noti - תוסף למעקב אחר התראות מכל סוגי הפורומים - הן מבוססי NodeBB (כדוגמת מתמחים, רכבים זל"ז ועוד) והן XenForo (כדוגמת פרוג מורשת מרן ועוד).
    ויקרא שמו בישראל Noti אשר הוא כינוי חיבה ל Notification.

    להורדה מהחנות
    אתר הבית

    תכונות מרכזיות
    התראות מיידיות על תוכן חדש בפורומים
    תמיכה בפורומים מבוססי NodeBB ו-XenForo
    אנימציה ייחודית באייקון הדפדפן עם כל התראה
    אפשרות להפעלת צליל התראה
    הוספה עצמאית של פורומים נוספים
    שליטה בתדירות הבדיקות האוטומטית
    ממשק בעברית, קל לשימוש
    אפשרות השתקה זמנית להתראות
    צריכת משאבים נמוכה

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

    יתרונות
    עדכונים אוטומטיים גם בהפעלת הדפדפן
    התראות חכמות עם תצוגה ויזואלית ברורה
    פרטיות מלאה: לא נדרשת הרשמה, התוסף פועל מקומית

    שימוש קל
    התקן את Noti
    הגדר את ההעדפות שלך
    קבל התראות חדשות בזמן אמת
    התוסף המושלם לחובבי פורומים שרוצים להישאר מעודכנים תמיד!

    אשמח לשמוע הארות והערות וביקורת בונה.

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

  • המלצה | חדש בפורום! נושאים שנצפו לאחרונה!
    לאציל לאצי

    בס"ד ולאחר מאמצים משותפים שלי ושל AI... עלה בידינו לכתוב סקריפט לטמפרמונקי להטמעת כפתור 'נצפו לאחרונה' בפורום, כך שניתן יהיה לראות את כל הנושאים שביקרתם בהם ברחבי הפורום.
    סקירה כללית:

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

    // ==UserScript==
    // @name         Mitmachim Top - נצפו לאחרונה (v2.0.4 - Syntax Check)
    // @namespace    http://tampermonkey.net/
    // @version      2.0.4
    // @description  בדיקה מחודשת של תחביר ותפיסת שגיאות מוקדמות.
    // @author       לאצי&AI
    // @match        https://mitmachim.top/*
    // @icon         https://mitmachim.top/assets/uploads/files/1744298283200-font_awesome_5_solid_history.svg.png
    // @grant        GM_addStyle
    // @grant        GM_getValue
    // @grant        GM_setValue
    // @grant        GM_deleteValue
    // @run-at       document-idle
    // ==/UserScript==
     
    (function() {
        'use strict';
     
        function ensureDependencies(callback) {
            let checks = 0;
            const MAX_CHECKS = 120; 
            const CHECK_INTERVAL = 100; 
     
            console.log("[LastViewed] Starting dependency check...");
     
            const interval = setInterval(function() {
                const jQueryReady = typeof $ === 'function'; // More robust check for jQuery
                const $navList = jQueryReady ? $('nav[component="sidebar/left"] ul#main-nav') : null;
                const navListReady = $navList && $navList.length > 0;
     
                if (navListReady) { 
                    clearInterval(interval);
                    console.log(`[LastViewed] Dependencies ($) AND Nav List found after ${checks + 1} checks.`);
                    try {
                        callback(); // Run the main script logic
                    } catch(e) {
                        console.error("[LastViewed] Error executing initialize callback:", e);
                    }
                } else {
                    checks++;
                    if (checks >= MAX_CHECKS) {
                        clearInterval(interval);
                        console.error(`[LastViewed] Dependency check FAILED after ${MAX_CHECKS} checks (Timeout).`);
                        // Provide detailed status on failure
                        console.error(`[LastViewed] Final Status: jQuery=${typeof $ === 'function'}, NavList Element Found=${jQueryReady ? $('nav[component="sidebar/left"] ul#main-nav').length : 'N/A (jQuery missing)'}`);
                    }
                }
            }, CHECK_INTERVAL);
        }
     
        const STORAGE_KEY = 'mitmachim_last_viewed_topics';
        const MAX_HISTORY_ITEMS = 20;
        const TOPIC_URL_PREFIX = 'https://mitmachim.top/topic/';
        const DEBOUNCE_DELAY = 300;
     
        const styles = `
            /* Popup Styles */
            #last-viewed-popup { display: flex; flex-direction: column; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 90%; max-width: 550px; max-height: 80vh; overflow-y: auto; background-color: var(--bs-body-bg, #ffffff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, #dee2e6); box-shadow: 0 5px 15px rgba(0,0,0,0.2); padding: 20px; z-index: 1060; direction: rtl; font-family: "Assistant", sans-serif; font-size: 14px; border-radius: var(--bs-border-radius, 0.375rem); }
            #last-viewed-popup h2 { flex-shrink: 0; margin-top: 0; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid var(--bs-border-color-translucent, rgba(0,0,0,0.175)); color: var(--bs-heading-color, inherit); text-align: right; font-size: 1.25rem; font-weight: 600; }
            #last-viewed-popup ul#last-viewed-list { flex-grow: 1; list-style: none; padding: 0; margin: 0; overflow-y: auto; }
            #last-viewed-popup li { margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px dashed var(--bs-border-color-translucent, rgba(0,0,0,0.1)); text-align: right; line-height: 1.5; }
            #last-viewed-popup li:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
            #last-viewed-popup a { text-decoration: none; color: var(--bs-link-color, #0d6efd); font-weight: 600; }
            #last-viewed-popup a:hover { text-decoration: underline; color: var(--bs-link-hover-color, #0a58ca); }
            #last-viewed-popup .popup-controls { flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; margin-top: 15px; padding-top: 10px; border-top: 1px solid var(--bs-border-color-translucent, rgba(0,0,0,0.175)); }
            #last-viewed-popup .close-popup-btn, #last-viewed-popup #clear-last-viewed { padding: 0.375rem 0.75rem; font-size: 0.9rem; border-radius: var(--bs-border-radius-sm, 0.25rem); cursor: pointer; text-align: center; vertical-align: middle; user-select: none; border: 1px solid transparent; transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; }
            #last-viewed-popup .close-popup-btn { color: var(--bs-secondary-color, #6c757d); background-color: var(--bs-secondary-bg, #e9ecef); border-color: var(--bs-secondary-border, #dee2e6); }
            #last-viewed-popup .close-popup-btn:hover { background-color: var(--bs-secondary-active-bg, #ced4da); }
            #last-viewed-popup #clear-last-viewed { color: var(--bs-danger-color, #dc3545); background-color: var(--bs-danger-bg, #f8d7da); border-color: var(--bs-danger-border, #f5c2c7); }
            #last-viewed-popup #clear-last-viewed:hover { background-color: var(--bs-danger-active-bg, #f1aeb5); }
            #last-viewed-popup::-webkit-scrollbar { width: 7px; height: 7px; background-color: #e6f9ff; border-radius: 4px; }
            #last-viewed-popup::-webkit-scrollbar-thumb { background: #99ceff; border-radius: 100px; }
            #last-viewed-popup::-webkit-scrollbar:hover { width: 12px; }
            /* Search box styles */
            #last-viewed-search-container { flex-shrink: 0; margin-bottom: 15px; }
            #last-viewed-search { width: 100%; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: var(--bs-body-color); background-color: var(--bs-body-bg); background-clip: padding-box; border: 1px solid var(--bs-border-color); appearance: none; border-radius: var(--bs-border-radius); transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; }
            #last-viewed-search:focus { border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13,110,253,.25); }
            #last-viewed-search::placeholder { color: #6c757d; opacity: 1; }
            #last-viewed-no-results { text-align: center; color: #6c757d; margin-top: 1rem; display: none; }
            /* Dynamic Tooltip Styles */
            #last-viewed-dynamic-tooltip{position:fixed;background-color:#212529;color:#fff;padding:2px 10px;border-radius:6px;font-size:16px;font-weight:150;font-family:"Assistant",sans-serif;white-space:nowrap;z-index:1100;pointer-events:none;--arrow-size:6px;}
            #last-viewed-dynamic-tooltip::before{content:"";position:absolute;top:50%;left:100%;margin-top:calc(-1*var(--arrow-size));border-width:var(--arrow-size);border-style:solid;border-color:transparent transparent transparent #212529;}
        `;
        GM_addStyle(styles);
     
        function getLastViewed() { const data = GM_getValue(STORAGE_KEY, '[]'); try { return JSON.parse(data); } catch (e) { console.error("[LastViewed] Error parsing stored data:", e); return []; } }
        function setLastViewed(items) { const limitedItems = items.slice(-MAX_HISTORY_ITEMS); GM_setValue(STORAGE_KEY, JSON.stringify(limitedItems)); }
        function addTopicToHistory(topicTitle, topicUrl) {
            if (!topicTitle || !topicUrl) return;
            topicTitle = topicTitle.trim();
            const normalizedUrl = topicUrl.split('?')[0].split('#')[0];
            let items = getLastViewed();
            const existingIndex = items.findIndex(item => item && item.url === normalizedUrl && item.title === topicTitle);
            if (existingIndex !== -1) {
                items[existingIndex].timestamp = Date.now();
            } else {
                items = items.filter(item => item && item.url !== normalizedUrl || item.title !== topicTitle);
                items.push({ title: topicTitle, url: normalizedUrl, timestamp: Date.now() });
            }
            setLastViewed(items);
        }
        function getTopicDetailsFromPage() {
            const currentUrl = window.location.href;
            if (!currentUrl.startsWith(TOPIC_URL_PREFIX)) {
                return null;
            }
            let title = '';
            let $titleSpan = $('h1[component="post/header"] span[component="topic/title"]');
            if ($titleSpan.length > 0) {
                let $tempSpan = $titleSpan.clone();
                $tempSpan.find('span[style*="font-size: 10px"]').remove();
                title = $tempSpan.text().replace(/\s+/g, ' ').trim();
            }
            if (!title) {
                title = document.title.replace(/ \| מתמחים טופ.*/, '').trim();
            }
            const normalizedUrl = currentUrl.split('?')[0].split('#')[0];
            return { title: title, url: normalizedUrl };
        }
        let debounceTimer; function debounce(func, delay) { return function(...args) { clearTimeout(debounceTimer); debounceTimer = setTimeout(() => { if (typeof func === 'function') { func.apply(this, args); } else { console.error("[LastViewed] Debounced function is not valid at time of execution."); } }, delay); }; }
        const saveCurrentTopicDebounced = debounce(function() { const currentTopic = getTopicDetailsFromPage(); if (currentTopic && currentTopic.title) { addTopicToHistory(currentTopic.title, currentTopic.url); } }, DEBOUNCE_DELAY);
        function closePopupAndRemoveListener() { const $popup = $('#last-viewed-popup'); if ($popup.length) { $(document).off('click.closeLastViewed'); $popup.remove(); } }
        function addClosePopupListener() { $(document).off('click.closeLastViewed'); $(document).on('click.closeLastViewed', function(event) { if (!$('#last-viewed-popup').length) { $(document).off('click.closeLastViewed'); return; } if (!$(event.target).closest('#last-viewed-popup').length && !$(event.target).closest('#last-viewed-btn-li').length) { closePopupAndRemoveListener(); } }); }
        function filterLastViewedList() { const searchTerm = $('#last-viewed-search').val().toLowerCase().trim(); const $listItems = $('#last-viewed-list li'); let visibleCount = 0; $listItems.each(function() { const $item = $(this); const itemText = $item.find('a').text().toLowerCase(); if (itemText.includes(searchTerm)) { $item.show(); visibleCount++; } else { $item.hide(); } }); if (visibleCount === 0 && $listItems.length > 0) { $('#last-viewed-no-results').show(); } else { $('#last-viewed-no-results').hide(); } }
        function showLastViewedPopup() {
            if ($('#last-viewed-popup').length) return;
            closePopupAndRemoveListener();
            console.log("[LastViewed] Opening popup.");
            let items = getLastViewed();
            const uniqueItems = [];
            const seenTitles = new Set();
     
            for (let i = items.length - 1; i >= 0; i--) {
                const item = items[i];
                if (!seenTitles.has(item.title)) {
                    uniqueItems.push(item);
                    seenTitles.add(item.title);
                }
            }
     
            items = uniqueItems;
     
            const popup = document.createElement('div');
            popup.id = 'last-viewed-popup';
            const searchContainer = document.createElement('div');
            searchContainer.id = 'last-viewed-search-container';
            const searchInput = document.createElement('input');
            searchInput.type = 'search';
            searchInput.id = 'last-viewed-search';
            searchInput.placeholder = 'חיפוש בנצפו לאחרונה...';
            searchInput.className = 'form-control';
            searchContainer.appendChild(searchInput);
            popup.appendChild(searchContainer);
            const title = document.createElement('h2');
            title.textContent = 'שרשורים שנצפו לאחרונה';
            popup.appendChild(title);
            if (items.length === 0) {
                const emptyMsg = document.createElement('p');
                emptyMsg.textContent = 'לא נצפו שרשורים לאחרונה.';
                popup.appendChild(emptyMsg);
            } else {
                const list = document.createElement('ul');
                list.id = 'last-viewed-list';
                for (let i = 0; i < items.length; i++) {
                    const item = items[i];
                    const listItem = document.createElement('li');
                    const link = document.createElement('a');
                    link.href = item.url;
                    link.textContent = item.title || 'ללא כותרת';
                    link.target = '_blank';
                    listItem.appendChild(link);
                    list.appendChild(listItem);
                }
                popup.appendChild(list);
                const noResultsMsg = document.createElement('p');
                noResultsMsg.id = 'last-viewed-no-results';
                noResultsMsg.textContent = 'לא נמצאו שרשורים תואמים.';
                popup.appendChild(noResultsMsg);
            }
            const controlsDiv = document.createElement('div');
            controlsDiv.className = 'popup-controls';
            const clearButton = document.createElement('button');
            clearButton.textContent = 'נקה היסטוריה';
            clearButton.id = 'clear-last-viewed';
            controlsDiv.appendChild(clearButton);
            const closeButton = document.createElement('button');
            closeButton.textContent = 'סגור';
            closeButton.className = 'close-popup-btn';
            controlsDiv.appendChild(closeButton);
            popup.appendChild(controlsDiv);
            document.body.appendChild(popup);
            $('#clear-last-viewed').on('click', function(e) { e.stopPropagation(); if (confirm('האם אתה בטוח שברצונך למחוק את היסטוריית הצפייה?')) { GM_deleteValue(STORAGE_KEY); closePopupAndRemoveListener(); console.log("[LastViewed] History cleared."); } });
            $('.close-popup-btn').on('click', function(e) { e.stopPropagation(); closePopupAndRemoveListener(); });
            $('#last-viewed-search').on('input', filterLastViewedList);
            setTimeout(addClosePopupListener, 50);
            $('#last-viewed-search').trigger('focus');
        }
        let currentTooltip = null; const TOOLTIP_TEXT = "נצפו לאחרונה"; const TOOLTIP_GAP = -88.5; function showDynamicTooltip(targetElement) {
            const sidebar = document.querySelector('nav[component="sidebar/left"]');
            if (sidebar && sidebar.classList.contains('open')) {
                return;
            }
            removeDynamicTooltip(); currentTooltip = document.createElement('div'); currentTooltip.id = 'last-viewed-dynamic-tooltip'; currentTooltip.textContent = TOOLTIP_TEXT; document.body.appendChild(currentTooltip); const rect = targetElement.getBoundingClientRect(); const tooltipRect = currentTooltip.getBoundingClientRect(); let top = rect.top + (rect.height / 2) - (tooltipRect.height / 2); let left = rect.left + rect.width + TOOLTIP_GAP - 58; if (top < 5) top = 5; if (top + tooltipRect.height > window.innerHeight - 5) top = window.innerHeight - tooltipRect.height - 5; if (left + tooltipRect.width > window.innerWidth - 5) left = window.innerWidth - tooltipRect.width - 5; currentTooltip.style.top = `${top}px`; currentTooltip.style.left = `${left}px`; currentTooltip.style.right = 'auto'; } function removeDynamicTooltip() { if (currentTooltip) { currentTooltip.remove(); currentTooltip = null; } }
     
        function createSidebarButton() {
            console.log("[LastViewed] Attempting createSidebarButton execution...");
            if ($('#last-viewed-btn-li').length > 0) { console.log("[LastViewed] Button LI already exists."); return; }
            console.log("[LastViewed] Selecting navList...");
            const $navList = $('nav[component="sidebar/left"] ul#main-nav');
            console.log(`[LastViewed] $navList length: ${$navList.length}`);
            if ($navList.length === 0) { console.error("[LastViewed] FAILED to find $navList."); return; } // Exit if navList not found
            console.log("[LastViewed] Selecting recentPostsItem...");
            const $recentPostsItem = $navList.find('li a[href="/recent"]').closest('li');
            console.log(`[LastViewed] $recentPostsItem length: ${$recentPostsItem.length}`);
            if ($recentPostsItem.length === 0) { console.error("[LastViewed] FAILED to find $recentPostsItem."); return; } // Exit if recent post item not found
     
            console.log("[LastViewed] Creating $newItem element...");
            const $newItem = $(`
                <li class="nav-item mx-2" id="last-viewed-btn-li" data-bs-original-title="נצפו לאחרונה">
                    <a class="nav-link navigation-link d-flex gap-2 justify-content-between align-items-center" href="#" role="button" id="last-viewed-btn" aria-label="נצפו לאחרונה">
                        <span class="d-flex gap-2 align-items-center text-nowrap truncate-open">
                            <span class="position-relative">
                                <i class="fa fa-fw fa-history" data-content=""></i>
                                <span component="navigation/count" class="visible-closed position-absolute top-0 start-100 translate-middle badge rounded-1 bg-primary hidden"></span>
                            </span>
                            <span class="nav-text small visible-open fw-semibold text-truncate">נצפו לאחרונה</span>
                        </span>
                        <span component="navigation/count" class="visible-open badge rounded-1 bg-primary hidden"></span>
                    </a>
                </li>
            `);
     
            console.log("[LastViewed] Attaching listeners to $newItem...");
            $newItem.find('a#last-viewed-btn').on('click', function(event) { event.preventDefault(); event.stopPropagation(); removeDynamicTooltip(); showLastViewedPopup(); });
            $newItem.on('mouseenter', function(event) { showDynamicTooltip(event.currentTarget); }).on('mouseleave', function() { removeDynamicTooltip(); });
     
            try {
                console.log("[LastViewed] Attempting insertBefore...");
                $newItem.insertBefore($('li[data-bs-original-title="נושאים שלא נפתרו"]'));
                setTimeout(() => {
                    if ($('#last-viewed-btn-li').length > 0) {
                        console.log("[LastViewed] Button inserted successfully (verified).");
                    } else {
                        console.error("[LastViewed] Button insertion failed silently (not found after insertBefore).");
                    }
                }, 50); 
            } catch (e) {
                console.error("[LastViewed] Error during button insertion:", e);
            }
        }
        let observer = null;
        function setupMutationObserver() {
            const targetNode = document.getElementById('content'); if (!targetNode) { console.error("[LastViewed] Cannot find target node '#content'. Retrying..."); setTimeout(setupMutationObserver, 1000); return; } const config = { childList: true, subtree: true }; const callback = function(mutationsList, observer) { let titleSpanFound = false; for(const mutation of mutationsList) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { if ($(node).find('span[component="topic/title"]').length > 0 || $(node).is('span[component="topic/title"]')) { titleSpanFound = true; } } }); } if (titleSpanFound) break; } if (titleSpanFound) { saveCurrentTopicDebounced(); } }; observer = new MutationObserver(callback); observer.observe(targetNode, config); const parentObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.removedNodes.forEach(removedNode => { if (removedNode.id === 'content') { console.warn("[LastViewed] Target node #content was removed. Re-initializing observer."); if(observer) observer.disconnect(); setTimeout(setupMutationObserver, 50); } }); }); }); if (targetNode.parentNode) { parentObserver.observe(targetNode.parentNode, { childList: true }); }
        }
     
        function initialize() {
            console.log("[LastViewed] Initializing script v2.0.1 (Increased Timeout)...");
            if (typeof createSidebarButton !== 'function' || typeof saveCurrentTopicDebounced !== 'function' || typeof setupMutationObserver !== 'function') {
                console.error("[LastViewed] CRITICAL: One or more core functions not defined!"); return;
            }
            console.log("[LastViewed] Calling createSidebarButton...");
            createSidebarButton();
            console.log("[LastViewed] Calling saveCurrentTopicDebounced (initial)...");
            saveCurrentTopicDebounced();
            console.log("[LastViewed] Calling setupMutationObserver...");
            setupMutationObserver();
            console.log("[LastViewed] Initialization complete.");
        }
     
        ensureDependencies(initialize);
     
    })();
    

    מדריך לשימוש בטמפרמונקי

    בהנאה!

    וכאן המקום להודות ל @עדלאידע שבהשראת הסקריפט שלו יצרתי את הסקריפט הזה.
    עריכה: ותודה על השיפורים הנפלאים בסקריפט!

    לכל אלו שהמתינו וייחלו לדבר הזה, הנה זה הגיע! @ארץ-הצבי @חטח @יוסף-אלחנן

    נ.ב. אשמח אם מישהו שמבין יוכל לפתח את זה ולפתוח pull request בgithub ל nodebb.
    (באותו רעיון שכתבתי כאן...)

    אופן השימוש בפורום

  • הצעת ייעול | אתר מוזיקה חרדי למהדרין - אשמח לעזרתכם
    לאציל לאצי

    @היכל-הנגינה וואו! אתר מדהים!
    קודם כל, יש להגדיר שהאתר הוא בעברית ולא באנגלית, כי אם כן, גוגל מתרגם אותו לעברית, והתוצאה היא - מקלת מלכות, או יותר גרוע - בערי אינטרנט...
    כמו"כ נראה לי כי יועיל אם תהיה גם אפליקציה לאתר. (אולי יש... עוד לא חפרתי שם מספיק...)
    תמשיכו הלאה להביא לנו דברים טובים...

    כללי - עזרה הדדית

  • הצעת ייעול | עריכה ללא התראה
    לאציל לאצי

    בהקשר לכאן
    קורה הרבה פעמים שמשתמשים עורכים משהו קטן בפוסט כגון שגיאת כתיב וכדו' ואז כל העוקבים מקבלים התראה על לא דבר. ע"כ חשבתי כי יועיל מאוד אם יעשו אפשרות שליחה ללא התראה לשאר המשתמשים כך כשמאן דהו עורך את ההודעה שלו, יוכל לעשות זאת בלי לשלוח התראה לכולם.
    ו... כמובן, איך אפשר לסיים בלי להודות למנהלי הפורום הנכבדים...😋

    בכוונה לא תייגתי, שלא תגידו שאני סתם שולח התראות... 😋

    באגים/הצעות ייעול

  • הצעת ייעול | תיבת ספאם בפורום
    לאציל לאצי

    היות שלאחרונה אני נתקל יותר ויותר בהודעות/תגובות שבמילה היפה הייתי מכנה אותן 'ספאם' חשבתי כי יהיה נכון לעשות מנגנון תיבת ספאם אוטומטית בפורום. וכך זה יעבוד;

    1. תיבת ספאם גלובלית – כל פוסט שמסומן כספאם ע"י מספר מסוים של משתמשים יועבר אוטומטית לתיבת ספאם גלובלית.

    2. מערכת התראות והגבלות למשתמשים שכותבים תוכן ספאמי:

    • אזהרה ראשונה – משתמש שפרסם מספר פוסטים שסומנו כספאם יקבל הודעת אזהרה.
    • הגבלת פרסום זמנית – אם דפוס הפעילות הספאמית ממשיך, פרסום המשתמש יוגבל לתקופה מסוימת (למשל שבוע).
    • סינון אוטומטי של משתמשים בעייתיים – משתמש שמגיע לכמות מסוימת של פוסטים ספאמיים יועבר אוטומטית למצב שבו כל הודעותיו נשלחות לתיבת הספאם עד להחלטת מנהלים.
    • סקירה מנהלית – מנהלי הפורום יוכלו לבדוק לאחר זמן האם להחזיר את המשתמש לפעילות רגילה או להשאיר אותו מסומן כספאם.
    • מנגנון לערעור – משתמש שסבור שהפוסטים שלו סומנו כספאם שלא בצדק יוכל להגיש בקשה לבדיקה מחדש.

    לגבי נקיטת הצעדים נגד המשתמשים עצמם עדיין מסופקני אם נכון יהיה לעשות את זה, אשמח לשמוע את דעתכם. וכמו"כ השאלה גם האם הודעת ספאם לא תופיע כלל, או שתופיע הודעה ריקה כמו בהודעה שנמחקה, רק במקום 'פוסט זה נמחק' יופיע 'ספאם' עם אפשרות לצפייה בהודעה?
    כמו"כ לאלו שוודאי ישאלו, לא ניתן גם להרחיק לחלוטין את המשתמשים האלו בגין הודעות/תגובות אלו, כי אלו לא הודעות העוברות על חוקי הפורום, וגם לא עונות בהגדרתן על סעיף 2 בחוקי הפורום. וכנ"ל.

    אמנם כרגע קיימת אפשרות לדווח על הודעה/משתמש מסוים כספאם אבל בפועל ההודעה לא נשלחת לתיבת ספאם כלשהי אלא כנראה צוות פיקוח מוחק אותה ידנית אאל"ט.

    9d347b67-165f-4e38-9ec1-5de2695704a5-image.png

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

    https://community.nodebb.org/post/104495
    כמו"כ אם יש לכם הערות והארות על הנושא אשמח לשמוע.

    באגים/הצעות ייעול

  • שיתוף | צ'אטבוטים מסוננים לפי מקצוע או לפי רשימה שחורה | רובוליסט - רובוט חברותי חרדי!
    לאציל לאצי

    תראו מה זה, מגיד מישרים שמרביץ מוסר קם לנו פה:
    ספר לי בדיחה טובה על המצב הבטחוני בארץ.
    ChatGPT אמר:

    המצב הבטחוני הוא נושא רציני מאוד, במקום להתבדח עליו, עדיף להתפלל ולבקש מהקב"ה שישמור עלינו ויביא שלום ובטחון לעם
    יש הרבה דרכים למצוא שמחה, ובמקום בדיחות על נושאים כואבים, אפשר למצוא סיפורים יפים על גדולי ישראל או חיזוקים
    שתמיד נשמע בשורות טובות

    😅
    אז אולי תספר לי סתם בדיחה טובה ברוח של 'אלול'?
    ChatGPT אמר:
    בשמחה! הנה בדיחה שמתאימה לרוח חודש אל
    יום אחד פגש את חברו באמצע הרחוב ושואל אותו: "נו, מה נשמע? איך עובר עליך אלול?"
    החבר עונה לו: "אל תשאל, אלול הזה אני ממש מרגיש כמו שופר!"
    החבר מופתע ושואל: "כמו שופר? איך זה?"
    החבר מחייך ועונה: "כן, כל הזמן מסתובב ומרגיש חלול מבפנים, ורק מחכה שמישהו שירים אותי כדי שאתחיל לצעוק!"
    שנזכה לנצל את הזמן הזה להתקרבות לה'
    שנשמע ונתבשר בשורות טובות!
    😂 😂 😂 👍 👍 👍

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

  • הצעת ייעול | קמפיין מתמחים טופ לשרת חזק
    לאציל לאצי

    חבר'ה עכשיו תגובה רצינית. יש פה באג שכשאני פותח ספוילר אחד נפתח גם הספוילר של ההודעה הבאה.

    באגים/הצעות ייעול

  • הצעת ייעול | עיצוב הפורום
    לאציל לאצי

    הפוסטים בפורום 'גבוהים' מידי ויש הרבה חלל ריק בתוך כל פוסט, מה שמקשה על קריאה רציפה של אשכול, ובפרט ארוך. תועלת רבה תהיה אם יקטינו ויסירו את המרווחים האלו.
    ובכללי - יועיל מאוד אם תהיה אפשרות לעיצוב אישי של הפורום, הכולל; קביעת גודל הפוסטים, גודל סוג וצבע הפונט, וכו'.

    באגים/הצעות ייעול

  • שיתוף | ווידגט לזכרון חורבן בית המקדש לאנדרואיד
    לאציל לאצי

    @מתושלח-הבבלי כתב בשיתוף | ווידגט לזכרון חורבן בית המקדש לאנדרואיד:

    אולי תוסיף ווידג'ט על החטופים?
    אני יודע שכולם יגידו שזה לא מתאים וכו'
    אבל בתכלס' למה שלא נזכור שיש לנו אחים שנמצאים בשבי חמאס ימ"ש?

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

    אפליקציות להורדה

  • הצעת ייעול | קטגוריה לתרגום תוכנות
    לאציל לאצי

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

    באגים/הצעות ייעול

  • שיתוף | הצעה לאפליקציה/תוכנה חמודה להצגת אחוזי הסוללה
    לאציל לאצי

    אחרי שראיתי את התמונה הזאת:
    03a817d6-5bfa-480a-922d-5bc29b3e3bba-image.png
    חשבתי כזה לעצמי - למה באמת לא לעשות מזה משהו אמיתי שעל יד אחוזי הסוללה יראו כזה אימוג'י חמוד...
    נשמע לכם? מי לוקח על עצמו את הפרויקט לאנדרואיד/ווינדוס? (ניתן לקחת גם רק אחד מהם... אני מרשה... 😄 )

    כללי - עזרה הדדית

  • להורדה | חדש! תוסף לאימוג'ים אישיים!
    לאציל לאצי

    שלום לכולם 1ce6a055-db09-4461-be76-28c1b8b44b89-image.png
    בעקבות הלהיט החדש של האימוג'ים החרדיים בפרוג והביקוש העצום לכך, בס"ד פיתחתי (בעזרת AI כמובן...) תוסף כרום שמאפשר הדבקת אימוג'ים אישיים בכל מקום. התוסף לא מטמיע את האימוג'ים כמו אימוג'י אמיתי עם unicode, אלא הוא בסה"כ מצייר מחדש את התמונה שהעתקתם בגודל הרצוי ומדביקים אותה עם ctr+v.
    ניתן גם לבצע הסרת רקע מהתמונה באמצעות הזנת מפתח API בתוסף (יש הוראות מפורטות בתוסף), ועוד אפשרויות רבות ומגוונות. התקינו ותהנו!
    לתשומת לב! תוכן התוסף לא מסונכרן בין כל חשבונות גוגל במכשירים שונים. התמונות אותם אתם מעלים לתוסף קיימים רק במכשיר ההוא.
    להורדה/התקנה
    בקישור הנ"ל יש גם קובץ zip של האימוג'ים החרדיים להורדה וייבוא לתוסף.
    בהצלחה. 745d774e-8ede-43d2-9cb4-4b34f514dabc-image.png

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

  • הצעת ייעול | חיפוש ושדרוג מערכת ל-AI
    לאציל לאצי

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

    עריכה: (נלקח מההמשך למטה)
    מה שאני מציע לעשות זה בעצם שני דברים נפרדים.
    1.חיפוש חכם שהבינה שואלת אותך מה אתה מחפש ואת זה היא מביאה לך רק מתוך הפורום עצמו.
    2.צ'אט gpt שמבוסס מידע על כל הרשת אך הוא מביא מידע אך ורק על עניינים הקשורים לטכנולוגיה בלבד. מה שאנחנו מרויחים זה צ'אט מסונן ללא חומר מיותר (ואסור), וגם זה כמו עזרה הדדית חכמה שאפשר לשאול אותה גם על נושאים שעדיין לא נדונו בפורום.

    באגים/הצעות ייעול

  • באג | לא מופיע ספויילר באמצע פוסט
    לאציל לאצי

    @סקרנות ברוכים הבאים לפורום מתמחים טופ.
    להלן כמה כללים שיעזרו לך להתאקלם כראוי בסביבת הפורום:

    1. נהוג שלא לתייג את המנהלים החשובים על כל דבר קטן.
    2. בכל ספוילר (בכל פורום שהוא) יש לשים רווח שורה לפני ושורה אחרי כדי שהספוילר יכנס לתוקפו. זה לא באג.
    3. נא סמן את השרשור הנוכחי כנפתר, זאת ע"י לחיצה על 'כלי הנושא' > 'סמן כשאלה'> ולאחמ"כ שוב > סמן כנפתר.
    4. מומלץ וחשוב לקרוא את המדריך של ידידינו @מתחיל-מומחה שהשקיע ועשה הסבר מפורט על אופן השימוש במערכת כאן.
    5. (אם לא יצא לך לעבור עד עכשיו על חוקי הפורום מומלץ וחשוב לעשות זאת.)
      בהצלחה רבה והרבה סייעתא דשמיא!
    באגים/הצעות ייעול

  • שיתוף | אתר שבניתי ב WIX - רינגטונים להורדה - חסידישע קלאנגען
    לאציל לאצי

    אז קודם כל חברים, שמחתי מאוד לקבל ממכם פידבקים כל כך מחממים! תודה!
    אז ככה,@עומר ו @האיש-הלבן, ישנה סיבה שבשלה החלטתי להקדיש את האתר רק לרינגטונים חסידיים וחדשים, והיא - חוסר כמות האחסון שיש לי. מכיוון שWIX נותנים בתוכנית החינמית רק 10 ג'יגה, אז כדי לא לחרוג מהכמות ביום מן הימים, החלטתי לצמצם את סוגי הרינגטונים שיועלו לאתר. כמובן שאם לא מגבלת האחסון הייתי שמח 'להפציץ' את האתר ברינגטונים למיניהם.

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

    קידום אתרים

  • שיתוף | Hi Signal - תוסף לכרום למעקב חכם אחר התראות בפורומים
    לאציל לאצי

    שלום לכולם!
    סליחה על ההקפצה, אבל לא ראיתי לנכון לפתוח נושא חדש בייחוד כשמדובר באותו תוסף והתגובה האחרונה בס"ה לפני חודשיים... עמכם הסליחה...
    בקיצור, בס"ד ולאחר עבודה סיזיפית מאומצת שלי ושל גרוק 3 פיתחנו יחד גרסה מתקדמת ונוחה יותר לתוסף הנפלא הזה. (אולי גרסה 0.5.6 ? 😉 )

    רשימת השדרוגים והשיפורים:

    עיצוב חדש ונוח: פופאפ קטן יותר + הוספת סרגל צד לניווט בין הפורומים (כבקשת @י-פל ).
    התראות שקופות: כעת הפופאפ לא קופץ כלל בזמן התראה, זאת כדי שהמיקוד לא יעבור אליו. במקום זאת נוספו פיצ'רים אחרים להסבת תשומת הלב, כדלהלן.
    תיקון סימן התראות: סימון האייקון (Badge) נשאר עד שמסמנים את ההתראה כנקראה או קוראים אותה בפורום, במקום להימחק רק עם פתיחת הפופאפ שוב.
    תמיכה בצליל התראות: הוספת ניגון צליל כאשר מתקבלת התראה חדשה, עם אפשרות להפעלה/כיבוי בהגדרות (תומך ב-offscreen API של Chrome).
    אנימציית Badge: הוספת אפקט "הבהוב" חזותי על ידי שינוי צבעי ה-Badge (אדום-ירוק-אדום) למשך 3 שניות עם כל התראה חדשה.

    hisignal_v0.5.6.zip
    עריכה: הקוד עבר ניקוי והסרה של שאריות קודים מיותרים שנוצרו במהלך הפיתוח.
    יש לחלץ את התיקייה ולטעון אותה באופן ידני ע"י כניסה לניהול תוספים, (-chrome://extensions/) הפעלת מצב פיתוח, והקשה על טעינת פריט Unpacked.
    @אביי מה אתה אומר? מרוצה? אשמח אם תעבור על הקוד כדי לראות איך 'הרסו לו את הצורה...' 😉

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

  • הצעת ייעול | ניתוק שרתי הפורום בשבת קודש
    לאציל לאצי

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

    באגים/הצעות ייעול
  • התחברות

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

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