Thành viên:Mxn/monobook.js

Bách khoa toàn thư mở Wikipedia

Cache: Sau khi lưu biểu mẫu này, phải bỏ thông tin vùng đệm (cache) của trình duyệt cho những thay đổi hiện ra được: Mozilla, Firefox, Netscape, Safari: Giữ nút Shift trong khi bấm Reload, hay bấm Ctrl+Shift+R. Internet Explorer: Bấm Ctrl+F5. Opera, Konqueror: Bấm F5.

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.

 // <nowiki>

/* Bottom tabs */
/* function morelinks() {
	var tabs = document.getElementById('p-cactions').cloneNode(true);
	tabs.id = 'mytabs';
	var listitems = tabs.getElementsByTagName('LI');
	for (i=0;i<listitems.length;i++) {
		if(listitems[i].id) listitems[i].id = 'mytabs-' + listitems[i].id;
	}
	document.getElementById('column-content').appendChild(tabs);
}
addLoadEvent(morelinks); */

/* Vietnamese Input Method - Wikipedia tiếng Việt */
// method = 3;
// on_off = 0;
dauCu = 1;
// useCookie = 1;

/* [[en:Wikipedia:WikiProject User scripts/Scripts/Fix diff width]] */
function FixDiffWidth() {
    var diffSigns = new Array();
    var fixDiffWidth = function () {
        var tables = document.getElementsByTagName('table');

        for (var i = 0; i < tables.length; i++) if (tables[i].className == 'diff') {
            var rows = tables[i].getElementsByTagName('tr');

            var diffDiv = document.createElement('div');
            diffDiv.style.backgroundColor = 'white';
            diffDiv.className = 'xdiff';

            for (var j = 0; j < rows.length; j++) {
                var rowDiv = document.createElement('div');
                rowDiv.style.width = '100%';
                rowDiv.style.margin = '0 0 3px 0';
                rowDiv.style.overflow = 'hidden';  // trick, makes it expand vertically to contain floats
                rowDiv.className = 'xdiff-row';

                var colDiv = null;
                var cols = rows[j].getElementsByTagName('td');
                for (var k = 0; k < cols.length; k++) { 
                    if (!colDiv) {
                        colDiv = document.createElement('div');
                        colDiv.style.cssFloat = 'left';
                        colDiv.style.clear = 'none';
                        colDiv.style.position = 'relative';
                        colDiv.style.width = '49%';
                        colDiv.className = 'xdiff-col';
                        rowDiv.appendChild(colDiv);
                    }
                    var innerDiv = document.createElement('div');

                    if (cols[k].getAttribute('colspan') == 2 || cols[k].className.substring(0,5) == 'diff-') {                
                        innerDiv.style.overflow = 'auto';  // scroll if necessary!
                        innerDiv.style.padding = '1px';
                        if (cols[k].getAttribute('colspan') != 2) {
                            innerDiv.style.margin = '0 0 0 2em';
                            innerDiv.style.fontSize = '85%';  // from MediaWiki:Monobook.css
                            if (cols[k].className == 'diff-addedline')   innerDiv.style.backgroundColor = '#cfc';
                            if (cols[k].className == 'diff-deletedline') innerDiv.style.backgroundColor = '#ffa';
                            if (cols[k].className == 'diff-context')     innerDiv.style.backgroundColor = '#eee';
                        }
                        innerDiv.style.textAlign = cols[k].getAttribute('align');
                        innerDiv.className = (cols[k].className ? "x"+cols[k].className : "");
                    }
                    else if (cols[k].firstChild && (cols[k].firstChild.nextSibling ||
                             cols[k].firstChild.nodeType != 3 || cols[k].firstChild.nodeValue.match(/\S/))) {
                        innerDiv.style.width = '2em';
                        innerDiv.style.textAlign = 'center';
                        innerDiv.style.position = 'absolute';
                        innerDiv.className = 'xdiff-sign';
                        diffSigns.push(innerDiv);
                    }
                    else continue; 

                    for (var node = cols[k].firstChild; node; node = node.nextSibling)
                        innerDiv.appendChild(node.cloneNode(true));
                    innerDiv.appendChild(document.createTextNode(String.fromCharCode(0xa0))); // add nbsp
                    colDiv.appendChild(innerDiv);

                    if (innerDiv.className != 'xdiff-sign')
                        colDiv = null;  // start new columns
                }
                // force rowDiv to expand, just in case position trick fails
                var clearer = document.createElement('span');
                clearer.clear = 'left';
                rowDiv.appendChild(clearer);
                diffDiv.appendChild(rowDiv);
            }
            tables[i].parentNode.replaceChild(diffDiv, tables[i]);
        }
    };
    // finally, a kluge to vertically center the +/- signs
    var centerDiffSigns = function () {
        for (var i = 0; i < diffSigns.length; i++) {
            var parentHeight;
            if (!( parentHeight = diffSigns[i].parentNode )) continue; 
            if (!( parentHeight = parentHeight.clientHeight )) continue; 
            diffSigns[i].style.top = Math.round((parentHeight - diffSigns[i].offsetHeight)/2) + "px";
        }
    };
    fixDiffWidth();
    hookEvent('resize', centerDiffSigns);
    setTimeout(centerDiffSigns, 250); 
}
if (window.addEventListener) addLoadEvent(FixDiffWidth);

/* [[en:Wikipedia:WikiProject User scripts/Scripts/addLink]] */
function addLink(where, url, name, id, title, key, after) {
    //* where is the id of the toolbar where the button should be added;
    //   i.e. one of "p-cactions", "p-personal", or "p-navigation".
    //* url is the URL which will be called when the button is clicked.
    //   javascript: urls can be used to do more complex things.
    //* name is what will appear as the name of the button.
    //* id is the id of the button; it's best to define one.  
    //   Use a prefix to make sure its unique. Optional.
    //* title is the tooltip title that gives a longer description 
    //   of the button; if you define a accesskey, mention it here. Optional.
    //* key is the char you want for the accesskey. Optional.
    //* after is the id of the button you want to follow this one. Optional.
    var na = document.createElement('a');
    na.href = url;
    na.appendChild(document.createTextNode(name));
    var li = document.createElement('li');
    if(id) li.id = id;
    li.appendChild(na);
    var tabs = document.getElementById(where).getElementsByTagName('ul')[0];
    if(after) {
        tabs.insertBefore(li,document.getElementById(after));
    } else {
        tabs.appendChild(li);
    }
    if(id) {
        if(key && title) { ta[id] = [key, title]; }
        else if(key) { ta[id] = [key, '']; }
        else if(title) { ta[id] = ['', title];} 
    }
    // re-render the title and accesskeys from existing code in wikibits.js
    akeytt();
    return li;
}

/* </nowiki>[[:en:Wikipedia:WikiProject User scripts/Scripts/Add purge to tabs|addPurge]]<nowiki> */
function AddPurge () {
    var x = document.getElementById('ca-history');
    if(!x) return;
    if(x.children) x = x.children[0].href;
    else x = x.childNodes[0].href;
    addLink("p-cactions", x.replace(/=history/, "=purge"), 'Làm sạch', 'ca-purge', 'Làm sạch vùng nhớ đệm của trang này', 0);
}
addLoadEvent(AddPurge);

/* Chia ra [[Thành viên:Mxn/Trang Chính 3]] thành tab */
/* Dựa trên mã nguồn của [http://vi.wikipedia.org/skins-1.5/common/wikibits.js] */

// fold sections for Trang Chính
// XXX: needs testing on IE/Mac and safari
// more comments to follow
function tabbedsects() {
	var container = document.getElementById('page-sects');
	if (!container || !document.createElement) return;
	if (container.nodeName.toLowerCase() == 'a') return; // Occasional IE problem
	container.className = container.className + 'jsprefs';
	var sections = new Array();
	children = container.childNodes;
	var seci = 0;
	for (i = 0; i < children.length; i++) {
		if (children[i].nodeName.toLowerCase() == 'div') {
			children[i].id = 'prefsection-' + seci;
			children[i].className = 'prefsection';
			if (is_opera || is_khtml)
				children[i].className = 'prefsection operaprefsection';
			legends = children[i].getElementsByTagName('h2');
			sections[seci] = new Object();
			legends[0].className = 'mainLegend';
			if (legends[0] && legends[0].firstChild.nodeValue)
				sections[seci].text = legends[0].firstChild.nodeValue;
			else
				sections[seci].text = '# ' + seci;
			sections[seci].secid = children[i].id;
			seci++;
			if (sections.length != 1) children[i].style.display = 'none';
			else var selectedid = children[i].id;
		}
	}
	var toc = document.createElement('ul');
	toc.id = 'preftoc';
	toc.selectedid = selectedid;
	for (i = 0; i < sections.length; i++) {
		var li = document.createElement('li');
		if (i == 0) li.className = 'selected';
		var a = document.createElement('a');
		a.href = '#' + sections[i].secid;
		a.onmousedown = a.onclick = uncoversection;
		a.appendChild(document.createTextNode(sections[i].text));
		a.secid = sections[i].secid;
		li.appendChild(a);
		toc.appendChild(li);
	}
	container.parentNode.insertBefore(toc, container.parentNode.childNodes[0]);
}

addLoadEvent(tabbedsects);

/* ToDo: [https://bugzilla.mozilla.org/show_bug.cgi?id=339127] */

function addHoverEvent(obj, over, out) {
  if (window.addEventListener) {
    obj.addEventListener("mouseover", over, false);
    obj.addEventListener("mouseout", out, false);
  }
  else if (window.attachEvent) {
    obj.attachEvent("onmouseover", over);
    obj.attachEvent("onmouseout", out);
  }
}

/* Sửa tựa bài */
/* Giống http://userscripts.org/scripts/source/5690.user.js */
function fixTitle() {
  var tmpl = document.getElementById("restrictions");
  var corr = document.getElementById("correctTitle");
  if (!tmpl || !corr) return;
  for (var i = 0; h = document.getElementsByTagName("h1")[i]; i++) {
    if (h.className != "firstHeading") continue;
    hText = h.textContent;
    corrText = corr.textContent;
    var hClean = hText.replace(/\W|_/g, "").toLowerCase();
    var corrClean = corrText.replace(/\W|_/g, "").toLowerCase();
    if (hClean != corrClean) return; // Để tránh phá hoại
    document.body.className += " wrongTitle";
    document.title = document.title.replace(hText, corrText);
    h.textContent = corrText;
    // Để cho người dùng không liên kết đến bài sai
    over = function() { this.textContent = hText; }
    out = function() { this.textContent = corrText; }
    addHoverEvent(h, over, out);
    return;
  }
}
addLoadEvent(fixTitle);

// </nowiki>