مدیاویکی:Common.js: تفاوت بین نسخه‌ها

از ولایت حضرت علی و حضرت زهرا
پرش به:ناوبری، جستجو
سطر ۱۳۲: سطر ۱۳۲:
 
showSujects('.subjects, .minutes', 'موضوعات');
 
showSujects('.subjects, .minutes', 'موضوعات');
  
 +
$(function () {
  
//showSujects('minutes', 'دقایق سخنرانی')
+
    function setupFind($box) {
  
document.addEventListener("DOMContentLoaded", function () {
+
         const $input = $box.find('.mw-find-input');
 
+
         const $prev = $box.find('.mw-find-prev');
    function setupFind(box) {
+
         const $next = $box.find('.mw-find-next');
         const input = box.querySelector('.mw-find-input');
+
         const $count = $box.find('.mw-find-count');
         const prev = box.querySelector('.mw-find-prev');
 
         const next = box.querySelector('.mw-find-next');
 
         const count = box.querySelector('.mw-find-count');
 
  
 
         let matches = [];
 
         let matches = [];
         let index = 0;
+
         let index = -1;
  
 
         function clearHighlights() {
 
         function clearHighlights() {
             matches.forEach(el => {
+
             matches.forEach(m => {
                 const text = el.textContent;
+
                 $(m).replaceWith(m.textContent);
                el.replaceWith(document.createTextNode(text));
 
 
             });
 
             });
 
             matches = [];
 
             matches = [];
 +
            index = -1;
 
         }
 
         }
  
         function highlight(term) {
+
         function doSearch(term) {
 
             clearHighlights();
 
             clearHighlights();
 +
 
             if (!term) {
 
             if (!term) {
                 count.textContent = '';
+
                 $count.text('');
 
                 return;
 
                 return;
 
             }
 
             }
  
             const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
+
             const $content = $('#mw-content-text');
 
             const regex = new RegExp(term, 'gi');
 
             const regex = new RegExp(term, 'gi');
  
             while (walker.nextNode()) {
+
             $content.find('*').contents().each(function () {
                 const node = walker.currentNode;
+
 
                 if (node.parentNode.tagName === 'SCRIPT') continue;
+
                 if (this.nodeType !== 3) return;
 +
                 if (!this.nodeValue.match(regex)) return;
 +
 
 +
                const replaced = this.nodeValue.replace(regex, function (match) {
 +
                    return `<mark class="mw-find-highlight">${match}</mark>`;
 +
                });
 +
 
 +
                $(this).replaceWith(replaced);
 +
            });
 +
 
 +
            matches = $content.find('.mw-find-highlight').toArray();
  
                if (regex.test(node.textContent)) {
+
            if (!matches.length) {
                    const span = document.createElement('span');
+
                $count.text('یافت نشد');
                    span.innerHTML = node.textContent.replace(regex, match =>
+
                return;
                        `<mark class="mw-find-highlight">${match}</mark>`
 
                    );
 
                    node.replaceWith(span);
 
                }
 
 
             }
 
             }
  
            matches = Array.from(document.querySelectorAll('.mw-find-highlight'));
 
 
             index = 0;
 
             index = 0;
 +
            focusResult();
 +
        }
  
             update();
+
        function focusResult() {
        }
+
             $('.mw-find-highlight').removeClass('active');
 +
            const el = matches[index];
 +
            $(el).addClass('active')[0]
 +
                .scrollIntoView({ behavior: "smooth", block: "center" });
  
        function update() {
+
             $count.text((index + 1) + ' از ' + matches.length);
             matches.forEach(m => m.classList.remove('active'));
 
            if (matches.length) {
 
                matches[index].classList.add('active');
 
                matches[index].scrollIntoView({ behavior: 'smooth', block: 'center' });
 
                count.textContent = `${index + 1} / ${matches.length}`;
 
            } else {
 
                count.textContent = '0';
 
            }
 
 
         }
 
         }
  
         next.onclick = () => {
+
         $next.on('click', function () {
 
             if (!matches.length) return;
 
             if (!matches.length) return;
 
             index = (index + 1) % matches.length;
 
             index = (index + 1) % matches.length;
             update();
+
             focusResult();
         };
+
         });
  
         prev.onclick = () => {
+
         $prev.on('click', function () {
 
             if (!matches.length) return;
 
             if (!matches.length) return;
 
             index = (index - 1 + matches.length) % matches.length;
 
             index = (index - 1 + matches.length) % matches.length;
             update();
+
             focusResult();
         };
+
         });
  
         input.oninput = () => highlight(input.value);
+
         $input.on('input', function () {
 +
            doSearch(this.value);
 +
        });
 
     }
 
     }
  
     document.querySelectorAll('.mw-find-box').forEach(setupFind);
+
     $('.mw-find-box').each(function () {
 +
        setupFind($(this));
 +
    });
 +
 
 
});
 
});

نسخهٔ ‏۳ دسامبر ۲۰۲۵، ساعت ۱۰:۵۴

/* Any JavaScript here will be loaded for all users on every page load. */
$(function () {
	var targets = $('[rel~=tooltip]'),
		target = false,
		tooltip = false,
		title = false;

	targets.bind('mouseenter', function () {
		target = $(this);
		tip = target.attr('title');
		tooltip = $('<div id="tooltip"></div>');

		if (!tip || tip == '')
			return false;

		target.removeAttr('title');
		tooltip.css('opacity', 0)
			.html(tip)
			.appendTo('body');

		var init_tooltip = function () {
			if ($(window).width() < tooltip.outerWidth() * 1.5)
				tooltip.css('max-width', $(window).width() / 2);
			else
				tooltip.css('max-width', 340);

			var pos_left = target.offset().left + (target.outerWidth() / 2) - (tooltip.outerWidth() / 2),
				pos_top = target.offset().top - tooltip.outerHeight() - 20;

			if (pos_left < 0) {
				pos_left = target.offset().left + target.outerWidth() / 2 - 20;
				tooltip.addClass('left');
			}
			else
				tooltip.removeClass('left');

			if (pos_left + tooltip.outerWidth() > $(window).width()) {
				pos_left = target.offset().left - tooltip.outerWidth() + target.outerWidth() / 2 + 20;
				tooltip.addClass('right');
			}
			else
				tooltip.removeClass('right');

			if (pos_top < 0) {
				var pos_top = target.offset().top + target.outerHeight();
				tooltip.addClass('top');
			}
			else
				tooltip.removeClass('top');

			tooltip.css({ left: pos_left, top: pos_top })
				.animate({ top: '+=10', opacity: 1 }, 50);
		};

		init_tooltip();
		$(window).resize(init_tooltip);

		var remove_tooltip = function () {
			tooltip.animate({ top: '-=10', opacity: 0 }, 50, function () {
				$(this).remove();
			});

			target.attr('title', tip);
		};

		target.bind('mouseleave', remove_tooltip);
		tooltip.bind('click', remove_tooltip);
	});
});

$('.col-lg-9').removeClass('col')
$('.col-lg-3').removeClass('col')

function showSujects(subjectClass, title) {
	// Get all the elements with the class "subjects"
	var subjects = $(subjectClass);

	// Create an empty list to hold the IDs of the selected elements
	var selectedTitles = [];
	var selectedIds = [];
	var types = [];

	// Loop through each element with the class "subjects"
	subjects.each(function () {
		// Get the ID of the current element
		var currentTitle = $(this).attr('data-headline');
		var currentId = $(this).attr('id');

		// Add the ID to the list of selected IDs
		selectedTitles.push(currentTitle);
		selectedIds.push(currentId);
		types.push($(this).hasClass('minutes'))
	});
	if (selectedTitles.length === 0) {
		return
	}
	//    console.log('selecting subjects')
	// Loop through the selected IDs and create a new div for each one
	var headlines = [];
	for (var i = 0; i < selectedTitles.length; i++) {
		var tocWrapper = '';
		var id = parseInt(selectedIds[i]);
		console.log(id);
		if (types[i])
			tocWrapper = $("<div class='tocMinuts'></div>");
		else
			tocWrapper = $("<li></li>");
		var newDiv = $("<a class='subjectToc' href='#" + selectedIds[i] + "'></a>");
		newDiv.text(selectedTitles[i]);
		tocWrapper.append(newDiv);
		headlines.push(tocWrapper);
	}

	// Wrap all the new divs in a specific div with the ID "new-div-container"
	var headLineContainer = $("<div></div>");
	headLineContainer.addClass("infobox mw-collapsible");
	headLineContainer.css("width", "22em");

	var ToggleSpan = $("<span >" + title + "</span>")
	var headLineWrapper = $("<ol></ol>");
	headLineWrapper.addClass("headWrapperSubjects");
	headLineWrapper.addClass("mw-collapsible-content");
	headLineWrapper.append(headlines);

	headLineContainer.append(ToggleSpan);
	headLineContainer.append(headLineWrapper);

	// Add the new div container after the table with the ID "my-table"
	$(".infobox.vcard").after(headLineContainer);
}

showSujects('.subjects, .minutes', 'موضوعات');

$(function () {

    function setupFind($box) {

        const $input = $box.find('.mw-find-input');
        const $prev = $box.find('.mw-find-prev');
        const $next = $box.find('.mw-find-next');
        const $count = $box.find('.mw-find-count');

        let matches = [];
        let index = -1;

        function clearHighlights() {
            matches.forEach(m => {
                $(m).replaceWith(m.textContent);
            });
            matches = [];
            index = -1;
        }

        function doSearch(term) {
            clearHighlights();

            if (!term) {
                $count.text('');
                return;
            }

            const $content = $('#mw-content-text');
            const regex = new RegExp(term, 'gi');

            $content.find('*').contents().each(function () {

                if (this.nodeType !== 3) return;
                if (!this.nodeValue.match(regex)) return;

                const replaced = this.nodeValue.replace(regex, function (match) {
                    return `<mark class="mw-find-highlight">${match}</mark>`;
                });

                $(this).replaceWith(replaced);
            });

            matches = $content.find('.mw-find-highlight').toArray();

            if (!matches.length) {
                $count.text('یافت نشد');
                return;
            }

            index = 0;
            focusResult();
        }

        function focusResult() {
            $('.mw-find-highlight').removeClass('active');
            const el = matches[index];
            $(el).addClass('active')[0]
                .scrollIntoView({ behavior: "smooth", block: "center" });

            $count.text((index + 1) + ' از ' + matches.length);
        }

        $next.on('click', function () {
            if (!matches.length) return;
            index = (index + 1) % matches.length;
            focusResult();
        });

        $prev.on('click', function () {
            if (!matches.length) return;
            index = (index - 1 + matches.length) % matches.length;
            focusResult();
        });

        $input.on('input', function () {
            doSearch(this.value);
        });
    }

    $('.mw-find-box').each(function () {
        setupFind($(this));
    });

});
حاج حسین خوش لهجه نابغه ولایت؛ حاج حسین خوش لهجه