User:MarkS/XEB/dev.js

/* Version: 3.1

* ============================================================

* en: ADD SOME EXTRA BUTTONS TO THE EDITPANEL

* de: FÜGE NEUE BUTTON IN DIE WERKZEUGLEISTE

* pt: ACRESCENTA ALGUNS BOTÕES EXTRAS AO PAINEL DE EDIÇÃO

* ============================================================

* Vorschläge für neue Buttons werden gerne entgegengenommen

* Die Reihenfolge und Anzahl der Buttons ist über die (alphabetische) Variable XEBOrder wählbar.

*

* ================================

* Control Variables

*

* window.rmEditButtons - Removes standard toolbar buttons

* window.XEBOrder - The order in which the buttons are displayed

* window.myButtons - Add user defined buttons

*

*/

mw.loader.load( '//en.wikipedia.org/w/index.php?title=User:MarkS/XEB/live.css&action=raw&ctype=text/css', 'text/css' );

if (typeof XEBPopups === 'undefined') {

XEBPopups = true;

}

if (typeof XEBHideDelay === 'undefined') {

// Time before the popup disappears after the mouse moves out

window.XEBHideDelay = 0.5;

}

if (typeof XEBExtendEditSummary === 'undefined') {

// Is the edit summary extended after a popup

window.XEBExtendEditSummary = true;

}

if (typeof usersignature === 'undefined') {

var usersignature = '-- ~~' + '~~';

}

var Isrc = '//upload.wikimedia.org/wikipedia/commons/';

var BDict = {

'A': ['e/e9/Button_headline2.png', 'Secondary headline', '\n===', '===', 'Secondary headline'],

'B': ['1/13/Button_enter.png', 'Line break', '
', , ],

'C': ['5/5f/Button_center.png', 'Center', '

\n', '\n<\/div>', 'Centred text'],

'D': ['e/ea/Button_align_left.png', 'Left-Align', '

\n', '\n<\/div>', 'Left-aligned text'],

'D1': ['a/a5/Button_align_right.png', 'Right-Align', '

\n', '\n<\/div>', 'Right-aligned text'],

'E': ['0/04/Button_array.png', 'Table', '\n

class="wikitable" \n
\n| 12\n
\n| 34', '\n
\n', ''],

'F': ['1/1e/Button_font_color.png', 'Insert coloured text', 'Coloured text<\/span>', 'ColourName'],

'FS': ['1/1b/Button_miss_signature.png', 'Unsigned post', '— Preceding unsigned comment added by ', ' (talkcontribs) date', 'user name or IP'],

'G': ['9/9e/Btn_toolbar_gallery.png', 'Picture gallery', "\n\nImage:", "|M63\nImage:Mona Lisa.jpg|Mona Lisa\nImage:Truite arc-en-ciel.jpg|Eine Forelle \n<\/gallery>", 'M63.jpg'],

'H': ['7/74/Button_comment.png', 'Comment', "", 'Comment'],

'I1': ['6/6a/Button_sup_letter.png', 'Superscript', '', '<\/sup>', 'Superscript text'],

'I2': ['a/aa/Button_sub_letter.png', 'Subscript', '', '<\/sub>', 'Subscript text'],

'J1': ['5/58/Button_small.png', 'Small', '', '<\/small>', 'Small Text'],

'J2': ['5/56/Button_big.png', 'Big text', '', '<\/big>', 'Big text'],

'K': ['b/b4/Button_category03.png', 'Category', "Category:", "", 'Category name'],

'L': ['8/8e/Button_shifting.png', 'Insert tab(s)', ':', '', ':'],

'M': ['f/fd/Button_blockquote.png', 'Insert block of quoted text', '

\n', '\n<\/blockquote>', 'Block quote'],

'N': ['4/4b/Button_nbsp.png', 'nonbreaking space', ' ', , ],

'O': ['2/23/Button_code.png', 'Insert code', '', '<\/code>', 'Code'],

'P': ['3/3c/Button_pre.png', 'Pre formatted Text', '

', '<\/pre>', 'Pre formatted text'],

'P1': ['9/93/Button_sub_link.png', 'Insert link to sub-page', '', '/Sub_Page', 'Page'],

'Q': ['d/d3/Button_definition_list.png', 'Insert definition list', '\n; ', '\n: Item 1\n: Item 2', 'Definition'],

'R': ['7/79/Button_reflink.png', 'Insert a reference', '', '<\/ref>', 'Insert reference material'],

'R1': ['7/79/Button_reflink.png', 'Start a reference', '', '', 'Reference material'],

'R3': ['1/1a/Button_reflink_advanced_3.png', 'No reference material', , '"/>', ],

'R4': ['9/9a/Button_references.png', 'Reference footer', "\n==Notes==\n\n

\n\n
", , ],

'S': ['c/c9/Button_strike.png', 'Strikeout', '', '<\/s>', 'Struck out text'],

'T': ['e/eb/Button_plantilla.png', 'Template', '{{', '}}', 'Template name'],

'TS': ['a/a4/TableStart.png', 'Start a table', '

', , ],

'TC': ['7/71/TableCell.png', 'Table cell', '|', , ],

'TE': ['0/06/TableEnd.png', 'End a table', , '

', ],

'TR': ['4/4c/TableRow.png', 'Start a table row', '|-', , ],

'T1': ['3/30/Tt_icon.png', 'Teletype text', '', '<\/tt>', 'Teletype Text'],

'TL': ['3/37/Button_tl_template.png', 'Template link', "{{subst:" + "tl|", '}}', 'Template name'],

'U': ['f/fd/Button_underline.png', 'Underlined', "", "<\/u>", 'Underlined text'],

'V': ['c/c8/Button_redirect.png', 'Redirect', "#REDIRECT ", "", 'Article Name'],

'W': ['8/88/Btn_toolbar_enum.png', 'Numbering', "\n# ", "\n# Element 2\n# Element 3", 'Element 1'],

'X': ['1/11/Btn_toolbar_liste.png', 'List', "\n* ", "\n* Element B\n* Element C", 'Element A'],

'Y1': ['c/ce/Button_no_include.png', 'No Include', "", "<\/noinclude>", 'Text'],

'Y2': ['7/79/Button_include.png', 'Include only', "", "<\/includeonly>", 'Text'],

'Z': ['3/35/Button_substitute.png', 'Substitute', "{{subst:", "}}", 'Template'],

'AI': ['1/1c/Button_advanced_image.png', 'Advanaced Image', "Image:", "", 'FileName.jpg'],

'GEO': ['b/b8/Button_Globe.png', 'Geo location', "", "", ""],

'TALK': ['4/49/Button_talk.png', 'Add talk template', "", "", ""]

};

var XEBOrder2 = [];

initButtons();

if (!mw.config.get( 'wgIsArticle' )) {

// only if edit

if (XEBPopups) {

$(extendButtons);

}

}

function initButtons() {

var bc, d, i, customTools = {};

if (typeof XEBOrder !== 'string') {

// can be modified

XEBOrder2 = 'A,D,C,D1,F,U,J1,E,G,Q,W,X,K,L,H,O,R,T'.split(',');

} else if (XEBOrder.toLowerCase() === 'all') {

$.each(BDict, function( b, value ){

XEBOrder2.push(b);

});

} else {

XEBOrder2 = XEBOrder.toUpperCase().split(',');

}

$.each(BDict, function( b, value ){

// Add the start of the URL (Isrc) to the XEB buttons

BDict[b][0] = Isrc + BDict[b][0];

});

// If the user has defined any buttons then add them into the available button lists

if (typeof myButtons === 'object') {

$.each(myButtons, function( b, value ){

// custom user buttons

BDict[b] = myButtons[b];

});

}

mw.loader.using( 'user.options', function () {

if ( mw.user.options.get('usebetatoolbar') ) {

// Use the enhanced edit toolbar

mw.loader.using( 'ext.wikiEditor', function () {

$(function(){

// Build the new buttons

for (i = 0; i < XEBOrder2.length; i++) {

bc = BDict[XEBOrder2[i]];

//Check if bc is an object

// - protects if user specified a non-existant buttons

// - IE causes a javascript error when viewing a page

if (typeof bc === 'object') {

customTools[ XEBOrder2[i] ] = {

label: bc[1],

type: 'button',

icon: bc[0],

action: {

type: 'encapsulate',

options: {

pre: bc[2],

peri: bc[4],

post: bc[3]

}

}

};

}

}

$('#wpTextbox1').wikiEditor( 'addToToolbar', {

'sections': {

'extra': {

'type': 'toolbar',

'label': 'Extras'

}

},

'section': 'extra',

'groups': {

'my-buttons': {

'label': 'My buttons',

'tools': customTools

}

}

} );

});

} );

} else {

// Use the old edit toolbar

// Add the MediaWiki standard buttons into the available buttons

$.each(mw.toolbar.buttons, function( b, value ){

// add standard buttons for full XEB order changing

// BDict[b]=[];

BDict[b] = [ value.imageFile, value.speedTip, value.tagOpen, value.tagClose, value.sampleText];

// for (d in value) {BDict[b].push(value}[d]);

});

// Build the new buttons

for (i = 0; i < XEBOrder2.length; i++) {

bc = BDict[XEBOrder2[i]];

//Check if bc is an object

// - protects if user specified a non-existant buttons

// - IE causes a javascript error when viewing a page

if (typeof bc === 'object') {

//Call addButton from module mediawiki.action.edit

mw.toolbar.addButton(bc[0], bc[1], bc[2], bc[3], bc[4] /* , imageId, selectText */ );

}

}

// Remove the default buttons (if requested by the user)

eraseButtons();

}

} );

}

/** en: Removes arbitrary standard buttons from the toolbar

* @author: :de:User:Olliminatore

* @version: 0.1 (01.10.2006) **/

function eraseButtons() {

var x, i, enExtraButtons;

//Remove the buttons the user doesn't want

if (typeof rmEditButtons !== 'object') {

return;

}

if (typeof rmEditButtons[0] === 'string' && rmEditButtons[0].toLowerCase() === 'all') {

// English Wikipedia creates 11 extra buttons which are stored in mwCustomEditButtons

// rather than mw.toolbar.buttons. However, there is no guarantee it will always be 11

// so we count them here.

enExtraButtons = window.mwCustomEditButtons.length;

mw.toolbar.buttons = [];

for (i = 0; i < enExtraButtons; i++) {

window.mwCustomEditButtons.shift();

}

}

//Sort the user's requests so we remove the button with the highest index first

//- This ensures we remove the buttons the user expects whatever order he requested the buttons in

window.rmEditButtons.sort(sortit);

//Remove individual buttons the user doesn't want

for (i = 0; i < rmEditButtons.length; i++) {

var n = rmEditButtons[i];

//Standard Wikimedia buttons

if (n >= 0 && n < mw.toolbar.buttons.length) {

if (n < mw.toolbar.buttons.length) {

x = -1;

while ((++x) < mw.toolbar.buttons.length) {

if (x >= n) {

mw.toolbar.buttons[x] = mw.toolbar.buttons[x + 1];

}

}

}

mw.toolbar.buttons.pop();

}

//Extra buttons in English Wikipedia

n = n - mw.toolbar.buttons.length;

if (n > 0 && n < window.mwCustomEditButtons.length) {

if (n < window.mwCustomEditButtons.length) {

x = -1;

while ((++x) < window.mwCustomEditButtons.length) {

if (x >= n) {

window.mwCustomEditButtons[x] = window.mwCustomEditButtons[x + 1];

}

}

}

window.mwCustomEditButtons.pop();

}

}

}

//Function:

// sortit

//Purpose:

// Used to sort the rmEditButtons array into descending order

function sortit(a, b) {

return (b - a);

}

//Function:

//Purpose:

// Adds extended onclick-function to some buttons

function extendButtons() {

var allEditButtons = document.getElementById('toolbar');

if ( !allEditButtons ) {

return false;

}

if (typeof editform !== 'undefined') {

if (!(window.editform = document.forms.editform)) {

return false;

}

}

// table

extendAButton(Isrc + '0/04/Button_array.png', XEBPopupTable);

extendAButton(Isrc + '7/79/Button_reflink.png', XEBPopupRef);

extendAButton(Isrc + 'b/b8/Button_Globe.png', XEBPopupGeoLink);

extendAButton(Isrc + '4/49/Button_talk.png', XEBPopupTalk);

extendAButton(Isrc + '1/1c/Button_advanced_image.png', XEBPopupImage);

//extendAButton(Isrc+'6/6a/Button_sup_letter.png',XEBPopupFormattedText);

// redirect -##IE doesn't like this line. Object doesn't support this property or method

//c=XEBOrder2.getIndex('V');

// if(c != -1)

// allEditButtons[bu_len+c].onclick=function(){

// var a='#REDIRECT \[\['+prompt("Which page do you want to redirect to\?")+'\]\]';

// document.editform.elements['wpTextbox1'].value=a;

// document.editform.elements['wpSummary'].value=a;

// document.editform.elements['wpWatchthis'].checked=false

// };

}

function extendAButton(url, newfunc) {

var i;

var allEditButtons = document.getElementById('toolbar');

if ( !allEditButtons ) {

return false;

}

if (typeof editform !== 'undefined') {

if (!(window.editform = document.forms.editform)) {

return false;

}

}

allEditButtons = allEditButtons.getElementsByTagName('img');

for (i = 0; i < allEditButtons.length; i++) {

if (allEditButtons[i].src === url) {

allEditButtons[i].onclick = newfunc;

}

}

}

//==========================================================================================================

// General purpose popup code

//==========================================================================================================

function getXEBPopupDiv(name) {

var XEBMainDiv = document.getElementById('XEB');

if (XEBMainDiv === null) {

XEBMainDiv = document.createElement('div');

document.body.appendChild(XEBMainDiv);

XEBMainDiv.id = 'XEB';

}

var me = document.getElementById('XEBPopup' && name);

if (me !== null) {

return me;

}

me = document.createElement('div');

XEBMainDiv.appendChild(me);

me.id = 'XEBPopup';

me.style.position = 'absolute';

me.display = 'none';

me.visibility = 'hidden';

me.onmouseout = CheckHideXEBPopup;

me.onmouseover = cancelHidePopup;

return me;

}

//Function:

// CheckHideXEBPopup

//Purpose:

// Looks at the cursor position and if it has moved outside the popup it will close the popup

//Called:

// When the onMouseEvent is fired on the popup

function CheckHideXEBPopup(e) {

var x, y, ph, s, pl, pt, pw;

var m = document.getElementById('XEBmnu');

if (is_gecko) {

ph = m.offsetHeight;

x = e.clientX + window.scrollX;

y = e.clientY + window.scrollY;

s = window.getComputedStyle(m, '');

ph = s.height;

ph = Number(ph.substring(0, ph.length - 2));

} else {

x = event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;

y = event.clientY + document.documentElement.scrollTop + document.body.scrollTop;

ph = m.offsetHeight;

}

pl = curPopup.x;

pt = curPopup.y;

pw = m.style.width;

pw = Number(pw.substring(0, pw.length - 2));

if (x > (pl + 2) && x < (pl + pw - 5) && y > (pt + 2) && y < (pt + ph - 5)) {

return;

}

curPopup.hideTimeout = setTimeout(hideXEBPopup, XEBHideDelay * 1000);

}

function cancelHidePopup() {

clearTimeout(curPopup.hideTimeout);

}

function hideXEBPopup() {

var XEBMainDiv = document.getElementById('XEB');

var m = document.getElementById('XEBPopup');

XEBMainDiv.removeChild(m);

}

function XEBstartDrag(e) {

var m = new GetPos(e || event);

curPopup.startDrag.mouse = m;

curPopup.startDrag.floatpopup.y = parseInt(curPopup.div.style.top, 10);

curPopup.startDrag.floatpopup.x = parseInt(curPopup.div.style.left, 10);

curPopup.dragging = true;

}

function XEBstopDrag(e) {

if (curPopup.dragging === false) {

return;

}

curPopup.dragging = false;

}

function XEBDrag(e) {

if (curPopup.dragging === false) {

return;

}

var m = new GetPos(e || event);

var x = parseInt(curPopup.startDrag.floatpopup.x + (m.x - curPopup.startDrag.mouse.x), 10);

var y = parseInt(curPopup.startDrag.floatpopup.y + (m.y - curPopup.startDrag.mouse.y), 10);

curPopup.div.style.top = y + 'px';

curPopup.div.style.left = x + 'px';

curPopup.x = x;

curPopup.y = y;

}

//=============================================================================

// Popup: Table

//=============================================================================

function XEBPopup(name, x, y) {

// Make sure the popup can appear on the screen

this.IESelectedRange = XEBgetIESelectedRange();

var winW = (is_gecko) ? window.innerWidth : document.body.offsetWidth;

if ((winW - this.width) < x) {

x = (winW - this.width);

}

this.div = getXEBPopupDiv(name);

this.div.style.zIndex = 2000;

this.div.display = 'inline';

this.div.visibility = 'visible';

this.div.style.top = y + 'px';

this.x = x;

this.y = y;

this.name = name;

this.startDrag = {};

this.startDrag.floatpopup = {};

}

function setInnerHTML(text) {

var i;

var winW = (is_gecko) ? window.innerWidth : document.body.offsetWidth;

if ((winW - this.width) < this.x) {

this.x = (winW - this.width);

}

this.div.style.left = this.x + 'px';

var mt = '

';

mt += '

Title
';

mt += text;

mt += '

';

this.div.innerHTML = mt;

//Turn off autocomplete. If the mouse moves over the autocomplete popup then x,y in CheckHidePopup is relative to the

// autocomplete popup and our popup is hidden

var InTexts = this.div.getElementsByTagName('input');

for (i = 0; i < InTexts.length; i++) {

var theInput = InTexts[i];

if (theInput.type === 'text') {

theInput.setAttribute('autocomplete', 'off');

}

}

//Add rollover features to menu items. Doing it here means we don't have to do it for each menu

var x = XEBgetElementsByClassName(this.div, 'XEBMnuItm', 'span');

for (i = 0; i < x.length; i++) {

var theItm = x[i];

theItm.onmouseout = XEBMenuMouseOut;

theItm.onmouseover = XEBMenuMouseOver;

}

this.div.style.borderWidth = 'thin';

this.div.style.borderStyle = 'solid';

this.div.style.backgroundColor = '#D0D0D0';

}

XEBPopup.prototype.width = 250;

XEBPopup.prototype.dragging = false;

XEBPopup.prototype.setInnerHTML = setInnerHTML;

var curPopup;

function GetPos(e) {

this.x = e.clientX - 10 + document.documentElement.scrollLeft + document.body.scrollLeft;

this.y = e.clientY - 10 + document.documentElement.scrollTop + document.body.scrollTop;

}

function XEBPopupTable(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('table', m.x, m.y);

var mt = '

Enter the table parameters below: <\/p>' +

'

' +

'Table caption: ' +

'Table alignment: center' +

'Table headline: colored' +

'Number of rows: ' +

'Number of columns: ' +

// 'Alternating grey lines: ' +

'Item column: ' +

'Sortable: ' +

'<\/form>' +

'The default table allows for fields and values only.<\/i>' +

'Check "Item column" to allow for the table to have fields, items, and values.<\/i>' +

'

' +

'';

curPopup.setInnerHTML(mt);

return true;

}

function insertTableCode() {

var i;

var f = document.XEBPopupTableForm;

var caption = (f.inputCaption.checked) ? '|+ TABLE CAPTION \n' : '';

var exhead = (f.inputHead.checked) ? '|- style="background: #DDFFDD;"\n' : '';

var nbRow = parseInt(f.inputRow.value, 10);

var nbCol = parseInt(f.inputCol.value, 10);

var exfield = f.inputItems.checked;

var align = (f.inputAlign.checked) ? 'align="center"' : '';

//generateTable(caption, exhead, nbCol, nbRow, exfield, align);

var code = '\n';

code += '

{{prettytable}} ' + align + ' '; // en: class="wikitable"

code += (f.inputSort.checked) ? 'class="sortable" \n' : '\n';

code += caption + exhead;

if (exfield) {

code += '!\n';

}

for (i = 1; i < nbCol + 1; i++) {

code += '! FELD ' + i + '\n';

}

var items = 0;

for (var j = 0; j < nbRow; j++) {

if (exfield) {

items++;

code += '

\n! style="background: #FFDDDD;"|ITEM ' + items + '\n';

} else {

code += '

\n';

}

for (i = 0; i < nbCol; i++) {

code += '| Element ' + i + '\n';

}

}

code += '

\n';

hideXEBPopup();

insertTags(, , code);

extendSummary('table');

return false;

}

// Get the text currently selected by user in the textAra

// This code is based on part of the insertTags function in wikibits.js

function XEBGetSelectedText() {

var txtarea, theSelection;

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];

}

// IE & Opera

if (document.selection && !is_gecko) {

theSelection = document.selection.createRange().text;

if (!theSelection) {

theSelection = '';

}

}

// Mozilla

else if (txtarea.selectionStart || txtarea.selectionStart === 0) {

var replaced = false;

var startPos = txtarea.selectionStart;

var endPos = txtarea.selectionEnd;

theSelection = (txtarea.value).substring(startPos, endPos);

if (!theSelection) {

theSelection = '';

}

}

return theSelection;

}

//Notes:

// IE loses the cursor position in the textarea when the popup is used.

// So we save the cursor position here

function XEBgetIESelectedRange() {

var IESel = {};

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];

}

// IE & Opera

if (document.selection && !is_gecko) {

txtarea.focus();

IESel.Rng = document.selection.createRange();

return IESel;

}

}

function XEBinsertText(beforeText, selText, afterText, IESelectedRange) {

var newText = beforeText + selText + afterText;

var txtarea, tr;

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];

}

// IE

if (document.selection && !is_gecko) {

tr = IESelectedRange.Rng;

tr.text = newText;

txtarea.focus();

//txtarea.caretpos=tr.duplicate();

tr.select();

return;

// Mozilla

} else if (txtarea.selectionStart || txtarea.selectionStart === 0) {

var replaced = false;

var startPos = txtarea.selectionStart;

var endPos = txtarea.selectionEnd;

if (endPos - startPos) {

replaced = true;

}

var scrollTop = txtarea.scrollTop;

// var myText = (txtarea.value).substring(startPos, endPos);

// if (!myText) {

// myText=sampleText;

// }

// if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any

// subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";

// } else {

// subst = tagOpen + myText + tagClose;

// }

txtarea.value = txtarea.value.substring(0, startPos) + newText + txtarea.value.substring(endPos, txtarea.value.length);

txtarea.focus();

//set new selection

if (!replaced) {

var cPos = startPos + (newText.length);

txtarea.selectionStart = cPos;

txtarea.selectionEnd = cPos;

} else {

txtarea.selectionStart = startPos + beforeText.length;

txtarea.selectionEnd = startPos + beforeText.length + selText.length;

}

txtarea.scrollTop = scrollTop;

// All other browsers get no toolbar.

// There was previously support for a crippled "help"

// bar, but that caused more problems than it solved.

}

// reposition cursor if possible

if (txtarea.createTextRange) {

txtarea.caretPos = document.selection.createRange().duplicate();

//txtarea.caretPos =IESelectedRange.Rng;

}

txtarea.focus();

}

//============================================================

// Table generator

//============================================================

/** en: Generate an array using MediaWiki syntax

* @author: originally from fr:user:dake

* @version: 0.2 */

function generateTable(caption, exhead, nbCol, nbRow, exfield, align) {

}

function XEBPopupRef(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('ref', m.x, m.y);

curPopup.width = 300;

var mt = '

Enter the reference parameters below: <\/p>' +

'' +

'Name:' +

'Material:' +

'<\/form>' +

'

' +

'';

curPopup.setInnerHTML(mt);

// document.XEBPopupRefForm.refName.focus();

return true;

}

function insertRef() {

var f = document.XEBPopupRefForm;

var refName = f.refName.value;

var refMaterial = f.refMaterial.value;

hideXEBPopup();

var code1 = '

code1 += (refName) ? ' name="' + refName + '">' : '>';

var code2 = refMaterial;

var code3 = '<\/ref>';

XEBinsertText(code1, code2, code3, curPopup.IESelectedRange);

extendSummary('ref');

return false;

}

//===GEO LINK Function==================================================

function XEBPopupGeoLink(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('geo', m.x, m.y);

curPopup.width = 300;

var mt = '

Enter the location parameters below: <\/p>' +

'' +

'Location:' +

'

' +

'

Latitude:<\/td><\/td>' +

'

<\/td>' +

'

<\/td>' +

'

<\/td><\/tr>' +

'

Longitude:<\/td><\/td>' +

'

<\/td>' +

'

<\/td>' +

'

<\/td><\/tr>' +

'<\/table>' +

'Region:' +

'Type:' +

'
' +

'Title: ' +

'<\/form>' +

'

' +

'';

curPopup.setInnerHTML(mt);

document.paramForm.refName.focus();

return true;

}

function insertGeoLink() {

var f = document.XEBPopupGeoLinkForm;

var code = '{{Coor ';

if (f.geoTitle.checked) {

code += 'title ';

}

var ft = 'dms';

if (f.geoLatSec.value === && f.geoLonSec.value === ) {

ft = 'dm';

}

if (ft === 'dm' && f.geoLatMin.value === && f.geoLonMin.value === ) {

ft = 'd';

}

code += ft;

code += '|' + f.geoLatDeg.value;

code += (ft === 'dm' || ft === 'dms') ? '|' + f.geoLatMin.value : '';

code += (ft === 'dms') ? '|' + f.geoLatSec.value : '';

code += '|' + f.geoLatNS.value;

code += '|' + f.geoLonDeg.value;

code += (ft === 'dm' || ft === 'dms') ? '|' + f.geoLonMin.value : '';

code += (ft === 'dms') ? '|' + f.geoLonSec.value : '';

code += '|' + f.geoLonEW.value;

code += '|type:' + f.geoType.value + '_region:' + f.geoRegion.value;

code += '}}';

insertTags(, , code);

extendSummary('geo-location');

hideXEBPopup();

return false;

}

//===Talk Page entry Function===========================================

function XEBPopupTalk(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('talk', m.x, m.y);

curPopup.width = 200;

var mt = '

Please choose:<\/p>';

mt += 'Test1<\/span>
';

mt += 'Self Test<\/span>
';

mt += 'Nonsense<\/span>
';

mt += 'Please stop<\/span>
';

mt += 'Last chance<\/span>
';

mt += 'Blanking<\/span>
';

mt += 'Blatant<\/span>
';

mt += '*BLOCKED*<\/span>
';

mt += 'Spam<\/span>
';

mt += 'Npov<\/span>
';

curPopup.setInnerHTML(mt);

return true;

}

function XEBInsertTalk(itm) {

var code = {

1: '{' + '{subst:test1-n|}}',

2: '{' + '{subst:selftest-n|}}',

3: '{' + '{subst:test2-n|}}',

4: '{' + '{subst:test3-n|}}',

5: '{' + '{subst:test4-n|}}',

6: '{' + '{subst:test2a-n|}}',

7: '{' + '{subst:bv-n|}}',

8: '{' + '{subst:blantant|}}',

9: '{' + '{subst:spam-n|}}',

10: '{' + '{subst:NPOV user}}'

};

hideXEBPopup();

insertTags(, , code[ itm ]);

return false;

}

function XEBPopupImage(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('image', m.x, m.y);

curPopup.width = 300;

var mt = '

Enter the image parameters below: <\/p>' +

'' +

'File:
' +

'Type:
' +

'Location:
' +

'Size:px
' +

'Caption:<\/p>' +

'<\/form>' +

'

' +

'';

curPopup.setInnerHTML(mt);

return true;

}

function XEBInsertImage() {

var f = document.XEBPopupImageForm;

hideXEBPopup();

var code = '[[Image:';

code += f.imgFile.value;

code += '|' + f.imgType.value;

code += '|' + f.imgLocation.value;

code += '|' + f.imgSize.value;

code += '|' + f.imgCaption.value;

code += ']]';

insertTags(, , code);

extendSummary('image');

return false;

}

function XEBPopupFormattedText(e) {

var m = new GetPos(e || event);

curPopup = new XEBPopup('image', m.x, m.y);

curPopup.width = 300;

var mt = '' +

'

' +

'

Bold:<\/td><\/td>' +

'

Superscript:<\/td><\/td><\/tr>' +

'

Italic:<\/td><\/td>' +

'

Subscript:<\/td><\/td><\/tr>' +

'

Strike:<\/td><\/td>' +

'

 <\/td><\/tr>' +

'

' +

'Size:

Colour:<\/td>' +

'

' +

'

' +

'

None<\/td>
 <\/td>  <\/td>' +

'

 <\/td> <\/td><\/tr>' +

'

 <\/td>  <\/td>' +

'

 <\/td> <\/td><\/tr>' +

'

 <\/td> <\/td>' +

'

 <\/td> <\/td><\/tr>' +

'

 <\/td> <\/td>' +

'

 <\/td> <\/td><\/tr>' +

'

<\/td><\/tr>' +

'<\/form>' +

'Sample:' +

'Text"' +

'

' +

'';

curPopup.setInnerHTML(mt);

return true;

}

function XEBUpdateSampleText() {

var f = document.XEBPopupImageForm;

}

//====================

function XEBMenuMouseOut(e) {

var targ;

if (!e) {

e = window.event;

}

if (e.target) {

targ = e.target;

} else if (e.srcElement) {

targ = e.srcElement;

}

targ.style.color = 'black';

}

function XEBMenuMouseOver(e) {

var targ;

if (!e) {

e = window.event;

}

if (e.target) {

targ = e.target;

} else if (e.srcElement) {

targ = e.srcElement;

}

targ.style.color = 'red';

}

//=======================================================================

// Other functions

//=======================================================================

function XEBgetElementsByClassName(parent, clsName, htmltag) {

var arr = [], elem;

var elems = parent.getElementsByTagName(htmltag);

for (var cls, i = 0;

(elem = elems[i]); i++) {

if (elem.className === clsName) {

arr[arr.length] = elem;

}

}

return arr;

}

function extendSummary(newText) {

if (!XEBExtendEditSummary) {

return;

}

var s = document.editform.elements.wpSummary.value;

s += (s === '') ? newText : ' +' + newText;

document.editform.elements.wpSummary.value = s;

}

function bug(msg) {

if (mw.config.get( 'wgUserName' ) === 'MarkS') {

alert(msg);

}

}

/* */