მედიავიკი:Common.js
შენიშვნა: გამოქვეყნების შემდეგ შესაძლოა დაგჭირდეთ ბრაუზერის ქეშის გაწმენდა ცვლილებების სანახავად.
- Firefox / Safari: დააჭირეთ Shift და Reload, ან დააჭირეთ Ctrl-F5, ან Ctrl-R (⌘-R Mac-ზე);
- Google Chrome: დააჭირეთ Ctrl-Shift-R (⌘-Shift-R Mac-ზე);
- IE / Edge: დააჭირეთ Ctrl და Refresh, ან დააჭირეთ Ctrl-F5;
- Opera გაწმინდეთ კეში Tools→Preferences-დან.
// ===========================================================
// IP მომხმარებლები წინასწარ გადახედვის გარეშე გვერდს ვერ ინახავენ
// ===========================================================
// Force IP to preview before saving changes.
// Copyright Marc Mongenet, 2006
function forcePreview()
{
if (mw.config.get('wgUserName') != null || mw.config.get('wgAction') != "edit") return;
var saveButton = document.getElementById("wpSave");
if (!saveButton) return;
// if (location.search.search(/&action=edit/) == -1) return;
saveButton.disabled = true;
saveButton.value = "გვერდის შენახვა (გთხოვთ ჯერ გამოიყენოთ წინასწარ გადახედვა)";
saveButton.style.fontWeight = "normal";
document.getElementById("wpPreview").style.fontWeight = "bold";
}
$(forcePreview);
// ====================================================================
// დასასრული - IP მომხმარებლები წინასწარ გადახედვის გარეშე გვერდს ვერ ინახავენ
// ====================================================================
/*ფაილის დამატების გვერდზე აღწერის ველში თარგის ჩასმა*/
function uploadPage(){
var desc = document.getElementById('wpUploadDescription');
var temp = document.getElementById('infoTemplate');
if (temp && desc && !desc.value) desc.value = temp.innerHTML;
}
if (mw.config.get('wgCanonicalNamespace') == 'Special' && mw.config.get('wgCanonicalSpecialPageName') == 'Upload')
$(uploadPage);
/*</pre>
==JavaScript standard library==
<pre>*/
/*</pre>
=== DOM creation ===
<pre>*/
/**
* Create a new DOM node for the current document.
* Basic usage: var mySpan = newNode('span', "Hello World!")
* Supports attributes and event handlers*: var mySpan = newNode('span', {style:"color: red", focus: function(){alert(this)}, id:"hello"}, "World, Hello!")
* Also allows nesting to create trees: var myPar = newNode('p', newNode('b',{style:"color: blue"},"Hello"), mySpan)
*
* *event handlers, there are some issues with IE6 not registering event handlers on some nodes that are not yet attached to the DOM,
* it may be safer to add event handlers later manually.
**/
function newNode(tagname){
var node = document.createElement(tagname);
for( var i=1;i<arguments.length;i++ ){
if(typeof arguments[i] == 'string'){ //Text
node.appendChild( document.createTextNode(arguments[i]) );
}else if(typeof arguments[i] == 'object'){
if(arguments[i].nodeName){ //If it is a DOM Node
node.appendChild(arguments[i]);
}else{ //Attributes (hopefully)
for(var j in arguments[i]){
if(j == 'class'){ //Classname different because...
node.className = arguments[i][j];
}else if(j == 'style'){ //Style is special
node.style.cssText = arguments[i][j];
}else if(typeof arguments[i][j] == 'function'){ //Basic event handlers
try{ node.addEventListener(j,arguments[i][j],false); //W3C
}catch(e){try{ node.attachEvent('on'+j,arguments[i][j],"Language"); //MSIE
}catch(e){ node['on'+j]=arguments[i][j]; }} //Legacy
}else{
node.setAttribute(j,arguments[i][j]); //Normal attributes
}
}
}
}
}
return node;
}
/*</pre>
=== CSS ===
<pre>*/
/**
* Cross browser CSS - yurk
* @deprecated: Use mw.util.addCSS() instead
*/
var p_styleSheet=false;
window.addCSSRule = function (selector,cssText){
mw.util.addCSS( selector+'{' + cssText + '}' );
}
//initialize the storage for script options. Gadgets that set script
//options should also include this line as they are loaded before us.
if ( typeof WiktScriptPrefs == 'undefined') {
WiktScriptPrefs = {};
}
/*</pre>
===[[MediaWiki:Youhavenewmessages]] to display differently for non-newbies with JS than for others===
<pre>*/
/* Suspected unresponsive page culprit: see the GP (Nov. 2010, "Blocking script execution on each page") */
/* if (wgUserGroups && wgUserGroups.join("").indexOf("autoconfirmed") > -1)
{
addCSSRule(".msgfornewbies", "display: none");
}else{
addCSSRule(".msgfornonnewbies", "display: none");
} */
/*</pre>
===Edit page javascript===
<pre>*/
$(document).ready( function() {
if ( mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit' || document.getElementById('editpage-specialchars') ) {
importScript('მედიავიკი:Edit.js');
}
});
/*</pre>
====Turn headings in comments into real headings on JavaScript source pages====
<pre>*/
if ((mw.config.get('wgNamespaceNumber') == 2 || mw.config.get('wgNamespaceNumber') == 8) && mw.config.get('wgTitle').lastIndexOf('.js') != -1 && mw.config.get('wgAction') == 'view') {
importScript('MediaWiki:JavascriptHeadings.js');
}
/*</pre>
==URL Fixes==
<pre>*/
/**
* doRedirect will redirect if a did you mean box is found, and create a
* "redirected from X" if a rdfrom is passed in the get parameters
* The first half is an ugly workaround for Bugzilla:3339, :(
* The second half is an ugly workaround for not having serverware support :(
**/
/*</pre>
===Fix Wikified section titles===
<pre>*/
$(function () {
// {temp|template}
if (/\.7B\.7Btemp\.7C(.*?)\.7D\.7D/.test(window.location.href)) {
var url=window.location.href.replace(/\.7B\.7Btemp.7C/g, ".7B.7B");
window.location = url;
}
});
$(function () {
if(mw.config.get('wgAction') != 'edit')
return;
if(! /[?&]section=\d/.test(window.location.href))
return;
var wpSummary = document.getElementById('wpSummary');
if(! wpSummary)
return;
if(wpSummary.value.substr(0, 3) != '/* ')
return;
if(wpSummary.value.substr(wpSummary.value.length - 4) != ' */ ')
return;
wpSummary.value = wpSummary.value.replace(/\{\{temp(late)?\|/g, '{{');
});
/*</pre>
== Visibility toggling ==
<pre>*/
var VisibilityToggles = {
// toggles[category] = [[ჩვენება, დამალვა],...]; statuses[category] = [true, false,...]; buttons = <li>
toggles: {}, statuses: {}, buttons: null,
// Add a new toggle, adds a Show/Hide category button in the toolbar,
// and will call show_function and hide_function once on register, and every alternate click.
register: function (category, show_function, hide_function) {
var id = 0;
if (!this.toggles[category]) {
this.toggles[category] = [];
this.statuses[category] = [];
} else {
id = this.toggles[category].length;
}
this.toggles[category].push([show_function, hide_function]);
this.statuses[category].push(this.currentStatus(category));
this.addGlobalToggle(category);
(this.statuses[category][id] ? show_function : hide_function)();
return function () {
var statuses = VisibilityToggles.statuses[category];
statuses[id] = !statuses[id];
VisibilityToggles.checkGlobalToggle(category);
return (statuses[id] ? show_function : hide_function)();
};
},
// Add a new global toggle to the side bar
addGlobalToggle: function(category) {
if (document.getElementById('p-visibility-'+category))
return;
if (!this.buttons) {
this.buttons = newNode('ul');
var collapsed, toolbox = newNode('div', {'class': "portal portlet "},
newNode('div', {'class': "pBody body"}, collapsed?undefined:{'style':'display:block;'}, this.buttons)
);
var sidebar = document.getElementById('mw-panel') || document.getElementById('column-one');
var insert = null;
if (insert = (document.getElementById('p-lang') || document.getElementById('p-feedback')))
sidebar.insertBefore(toolbox, insert);
else
sidebar.appendChild(toolbox);
}
var status = this.currentStatus(category);
var newToggle = newNode('li', newNode('a', {
id: 'p-visibility-' + category,
style: 'cursor: pointer',
href: '#visibility-' + category,
click: function(e)
{
VisibilityToggles.toggleGlobal(category);
if (e && e.preventDefault)
e.preventDefault();
else
window.event.returnValue = false;
return false;
}},
(status ? 'დამალვა ' : 'ჩვენება ') + category));
for (var i=0; i < this.buttons.childNodes.length; i++) {
if (this.buttons.childNodes[i].id < newToggle.id) {
this.buttons.insertBefore(newToggle, this.buttons.childNodes[i]);
return;
}
}
this.buttons.appendChild(newToggle);
},
// Update the toggle-all buttons when all things are toggled one way
checkGlobalToggle: function(category) {
var statuses = this.statuses[category];
var status = statuses[0];
for (var i = 1; i < statuses.length; i++) {
if (status != statuses[i])
return;
}
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'დამალვა ' : 'ჩვენება ') + category;
},
// Toggle all un-toggled elements when the global button is clicked
toggleGlobal: function(category) {
var status = document.getElementById('p-visibility-' + category).innerHTML.indexOf('ჩვენება ') == 0;
for (var i = 0; i < this.toggles[category].length; i++ ) {
if (this.statuses[category][i] != status) {
this.toggles[category][i][status ? 0 : 1]();
this.statuses[category][i] = status;
}
}
document.getElementById('p-visibility-' + category).innerHTML = (status ? 'დამალვა ' : 'ჩვენება ') + category;
var current = $.cookie('Visibility');
if (!current)
current = ";";
current = current.replace(';' + category + ';', ';');
if (status)
current = current + category + ";";
$.cookie('Visibility', current);
},
currentStatus: function(category) {
if ($.cookie('WiktionaryPreferencesShowNav') == 'true')
return true;
else if ($.cookie('Visibility') && $.cookie('Visibility').indexOf(';' + category + ';') >= 0)
return true;
return false; // TODO load this from category specific cookies
}
};
/*</pre>
=== NavBars ===
<pre>*/
var NavigationBarHide = 'დახურვა ▲';
var NavigationBarShow = 'გაშლა ▼';
function NavToggleCategory(navFrame)
{
var table = navFrame.getElementsByTagName('table')[0];
if (table && table.className == "translations")
return "translations";
var heading = navFrame.previousSibling;
while (heading) {
if (/[hH][4-6]/.test(heading.nodeName)) {
if (heading.getElementsByTagName('span')[1]) {
return heading.getElementsByTagName('span')[1].innerHTML.toLowerCase();
}
else {
return heading.getElementsByTagName('span')[0].innerHTML.toLowerCase();
}
}
else if (/[hH][1-3]/.test(heading.nodeName))
break;
heading = heading.previousSibling;
}
return "other boxes";
}
function createNavToggle(navFrame){
var navHead, navContent;
for (var j=0; j < navFrame.childNodes.length; j++) {
var div = navFrame.childNodes[j];
switch (div.className) {
case 'NavHead':
navHead = div;
break;
case 'NavContent':
navContent = div;
break;
}
}
if (!navHead || !navContent)
return;
// Step 1, don't react when a subitem is clicked.
for (var i=0; i<navHead.childNodes.length; i++) {
var child = navHead.childNodes[i];
if (child.nodeType == 1) {
child.onclick = function (e)
{
if (e && e.stopPropagation)
e.stopPropagation();
else
window.event.cancelBubble = true;
};
}
}
// Step 2, toggle visibility when bar is clicked.
// NOTE This function was chosen due to some funny behaviour in Safari.
navToggle = newNode('a', {href: 'javascript:(function(){})()'}, '');
navHead.insertBefore(newNode('span', {'class': 'NavToggle'}, '[', navToggle, ']'), navHead.firstChild);
navHead.style.cursor = "pointer";
navHead.onclick = VisibilityToggles.register(NavToggleCategory(navFrame),
function show() {
navToggle.innerHTML = NavigationBarHide;
if (navContent)
navContent.style.display = "block";
},
function hide() {
navToggle.innerHTML = NavigationBarShow;
if (navContent)
navContent.style.display = "none";
});
}
$( function ()
{
var divs = $(".NavFrame");
for (var i=0; i<divs.length; i++) {
// NOTE: some templates use a class of NavFrame for the style, but for legacy reasons, are not NavFrames
if (divs[i].className == "NavFrame") {
createNavToggle(divs[i]);
}
}
});
function NavToggleCategory(flexBar)
{
var table = flexBar.getElementsByTagName('table')[0];
if (table && table.className == "flexion")
return "flexion";
var heading = flexBar.previousSibling;
while (heading) {
if (/[hH][4-6]/.test(heading.nodeName)) {
if (heading.getElementsByTagName('span')[1]) {
return heading.getElementsByTagName('span')[1].innerHTML.toLowerCase();
}
else {
return heading.getElementsByTagName('span')[0].innerHTML.toLowerCase();
}
}
else if (/[hH][1-3]/.test(heading.nodeName))
break;
heading = heading.previousSibling;
}
return "other boxes";
}
function createNavToggle(flexBar){
var navHead, navContent;
for (var j=0; j < flexBar.childNodes.length; j++) {
var div = flexBar.childNodes[j];
switch (div.className) {
case 'NavHead':
navHead = div;
break;
case 'NavContent':
navContent = div;
break;
}
}
if (!navHead || !navContent)
return;
// Step 1, don't react when a subitem is clicked.
for (var i=0; i<navHead.childNodes.length; i++) {
var child = navHead.childNodes[i];
if (child.nodeType == 1) {
child.onclick = function (e)
{
if (e && e.stopPropagation)
e.stopPropagation();
else
window.event.cancelBubble = true;
};
}
}
// Step 2, toggle visibility when bar is clicked.
// NOTE This function was chosen due to some funny behaviour in Safari.
navToggle = newNode('a', {href: 'javascript:(function(){})()'}, '');
navHead.insertBefore(newNode('span', {'class': 'NavToggle'}, '[', navToggle, ']'), navHead.firstChild);
navHead.style.cursor = "pointer";
navHead.onclick = VisibilityToggles.register(NavToggleCategory(flexBar),
function show() {
navToggle.innerHTML = NavigationBarHide;
if (navContent)
navContent.style.display = "block";
},
function hide() {
navToggle.innerHTML = NavigationBarShow;
if (navContent)
navContent.style.display = "none";
});
}
$( function ()
{
var divs = $(".flexBar");
for (var i=0; i<divs.length; i++) {
// NOTE: some templates use a class of flexBar for the style, but for legacy reasons, are not flexBars
if (divs[i].className == "flexBar") {
createNavToggle(divs[i]);
}
}
});
/*</pre>
===Scripts specific to Internet Explorer===
<pre>*/
if (navigator.appName == "Microsoft Internet Explorer")
{
// In print IE (7?) does not like line-height
mw.util.addCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
// IE overflow bug
mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
// IE zoomfix
// Use to fix right floating div/table inside tables
mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}');
}
$(function () {
if(document.getElementById('YRNewStuff-enable-button'))
{
document.getElementById('YRNewStuff-enable-button').innerHTML = "";
var toggle = newNode('span', {click: function ()
{
if( $.cookie("YRNewStuff") ){
$.cookie("YRNewStuff", null,{path:"/"});
toggle.innerHTML = "Enable tabbed languages and definition editing options.";
}
else{
$.cookie("YRNewStuff",1,{expires:30,path:"/"});
toggle.innerHTML = "Disable tabbed languages and definition editing options.";
}
} }, ($.cookie("YRNewStuff")?"Disable":"Enable")+" tabbed languages and definition editing options.");
document.getElementById('YRNewStuff-enable-button').appendChild(toggle);
}
});
// ჩამოსაშლელი მენიუ თარგისთვის [[თარგი:ფორმატირების მენიუ]] (გერმანული ვიქსიკონიდან)
function chooseLanguage(s) {
var l = document.getElementById('formatmenue').getElementsByTagName('p');
for (var i = 0; i < l.length ; i++) {
l[i].style.display = i == s ? 'inline' : 'none';
}
}
function addNewarticleSubsetMenu() {
var formatmenue = document.getElementById('formatmenue');
if (formatmenue) {
var menu = "<select style=\"display:inline\" onChange=\"chooseLanguage(selectedIndex)\">";
var l = formatmenue.getElementsByTagName('p');
for (var i = 0; i < l.length ; i++) {
menu += "<option>" + l[i].title + "</option>";
}
menu += "</select>";
formatmenue.innerHTML = menu + formatmenue.innerHTML;
chooseLanguage(0); // wähle oberste Option aus
}
}
$(document).ready(addNewarticleSubsetMenu);
// Move edittools charinsert before wikieditor toolbar
$(function() { $('#mw-edittools-charinsert').insertBefore('.wikiEditor-ui'); });