MediaWiki:Common.js

Văn thư lưu trữ mở Wikisource

Cache: Sau khi lưu biểu mẫu này, phải xóa bộ nhớ đệm (cache) của trình duyệt để những thay đổi hiện ra:

Firefox, Chrome, Safari, Opera — Shift­Reload / Tải lại       Internet Explorer — Ctrl­Refresh / Làm tươi       Konqueror — Reload / Tải lại

Nếu bạn viết mã JavaScript, chú ý đọc hướng dẫn để tránh mâu thuẫn với mã mặc định của mạng.

//<source lang="javascript">
/**
 * 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, $, importStylesheet, importScript */
/* jshint curly:false, strict:false, eqnull:true, browser:true */

mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'jquery.client'] ).done( function () {
/* Đầu hàm gọi lại mw.loader.using() */

/* Nhúng và chuyên biệt các script chung; xem http://wikisource.org/wiki/Wikisource:Shared_Scripts */
// $.getScript('//wikisource.org/w/index.php?title=MediaWiki:Base.js&action=raw&ctype=text/javascript', function () {
// mw.loader.load('//vi.wikisource.org/w/index.php?title=MediaWiki:DisplayFooter.js&action=raw&ctype=text/javascript');
// mw.loader.load('//vi.wikisource.org/w/index.php?title=MediaWiki:PageNumbers.js&action=raw&ctype=text/javascript');
mw.loader.load('//vi.wikisource.org/w/index.php?title=MediaWiki:IndexForm.js&action=raw&ctype=text/javascript');
// mw.loader.load('//wikisource.org/w/index.php?title=MediaWiki:Dictionary.js&action=raw&ctype=text/javascript');
mw.loader.load('//vi.wikisource.org/w/index.php?title=MediaWiki:InterWikiTransclusion.js&action=raw&ctype=text/javascript');
// });

self.proofreadpage_add_container = true;

// Mouse wheel zoom should work now for most browsers.
// If it does not work for you, set this to true in your javascript.
self.proofreadpage_disable_wheelzoom = false;

if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) {
    // Mã chỉ dành riêng cho trang sửa đổi
    importScript("MediaWiki:Edit.js");
}

/** 
 * Kiểm tra một phân tử HTML có lớp nào đó hay không
 *
 * @deprecated: Hãy dùng $(element).hasClass() thay thế.
 */
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
    return $( element ).hasClass( className );
}, 'Hãy dùng jQuery.hasClass() thay thế' );


/**
 * Thêm mũi tên vào thanh bên để so sánh trên hiện tại với trang liên kết liên ngôn ngữ
 * Phỏng theo [[OldWikisource:MediaWiki:DoubleWiki.js]]
 */
function BilingualLink() {
    // iterate over links
    $('#p-lang li:not(.uls-p-lang-dummy)').each(function (idx, elt) {
        if ($(this).hasClass('uls-p-lang-dummy')) return;

        // create new URL
        var bilang = $(this).find('a').attr('href').match(/\/\/([^\.]+)\.wikisource/)[1];
        
        // add link
        $(this).append(mw.html.element("a", {
        	href: mw.util.getUrl(mw.config.get('wgPageName'), {match: bilang}),
        	title: "So sánh trang này với bản " + bilang + "."
        }, " ⇔"));
    });
}
$(BilingualLink);

/** Bảng ẩn/hiện *********************************************************
  *
  *  Chức năng: Cho phép bản mẫu có thể ẩn đi lại, chỉ hiện tiêu đề. Xem
  *             [[w:en:Wikipedia:NavFrame]].
  *  Người bảo trì: 
  */

var autoCollapse = 2;
var collapseCaption = "ẩn";
var expandCaption = "hiện";

window.collapseTable = function (tableIndex, fast) {
    var toggleLink = $("#collapseButton" + tableIndex);
    var table = $("#collapsibleTable" + tableIndex);
	if ( !table.length || !toggleLink.length ) {
        return false;
    }
	
    var rows = table.find("tr");
    var slidingOptions = {
    	duration: fast ? 0 : undefined
    };
    if (toggleLink.text() === collapseCaption) {
    	rows.slice(1).fadeOut(slidingOptions);
        toggleLink.text(expandCaption);
    }
    else {
        if (rows.first().is(":hidden")) {
        	rows.slice(1).fadeOut(slidingOptions);
        }
        else {
        	rows.slice(1).fadeIn(slidingOptions);
        }
        toggleLink.text(collapseCaption);
    }
};

function createCollapseButtons() {
    /* chỉ thêm nút nếu có hàng đầu để ấy */
    var tables = $("table.collapsible:has(tr th)");
    tables.each(function (i, table) {
        $(table).attr("id", "collapsibleTable" + i);
        
        var header = $(table).find("tr th").first();
        header.addClass("collapsible-header");
        
        var toggleLink = $(mw.html.element("a", {
        	id: "collapseButton" + i,
        	href: "#"
        }));
        toggleLink.css("color", header.css("color"));
        toggleLink.append(collapseCaption);
		
        header.click(function (evt) {
        	var target = $(evt.target);
        	if (target.is(toggleLink) || !(target.is("a") || target.parents("a").length)) {
        		window.collapseTable(i);
        		evt.preventDefault();
        	}
        });
        
		var toggleButton = $(mw.html.element("span", {
        	"class": "collapseButton"	// kiểu mẫu được định rõ trong Common.css
        }));
        toggleButton.append("[");
		toggleButton.append(toggleLink);
        toggleButton.append("]");
		
        header.prepend(toggleButton);
	});

	tables.each(function (i, table) {
        if ($(table).hasClass("collapsed") ||
        	(tables.length >= autoCollapse && $(table).hasClass("autocollapse")) ||
        	$(table).hasClass("innercollapse") && table.parents(".outercollapse").length) {
            window.collapseTable(i, true /* fast */);
        }
	});
}

mw.hook("wikipage.content").add(createCollapseButtons);

/** Thanh Chuyển hướng Động ****************************************************
 *
 *  Chức năng: Xem [[w:en:Wikipedia:NavFrame]].
 *  Người bảo trì: 
 */

/**
 * Thêm nút hiện/ẩn vào thanh chuyển hướng.
 */
function createNavigationBarToggleButton() {
	// thiết lập các từ trong ngôn ngữ của chúng ta
	var hideText = "[" + collapseCaption + "]";
	var showText = "[" + expandCaption + "]";
	
	$("div.NavFrame").each(function (i, frame) {
		var isCollapsed = $(this).hasClass("collapsed");
		
		$(mw.html.element("a", {
			"class": "NavToggle",
			href: "#"
		}, isCollapsed ? showText : hideText)).appendTo($(this).find(".NavHead"));
		
		$(this).find(".NavContent").makeCollapsible({
			collapsed: isCollapsed,
			$customTogglers: $(this).find(".NavHead, .NavToggle")
		}).on("beforeExpand.mw-collapsible", function (evt) {
			$(this).parents(".NavFrame").find(".NavToggle").text(hideText);
		}).on("beforeCollapse.mw-collapsible", function (evt) {
			$(this).parents(".NavFrame").find(".NavToggle").text(showText);
		});
	});
}
 
mw.hook("wikipage.content").add(function () {
	mw.loader.using("jquery.makeCollapsible", createNavigationBarToggleButton);
});

/**
 * Xây dựng các hộp thẻ.
 * 
 * Phỏng theo mô hình Tabber (http://www.barelyfitz.com/projects/tabber/). Dựa trên jQuery UI.
 */
mw.hook("wikipage.content").add(function () {
    if (!$(".tabber").length) return;
    mw.loader.using("jquery.ui", function () {
        $(".tabber").each(function (tabberIdx) {
            // jQuery cần có danh sách liên kết ở đầu hộp gốc, các liên kết phải
            // chỉ đến các thẻ.
            var ul = $("<ul></ul>");
            var activeTabIdx = 0;
            $(this).find(".tabbertab").each(function (tabIdx) {
                var tabId = $(this).attr("id") ||
                    "tabber_" + tabberIdx + "_" + tabIdx;
                $(this).attr("id", tabId);
                
                // Tạo liên kết đến thẻ.
                var tabTitle = $(this).attr("title") ||
                    $(this).find("h1, h2, h3, h4, h5, h6").first()
                        .find(".mw-headline").text();
                $("<a href='#" + tabId + "'></a>").text(tabTitle)
                    .appendTo($("<li></li>").appendTo(ul));
                
                // Tìm ra thẻ mặc định.
                if ($(this).hasClass("tabbertabdefault")) activeTabIdx = tabIdx;
            });
            
            // Thêm danh sách vào hộp gốc và biến đổi hộp thành hộp thẻ.
            $(this).prepend(ul).tabs({active: activeTabIdx});
        });
    });
});

/**
 * Cố định liên kết "Tải lên tập tin".
 */
mw.hook("wikipage.content").add(function() {
    $("#t-upload a").attr("href", mw.util.getUrl("Commons:Special:UploadWizard/vi"));
});

/**
 * Icons on the top right of the article.
 * See also CSS
 *
 * @source https://www.mediawiki.org/wiki/Snippets/Top_icons
 * @author Krinkle
 * @version 6
 */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
	$content.find( '.Top_icon_raw' )
		.removeClass( 'Top_icon_raw' )
		.addClass( 'Top_icon_dynamic' )
		.prependTo( '#firstHeading' );
} );

/*
 * Chức năng: Ở lại máy chủ an toàn càng nhiều càng tốt
 * Người bảo trì: [[w:en:User:TheDJ]]
 */
if ( document.location && document.location.protocol  && document.location.protocol === 'https:' ) {
    /* Các máy chủ an toàn mới */
    importScript( 'MediaWiki:Common.js/secure new.js' );
}

/**
 * Gắn bảng giới thiệu vào đầu [[Trợ giúp:Chỗ thử]].
 */
mw.hook("wikipage.content").add(function () {
	if (mw.config.get("wgPageName") != "Trợ_giúp:Chỗ_thử" ||
		mw.config.get("wgAction") != "view" || $("#sandbox-intro").length) {
		return;
	}
	var purgeLink = mw.html.element("a", {
		href: mw.util.getUrl("Trợ_giúp:Chỗ_thử", {
			action: "edit",
			oldid: "56587",
			summary: "Tẩy trống chỗ thử",
			minor: "yes"
		})
	}, "xóa định kỳ");
	var editText = mw.html.element("b", {
		"style": "white-space: nowrap;"
	}, $("#ca-ve-edit").text());
	var intro = $(mw.html.element("div", {
		"class": "plainlinks toccolours",
		id: "sandbox-intro"
	}, new mw.html.Raw("Đây là trang bạn có thể thử thoải mái cách soạn bài " +
		"trong Wikisource. Nội dung ở đây sẽ bị " + purgeLink +
		". Để bắt đầu sửa đổi trang này, hãy nhấn chuột vào thẻ " +
		editText + " ở trên.")));
	$("#mw-content-text").wrapInner("<div class='sandbox'></div>").prepend(intro);
});

/**
 * Envelope subNotes found in main navigation header derivatives
 * Namespace coverage: Main (ns-0), Translation (ns-114)
 * See also _____
 * 
 * Ver 0.10, 2015-01-31
 */
jQuery( document ).ready( function ( $ ) {
	var nsSubNotes = [ 0, 114 ];
	if ( $.inArray( mw.config.get( 'wgNamespaceNumber' ), nsSubNotes ) !== -1 ) {
		$( 'div.subNote' ).insertBefore( $( 'div#ws-data' ) ); 
	}
} );
/**
 * Envelope hatNotes & similar into main navigation header container
 * Namespace coverage: Main (ns-0), Translation (ns-114)
 * See also _____
 * 
 * Ver 0.30, 2015-12-31
 */
jQuery( document ).ready( function ( $ ) {
	var nsHatNotes = [ 0, 114 ];
	if ( $.inArray( mw.config.get( 'wgNamespaceNumber' ), nsHatNotes ) !== -1 ) {
		$( 'div.similar' ).prependTo( $( 'div#headerContainer' ) ); 
		$( 'table.ambox' ).prependTo( $( 'div#headerContainer' ) );
	}
} );

/* Kết hàm gọi lại mw.loader.using() */
} );
/* ĐỪNG THÊM MÃ DƯỚI DÒNG NÀY */