مدیاویکی:Common.js: تفاوت بین نسخهها
از ولایت حضرت علی و حضرت زهرا
| سطر ۱۳۲: | سطر ۱۳۲: | ||
showSujects('.subjects, .minutes', 'موضوعات'); | 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 input = box. | + | const $count = $box.find('.mw-find-count'); |
| − | const prev = box. | ||
| − | const next = box. | ||
| − | const count = box. | ||
let matches = []; | let matches = []; | ||
| − | let index = | + | let index = -1; |
function clearHighlights() { | function clearHighlights() { | ||
| − | matches.forEach( | + | matches.forEach(m => { |
| − | + | $(m).replaceWith(m.textContent); | |
| − | |||
}); | }); | ||
matches = []; | matches = []; | ||
| + | index = -1; | ||
} | } | ||
| − | function | + | function doSearch(term) { |
clearHighlights(); | clearHighlights(); | ||
| + | |||
if (!term) { | if (!term) { | ||
| − | count. | + | $count.text(''); |
return; | return; | ||
} | } | ||
| − | const | + | const $content = $('#mw-content-text'); |
const regex = new RegExp(term, 'gi'); | const regex = new RegExp(term, 'gi'); | ||
| − | + | $content.find('*').contents().each(function () { | |
| − | + | ||
| − | if ( | + | 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; | 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. | + | $next.on('click', function () { |
if (!matches.length) return; | if (!matches.length) return; | ||
index = (index + 1) % matches.length; | index = (index + 1) % matches.length; | ||
| − | + | focusResult(); | |
| − | }; | + | }); |
| − | prev. | + | $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; | ||
| − | + | focusResult(); | |
| − | }; | + | }); |
| − | input. | + | $input.on('input', function () { |
| + | doSearch(this.value); | ||
| + | }); | ||
} | } | ||
| − | + | $('.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));
});
});
