User:MarkS/XEB/dev.js: Difference between revisions

Content deleted Content added
MarkS (talk | contribs)
m blank parts for sortable testing
+nowiki per request
 
(22 intermediate revisions by 3 users not shown)
Line 1:
/* 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
* <nowiki>
*/
 
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', '<br />', '', ''],
'C': ['5/5f/Button_center.png', 'Center', '<div style="text-align: center;">\n', '\n<\/div>', 'Centred text'],
'D': ['e/ea/Button_align_left.png', 'Left-Align', '<div style="text-align: left; direction: ltr; margin-left: 1em;">\n', '\n<\/div>', 'Left-aligned text'],
'D1': ['a/a5/Button_align_right.png', 'Right-Align', '<div style="text-align: right; direction: ltr; margin-left: 1em;">\n', '\n<\/div>', 'Right-aligned text'],
'E': ['0/04/Button_array.png', 'Table', '\n{| class="wikitable" \n|- \n| 1 || 2\n|- \n| 3 || 4', '\n|}\n', ''],
'F': ['1/1e/Button_font_color.png', 'Insert coloured text', '<span style="color: ', '">Coloured text<\/span>', 'ColourName'],
'FS': ['1/1b/Button_miss_signature.png', 'Unsigned post', '<small><span class="autosigned">— Preceding [[Wikipedia:Signatures|unsigned]] comment added by [[User:', '|', ']] ([[User talk:', '|talk]] • [[Special:Contributions/', '|contribs]]) date</span></small><!-- Template:Unsigned -->', 'user name or IP'],
'G': ['9/9e/Btn_toolbar_gallery.png', 'Picture gallery', "\n<gallery>\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>', '<\/sup>', 'Superscript text'],
'I2': ['a/aa/Button_sub_letter.png', 'Subscript', '<sub>', '<\/sub>', 'Subscript text'],
'J1': ['5/58/Button_small.png', 'Small', '<small>', '<\/small>', 'Small Text'],
'J2': ['5/56/Button_big.png', 'Big text', '<big>', '<\/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', '<blockquote style="border: 1px solid blue; padding: 2em;">\n', '\n<\/blockquote>', 'Block quote'],
'N': ['4/4b/Button_nbsp.png', 'nonbreaking space', '&nbsp;', '', ''],
'O': ['2/23/Button_code.png', 'Insert code', '<code>', '<\/code>', 'Code'],
'P': ['3/3c/Button_pre.png', 'Pre formatted Text', '<pre>', '<\/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>', '<\/ref>', 'Insert reference material'],
'R1': ['7/79/Button_reflink.png', 'Start a reference', '<ref name="', '', 'Reference name'],
'R2': ['9/99/Button_reflink_advanced_2.png', 'Insert reference material', '">', '</ref>', 'Reference material'],
'R3': ['1/1a/Button_reflink_advanced_3.png', 'No reference material', '', '"/>', ''],
'R4': ['9/9a/Button_references.png', 'Reference footer', "\n==Notes==\n<!--See http://en.wikipedia.org/wiki/Wikipedia:Footnotes for an explanation of how to generate footnotes using the <ref(erences/)> tags-->\n<div class=\'references-small\'>\n<references/>\n</div>", '', ''],
'S': ['c/c9/Button_strike.png', 'Strikeout', '<s>', '<\/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>', '<\/tt>', 'Teletype Text'],
'TL': ['3/37/Button_tl_template.png', 'Template link', "{{subst:" + "tl|", '}}', 'Template name'],
'U': ['f/fd/Button_underline.png', 'Underlined', "<u>", "<\/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>", "<\/noinclude>", 'Text'],
'Y2': ['7/79/Button_include.png', 'Include only', "<includeonly>", "<\/includeonly>", 'Text'],
'Z': ['3/35/Button_substitute.png', 'Substitute', "{{subst:", "}}", 'Template'],
'AI': ['1/1c/Button_advanced_image.png', 'Advanaced Image', "[[Image:", "|thumb|right|px|Caption]]", '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
// Adds extended onclick-function to some buttons
function extendButtonssortit(a, b) {
return (b - a);
}
 
if(!(allEditButtons = document.getElementById('toolbar'))) return false;
if(typeof editform != 'undefined')
if(!(window.editform = document.forms['editform'])) return false;
 
//Function:
// table
//Purpose:
extendAButton(Isrc+"0/04/Button_array.png",XEBPopupTable)
// Adds extended onclick-function to some buttons
extendAButton(Isrc+"7/79/Button_reflink.png",XEBPopupRef)
function extendButtons() {
extendAButton(Isrc+"b/b8/Button_Globe.png",XEBPopupGeoLink)
var allEditButtons = document.getElementById('toolbar');
extendAButton(Isrc+"4/49/Button_talk.png",XEBPopupTalk)
if ( !allEditButtons ) {
extendAButton(Isrc+"1/1c/Button_advanced_image.png",XEBPopupImage)
return false;
//extendAButton(Isrc+"6/6a/Button_sup_letter.png",XEBPopupFormattedText)
}
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;
{
if(!(var allEditButtons = document.getElementById('toolbar'))) return false;
if ( !allEditButtons ) {
if(typeof editform != 'undefined')
if(!(window.editform = document.forms['editform'])) 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) {
{
if( allEditButtons[i].srconclick ==url) newfunc;
{
allEditButtons[i].onclick=newfunc;
}
}
Line 49 ⟶ 327:
//==========================================================================================================
 
function getXEBPopupDiv(name) {
var XEBMainDiv = document.getElementById('XEB');
{
if (XEBMainDiv === document.getElementById("XEB"null); {
if( XEBMainDiv ==null document.createElement('div'){;
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
Line 79 ⟶ 358:
// When the onMouseEvent is fired on the popup
 
function CheckHideXEBPopup(e) {
var x, y, ph, s, pl, pt, pw;
m= document.getElementById("XEBmnu");
var m = document.getElementById('XEBmnu');
if(is_gecko)
if (is_gecko) {
{
ph = m.offsetHeight;
var x = e.clientX + window.scrollX;
var 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;
else
pt = curPopup.y;
{
pw = m.style.width;
var x=event.clientX+ document.documentElement.scrollLeft + document.body.scrollLeft;
pw = Number(pw.substring(0, pw.length - 2));
var 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);
curPopup.hideTimeout = setTimeout(hideXEBPopup, XEBHideDelay * 1000);
}
 
function cancelHidePopup() {
clearTimeout(curPopup.hideTimeout);
{
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;
m=new GetPos(e||event);
curPopup.startDrag.mousefloatpopup.y =m parseInt(curPopup.div.style.top, 10);
curPopup.startDrag.floatpopup.yx = parseInt(curPopup.div.style.topleft, 10);
curPopup.dragging = true;
curPopup.startDrag.floatpopup.x=parseInt(curPopup.div.style.left);
curPopup.dragging=true;
}
 
function XEBstopDrag(e) {
if (curPopup.dragging === false) {
{
return;
if(curPopup.dragging==false)return;
}
curPopup.dragging=false;
curPopup.dragging = false;
}
 
function XEBDrag(e) {
if (curPopup.dragging === false) {
{
return;
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;
}
 
Line 150 ⟶ 429:
//=============================================================================
 
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;
this.IESelectedRange=XEBgetIESelectedRange();
if ((winW - this.width) < x) {
 
x = (winW - this.width);
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 =new Object{};
this.startDrag.floatpopup =new Object{};
}
 
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";
this.div.style.left = this.x + 'px';
 
var mt =" '<div id='"XEBmnu'" style='"width:"' + this.width + "px'px" >"';
mt += '<div id="XEBmnuTitle" class="XEBPopupTitle" onmousedown="XEBstartDrag(event)" onmouseup="XEBstopDrag(event)" onmousemove="XEBDrag(event)">Title</div>';
mt += text;
mt +=" '</div>"';
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 (var 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 =getElementsByClassName XEBgetElementsByClassName(this.div, 'XEBMnuItm', 'span');
for (var 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.xy = e.clientXclientY - 10 + document.documentElement.scrollLeftscrollTop + document.body.scrollLeftscrollTop;
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 = '<p>Enter the table parameters below: <\/p>' +
+'<form name="XEBPopupTableForm">' +
+'Table caption: <input type="checkbox" name="inputCaption"><p\/>' +
+'Table alignment: center<input type="checkbox" name="inputAlign"><p\/>' +
+'Table headline: colored<input type="checkbox" name="inputHead"><p\/>' +
+'Number of rows: <input type="text" name="inputRow" value="3" size="2"><p\/>' +
+'Number of columns: <input type="text" name="inputCol" value="3" size="2"><p\/>' +
//+ 'Alternating grey lines: <input type="checkbox" name="inputLine" checked="1" ><p\/>' +
+'Item column: <input type="checkbox" name="inputItems" ><p\/>' +
+'Sortable: <input type="checkbox" name="inputSort" ><p\/>' +
+'<\/form>' +
+'<i>The default table allows for fields and values only.<\/i><p\/>' +
+'Check "Item column" to allow for the table to have fields, items, and values.<\/i><p\/>' +
+'<p><button onClick="javascript:insertTableCode()">Insert</button>' +
+'<button onClick="hideXEBPopup()">Cancel</button>';
 
curPopup.setInnerHTML(mt);
Line 240 ⟶ 522:
}
 
function insertTableCode() {
var i;
f=document.XEBPopupTableForm;
var f = document.XEBPopupTableForm;
var caption = (f.inputCaption.checked)?"|+ TABLE CAPTION \n":"";
var exheadcaption = (f.inputHeadinputCaption.checked) ? '|-+ style="background:TABLE CAPTION #DDFFDD;"\n' :""; '';
var exhead = (f.inputHead.checked) ? '|- style="background: #DDFFDD;"\n' : '';
var nbRow = parseInt(f.inputRow.value);
var nbColnbRow = parseInt(f.inputColinputRow.value, 10);
var exfieldnbCol = parseInt(f.inputItemsinputCol.checked;value, 10);
var alignexfield = (f.inputAligninputItems.checked)?'align="center"':"";
var align = (f.inputAlign.checked) ? 'align="center"' : '';
 
//generateTable(caption, exhead, nbCol, nbRow, exfield, align);
var code = '\n';
 
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';
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\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;
{
var txtarea;
if (document.editform) {
txtarea = document.editform.wpTextbox1;
Line 288 ⟶ 577:
}
// IE & Opera
if (document.selection && !is_gecko) {
theSelection = document.selection.createRange().text;
{
varif (!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;
var theSelection = (txtarea.value).substring(startPos, endPos);
if (!theSelection) {
theSelection = '';
}
}
return theSelection;
Line 305 ⟶ 597:
 
//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 =new Object{};
var txtarea;
if (document.editform) {
Line 319 ⟶ 611:
}
// IE & Opera
if (document.selection && !is_gecko) {
 
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;
Line 340 ⟶ 630:
 
// IE
if (document.selection && !is_gecko) {
 
tr=IESelectedRange.Rng;
tr = IESelectedRange.Rng;
tr.text=newText;
tr.text = newText;
// Mozilla
txtarea.focus();
} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
//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.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 MediawikiMediaWiki 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 =500 300;
var mt = '<p>Enter the reference parameters below: <\/p>' +
+'<form name="XEBPopupRefForm">' +
+'Name:<input type="text" name="refName" value="" size="10"><p\/>' +
+'Material:<input type="text" name="refMaterial" value="' + XEBGetSelectedText() +
'" size="20">' +
+'<\/form>' +
+'<p><button onClick="javascript:insertRef()">Insert</button>' +
+'<button onClick="hideXEBPopup()">Cancel</button>';
 
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 = '<ref';
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);
{
m=new GetPos(e||event);
 
curPopup = new XEBPopup("'geo"', m.x, m.y);
curPopup.width = 300;
var mt = '<p>Enter the ___location parameters below: <\/p>' +
+'<form name="XEBPopupGeoLinkForm">' +
+'LoctionLocation:<p\/>' +
+'<table style="background: transparent;">' +
+'<tr><td>Latitude:<\/td><td><input type="text" autocomplete="off" name="geoLatDeg" value="" size="4"><\/td>' +
+'<td><input type="text" name="geoLatMin" value="" size="4"><\/td>' +
+'<td><input type="text" name="geoLatSec" value="" size="4"><\/td>' +
+'<td><select name="geoLatNS"><option value="N">N<option value="S">S</select><\/td><\/tr>' +
+'<tr><td>Longitude:<\/td><td><input type="text" name="geoLonDeg" value="" size="4"><\/td>' +
+'<td><input type="text" name="geoLonMin" value="" size="4"><\/td>' +
+'<td><input type="text" name="geoLonSec" value="" size="4"><\/td>' +
+'<td><select name="geoLonEW"><option value="E">E<option value="W">W</select><\/td><\/tr>' +
+'<\/table>' +
+'Region:<input type="text" name="geoRegion" value="" size="4"><p\/>' +
+'Type:' +
+'<SELECT NAME="geoType" size="5">' +
+'<OPTION VALUE="country">Country<OPTION VALUE="state">State' +
+'<OPTION VALUE="adm1st">Admin unit, 1st level<OPTION VALUE="adm2st">Admin unit, 2nd level' +
+'<OPTION VALUE="city">City<OPTION VALUE="airport">Airport' +
+'<OPTION VALUE="mountain">Mountain<OPTION VALUE="isle">Isle' +
+'<OPTION VALUE="waterbody">Waterbody<OPTION VALUE="landmark" SELECTED>Landmark' +
+'<OPTION VALUE="forest">forest</SELECT><br>' +
+'Title: <input type="checkbox" name="geoTitle" ><p\/>' +
+'<\/form>' +
+'<p><button onClick="javascript:insertGeoLink()">Insert</button>' +
+'<button onClick="hideXEBPopup()">Cancel</button>';
 
curPopup.setInnerHTML(mt);
Line 473 ⟶ 771:
 
}
function insertGeoLink() {
var f = document.XEBPopupGeoLinkForm;
{
f=document.XEBPopupGeoLinkForm;
 
var code = '{{Coor ';
if (f.geoTitle.checked) {
code += 'title ';
}
ft='dms';
var ft = 'dms';
if (f.geoLatSec.value === '' && f.geoLonSec.value === '') {
ft = 'dm';
}
if(ft=='dm'&&f.geoLatMin.value==''&&f.geoLonMin.value=='')ft='d';
if (ft === 'dm' && f.geoLatMin.value === '' && f.geoLonMin.value === '') {
code+=ft;
ft = 'd';
code+='|'+f.geoLatDeg.value;
}
code+=(ft=='dm'||ft=='dms')?'|'+f.geoLatMin.value:'';
code +=( ft=='dms')?'|'+f.geoLatSec.value:'';
code += '|' + f.geoLatNSgeoLatDeg.value;
code += (ft === 'dm' || ft === 'dms') ? '|' + f.geoLonDeggeoLatMin.value : '';
code += (ft =='dm'||ft== 'dms') ? '|' + f.geoLonMingeoLatSec.value : '';
code +=(ft=='dms')? '|' + f.geoLonSecgeoLatNS.value:'';
code += '|' + f.geoLonEWgeoLonDeg.value;
code += (ft === 'dm' |type:| ft === '+f.geoType.value+dms'_region:) ? '|' + f.geoRegiongeoLonMin.value : '';
code += (ft === 'dms') ? '|' + f.geoLonSec.value : '';
code+='}}';
code += '|' + f.geoLonEW.value;
insertTags('','', code);
code += '|type:' + f.geoType.value + '_region:' + f.geoRegion.value;
code += '}}';
insertTags('', '', code);
extendSummary('geo-___location');
hideXEBPopup();
Line 501 ⟶ 804:
//===Talk Page entry Function===========================================
 
function XEBPopupTalk(e) {
var m = new GetPos(e || event);
{
m=new GetPos(e||event);
 
curPopup = new XEBPopup("'talk"', m.x, m.y);
curPopup.width = 200;
var mt = '<div style="font-size:medium"><p>Please choose:<\/p>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(1)">Test1<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(2)">Self Test<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(3)">Nonsense<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(4)">Please stop<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(5)">Last chance<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(6)">Blanking<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(7)">Blatant<\/span><br>';
mt += '<span class="XEBMnuItm" ;onclick="XEBInsertTalk(8)">*BLOCKED*<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(9)">Spam<\/span><br>';
mt += '<span class="XEBMnuItm" onclick="XEBInsertTalk(10)">Npov<\/span></divbr>';
 
curPopup.setInnerHTML(mt);
Line 524 ⟶ 826:
 
}
 
function XEBInsertTalk(itm)
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);
{
m=new GetPos(e||event);
 
curPopup = new XEBPopup("'image"', m.x, m.y);
curPopup.width = 300;
 
var mt = '<p>Enter the image parameters below: <\/p>' +
+'<form name="XEBPopupImageForm">' +
+'File:<input type="text" name="imgFile" value="' + XEBGetSelectedText() + '" size="30"><br>' +
+'Type:<SELECT NAME="imgType">' +
+'<OPTION VALUE="thumb">Thumbnail' +
+'<OPTION VALUE="frame">Frame' +
+'<OPTION VALUE="none">[not specified]' +
+'</SELECT><br>' +
+'Location:<SELECT NAME="imgLocation">' +
+'<OPTION VALUE="left">Left' +
+'<OPTION VALUE="center">Centre' +
+'<OPTION VALUE="right">Right' +
+'<OPTION VALUE="none">None' +
+'</SELECT><br>' +
+'Size:<input type="text" name="imgSize" value="100" size="3">px<br>' +
+'Caption:<input type="text" name="imgCaption" value="" size="30"><\/p>' +
+'<\/form>' +
+'<p><button onClick="javascript:XEBInsertImage()">Insert</button>' +
+'<button onClick="hideXEBPopup()">Cancel</button>';
 
curPopup.setInnerHTML(mt);
Line 561 ⟶ 874:
return true;
}
 
function XEBInsertImage()
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');
 
Line 578 ⟶ 891:
}
 
function XEBPopupFormattedText(e) {
var m = new GetPos(e || event);
{
m=new GetPos(e||event);
 
curPopup = new XEBPopup("'image"', m.x, m.y);
curPopup.width = 300;
 
var mt = '<form name="XEBPopupImageForm">' +
+'<table style="background: transparent;">' +
+'<tr><td>Bold:<\/td><td><input type="checkbox" name="textBold"><\/td>' +
+'<td>Superscript:<\/td><td><input type="checkbox" name="textSuperscript"><\/td><\/tr>' +
+'<tr><td>Italic:<\/td><td><input type="checkbox" name="textItalic"><\/td>' +
+'<td>Subscript:<\/td><td><input type="checkbox" name="textSubscript"><\/td><\/tr>' +
+'<tr><td>Strike:<\/td><td><input type="checkbox" name="textStrike"><\/td>' +
+'<td>&nbsp;<\/td><\/tr>' +
+'</table>' +
+'Size:<SELECT NAME="textSize">' +
+'<OPTION VALUE="small">small' +
+'<OPTION VALUE="normal">[Normal]' +
+'<OPTION VALUE="big">big' +
+'</SELECT><br><table style="background:transparent;"><tr><td>Colour:<\/td><td>' +
+'<table width="100px">' +
+'<tr><td colspan="4">None<\/td></tr>' +
+'<tr><td bgcolor="aqua">&nbsp;<\/td><td bgcolor="gray"> &nbsp;<\/td>' +
+'<td bgcolor="olive">&nbsp;<\/td><td bgcolor="navy">&nbsp;<\/td><\/tr>' +
+'<tr><td bgcolor="black">&nbsp;<\/td><td bgcolor="green"> &nbsp;<\/td>' +
+'<td bgcolor="purple">&nbsp;<\/td><td bgcolor="teal">&nbsp;<\/td><\/tr>' +
+'<tr><td bgcolor="blue">&nbsp;<\/td><td bgcolor="lime">&nbsp;<\/td>' +
+'<td bgcolor="red">&nbsp;<\/td><td bgcolor="white">&nbsp;<\/td><\/tr>' +
+'<tr><td bgcolor="fuchsia">&nbsp;<\/td><td bgcolor="maroon">&nbsp;<\/td>' +
+'<td bgcolor="silver">&nbsp;<\/td><td bgcolor="yellow">&nbsp;<\/td><\/tr>' +
+'</table><\/td><\/tr>' +
+'<\/form>' +
+'Sample:' +
+'<span id="sampleText">Text</span>"' +
+'<p><button onClick="javascript:XEBInsertFormattedText()">Insert</button>' +
+'<button onClick="hideXEBPopup()">Cancel</button>';
 
curPopup.setInnerHTML(mt);
Line 621 ⟶ 933:
}
 
function XEBUpdateSampleText() {
var f = document.XEBPopupImageForm;
{
f=document.XEBPopupImageForm;
}
 
//====================
 
function XEBMenuMouseOut(e) {
{
var targ;
if (!e) var {
e = window.event;
}
if (e.target) targ = e.target;
else if (e.srcElementtarget) targ = e.srcElement;{
targ = e.target;
} else if (e.srcElement) {
targ = e.srcElement;
}
 
targ.style.color = 'black';
}
 
function XEBMenuMouseOver(e) {
{ var targ;
if (!e) var {
e = window.event;
}
if (e.target) targ = e.target;
else if (e.srcElementtarget) targ = e.srcElement;{
targ = e.target;
} else if (e.srcElement) {
targ = e.srcElement;
}
 
targ.style.color = 'red';
}
 
Line 651 ⟶ 971:
//=======================================================================
 
function getElementsByClassNameXEBgetElementsByClassName(parent, clsName, htmltag){ {
var arr = new[], Array()elem;
var elems = parent.getElementsByTagName(htmltag);
for ( var cls, i = 0;
( elem = elems[i] ); i++ ) {
if ( elem.className === clsName ) {
arr[arr.length] = elem;
}
Line 662 ⟶ 983:
}
 
function extendSummary(newText) {
if (!XEBExtendEditSummary) {
{
if(!XEBExtendEditSummary) return;
}
s=document.editform.elements['wpSummary'].value;
var s = document.editform.elements.wpSummary.value;
s+=(s=='')?newText:' +'+newText;
s += (s === '') ? newText : ' +' + newText;
document.editform.elements['wpSummary'].value=s;
document.editform.elements.wpSummary.value = s;
}
 
function bug(msg) {
if (mw.config.get( 'wgUserName' ) === 'MarkS') {
{
if(wgUserName=='MarkS') alert(msg);
}
}
/* </nowiki> */
 
 
//</pre>