📄 wikibits.js
字号:
// MediaWiki JavaScript support functionsvar clientPC = navigator.userAgent.toLowerCase(); // Get client infovar is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));var is_safari = ((clientPC.indexOf('applewebkit')!=-1) && (clientPC.indexOf('spoofer')==-1));var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));// For accesskeysvar is_ff2_win = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('windows')!=-1;var is_ff2_x11 = (clientPC.indexOf('firefox/2')!=-1 || clientPC.indexOf('minefield/3')!=-1) && clientPC.indexOf('x11')!=-1;if (clientPC.indexOf('opera') != -1) { var is_opera = true; var is_opera_preseven = (window.opera && !document.childNodes); var is_opera_seven = (window.opera && document.childNodes); var is_opera_95 = (clientPC.search(/opera\/(9.[5-9]|[1-9][0-9])/)!=-1);}// Global external objects used by this script./*extern ta, stylepath, skin */// add any onload functions in this hook (please don't hard-code any events in the xhtml source)var doneOnloadHook;if (!window.onloadFuncts) { var onloadFuncts = [];}function addOnloadHook(hookFunct) { // Allows add-on scripts to add onload functions onloadFuncts[onloadFuncts.length] = hookFunct;}function hookEvent(hookName, hookFunct) { if (window.addEventListener) { window.addEventListener(hookName, hookFunct, false); } else if (window.attachEvent) { window.attachEvent("on" + hookName, hookFunct); }}// document.write special stylesheet linksif (typeof stylepath != 'undefined' && typeof skin != 'undefined') { if (is_opera_preseven) { document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera6Fixes.css">'); } else if (is_opera_seven && !is_opera_95) { document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera7Fixes.css">'); } else if (is_opera_95) { document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/Opera95Fixes.css">'); } else if (is_khtml) { document.write('<link rel="stylesheet" type="text/css" href="'+stylepath+'/'+skin+'/KHTMLFixes.css">'); }}if (wgBreakFrames) { // Un-trap us from framesets if (window.top != window) { window.top.location = window.location; }}// for enhanced RecentChangesfunction toggleVisibility(_levelId, _otherId, _linkId) { var thisLevel = document.getElementById(_levelId); var otherLevel = document.getElementById(_otherId); var linkLevel = document.getElementById(_linkId); if (thisLevel.style.display == 'none') { thisLevel.style.display = 'block'; otherLevel.style.display = 'none'; linkLevel.style.display = 'inline'; } else { thisLevel.style.display = 'none'; otherLevel.style.display = 'inline'; linkLevel.style.display = 'none'; }}function historyRadios(parent) { var inputs = parent.getElementsByTagName('input'); var radios = []; for (var i = 0; i < inputs.length; i++) { if (inputs[i].name == "diff" || inputs[i].name == "oldid") { radios[radios.length] = inputs[i]; } } return radios;}// check selection and tweak visibility/class onclickfunction diffcheck() { var dli = false; // the li where the diff radio is checked var oli = false; // the li where the oldid radio is checked var hf = document.getElementById('pagehistory'); if (!hf) { return true; } var lis = hf.getElementsByTagName('li'); for (var i=0;i<lis.length;i++) { var inputs = historyRadios(lis[i]); if (inputs[1] && inputs[0]) { if (inputs[1].checked || inputs[0].checked) { // this row has a checked radio button if (inputs[1].checked && inputs[0].checked && inputs[0].value == inputs[1].value) { return false; } if (oli) { // it's the second checked radio if (inputs[1].checked) { oli.className = "selected"; return false; } } else if (inputs[0].checked) { return false; } if (inputs[0].checked) { dli = lis[i]; } if (!oli) { inputs[0].style.visibility = 'hidden'; } if (dli) { inputs[1].style.visibility = 'hidden'; } lis[i].className = "selected"; oli = lis[i]; } else { // no radio is checked in this row if (!oli) { inputs[0].style.visibility = 'hidden'; } else { inputs[0].style.visibility = 'visible'; } if (dli) { inputs[1].style.visibility = 'hidden'; } else { inputs[1].style.visibility = 'visible'; } lis[i].className = ""; } } } return true;}// page history stuff// attach event handlers to the input elements on history pagefunction histrowinit() { var hf = document.getElementById('pagehistory'); if (!hf) { return; } var lis = hf.getElementsByTagName('li'); for (var i = 0; i < lis.length; i++) { var inputs = historyRadios(lis[i]); if (inputs[0] && inputs[1]) { inputs[0].onclick = diffcheck; inputs[1].onclick = diffcheck; } } diffcheck();}// generate toc from prefs form, fold sections// XXX: needs testing on IE/Mac and safari// more comments to followfunction tabbedprefs() { var prefform = document.getElementById('preferences'); if (!prefform || !document.createElement) { return; } if (prefform.nodeName.toLowerCase() == 'a') { return; // Occasional IE problem } prefform.className = prefform.className + 'jsprefs'; var sections = []; var children = prefform.childNodes; var seci = 0; for (var i = 0; i < children.length; i++) { if (children[i].nodeName.toLowerCase() == 'fieldset') { children[i].id = 'prefsection-' + seci; children[i].className = 'prefsection'; if (is_opera || is_khtml) { children[i].className = 'prefsection operaprefsection'; } var legends = children[i].getElementsByTagName('legend'); sections[seci] = {}; 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); } prefform.parentNode.insertBefore(toc, prefform.parentNode.childNodes[0]); document.getElementById('prefsubmit').id = 'prefcontrol';}function uncoversection() { var oldsecid = this.parentNode.parentNode.selectedid; var newsec = document.getElementById(this.secid); if (oldsecid != this.secid) { var ul = document.getElementById('preftoc'); document.getElementById(oldsecid).style.display = 'none'; newsec.style.display = 'block'; ul.selectedid = this.secid; var lis = ul.getElementsByTagName('li'); for (var i = 0; i< lis.length; i++) { lis[i].className = ''; } this.parentNode.className = 'selected'; } return false;}// Timezone stuff// tz in format [+-]HHMMfunction checkTimezone(tz, msg) { var localclock = new Date(); // returns negative offset from GMT in minutes var tzRaw = localclock.getTimezoneOffset(); var tzHour = Math.floor( Math.abs(tzRaw) / 60); var tzMin = Math.abs(tzRaw) % 60; var tzString = ((tzRaw >= 0) ? "-" : "+") + ((tzHour < 10) ? "0" : "") + tzHour + ((tzMin < 10) ? "0" : "") + tzMin; if (tz != tzString) { var junk = msg.split('$1'); document.write(junk[0] + "UTC" + tzString + junk[1]); }}function unhidetzbutton() { var tzb = document.getElementById('guesstimezonebutton'); if (tzb) { tzb.style.display = 'inline'; }}// in [-]HH:MM format...// won't yet work with non-even tzsfunction fetchTimezone() { // FIXME: work around Safari bug var localclock = new Date(); // returns negative offset from GMT in minutes var tzRaw = localclock.getTimezoneOffset(); var tzHour = Math.floor( Math.abs(tzRaw) / 60); var tzMin = Math.abs(tzRaw) % 60; var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour + ":" + ((tzMin < 10) ? "0" : "") + tzMin; return tzString;}function guessTimezone(box) { document.getElementsByName("wpHourDiff")[0].value = fetchTimezone();}function showTocToggle() { if (document.createTextNode) { // Uses DOM calls to avoid document.write + XHTML issues var linkHolder = document.getElementById('toctitle'); if (!linkHolder) { return; } var outerSpan = document.createElement('span'); outerSpan.className = 'toctoggle'; var toggleLink = document.createElement('a'); toggleLink.id = 'togglelink'; toggleLink.className = 'internal'; toggleLink.href = 'javascript:toggleToc()'; toggleLink.appendChild(document.createTextNode(tocHideText)); outerSpan.appendChild(document.createTextNode('[')); outerSpan.appendChild(toggleLink); outerSpan.appendChild(document.createTextNode(']')); linkHolder.appendChild(document.createTextNode(' ')); linkHolder.appendChild(outerSpan); var cookiePos = document.cookie.indexOf("hidetoc="); if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) { toggleToc(); } }}function changeText(el, newText) { // Safari work around if (el.innerText) { el.innerText = newText; } else if (el.firstChild && el.firstChild.nodeValue) { el.firstChild.nodeValue = newText; }}function toggleToc() { var toc = document.getElementById('toc').getElementsByTagName('ul')[0]; var toggleLink = document.getElementById('togglelink'); if (toc && toggleLink && toc.style.display == 'none') { changeText(toggleLink, tocHideText); toc.style.display = 'block'; document.cookie = "hidetoc=0"; } else { changeText(toggleLink, tocShowText); toc.style.display = 'none'; document.cookie = "hidetoc=1"; }}var mwEditButtons = [];var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js// this function generates the actual toolbar buttons with localized text// we use it to avoid creating the toolbar where javascript is not enabledfunction addButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) { // Don't generate buttons for browsers which don't fully // support it. mwEditButtons[mwEditButtons.length] = {"imageId": imageId, "imageFile": imageFile, "speedTip": speedTip, "tagOpen": tagOpen, "tagClose": tagClose, "sampleText": sampleText};}// this function generates the actual toolbar buttons with localized text// we use it to avoid creating the toolbar where javascript is not enabledfunction mwInsertEditButton(parent, item) { var image = document.createElement("img"); image.width = 23; image.height = 22; image.className = "mw-toolbar-editbutton"; if (item.imageId) image.id = item.imageId; image.src = item.imageFile; image.border = 0; image.alt = item.speedTip; image.title = item.speedTip; image.style.cursor = "pointer"; image.onclick = function() { insertTags(item.tagOpen, item.tagClose, item.sampleText); return false; }; parent.appendChild(image); return true;}function mwSetupToolbar() { var toolbar = document.getElementById('toolbar'); if (!toolbar) { return false; } var textbox = document.getElementById('wpTextbox1'); if (!textbox) { return false; } // Don't generate buttons for browsers which don't fully // support it. if (!(document.selection && document.selection.createRange) && textbox.selectionStart === null) { return false; } for (var i = 0; i < mwEditButtons.length; i++) { mwInsertEditButton(toolbar, mwEditButtons[i]); } for (var i = 0; i < mwCustomEditButtons.length; i++) { mwInsertEditButton(toolbar, mwCustomEditButtons[i]); } return true;}function escapeQuotes(text) { var re = new RegExp("'","g"); text = text.replace(re,"\\'"); re = new RegExp("\\n","g"); text = text.replace(re,"\\n"); return escapeQuotesHTML(text);}function escapeQuotesHTML(text) { var re = new RegExp('&',"g"); text = text.replace(re,"&"); re = new RegExp('"',"g"); text = text.replace(re,"""); re = new RegExp('<',"g"); text = text.replace(re,"<"); re = new RegExp('>',"g"); text = text.replace(re,">"); return text;}// apply tagOpen/tagClose to selection in textarea,// use sampleText instead of selection if there is nonefunction insertTags(tagOpen, tagClose, sampleText) { var txtarea; if (document.editform) { txtarea = document.editform.wpTextbox1; } else { // some alternate form? take the first one we can find var areas = document.getElementsByTagName('textarea'); txtarea = areas[0]; } var selText, isSample = false; if (document.selection && document.selection.createRange) { // IE/Opera //save window scroll position if (document.documentElement && document.documentElement.scrollTop) var winScroll = document.documentElement.scrollTop else if (document.body) var winScroll = document.body.scrollTop; //get current selection txtarea.focus(); var range = document.selection.createRange(); selText = range.text; //insert tags checkSelectedText(); range.text = tagOpen + selText + tagClose; //mark sample text as selected if (isSample && range.moveStart) { if (window.opera) tagClose = tagClose.replace(/\n/g,''); range.moveStart('character', - tagClose.length - selText.length); range.moveEnd('character', - tagClose.length); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -