Bước tới nội dung

Thành viên:CDzWik/common.js

Bách khoa toàn thư mở Wikipedia
Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.
/** * Giữ mã nguồn ở MediaWiki:Common.js một cách tối thiểu vì nó sẽ được tải * vô điều kiện cho mọi thành viên ở tất cả các trang wiki. Nếu có thể hãy tạo * công cụ (gadget) và để nó kích hoạt mặc định thay vì đặt ở đây (vì công cụ * là các mô đun ResourceLoader tối ưu hóa tối đa với khả năng ghi các phần phụ * thuộc). * * Vì Common.js không phải là công cụ, không có chỗ để khai báo phần phụ thuộc * cho nó, do đó ta phải tải chậm với mw.loader.using khi cần và thực hiện toàn * bộ trong lần gọi lại lần nữa. Trong phần lớn trường hợp các phần phụ thuộc * này sẽ được tải trước khi tải mã ở đây. *//* global mw, $, OO *//* jshint strict:false, browser:true */// Per migration docs, declare all necessary dependencies.mw.loader.using(['mediawiki.util', 'mediawiki.cookie', 'jquery.makeCollapsible']).done(() => {	const conf = mw.config.get([		'wgPageName',		'wgArticleId',		'wgNamespaceNumber',		'wgCanonicalSpecialPageName',		'wgAction',		'wgCategories',		'wgUserGroups',		'skin'	]);	/**	 * Sửa bố cục Trang Chính	 */	if (conf.wgPageName === 'Trang_Chính' || conf.wgPageName === 'Thảo_luận:Trang_Chính') {		mw.util.addPortletLink(			'p-lang',			'//meta.wikimedia.org/w/index.php?title=List_of_Wikipedias&uselang=vi',			'Danh sách đầy đủ',			'interwiki-completelist',			'Danh sách đầy đủ các phiên bản Wikipedia'		);	}	/**	 * Đổi hướng User:Name/skin.js và skin.css đến các trang giao diện hiện tại	 */	if (conf.wgArticleId === 0 && conf.wgNamespaceNumber === 2) {		const titleParts = conf.wgPageName.split('/');		if (titleParts.length === 2) {			const skinSubpage = titleParts[1].toLowerCase();			if (skinSubpage === 'skin.js' || skinSubpage === 'skin.css') {				const newTarget = `${titleParts[0]}/${conf.skin}.${skinSubpage.split('.')[1]}`;				window.location.href = mw.util.getUrl(newTarget);			}		}	}	/**	 * Tải CSS/JS bổ sung qua tham số URL	 */	const extraCSS = mw.util.getParamValue('withCSS');	const extraJS = mw.util.getParamValue('withJS');	if (extraCSS && /^MediaWiki:[^&<>=%#]*\.css$/.test(extraCSS)) {		mw.loader.load(`/w/index.php?title=${extraCSS}&action=raw&ctype=text/css`, 'text/css');	} else if (extraCSS) {		mw.notify('Chỉ cho phép các trang từ không gian tên MediaWiki', { title: 'Giá trị withCSS không hợp lệ' });	}	if (extraJS && /^MediaWiki:[^&<>=%#]*\.js$/.test(extraJS)) {		mw.loader.load(`/w/index.php?title=${extraJS}&action=raw&ctype=text/javascript`);	} else if (extraJS) {		mw.notify('Chỉ cho phép các trang từ không gian tên MediaWiki.', { title: 'Giá trị withJS không hợp lệ' });	}	/**	 * WikiMiniAtlas	 */	if ($('a.external.text[href*="geohack"], div.kmldata').length) {		mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript');	}	/**	 * Bảng có thể thu gọn (Tương thích ngược)	 */	function makeCollapsibleMwCollapsible($content) {		const $tables = $content			.find('table.collapsible:not(.mw-collapsible)')			.addClass('mw-collapsible');		$tables.filter('.collapsed').addClass('mw-collapsed');		if ($tables.length) {			$tables.makeCollapsible();		}	}	/**	 * Hỗ trợ autocollapse, inner/outercollapse cho mw-collapsible	 */	function mwCollapsibleSetup($collapsibleContent) {		const autoCollapseThreshold = 2;		const $autocollapseItems = $collapsibleContent.filter('.autocollapse');		if ($autocollapseItems.length >= autoCollapseThreshold) {			$autocollapseItems.each((i, el) => $(el).data('mw-collapsible').collapse());		}		$collapsibleContent.filter('.innercollapse').each((i, el) => {			const $element = $(el);			if ($element.closest('.outercollapse').length) {				$element.data('mw-collapsible').collapse();			}		});		$collapsibleContent.find('.mw-collapsible-toggle').each((i, toggle) => {			const $toggle = $(toggle);			const parentColor = $toggle.parent().css('color');			if (parentColor) {				$toggle.find('a').css('color', 'inherit');			}		});	}	/**	 * Thanh điều hướng động (NavFrames) - Đã được hiện đại hóa	 */	function createNavigationBarToggleButton($content) {		const collapseCaption = 'ẩn';		const expandCaption = 'hiện';		$content.find('div.NavFrame:not(.mw-collapsible)').each((index, navFrame) => {			const $navFrame = $(navFrame).attr('id', `NavFrame${index}`);			const $navHead = $navFrame.find('.NavHead').first();			if (!$navHead.length) return;			let isCollapsed = $navFrame.hasClass('collapsed') || $navFrame.find('.NavContent, .NavPic').first().is(':hidden');			const $toggleLink = $('<a>', {				class: 'NavToggle',				id: `NavToggle${index}`,				href: '#',				text: `[${isCollapsed ? expandCaption : collapseCaption}]`			}).css('color', $navHead.css('color'));			const $contentToToggle = $navFrame.find('.NavContent, .NavPic');			if (isCollapsed) $contentToToggle.hide();			$toggleLink.on('click', (e) => {				e.preventDefault();				const wasCollapsed = $navFrame.hasClass('is-collapsed');				$contentToToggle.toggle(!wasCollapsed);				$toggleLink.text(`[${wasCollapsed ? collapseCaption : expandCaption}]`);				$navFrame.toggleClass('is-collapsed', !wasCollapsed);			});			if (isCollapsed) $navFrame.addClass('is-collapsed');			$navHead.append($toggleLink);		});	}	/**	 * Thông báo sửa đổi (Edit Intros)	 */	function addEditIntro(name) {		$('.mw-editsection a, #ca-edit a, #ca-ve-edit a').each((i, el) => {			el.href += `&editintro=${name}`;		});	}	if (conf.wgNamespaceNumber === 0) {		if ($('#disambigbox').length) addEditIntro('Bản_mẫu:Disambig_editintro');		// FIX: Replaced optional chaining (?.) with a standard `&&` check for compatibility.		if (conf.wgCategories && conf.wgCategories.some(cat => cat === 'Nhân vật còn sống' || cat === 'Nhân vật có thể còn sống')) {			addEditIntro('Bản_mẫu:BLP_editintro');		}	}	/* Các hành động cụ thể cho trang sửa đổi */	if (conf.wgAction === 'edit' || conf.wgAction === 'submit') {		if (window.location.search.includes('undo=') && $('input[name="wpAutoSummary"]').length) {			$('input[name="wpAutoSummary"]').val('1');		}	}	/* =================================================================================== */	/* MÃ DÀNH RIÊNG CHO WIKIPEDIA TIẾNG VIỆT                                             */	/* =================================================================================== */	const scriptPath = (page) => `/w/index.php?title=MediaWiki:Common.js/${page}&action=raw&ctype=text/javascript`;	if (conf.wgAction === 'edit' || conf.wgAction === 'submit' || conf.wgCanonicalSpecialPageName === 'Upload') {		mw.loader.load(scriptPath('edit.js'));	} else if (conf.wgCanonicalSpecialPageName === 'Watchlist') {		mw.loader.load(scriptPath('watchlist.js'));	}	if (navigator.userAgent.includes('Windows NT 5')) {		mw.util.addCSS('.IPA { font-family: "Lucida Sans Unicode", "Arial Unicode MS"; }.Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; }');	}	function LinkFA() {		$('#p-lang li[class*="interwiki-"]').each((i, item) => {			const $item = $(item);			const langClass = ($item.attr('class').match(/interwiki-([-\w]+)/) || [])[0];			if (!langClass) return;			if ($(`#${langClass}-fa`).length && !$item.hasClass('badge-featuredarticle')) {				$item.addClass('FA').attr('title', 'Liên kết này dẫn đến bài chọn lọc.');			} else if ($(`#${langClass}-ga`).length && !$item.hasClass('badge-goodarticle')) {				$item.addClass('GA').attr('title', 'Liên kết này dẫn đến bài chất lượng tốt.');			}		});	}	function setupSandbox() {		if (conf.wgPageName === 'Trợ_giúp:Chỗ_thử' && conf.wgAction === 'view') {			const intro = mw.html.element('div', {id: 'sbox'}, '{{Các thông báo sửa đổi/Trang/Trợ giúp:Chỗ thử}}');			$('#mw-content-text').wrapInner('<div class="sandbox"></div>').prepend(intro);		}	}	/** Chọn chế độ sửa đổi theo cookie. Migrated from mw.Uri to native URL API */	function setRedLinkEditor() {		if (mw.cookie.get('VEE') === 'wikitext') {			$('.noarticletext a, .searchresults h2 a').each((i, el) => {				try {					const url = new URL(el.href);					if (url.searchParams.has('veaction')) {						url.searchParams.set('action', 'edit');						url.searchParams.delete('veaction');						el.href = url.toString();					}				} catch (e) {					// Ignore invalid URLs				}			});		}	}		function setupContentTranslationVisibility() {		if (mw.user.options.get('cx') === '1') {			document.documentElement.classList.add('cx-available');		}	}	function fixUploadLink() {		$('#t-upload a').attr('href', mw.util.getUrl('Wikipedia:Trình tải lên tập tin'));	}	function loadWdSearch() {		if (conf.wgCanonicalSpecialPageName === 'Search' || (conf.wgArticleId === 0 && !conf.wgCanonicalSpecialPageName)) {			mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Wdsearch.js&action=raw&ctype=text/javascript');		}	}	function hideContentTranslation() {		const allowedGroups = ['sysop', 'eliminator', 'extendedconfirmed'];		// FIX: Replaced optional chaining (?.) with a standard `&&` check for compatibility.		const hasAccess = conf.wgUserGroups && conf.wgUserGroups.some(group => allowedGroups.includes(group));		if (!hasAccess) {			mw.util.addCSS('#cx-language, .cx-campaign-translations, .cx-contributions-translation { display: none; }');			if (conf.wgCanonicalSpecialPageName === 'ContentTranslation') {				mw.loader.using('oojs-ui').then(() => {					OO.ui.alert('Không thể sử dụng công cụ này vì bạn không phải là Thành viên được xác nhận mở rộng.')						.done(() => { window.location.href = mw.util.getUrl('Wikipedia:Biên dịch'); });				});			}		}	}	// === HOOKS ===	mw.hook('wikipage.content').add(($content) => {		makeCollapsibleMwCollapsible($content);		createNavigationBarToggleButton($content);		LinkFA();		setupSandbox();		setRedLinkEditor();		setupContentTranslationVisibility();		fixUploadLink();		hideContentTranslation();	});	mw.hook('wikipage.collapsibleContent').add(mwCollapsibleSetup);		loadWdSearch();});// Legacy `window.hookEvent` is obsolete and removed./* KHÔNG THÊM MÃ DƯỚI DÒNG NÀY */