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

از ولایت حضرت علی و حضرت زهرا
پرش به:ناوبری، جستجو
 
(۳ نسخهٔ میانیِ همین کاربر نمایش داده نشده است)
سطر ۱۳۳: سطر ۱۳۳:
  
  
//showSujects('minutes', 'دقایق سخنرانی')
+
$(function () {
  
document.addEventListener("DOMContentLoaded", function () {
+
    $('.mw-find-box').each(function () {
  
    function setupFind(box) {
+
         var $input = $(this).find('.mw-find-input');
         const input = box.querySelector('.mw-find-input');
+
         var content = document.getElementById('mw-content-text');
        const prev = box.querySelector('.mw-find-prev');
 
        const next = box.querySelector('.mw-find-next');
 
         const count = box.querySelector('.mw-find-count');
 
  
        let matches = [];
+
         function unwrap() {
        let index = 0;
+
             var marks = content.querySelectorAll('mark.mw-find-highlight');
 
+
            for (var i = marks.length - 1; i >= 0; i--) {
         function clearHighlights() {
+
                 var parent = marks[i].parentNode;
             matches.forEach(el => {
+
                 parent.replaceChild(document.createTextNode(marks[i].textContent), marks[i]);
                 const text = el.textContent;
+
                parent.normalize();
                 el.replaceWith(document.createTextNode(text));
+
             }
            });
 
             matches = [];
 
 
         }
 
         }
  
 
         function highlight(term) {
 
         function highlight(term) {
             clearHighlights();
+
             unwrap();
             if (!term) {
+
             if (!term) return;
                count.textContent = '';
 
                return;
 
            }
 
  
             const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
+
             var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT, null);
             const regex = new RegExp(term, 'gi');
+
             var regex = new RegExp(term, 'gi');
 +
            var node;
  
             while (walker.nextNode()) {
+
             while ((node = walker.nextNode())) {
                const node = walker.currentNode;
+
                 if (!node.nodeValue.match(regex)) continue;
                 if (node.parentNode.tagName === 'SCRIPT') continue;
 
  
                 if (regex.test(node.textContent)) {
+
                 var span = document.createElement('span');
                    const span = document.createElement('span');
+
                span.innerHTML = node.nodeValue.replace(regex,
                    span.innerHTML = node.textContent.replace(regex, match =>
+
                    '<mark class="mw-find-highlight">$&</mark>'
                        `<mark class="mw-find-highlight">${match}</mark>`
+
                );
                    );
+
                node.parentNode.replaceChild(span, node);
                    node.replaceWith(span);
 
                }
 
 
             }
 
             }
 
            matches = Array.from(document.querySelectorAll('.mw-find-highlight'));
 
            index = 0;
 
 
            update();
 
 
         }
 
         }
  
         function update() {
+
         $input.on('input', function () {
            matches.forEach(m => m.classList.remove('active'));
+
             highlight(this.value.trim());
            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 = () => {
 
             if (!matches.length) return;
 
            index = (index + 1) % matches.length;
 
            update();
 
         };
 
 
 
        prev.onclick = () => {
 
            if (!matches.length) return;
 
            index = (index - 1 + matches.length) % matches.length;
 
            update();
 
        };
 
  
        input.oninput = () => highlight(input.value);
+
    });
    }
 
  
    document.querySelectorAll('.mw-find-box').forEach(setupFind);
 
 
});
 
});

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

/* 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 () {

    $('.mw-find-box').each(function () {

        var $input = $(this).find('.mw-find-input');
        var content = document.getElementById('mw-content-text');

        function unwrap() {
            var marks = content.querySelectorAll('mark.mw-find-highlight');
            for (var i = marks.length - 1; i >= 0; i--) {
                var parent = marks[i].parentNode;
                parent.replaceChild(document.createTextNode(marks[i].textContent), marks[i]);
                parent.normalize();
            }
        }

        function highlight(term) {
            unwrap();
            if (!term) return;

            var walker = document.createTreeWalker(content, NodeFilter.SHOW_TEXT, null);
            var regex = new RegExp(term, 'gi');
            var node;

            while ((node = walker.nextNode())) {
                if (!node.nodeValue.match(regex)) continue;

                var span = document.createElement('span');
                span.innerHTML = node.nodeValue.replace(regex,
                    '<mark class="mw-find-highlight">$&</mark>'
                );
                node.parentNode.replaceChild(span, node);
            }
        }

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

    });

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