Anonymous

Changes

From KIproBatt Wiki
update from testwiki
Line 14: Line 14:  
if (mw.config === undefined) mw.config = {};
 
if (mw.config === undefined) mw.config = {};
 
if (mw.config.get === undefined) {
 
if (mw.config.get === undefined) {
mw.config.get = function(key) {
+
    mw.config.get = function(key) {
this[key];
+
        this[key];
};
+
    };
 
}
 
}
 
if (mw.loader === undefined) mw.loader = {};
 
if (mw.loader === undefined) mw.loader = {};
 
if (mw.loader.load === undefined) mw.loader.load = importScriptURI;
 
if (mw.loader.load === undefined) mw.loader.load = importScriptURI;
  −
  −
/*
  −
Constants
  −
*/
  −
  −
var IME_BASE = '//imagemapedit.toolforge.org/';
  −
  −
var IME_TEMPLATE = IME_BASE + 'template.php';
  −
var IME_TRANSLATIONS = IME_BASE + 'translations.php?lang=' + mw.config.get('wgUserLanguage');
  −
  −
// Scripts to create the circle and polygon images
  −
var IME_CIRCLESCRIPT = IME_BASE + 'circle.php';
  −
var IME_POLYSCRIPT = IME_BASE + 'poly.php';
      
/*
 
/*
Line 55: Line 41:  
Start Initialization if this is an image page and there actually is an image
 
Start Initialization if this is an image page and there actually is an image
 
*/
 
*/
$(document).ready(function(){
+
$(document).ready(function() {
// Determine whether we are on an image page. Namespace must be 6 and action view
+
    // Determine whether we are on an image page. Namespace must be 6 and action view
if (mw.config.get('wgNamespaceNumber')==6 && mw.config.get('wgAction')=='view') {
+
    if (mw.config.get('wgNamespaceNumber') == 6 && mw.config.get('wgAction') == 'view') {
// If we can a div with id file, we initialize
+
 
if (document.getElementById('file')) {
+
        // If we can a div with id file, we initialize
mw.loader.load(IME_TEMPLATE);
+
        if (document.getElementById('file')) {
mw.loader.load(IME_TRANSLATIONS);
+
            $.getScript('//code.jquery.com/ui/1.12.1/jquery-ui.js').done(function() {
ime_init1();
+
                if (mw.config.get('wgUserLanguage') === 'de') {
}
+
                    ime_translations = {
}
+
                        'error_imagenotfound': 'ImageMapEdit: Konnte Bild in der Seitenstruktur nicht finden.',
 +
                        'bottomleft': 'Links unten',
 +
                        'bottomright': 'Rechts unten',
 +
                        'circle': 'circle (Kreis)',
 +
                        'circlechoose1': 'Auswahl mit linker Maustaste',
 +
                        'circlechoose2': 'Auswahl mit rechter Maustaste',
 +
                        'coordinates': 'Koordinaten',
 +
                        'default': 'Standard',
 +
                        'deletearea': 'Ausgewählten Bereich löschen',
 +
                        'deletecoordinates': 'Alle Koordinaten löschen',
 +
                        'editarea': 'Bereich bearbeiten',
 +
                        'generatedwikicode': 'Erstellter Wikicode',
 +
                        'hidetextbox': 'Eingabefeld verstecken',
 +
                        'hidewikicode': 'Wikicode verstecken',
 +
                        'imagedescription': 'Bildbeschreibung',
 +
                        'import': 'Importieren',
 +
                        'importareas': 'Bereiche aus Wikicode importieren',
 +
                        'infolinkposition': 'Position des Info-Links',
 +
                        'linktarget': 'Linkziel',
 +
                        'linktitle': 'Linktitel',
 +
                        'newarea': 'Neuen Bereich erstellen',
 +
                        'nolink': 'Kein Link',
 +
                        'optional': 'optional',
 +
                        'poly': 'poly (Polygon)',
 +
                        'polychoose': 'Hinzufügen neuer Punkte mit linker Maustaste',
 +
                        'position': 'Position',
 +
                        'preferences': 'Allgemeine Einstellungen',
 +
                        'radius': 'Radius',
 +
                        'rect': 'rect (Rechteck)',
 +
                        'rectbottom': 'unten',
 +
                        'rectchoose1': 'Auswahl mit linker Maustaste',
 +
                        'rectchoose2': 'Auswahl mit rechter Maustaste',
 +
                        'rectleft': 'Links',
 +
                        'rectright': 'Rechts',
 +
                        'recttop': 'oben',
 +
                        'showtextbox': 'Eingabefeld anzeigen',
 +
                        'showwikicode': 'Wikicode anzeigen',
 +
                        'topleft': 'Links oben',
 +
                        'topright': 'Rechts oben'
 +
                    };
 +
 
 +
                }
 +
 
 +
                ime_init1();
 +
            });
 +
        }
 +
    }
 
});
 
});
   Line 71: Line 103:  
*/
 
*/
 
function ime_htmlNewDiv(id) {
 
function ime_htmlNewDiv(id) {
var div = document.createElement('div');
+
    var div = document.createElement('div');
if (id) div.id = id;
+
    if (id) div.id = id;
return div;
+
    return div;
 
}
 
}
   Line 83: Line 115:  
*/
 
*/
 
function ime_init1() {
 
function ime_init1() {
var divFile = document.getElementById('file');
+
    var divFile = document.getElementById('file');
if (!divFile) {
+
    if (!divFile) {
ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,divFile=null)');
+
        ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,divFile=null)');
return;
+
        return;
}
+
    }
   −
var a = ime_findATag(divFile);
+
    var a = ime_findATag(divFile);
if (!a) {
+
    if (!a) {
ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,a=null)');
+
        ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,a=null)');
return;
+
        return;
}
+
    }
   −
var img = a.firstChild;
+
    var img = a.firstChild;
if (!img) {
+
    if (!img) {
ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,img=null)');
+
        ime_error(ime_translations['error_imagenotfound'] + ' (ime_init1,img=null)');
return;
+
        return;
}
+
    }
   −
var url = mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=imageinfo&iiprop=size&titles=' + mw.config.get('wgPageName');
+
    var url = mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=imageinfo&iiprop=size&titles=' + mw.config.get('wgPageName');
   −
$.get(url, function(data) {
+
    $.get(url, function(data) {
if( typeof data.query.pages != "undefined" ) {
+
        if (typeof data.query.pages != "undefined") {
        imageProperties = data.query.pages[Object.keys(data.query.pages)[0]];
+
            imageProperties = data.query.pages[Object.keys(data.query.pages)[0]];
ime_width = imageProperties.imageinfo[0].width;
+
            ime_width = imageProperties.imageinfo[0].width;
ime_height = imageProperties.imageinfo[0].height;
+
            ime_height = imageProperties.imageinfo[0].height;
   −
ime_scale = img.width/ime_width;
+
            ime_scale = img.width / ime_width;
   −
// Show 'show ImageMapEdit' button now
+
            // Show 'show ImageMapEdit' button now
var a = document.createElement('a');
+
            var a = document.createElement('a');
a.id = 'imeLink';
+
            a.id = 'imeLink';
a.href = 'javascript:ime_init2()';
+
            a.href = 'javascript:ime_init2()';
a.style.display = 'block';
+
            a.style.display = 'block';
a.appendChild(document.createTextNode('ImageMapEdit >'));
+
            a.appendChild(document.createTextNode('ImageMapEdit >'));
document.getElementById('file').appendChild(a);
+
            document.getElementById('file').appendChild(a);
}
+
        }
});
+
    });
 
}
 
}
   Line 129: Line 161:  
function ime_init2() {
 
function ime_init2() {
   −
// Remove UI that might interfere with this code
+
    // Remove UI that might interfere with this code
ime_removeOtherUIElements();
+
    ime_removeOtherUIElements();
   −
var divFile = document.getElementById('file');
+
    var divFile = document.getElementById('file');
var tempNode = divFile.firstChild;
+
    var tempNode = divFile.firstChild;
var a = ime_findATag(tempNode);
+
    var a = ime_findATag(tempNode);
var img = a.firstChild;
+
    var img = a.firstChild;
   −
var divImeContainer = ime_htmlNewDiv('imeContainer');
+
    var divImeContainer = ime_htmlNewDiv('imeContainer');
divImeContainer.style.position = 'relative';
+
    divImeContainer.style.position = 'relative';
   −
// Move image from within link to outside
+
    // Move image from within link to outside
a.removeChild(img);
+
    a.removeChild(img);
divFile.insertBefore(divImeContainer,tempNode);
+
    divFile.insertBefore(divImeContainer, tempNode);
divFile.removeChild(tempNode);
+
    divFile.removeChild(tempNode);
// Fix for rtl wikis, thanks to hewiki user "קיפודנחש"
+
    // Fix for rtl wikis, thanks to hewiki user "קיפודנחש"
divFile.style.direction = 'ltr';
+
    divFile.style.direction = 'ltr';
   −
img.id = 'imeImg';
+
    img.id = 'imeImg';
img.style.zIndex = 99;
+
    img.style.zIndex = 99;
img.style.border = 'none';
+
    img.style.border = 'none';
img.style.opacity = '0.75';
+
    img.style.opacity = '0.75';
img.style.filter = 'alpha(opacity=75)'; // IE
+
    img.style.filter = 'alpha(opacity=75)'; // IE
   −
// Internet Explorer needs this differently
+
    // Internet Explorer needs this differently
if (typeof(navigator.userAgent) != 'undefined' && navigator.userAgent.match('/MSIE/')) {
+
    if (typeof(navigator.userAgent) != 'undefined' && navigator.userAgent.match('/MSIE/')) {
divImeContainer.style.overflow = 'none';
+
        divImeContainer.style.overflow = 'none';
}
+
    } else {
else {
+
        divImeContainer.style.overflow = 'auto';
divImeContainer.style.overflow = 'auto';
+
    }
}
     −
var divImePreview = ime_htmlNewDiv('imePreview');
+
    var divImePreview = ime_htmlNewDiv('imePreview');
divImePreview.style.position = 'absolute';
+
    divImePreview.style.position = 'absolute';
divImePreview.style.top = '0';
+
    divImePreview.style.top = '0';
divImePreview.style.left = '0';
+
    divImePreview.style.left = '0';
divImePreview.style.width = img.width + 'px';
+
    divImePreview.style.width = img.width + 'px';
divImePreview.style.height = img.height + 'px';
+
    divImePreview.style.height = img.height + 'px';
divImePreview.zIndex = 0;
+
    divImePreview.zIndex = 0;
   −
divImeContainer.appendChild(divImePreview);
+
    divImeContainer.appendChild(divImePreview);
divImeContainer.appendChild(img);
+
    divImeContainer.appendChild(img);
   −
var divIme = ime_htmlNewDiv('ime');
+
    var divIme = ime_htmlNewDiv('ime');
divFile.appendChild(divIme);
+
    divFile.appendChild(divIme);
   −
// Hide the link now
+
    // Hide the link now
document.getElementById('imeLink').style.display = 'none';
+
    document.getElementById('imeLink').style.display = 'none';
   −
// Disable image context menu so right click can be used for events
+
    // Disable image context menu so right click can be used for events
img.oncontextmenu = ime_eventDummy;
+
    img.oncontextmenu = ime_eventDummy;
      −
divIme.innerHTML = ime_templateHtml;
+
    divIme.innerHTML = ime_templateHtml;
   −
// Translate texts
+
    // Translate texts
ime_translate();
+
    ime_hideResult();
//A button gets created. On click, it gets the input from the #imeResult ID and posts it on the '/ImageMap' page.  
+
    ime_translate();
//After posting, it forwards the user to the '/ImageMap' page.
+
    //A button gets created. On click, it gets the input from the #imeResult ID and posts it on the '/ImageMap' page.  
var clicked = false;
+
    //After posting, it forwards the user to the '/ImageMap' page.
var btn = document.createElement("button");
+
    var clicked = false;
btn.innerHTML = "Speichern";
+
    var btn = document.createElement("button");
btn.onclick = function () {
+
    btn.innerHTML = "Speichern";
    if ($('#imeResult').length) {
+
    btn.onclick = function() {
    clicked = false;
+
        if ($('#imeResult').length) {
    var rep = $('#imeResult').html();
+
            clicked = false;
    var rep1 = rep.replaceAll("<br>","\n");
+
            var rep = $('#imeResult').html();
    var rep2 = rep1.replaceAll("&lt;","<");
+
            var rep1 = rep.replaceAll("<br>", "\n");
    var rep3 = rep2.replaceAll("&gt;",">");
+
            var rep2 = rep1.replaceAll("&lt;", "<");
    var finalstr = '{{ImageMap |map='+rep3+' }}'
+
            var rep3 = rep2.replaceAll("&gt;", ">");
    var params = {
+
            var finalstr = '{{ImageMap |map=' + rep3 + ' }}'
action: 'edit',
+
            var params = {
title: $('#firstHeading').text()+'/ImageMap',
+
                    action: 'edit',
text: finalstr,
+
                    title: $('#firstHeading').text() + '/ImageMap',
format: 'json'
+
                    text: finalstr,
},
+
                    format: 'json'
api = new mw.Api();
+
                },
 +
                api = new mw.Api();
   −
api.postWithToken( 'csrf', params ).done( function ( data ) {
+
            api.postWithToken('csrf', params).done(function(data) {
window.location.replace("/wiki/" + $('#firstHeading').text() + "/ImageMap");
+
                window.location.replace("/wiki/" + $('#firstHeading').text() + "/ImageMap");
});
+
            });
}
+
        }
};
+
    };
document.getElementById("file").appendChild(btn);
+
    document.getElementById("file").appendChild(btn);
   −
//A button gets created.  
+
    //A button gets created.  
var but = document.createElement("button");
+
    var but = document.createElement("button");
but.innerHTML = "Laden";
+
    but.innerHTML = "Laden";
but.onclick = function () {
+
    but.onclick = function() {
if(!clicked){    
+
        if (!clicked) {
//Gets the wiki text from the '/ImageMap' page  and imports it.
+
            //Gets the wiki text from the '/ImageMap' page  and imports it.
   −
$.getJSON("/w/api.php?action=query&prop=revisions&titles="+$('#firstHeading').text()+"%2FImageMap&rvprop=content&formatversion=2&format=json", async function(data) {
+
            $.getJSON("/w/api.php?action=query&prop=revisions&titles=" + $('#firstHeading').text() + "%2FImageMap&rvprop=content&formatversion=2&format=json", function(data) {
var daten = await data;
+
                var daten = data;
if(daten.query.pages[0].hasOwnProperty("missing")){
+
                if (daten.query.pages[0].hasOwnProperty("missing")) {
if(daten.query.pages[0].missing === true){
+
                    if (daten.query.pages[0].missing === true) {
return;
+
                        return;
}
+
                    }
}
+
                }
var aus = daten.query.pages[0].revisions[0].content;
+
                var aus = daten.query.pages[0].revisions[0].content;
$('textarea[name="importText"]').html(aus);
+
                $('textarea[name="importText"]').html(aus);
ime_importLines();
+
                ime_importLines();
var clear = "";
+
                var clear = "";
$('textarea[name="importText"]').html(clear);
+
                $('textarea[name="importText"]').html(clear);
}).fail(function() {
+
            }).fail(function() {
    return;
+
                return;
});
+
            });
   −
//Gets the image width and the image position from the '/ImageMap' page and updates the created ImageMap code.
+
            //Gets the image width and the image position from the '/ImageMap' page and updates the created ImageMap code.
   −
$.get("/wiki/" + $('#firstHeading').text() + "/ImageMap", function(data){
+
            $.getJSON("/w/api.php?action=query&prop=revisions&titles=" + $('#firstHeading').text() + "%2FImageMap&rvprop=content&formatversion=2&format=json", function(data) {
var size = $(data).find("img[usemap^='#ImageMap_']");
+
                var data1 = data;
var imgWidth = size.attr("width");
+
                if (data1.query.pages[0].hasOwnProperty("missing")) {
  if($(data).find("div.center").length){
+
                    if (data1.query.pages[0].missing === true) {
$('input#ime_imageDescription').val(imgWidth+'px'+'|zentriert');
+
                        return;
ime_updateResult();
+
                    }
}else if($(data).find("div.floatleft").length){
+
                }
$('input#ime_imageDescription').val(imgWidth+'px'+'|links');
+
                var out = data1.query.pages[0].revisions[0].content;
ime_updateResult();
+
                var patt = /(?<=<imagemap>\n).*/;
}else if($(data).find("div.floatright").length){
+
                var string = out.match(patt) + '';
$('input#ime_imageDescription').val(imgWidth+'px'+'|rechts');
+
                var stringSplit = string.split('|');
ime_updateResult();
+
                var stringJoin = [stringSplit.shift(), stringSplit.join('|')]
}else{if(size.lenght){
+
                $('input#ime_imageDescription').val(stringJoin[1]);
$('input#ime_imageDescription').val(imgWidth+'px');
+
                ime_updateResult();
ime_updateResult();
+
            }).fail(function() {
}
+
                return;
}
+
            });
}).fail(function() {
+
            clicked = true;
    return;
+
        }
});
+
    };
clicked = true;
  −
}
  −
};
        −
document.getElementById("file").appendChild(but);
+
    document.getElementById("file").appendChild(but);
      Line 275: Line 304:  
*/
 
*/
 
function ime_translate() {
 
function ime_translate() {
if (ime_translations) {
+
    if (ime_translations) {
for (var i in ime_translations) {
+
        for (var i in ime_translations) {
var elements = ime_getElementsByClassName('ime_t_' + i);
+
            var elements = ime_getElementsByClassName('ime_t_' + i);
if (elements.length > 0) {
+
            if (elements.length > 0) {
var text = ime_translations[i];;
+
                var text = ime_translations[i];;
for (var j=0; j<elements.length; j++) {
+
                for (var j = 0; j < elements.length; j++) {
elements[j].innerHTML = text;
+
                    elements[j].innerHTML = text;
}
+
                }
}
+
            }
}
+
        }
}
+
    }
 
}
 
}
   Line 292: Line 321:  
*/
 
*/
 
function ime_getElementsByClassName(className) {
 
function ime_getElementsByClassName(className) {
// Hopefully the browser supports this natively
+
    // Hopefully the browser supports this natively
if (document.getElementsByClassName) {
+
    if (document.getElementsByClassName) {
return document.getElementsByClassName(className);
+
        return document.getElementsByClassName(className);
}
+
    }
   −
// Otherwise use the function defined by MediaWiki
+
    // Otherwise use the function defined by MediaWiki
return getElementsByClassName(document,'*',className)
+
    return getElementsByClassName(document, '*', className)
 
}
 
}
   Line 306: Line 335:  
*/
 
*/
 
function ime_error(message) {
 
function ime_error(message) {
var jqFile = $('#file');
+
    var jqFile = $('#file');
var jqIme = $('#ime');
+
    var jqIme = $('#ime');
   −
if (jqFile.length !== 0) {
+
    if (jqFile.length !== 0) {
var jqImeError = $('<p/>')
+
        var jqImeError = $('<p/>')
.css({
+
            .css({
'color' : 'darkred',
+
                'color': 'darkred',
'background' : 'white',
+
                'background': 'white',
'border' : '1px solid darkred',
+
                'border': '1px solid darkred',
'padding' : '1ex'
+
                'padding': '1ex'
})
+
            })
.text(message)
+
            .text(message)
   −
if (jqIme !== 0) {
+
        if (jqIme !== 0) {
jqIme.before(jqImeError);
+
            jqIme.before(jqImeError);
} else {
+
        } else {
jqImeError.appendTo(jqFile);
+
            jqImeError.appendTo(jqFile);
}
+
        }
}
+
    } else {
else {
+
        window.alert(message);
window.alert(message);
+
    }
}
   
}
 
}
   Line 334: Line 362:  
*/
 
*/
 
function ime_eventDummy(e) {
 
function ime_eventDummy(e) {
e.cancelBubble = true;
+
    e.cancelBubble = true;
return false;
+
    return false;
 
}
 
}
   Line 341: Line 369:  
Function to define an object containing rect(angle) coordinates.
 
Function to define an object containing rect(angle) coordinates.
 
*/
 
*/
function ime_RectCoord(x1,y1,x2,y2) {
+
function ime_RectCoord(x1, y1, x2, y2) {
this.left = x1;
+
    this.left = x1;
this.top = y1;
+
    this.top = y1;
this.right = x2;
+
    this.right = x2;
this.bottom = y2;
+
    this.bottom = y2;
 
}
 
}
   Line 351: Line 379:  
Function to define an object containing circle coordinates.
 
Function to define an object containing circle coordinates.
 
*/
 
*/
function ime_CircleCoord(x,y,r) {
+
function ime_CircleCoord(x, y, r) {
this.x = x;
+
    this.x = x;
this.y = y;
+
    this.y = y;
this.radius = r;
+
    this.radius = r;
 
}
 
}
   Line 360: Line 388:  
Function to define an object containing poly(gon) coordinates.
 
Function to define an object containing poly(gon) coordinates.
 
*/
 
*/
function ime_PolyCoord(x,y,r) {
+
function ime_PolyCoord(x, y, r) {
this.points = Array();
+
    this.points = Array();
 
}
 
}
   Line 369: Line 397:  
*/
 
*/
 
function ime_Area(shape) {
 
function ime_Area(shape) {
if (shape=='rect') {
+
    if (shape == 'rect') {
this.shape = 'rect';
+
        this.shape = 'rect';
this.coords = new ime_RectCoord(0,0,0,0);
+
        this.coords = new ime_RectCoord(0, 0, 0, 0);
}
+
    } else if (shape == 'circle') {
else if (shape=='circle') {
+
        this.shape = 'circle';
this.shape = 'circle';
+
        this.coords = new ime_CircleCoord(0, 0, 20);
this.coords = new ime_CircleCoord(0,0,20);
+
    } else {
}
+
        this.shape = 'poly';
else {
+
        this.coords = new ime_PolyCoord();
this.shape = 'poly';
+
    }
this.coords = new ime_PolyCoord();
+
    this.link = '';
}
+
    this.title = '';
this.link = '';
  −
this.title = '';
   
}
 
}
   Line 390: Line 416:  
*/
 
*/
 
function ime_getEvent(e) {
 
function ime_getEvent(e) {
if (e) {
+
    if (e) {
return e;
+
        return e;
}
+
    } else {
else {
+
        return window.event;
return window.event;
+
    }
}
   
}
 
}
    
function ime_eventGetX(e) {
 
function ime_eventGetX(e) {
if (typeof(e.layerX)!='undefined') {
+
    if (typeof(e.layerX) != 'undefined') {
return Math.round(e.layerX / ime_scale);
+
        return Math.round(e.layerX / ime_scale);
}
+
    }
if (typeof(e.offsetX)!='undefined') {
+
    if (typeof(e.offsetX) != 'undefined') {
return Math.round(e.offsetX / ime_scale);
+
        return Math.round(e.offsetX / ime_scale);
}
+
    } else {
else {
+
        return Math.round(e.x / ime_scale);
return Math.round(e.x / ime_scale);
+
    }
}
   
}
 
}
    
function ime_eventGetY(e) {
 
function ime_eventGetY(e) {
if (typeof(e.layerY)!='undefined') {
+
    if (typeof(e.layerY) != 'undefined') {
return Math.round(e.layerY / ime_scale);
+
        return Math.round(e.layerY / ime_scale);
}
+
    }
if (typeof(e.offsetY)!='undefined') {
+
    if (typeof(e.offsetY) != 'undefined') {
return Math.round(e.offsetY / ime_scale);
+
        return Math.round(e.offsetY / ime_scale);
}
+
    } else {
else {
+
        return Math.round(e.y / ime_scale);
return Math.round(e.y / ime_scale);
+
    }
}
   
}
 
}
    
function ime_eventGetButton(e) {
 
function ime_eventGetButton(e) {
if (typeof(e.which)!='undefined') {
+
    if (typeof(e.which) != 'undefined') {
return e.which;
+
        return e.which;
}
+
    } else {
else {
+
        return e.button;
return e.button;
+
    }
}
   
}
 
}
    
function ime_mouseEventClear() {
 
function ime_mouseEventClear() {
var img = document.getElementById('imeImg');
+
    var img = document.getElementById('imeImg');
img.onmousedown = null;
+
    img.onmousedown = null;
img.style.cursor = '';
+
    img.style.cursor = '';
 
}
 
}
    
function ime_mouseEventSet(func) {
 
function ime_mouseEventSet(func) {
var img = document.getElementById('imeImg');
+
    var img = document.getElementById('imeImg');
img.onmousedown = func;
+
    img.onmousedown = func;
img.style.cursor = 'crosshair';
+
    img.style.cursor = 'url("https://testwiki.kiprobatt.de/w/img_auth.php/f/fb/Crosshair.png"), crosshair';
 
}
 
}
    
function ime_eventRect(e) {
 
function ime_eventRect(e) {
e = ime_getEvent(e);
+
    e = ime_getEvent(e);
var button = ime_eventGetButton(e);
+
    var button = ime_eventGetButton(e);
if (button==1) {
+
    if (button == 1) {
document.ime.areaRectLeft.value = ime_eventGetX(e);
+
        document.ime.areaRectLeft.value = ime_eventGetX(e);
document.ime.areaRectTop.value = ime_eventGetY(e);
+
        document.ime.areaRectTop.value = ime_eventGetY(e);
}
+
    } else if (button == 2 || button == 3) {
else if (button==2 || button==3) {
+
        document.ime.areaRectRight.value = ime_eventGetX(e);
document.ime.areaRectRight.value = ime_eventGetX(e);
+
        document.ime.areaRectBottom.value = ime_eventGetY(e);
document.ime.areaRectBottom.value = ime_eventGetY(e);
+
    }
}
+
    ime_saveArea();
ime_saveArea();
+
    return false;
return false;
   
}
 
}
    
function ime_eventCircle(e) {
 
function ime_eventCircle(e) {
e = ime_getEvent(e);
+
    e = ime_getEvent(e);
var button = ime_eventGetButton(e);
+
    var button = ime_eventGetButton(e);
if (button==1) {
+
    if (button == 1) {
document.ime.areaCircleX.value = ime_eventGetX(e);
+
        document.ime.areaCircleX.value = ime_eventGetX(e);
document.ime.areaCircleY.value = ime_eventGetY(e);
+
        document.ime.areaCircleY.value = ime_eventGetY(e);
}
+
    } else if (button == 2 || button == 3) {
else if (button==2 || button==3) {
+
        var a = (ime_eventGetX(e) - parseInt(document.ime.areaCircleX.value));
var a = (ime_eventGetX(e) - parseInt(document.ime.areaCircleX.value));
+
        var b = (ime_eventGetY(e) - parseInt(document.ime.areaCircleY.value));
var b = (ime_eventGetY(e) - parseInt(document.ime.areaCircleY.value));
+
        document.ime.areaCircleRadius.value = Math.round(Math.sqrt(a * a + b * b));
document.ime.areaCircleRadius.value = Math.round(Math.sqrt(a*a + b*b));
+
    }
}
+
    ime_saveArea();
ime_saveArea();
+
    return false;
return false;
   
}
 
}
    
function ime_eventPoly(e) {
 
function ime_eventPoly(e) {
e = ime_getEvent(e);
+
    e = ime_getEvent(e);
var button = ime_eventGetButton(e);
+
    var button = ime_eventGetButton(e);
if (button==1) {
+
    if (button == 1) {
area = ime_areas[ime_currentlyEditing];
+
        area = ime_areas[ime_currentlyEditing];
area.coords.points.push(ime_eventGetX(e));
+
        area.coords.points.push(ime_eventGetX(e));
area.coords.points.push(ime_eventGetY(e));
+
        area.coords.points.push(ime_eventGetY(e));
ime_saveArea();
+
        ime_saveArea();
}
+
    }
return false;
+
    return false;
 
}
 
}
    
function ime_newArea(shape) {
 
function ime_newArea(shape) {
var area = new ime_Area(shape);
+
    var area = new ime_Area(shape);
area.shape = shape;
+
    area.shape = shape;
ime_areas.push(area);
+
    ime_areas.push(area);
   −
ime_currentlyEditing = ime_areas.length-1;
+
    ime_currentlyEditing = ime_areas.length - 1;
ime_updateAreas();
+
    ime_updateAreas();
ime_editArea(ime_currentlyEditing);
+
    ime_editArea(ime_currentlyEditing);
autoComplete();
+
    autoComplete();
 
}
 
}
 
//Gets called by ime_newArea() and ime_editArea() functions.
 
//Gets called by ime_newArea() and ime_editArea() functions.
function autoComplete(){
+
function autoComplete() {
const search = document.getElementById('ime_areaLink');
+
    const search = document.getElementById('ime_areaLink');
$('#ime_areaLink').parent('div').addClass('ui-widget');
+
    $('#ime_areaLink').parent('div').addClass('ui-widget');
var firstTimeTrigger = false;
+
    var firstTimeTrigger = false;
var firstTimeTriggerCat = false;
+
    var firstTimeTriggerCat = false;
$('#ime_areaLink').parent('div').addClass('ui-autocomplete');
+
    $('#ime_areaLink').parent('div').addClass('ui-autocomplete');
var searchPages = async (searchText, searchCat) => {  
+
    var searchPages = async (searchText, searchCat) => {
   −
var categories;
+
        var categories;
/*When the linkcategory field is empty, this code does the autocomplete in the linktarget field with all pages.*/
+
        /*When the linkcategory field is empty, this code does the autocomplete in the linktarget field with all pages.*/
if(searchCat.length === 0){categories = [];
+
        if (searchCat.length === 0) {
var pages;
+
            categories = [];
if(searchText.length === 0){
+
            var pages;
  pages = [];
+
            if (searchText.length === 0) {
}
+
                pages = [];
else{
+
            } else {
const res = await fetch('/w/api.php?action=pfautocomplete&substr='+ searchText +'&namespace=Main&format=json');
+
                const res = await fetch('/w/api.php?action=pfautocomplete&substr=' + searchText + '&namespace=Main&format=json');
pages = await res.json();
+
                pages = await res.json();
   −
var allTitles = pages.pfautocomplete.map(function(item) {
+
                var allTitles = pages.pfautocomplete.map(function(item) {
  return item['title'];
+
                    return item['title'];
});
+
                });
   −
$( "#ime_areaLink" ).autocomplete({
+
                $("#ime_areaLink").autocomplete({
      source: allTitles
+
                    source: allTitles
    });
+
                });
$('ul.ui-autocomplete').css('list-style', 'none');
+
                $('ul.ui-autocomplete').css('list-style', 'none');
if(!firstTimeTrigger){
+
                if (!firstTimeTrigger) {
firstTimeTrigger = true;
+
                    firstTimeTrigger = true;
search.dispatchEvent(new Event('input'));
+
                    search.dispatchEvent(new Event('input'));
}
+
                }
}
+
            }
}
+
        } else {
else{ /*When the linkcategory field is not empty, this else is called and at first it creates an autocomplete for the linkcategory field.*/
+
            /*When the linkcategory field is not empty, this else is called and at first it creates an autocomplete for the linkcategory field.*/
var get = await $.getJSON( "/w/api.php?action=query&list=allcategories&format=json");
+
            var get = await $.getJSON("/w/api.php?action=query&list=allcategories&format=json");
var categories = await get.query;
+
            var categories = await get.query;
var allCategories = categories.allcategories.map(function(item) {
+
            var allCategories = categories.allcategories.map(function(item) {
return item['*'];
+
                return item['*'];
});
+
            });
   −
$( "#ime_linkCategory" ).autocomplete({
+
            $("#ime_linkCategory").autocomplete({
      source: allCategories
+
                source: allCategories
    });
+
            });
$('ul.ui-autocomplete').css('list-style', 'none');
+
            $('ul.ui-autocomplete').css('list-style', 'none');
if(!firstTimeTriggerCat){
+
            if (!firstTimeTriggerCat) {
firstTimeTriggerCat = true;
+
                firstTimeTriggerCat = true;
category.dispatchEvent(new Event('input'));
+
                category.dispatchEvent(new Event('input'));
}
+
            }
         −
var pages;
+
            var pages;
/*When the linkcategory field is not empty, this code creates an autocomplete for the linktarget field with the given category from the linkcategory field.*/
+
            /*When the linkcategory field is not empty, this code creates an autocomplete for the linktarget field with the given category from the linkcategory field.*/
if(searchText.length === 0){
+
            if (searchText.length === 0) {
  pages = [];
+
                pages = [];
}
+
            } else {
else{
+
                const res = await fetch('/w/api.php?action=pfautocomplete&substr=' + searchText + '&category=' + searchCat + '&namespace=Main&format=json');
const res = await fetch('/w/api.php?action=pfautocomplete&substr='+ searchText + '&category='+ searchCat +'&namespace=Main&format=json');
+
                pages = await res.json();
pages = await res.json();
     −
var allTitles = pages.pfautocomplete.map(function(item) {
+
                var allTitles = pages.pfautocomplete.map(function(item) {
  return item['title'];
+
                    return item['title'];
});
+
                });
   −
$( "#ime_areaLink" ).autocomplete({
+
                $("#ime_areaLink").autocomplete({
      source: allTitles
+
                    source: allTitles
    });
+
                });
$('ul.ui-autocomplete').css('list-style', 'none');
+
                $('ul.ui-autocomplete').css('list-style', 'none');
if(!firstTimeTrigger){
+
                if (!firstTimeTrigger) {
firstTimeTrigger = true;
+
                    firstTimeTrigger = true;
search.dispatchEvent(new Event('input'));
+
                    search.dispatchEvent(new Event('input'));
}
+
                }
}
+
            }
}
+
        }
}
+
    }
   −
search.addEventListener('input', () => searchPages(search.value, category.value));
+
    search.addEventListener('input', () => searchPages(search.value, category.value));
         −
//This code creates the input field for the linkcategory.
+
    //This code creates the input field for the linkcategory.
if(!$('#ime_linkCategory').length){
+
    if (!$('#ime_linkCategory').length) {
var br = document.createElement("br");
+
        var br = document.createElement("br");
$('#ime_areaLink').parent().append(br);
+
        $('#ime_areaLink').parent().append(br);
var lbl = document.createElement("label");
+
        var lbl = document.createElement("label");
lbl.setAttribute("for", "ime_linkCategory");
+
        lbl.setAttribute("for", "ime_linkCategory");
lbl.setAttribute("id", "ime_linkCategoryLabel");
+
        lbl.setAttribute("id", "ime_linkCategoryLabel");
$('#ime_areaLink').parent().append(lbl);
+
        $('#ime_areaLink').parent().append(lbl);
var spn = document.createElement("span");
+
        var spn = document.createElement("span");
spn.setAttribute("value", "Linkkategorie");
+
        spn.setAttribute("value", "Linkkategorie");
spn.innerHTML = 'Linkkategorie';
+
        spn.innerHTML = 'Linkkategorie';
document.getElementById("ime_linkCategoryLabel").appendChild(spn);
+
        document.getElementById("ime_linkCategoryLabel").appendChild(spn);
var br1 = document.createElement("br");
+
        var br1 = document.createElement("br");
$('#ime_areaLink').parent().append(br1);
+
        $('#ime_areaLink').parent().append(br1);
var inpt = document.createElement("INPUT");
+
        var inpt = document.createElement("INPUT");
inpt.setAttribute("type", "text");
+
        inpt.setAttribute("type", "text");
inpt.setAttribute("id", "ime_linkCategory");
+
        inpt.setAttribute("id", "ime_linkCategory");
inpt.setAttribute("style","width:10em");
+
        inpt.setAttribute("style", "width:10em");
//document.getElementById("ime_areaLink")[0].appendChild(inpt);
+
        //document.getElementById("ime_areaLink")[0].appendChild(inpt);
$('#ime_areaLink').parent().append(inpt);
+
        $('#ime_areaLink').parent().append(inpt);
}
+
    }
const category = document.getElementById('ime_linkCategory');
+
    const category = document.getElementById('ime_linkCategory');
category.addEventListener('input', () => searchPages(search.value, category.value));
+
    category.addEventListener('input', () => searchPages(search.value, category.value));
 
}
 
}
   Line 605: Line 624:     
function ime_updateAreas() {
 
function ime_updateAreas() {
ime_updateSelectArea();
+
    ime_updateSelectArea();
ime_updateMap();
+
    ime_updateMap();
ime_updateResult();
+
    ime_updateResult();
 
}
 
}
    
function ime_updateResult() {
 
function ime_updateResult() {
var arr = document.ime.imageDescriptionPos;
+
    var arr = document.ime.imageDescriptionPos;
var imageDescriptionPos = arr[0].value;
+
    var imageDescriptionPos = arr[0].value;
for (var i=1; i<arr.length; i++) {
+
    for (var i = 1; i < arr.length; i++) {
if (arr[i].checked) {
+
        if (arr[i].checked) {
imageDescriptionPos = arr[i].value;
+
            imageDescriptionPos = arr[i].value;
break;
+
            break;
}
+
        }
}
+
    }
   −
var result = Array();
+
    var result = Array();
result.push('<imagemap>');
+
    result.push('<imagemap>');
result.push(mw.config.get('wgPageName') + '|' + document.ime.imageDescription.value);
+
    result.push(mw.config.get('wgPageName') + '|' + document.ime.imageDescription.value);
result.push('');
+
    result.push('');
for (var i=0; i<ime_areas.length; i++) {
+
    for (var i = 0; i < ime_areas.length; i++) {
var coords = ime_areas[i].coords;
+
        var coords = ime_areas[i].coords;
var s = '';
+
        var s = '';
if (ime_areas[i].shape=='rect') {
+
        if (ime_areas[i].shape == 'rect') {
s = coords.left + ' ' + coords.top + ' ' + coords.right + ' ' + coords.bottom;
+
            s = coords.left + ' ' + coords.top + ' ' + coords.right + ' ' + coords.bottom;
}
+
        } else if (ime_areas[i].shape == 'circle') {
else if (ime_areas[i].shape=='circle') {
+
            s = coords.x + ' ' + coords.y + ' ' + coords.radius;
s = coords.x + ' ' + coords.y + ' ' + coords.radius;
+
        } else if (ime_areas[i].shape == 'poly') {
}
+
            s = coords.points.join(' ');
else if (ime_areas[i].shape=='poly') {
+
        }
s = coords.points.join(' ');
+
        result.push(ime_areas[i].shape + ' ' + s + ' [[' + ime_areas[i].link + (ime_areas[i].title ? '|' + ime_areas[i].title : '') + ']]');
}
+
    }
result.push(ime_areas[i].shape + ' ' + s + ' [[' + ime_areas[i].link + (ime_areas[i].title ? '|' + ime_areas[i].title : '') + ']]');
+
    result.push('');
}
+
    result.push('desc ' + imageDescriptionPos);
result.push('');
+
    result.push('</imagemap>');
result.push('desc ' + imageDescriptionPos);
  −
result.push('</imagemap>');
     −
var preResult = document.getElementById('imeResult');
+
    var preResult = document.getElementById('imeResult');
   −
while (preResult.lastChild) {
+
    while (preResult.lastChild) {
preResult.removeChild(preResult.lastChild);
+
        preResult.removeChild(preResult.lastChild);
}
+
    }
   −
for (var i=0; i<result.length; i++) {
+
    for (var i = 0; i < result.length; i++) {
preResult.appendChild(document.createTextNode(result[i]));
+
        preResult.appendChild(document.createTextNode(result[i]));
preResult.appendChild(document.createElement('br'));
+
        preResult.appendChild(document.createElement('br'));
}
+
    }
 
}
 
}
    
function ime_updateMap() {
 
function ime_updateMap() {
var preview = document.getElementById('imePreview');
+
    var preview = document.getElementById('imePreview');
var img = document.getElementById('imeImg');
+
    var img = document.getElementById('imeImg');
   −
// Remove areas from map which are out of range
+
    // Remove areas from map which are out of range
for (var i=0; i<preview.childNodes.length; i++) {
+
    for (var i = 0; i < preview.childNodes.length; i++) {
var child = preview.childNodes[i];
+
        var child = preview.childNodes[i];
var id = parseInt(child.id.substring(10));
+
        var id = parseInt(child.id.substring(10));
if (id>=ime_areas.length) {
+
        if (id >= ime_areas.length) {
preview.removeChild(child);
+
            preview.removeChild(child);
i--;
+
            i--;
}
+
        }
}
+
    }
   −
for (var i=0; i<ime_areas.length; i++) {
+
    for (var i = 0; i < ime_areas.length; i++) {
// Get existing DIV
+
        // Get existing DIV
var area = ime_areas[i];
+
        var area = ime_areas[i];
var div = document.getElementById('imePreview' + i);
+
        var div = document.getElementById('imePreview' + i);
   −
// If it does not exist exists, create a new one and set style
+
        // If it does not exist exists, create a new one and set style
if (!div) {
+
        if (!div) {
var div = ime_htmlNewDiv('imePreview' + i)
+
            var div = ime_htmlNewDiv('imePreview' + i)
preview.appendChild(div);
+
            preview.appendChild(div);
div.style.zIndex = 0;
+
            div.style.zIndex = 0;
div.style.position = 'absolute';
+
            div.style.position = 'absolute';
div.style.opacity = 0.5;
+
            div.style.opacity = 0.5;
div.style.filter = 'alpha(opacity=50)';
+
            div.style.filter = 'alpha(opacity=50)';
}
+
        }
   −
var coords = area.coords;
+
        var coords = area.coords;
if (area.shape == 'rect') {
+
        if (area.shape == 'rect') {
div.className = 'previewRect';
+
            div.className = 'previewRect';
// Only if valid coordinates were given, draw
+
            // Only if valid coordinates were given, draw
if (coords.left<coords.right && coords.top<coords.bottom) {
+
            if (coords.left < coords.right && coords.top < coords.bottom) {
div.style.left = Math.round(ime_scale * coords.left) + 'px';
+
                div.style.left = Math.round(ime_scale * coords.left) + 'px';
div.style.top = Math.round(ime_scale * coords.top) + 'px';
+
                div.style.top = Math.round(ime_scale * coords.top) + 'px';
div.style.width = (Math.round(ime_scale * coords.right) - Math.round(ime_scale * coords.left)) + 'px';
+
                div.style.width = (Math.round(ime_scale * coords.right) - Math.round(ime_scale * coords.left)) + 'px';
div.style.height = (Math.round(ime_scale * coords.bottom) - Math.round(ime_scale * coords.top)) + 'px';
+
                div.style.height = (Math.round(ime_scale * coords.bottom) - Math.round(ime_scale * coords.top)) + 'px';
}
+
            } else {
else {
+
                div.style.left = '0';
div.style.left = '0';
+
                div.style.top = '0';
div.style.top = '0';
+
                div.style.width = '0';
div.style.width = '0';
+
                div.style.height = '0';
div.style.height = '0';
+
            }
}
+
        } else if (area.shape == 'circle') {
}
+
            div.className = 'previewCircle';
else if (area.shape == 'circle') {
+
            div.style.backgroundRepeat = 'no-repeat';
div.className = 'previewCircle';
+
            var left = Math.round(ime_scale * coords.x) - Math.round(ime_scale * coords.radius);
div.style.backgroundRepeat = 'no-repeat';
+
            var top = Math.round(ime_scale * coords.y) - Math.round(ime_scale * coords.radius);
var left = Math.round(ime_scale * coords.x) - Math.round(ime_scale * coords.radius);
+
            var size = Math.round(ime_scale * coords.radius * 2) + 1;
var top = Math.round(ime_scale * coords.y) - Math.round(ime_scale * coords.radius);
  −
var size = Math.round(ime_scale * coords.radius * 2) + 1;
     −
div.style.left = left + 'px';
+
            div.style.left = left + 'px';
div.style.top = top + 'px';
+
            div.style.top = top + 'px';
   −
if (left + size > img.width) {
+
            if (left + size > img.width) {
div.style.width = (img.width - left) + 'px';
+
                div.style.width = (img.width - left) + 'px';
}
+
            } else {
else {
+
                div.style.width = size + 'px';
div.style.width = size + 'px';
+
            }
}
     −
if (top + size > img.height) {
+
            if (top + size > img.height) {
div.style.height = (img.height - top) + 'px';
+
                div.style.height = (img.height - top) + 'px';
}
+
            } else {
else {
+
                div.style.height = size + 'px';
div.style.height = size + 'px';
+
            }
}
+
        } else if (area.shape == 'poly') {
}
+
            // Determine maximum coordinates (this is how big the image is)
else if (area.shape == 'poly') {
+
            div.className = 'previewPoly';
// Determine maximum coordinates (this is how big the image is)
+
            div.style.backgroundRepeat = 'no-repeat';
div.className = 'previewPoly';
  −
div.style.backgroundRepeat = 'no-repeat';
     −
var points = coords.points;
+
            var points = coords.points;
var minX=0; var maxX=0; var minY=0; var maxY=0;
+
            var minX = 0;
if (points.length>0) {
+
            var maxX = 0;
minX = points[0];
+
            var minY = 0;
maxX = points[0];
+
            var maxY = 0;
minY = points[1];
+
            if (points.length > 0) {
maxY = points[1];
+
                minX = points[0];
for (var j=2; j<points.length; j+=2) {
+
                maxX = points[0];
var x = points[j];
+
                minY = points[1];
var y = points[j+1];
+
                maxY = points[1];
if (x<minX) minX = x;
+
                for (var j = 2; j < points.length; j += 2) {
if (x>maxX) maxX = x;
+
                    var x = points[j];
if (y<minY) minY = y;
+
                    var y = points[j + 1];
if (y>maxY) maxY = y;
+
                    if (x < minX) minX = x;
}
+
                    if (x > maxX) maxX = x;
}
+
                    if (y < minY) minY = y;
 +
                    if (y > maxY) maxY = y;
 +
                }
 +
            }
   −
div.style.left = Math.round(ime_scale * minX) + 'px';
+
            div.style.left = Math.round(ime_scale * minX) + 'px';
div.style.top = Math.round(ime_scale * minY) + 'px';
+
            div.style.top = Math.round(ime_scale * minY) + 'px';
div.style.width = (Math.round(ime_scale * maxX) - Math.round(ime_scale * minX)) + 'px';
+
            div.style.width = (Math.round(ime_scale * maxX) - Math.round(ime_scale * minX)) + 'px';
div.style.height = (Math.round(ime_scale * maxY) - Math.round(ime_scale * minY)) + 'px';
+
            div.style.height = (Math.round(ime_scale * maxY) - Math.round(ime_scale * minY)) + 'px';
}
+
        }
}
+
    }
   −
ime_highlightMap();
+
    ime_highlightMap();
 
}
 
}
   −
function ime_highlightMapCircle(div,radius,highlight) {
+
function ime_highlightMapCircle(div, radius, highlight) {
var background = "url('" + IME_CIRCLESCRIPT + '?' + (highlight ? 'active=1&' : '') + 'radius=' + Math.round(ime_scale * radius) + "') no-repeat";
+
    var canvas = document.createElement('canvas');
if (div.style.background != background) {
+
    canvas.width = radius * 2;
div.style.background = background;
+
    canvas.height = radius * 2;
}
+
 
 +
 
 +
 
 +
    var ctx = canvas.getContext("2d");
 +
    ctx.beginPath();
 +
    ctx.arc(radius, radius, radius, 0, 2 * Math.PI);
 +
    if (highlight) {
 +
        ctx.fillStyle = 'red';
 +
        ctx.fill();
 +
        ctx.strokeStyle = 'red';
 +
    } else {
 +
        ctx.fillStyle = 'black';
 +
        ctx.fill();
 +
        ctx.strokeStyle = 'black';
 +
    }
 +
    ctx.stroke();
 +
    ctx.closePath();
 +
 
 +
    var meinBild = canvas.toDataURL('image/png', 1.0);
 +
 
 +
    var background = "url('" + meinBild + "')";
 +
    if (div.style.background != background) {
 +
        div.style.background = background;
 +
        div.style.backgroundRepeat = "no-repeat";
 +
    }
 
}
 
}
   −
function ime_highlightMapPoly(div,points,highlight) {
+
function ime_highlightMapPoly(div, points, highlight) {
var minX=0; var minY=0;
+
    var minX = 0;
if (points.length>0) {
+
    var minY = 0;
minX = points[0];
+
    var maxX = 0;
minY = points[1];
+
    var maxY = 0;
for (var j=2; j<points.length; j+=2) {
+
    if (points.length > 0) {
var x = points[j];
+
        minX = points[0];
var y = points[j+1];
+
        minY = points[1];
if (x<minX) minX = x;
+
        for (var j = 2; j < points.length; j += 2) {
if (y<minY) minY = y;
+
            var x = points[j];
}
+
            var y = points[j + 1];
}
+
            if (x < minX) minX = x;
var convpoints = Array();
+
            if (y < minY) minY = y;
for(var j=0; j<points.length; j+=2) {
+
        }
convpoints[j] = Math.round(ime_scale * points[j]) - Math.round(ime_scale * minX);
+
    }
convpoints[j+1] = Math.round(ime_scale * points[j+1]) - Math.round(ime_scale * minY);
+
    if (points.length > 0) {
}
+
        maxX = points[0];
var background = "url('" + IME_POLYSCRIPT + '?' + (highlight ? 'active=1&' : '') + 'coords=' + convpoints.join("|") + "') no-repeat";
+
        maxY = points[1];
if (div.style.background != background) {
+
        for (var j = 2; j < points.length; j += 2) {
div.style.background = background;
+
            var x = points[j];
}
+
            var y = points[j + 1];
 +
            if (x > maxX) maxX = x;
 +
            if (y > maxY) maxY = y;
 +
        }
 +
    }
 +
    var convpoints = Array();
 +
    for (var j = 0; j < points.length; j += 2) {
 +
        convpoints[j] = Math.round(ime_scale * points[j]) - Math.round(ime_scale * minX);
 +
        convpoints[j + 1] = Math.round(ime_scale * points[j + 1]) - Math.round(ime_scale * minY);
 +
    }
 +
    var canvas = document.createElement('canvas');
 +
    canvas.width = maxX + 1;
 +
    canvas.height = maxY + 1;
 +
    var ctx = canvas.getContext("2d");
 +
    if (highlight) {
 +
        ctx.save();
 +
        ctx.beginPath();
 +
        ctx.moveTo(convpoints.shift(), convpoints.shift());
 +
        while (convpoints.length) {
 +
            ctx.lineTo(convpoints.shift(), convpoints.shift());
 +
        }
 +
        ctx.closePath();
 +
        ctx.strokeStyle = 'red';
 +
        ctx.stroke();
 +
        ctx.fillStyle = 'red'
 +
        ctx.fill();
 +
        ctx.closePath();
 +
        ctx.restore();
 +
    } else {
 +
        ctx.save();
 +
        ctx.beginPath();
 +
        ctx.moveTo(convpoints.shift(), convpoints.shift());
 +
        while (convpoints.length) {
 +
            ctx.lineTo(convpoints.shift(), convpoints.shift());
 +
        }
 +
        ctx.closePath();
 +
        ctx.strokeStyle = 'black';
 +
        ctx.stroke();
 +
        ctx.fillStyle = 'black'
 +
        ctx.fill();
 +
        ctx.closePath();
 +
        ctx.restore();
 +
    }
 +
    var meinBild = canvas.toDataURL('image/png', 1.0);
 +
 
 +
    var background = "url('" + meinBild + "')";
 +
 
 +
    if (div.style.background != background) {
 +
        div.style.background = background;
 +
        div.style.backgroundRepeat = "no-repeat";
 +
    }
 
}
 
}
    
function ime_highlightMap() {
 
function ime_highlightMap() {
for (var i=0; i<ime_areas.length; i++) {
+
    for (var i = 0; i < ime_areas.length; i++) {
var div = document.getElementById('imePreview' + i);
+
        var div = document.getElementById('imePreview' + i);
var area = ime_areas[i];
+
        var area = ime_areas[i];
if (div && area) {
+
        if (div && area) {
if (i==ime_currentlyEditing) {
+
            if (i == ime_currentlyEditing) {
div.style.opacity = '0.9';
+
                div.style.opacity = '0.9';
div.style.filter = 'alpha(opacity=90)'; // IE
+
                div.style.filter = 'alpha(opacity=90)'; // IE
} else {
+
            } else {
div.style.opacity = '0.75';
+
                div.style.opacity = '0.75';
div.style.filter = 'alpha(opacity=75)'; // IE
+
                div.style.filter = 'alpha(opacity=75)'; // IE
}
+
            }
if (area.shape == 'rect') {
+
            if (area.shape == 'rect') {
var backgroundColor = (i==ime_currentlyEditing) ? 'red' : 'black';
+
                var backgroundColor = (i == ime_currentlyEditing) ? 'red' : 'black';
if (div.style.backgroundColor != backgroundColor) div.style.backgroundColor = backgroundColor;
+
                if (div.style.backgroundColor != backgroundColor) div.style.backgroundColor = backgroundColor;
}
+
            } else if (area.shape == 'circle') {
else if (area.shape == 'circle') {
+
                ime_highlightMapCircle(div, area.coords.radius, (i == ime_currentlyEditing));
ime_highlightMapCircle(div,area.coords.radius,(i==ime_currentlyEditing));
+
            } else if (area.shape == 'poly') {
}
+
                ime_highlightMapPoly(div, area.coords.points, (i == ime_currentlyEditing));
else if (area.shape == 'poly') {
+
            }
ime_highlightMapPoly(div,area.coords.points,(i==ime_currentlyEditing));
+
        }
}
+
    }
}
  −
}
   
}
 
}
    
function ime_updateSelectArea() {
 
function ime_updateSelectArea() {
var selectArea = document.ime.area;
+
    var selectArea = document.ime.area;
   −
while (selectArea.childNodes.length>0) {
+
    while (selectArea.childNodes.length > 0) {
selectArea.removeChild(selectArea.lastChild);
+
        selectArea.removeChild(selectArea.lastChild);
}
+
    }
   −
for (var i=0; i<ime_areas.length; i++) {
+
    for (var i = 0; i < ime_areas.length; i++) {
var option = document.createElement('option');
+
        var option = document.createElement('option');
var area = ime_areas[i];
+
        var area = ime_areas[i];
option.value = i;
+
        option.value = i;
while (option.childNodes.length>0) {
+
        while (option.childNodes.length > 0) {
option.removeChild(option.lastChild);
+
            option.removeChild(option.lastChild);
}
+
        }
var text = (area.title ? area.title : area.link) + ' [' + area.shape + ']';
+
        var text = (area.title ? area.title : area.link) + ' [' + area.shape + ']';
option.appendChild(document.createTextNode(text));
+
        option.appendChild(document.createTextNode(text));
if (i == ime_currentlyEditing) {
+
        if (i == ime_currentlyEditing) {
option.selected = 'selected';
+
            option.selected = 'selected';
}
+
        }
selectArea.appendChild(option);
+
        selectArea.appendChild(option);
}
+
    }
 
}
 
}
    
function ime_editArea(index) {
 
function ime_editArea(index) {
document.getElementById('imeProps').style.display = 'none';
+
    document.getElementById('imeProps').style.display = 'none';
   −
var area = ime_areas[index];
+
    var area = ime_areas[index];
   −
if (area) {
+
    if (area) {
ime_currentlyEditing = index;
+
        ime_currentlyEditing = index;
   −
document.getElementById('imeProps').style.display = '';
+
        document.getElementById('imeProps').style.display = '';
document.getElementById('imePropsRect').style.display = 'none';
+
        document.getElementById('imePropsRect').style.display = 'none';
document.getElementById('imePropsCircle').style.display = 'none';
+
        document.getElementById('imePropsCircle').style.display = 'none';
document.getElementById('imePropsPoly').style.display= 'none';
+
        document.getElementById('imePropsPoly').style.display = 'none';
ime_mouseEventClear();
+
        ime_mouseEventClear();
   −
if (area.shape == 'rect') {
+
        if (area.shape == 'rect') {
document.getElementById('imePropsRect').style.display = '';
+
            document.getElementById('imePropsRect').style.display = '';
ime_mouseEventSet(ime_eventRect);
+
            ime_mouseEventSet(ime_eventRect);
}
+
        } else if (area.shape == 'circle') {
else if (area.shape == 'circle') {
+
            document.getElementById('imePropsCircle').style.display = '';
document.getElementById('imePropsCircle').style.display = '';
+
            ime_mouseEventSet(ime_eventCircle);
ime_mouseEventSet(ime_eventCircle);
+
        } else if (area.shape == 'poly') {
}
+
            document.getElementById('imePropsPoly').style.display = '';
else if (area.shape == 'poly') {
+
            ime_mouseEventSet(ime_eventPoly);
document.getElementById('imePropsPoly').style.display = '';
+
        }
ime_mouseEventSet(ime_eventPoly);
  −
}
     −
document.ime.areaLink.value = area.link;
+
        document.ime.areaLink.value = area.link;
document.ime.areaTitle.value = area.title;
+
        document.ime.areaTitle.value = area.title;
   −
var coords = area.coords;
+
        var coords = area.coords;
if (area.shape == 'rect') {
+
        if (area.shape == 'rect') {
document.ime.areaRectLeft.value = coords.left;
+
            document.ime.areaRectLeft.value = coords.left;
document.ime.areaRectTop.value = coords.top;
+
            document.ime.areaRectTop.value = coords.top;
document.ime.areaRectRight.value = coords.right;
+
            document.ime.areaRectRight.value = coords.right;
document.ime.areaRectBottom.value = coords.bottom;
+
            document.ime.areaRectBottom.value = coords.bottom;
}
+
        } else if (area.shape == 'circle') {
else if (area.shape == 'circle') {
+
            document.ime.areaCircleX.value = coords.x;
document.ime.areaCircleX.value = coords.x;
+
            document.ime.areaCircleY.value = coords.y;
document.ime.areaCircleY.value = coords.y;
+
            document.ime.areaCircleRadius.value = coords.radius;
document.ime.areaCircleRadius.value = coords.radius;
+
        } else if (area.shape == 'poly') {
}
+
            var propsPolyCoords = document.getElementById('imePropsPolyCoords');
else if (area.shape == 'poly') {
+
            if (propsPolyCoords.childNodes.length > 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);
var propsPolyCoords = document.getElementById('imePropsPolyCoords');
+
            propsPolyCoords.appendChild(document.createTextNode(area.coords.points.join(", ")));
if (propsPolyCoords.childNodes.length > 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);
+
        }
propsPolyCoords.appendChild(document.createTextNode(area.coords.points.join(", ")));
  −
}
     −
ime_highlightMap();
+
        ime_highlightMap();
}
+
    }
autoComplete();
+
    autoComplete();
 
}
 
}
    
function ime_deletePolyCoords() {
 
function ime_deletePolyCoords() {
ime_areas[ime_currentlyEditing].coords.points = Array();
+
    ime_areas[ime_currentlyEditing].coords.points = Array();
ime_saveArea();
+
    ime_saveArea();
 
}
 
}
    
function ime_saveArea() {
 
function ime_saveArea() {
var area = ime_areas[ime_currentlyEditing];
+
    var area = ime_areas[ime_currentlyEditing];
area.link = document.ime.areaLink.value;
+
    area.link = document.ime.areaLink.value;
area.title = document.ime.areaTitle.value;
+
    area.title = document.ime.areaTitle.value;
   −
var coords = area.coords;
+
    var coords = area.coords;
if (area.shape=='rect') {
+
    if (area.shape == 'rect') {
coords.left = parseInt(document.ime.areaRectLeft.value);
+
        coords.left = parseInt(document.ime.areaRectLeft.value);
coords.top = parseInt(document.ime.areaRectTop.value);
+
        coords.top = parseInt(document.ime.areaRectTop.value);
coords.right = parseInt(document.ime.areaRectRight.value);
+
        coords.right = parseInt(document.ime.areaRectRight.value);
coords.bottom = parseInt(document.ime.areaRectBottom.value);
+
        coords.bottom = parseInt(document.ime.areaRectBottom.value);
}
+
    } else if (area.shape == 'circle') {
else if (area.shape=='circle') {
+
        if (parseInt(document.ime.areaCircleRadius.value) < 0) document.ime.areaCircleRadius.value = 0;
if (parseInt(document.ime.areaCircleRadius.value) < 0) document.ime.areaCircleRadius.value = 0;
+
        coords.x = parseInt(document.ime.areaCircleX.value);
coords.x = parseInt(document.ime.areaCircleX.value);
+
        coords.y = parseInt(document.ime.areaCircleY.value);
coords.y = parseInt(document.ime.areaCircleY.value);
+
        coords.radius = parseInt(document.ime.areaCircleRadius.value);
coords.radius = parseInt(document.ime.areaCircleRadius.value);
+
    } else if (area.shape == 'poly') {
}
+
        var propsPolyCoords = document.getElementById('imePropsPolyCoords');
else if (area.shape == 'poly') {
+
        if (propsPolyCoords.childNodes.length > 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);
var propsPolyCoords = document.getElementById('imePropsPolyCoords');
+
        propsPolyCoords.appendChild(document.createTextNode(coords.points.join(", ")));
if (propsPolyCoords.childNodes.length > 0) propsPolyCoords.removeChild(propsPolyCoords.lastChild);
+
    }
propsPolyCoords.appendChild(document.createTextNode(coords.points.join(", ")));
  −
}
     −
ime_updateAreas();
+
    ime_updateAreas();
 
}
 
}
    
function ime_deleteArea() {
 
function ime_deleteArea() {
ime_mouseEventClear();
+
    ime_mouseEventClear();
   −
// Remove element from ime_areas array
+
    // Remove element from ime_areas array
ime_areas.splice(ime_currentlyEditing,1);
+
    ime_areas.splice(ime_currentlyEditing, 1);
   −
// Remove preview div of the deleted area
+
    // Remove preview div of the deleted area
var div = document.getElementById('imePreview' + ime_currentlyEditing);
+
    var div = document.getElementById('imePreview' + ime_currentlyEditing);
if (div) {
+
    if (div) {
div.parentNode.removeChild(div);
+
        div.parentNode.removeChild(div);
}
+
    }
   −
// Move ids of preview divs to fill the hole
+
    // Move ids of preview divs to fill the hole
for (var i=ime_currentlyEditing+1; i<ime_areas.length; i++) {
+
    for (var i = ime_currentlyEditing + 1; i < ime_areas.length; i++) {
div = document.getElementById('imePreview' + i);
+
        div = document.getElementById('imePreview' + i);
if (div) {
+
        if (div) {
div.id = 'imePreview' + (i-1);
+
            div.id = 'imePreview' + (i - 1);
}
+
        }
}
+
    }
   −
// If we deleted the last area, correct currently editing
+
    // If we deleted the last area, correct currently editing
if (ime_currentlyEditing>=ime_areas.length) {
+
    if (ime_currentlyEditing >= ime_areas.length) {
ime_currentlyEditing = ime_areas.length-1;
+
        ime_currentlyEditing = ime_areas.length - 1;
}
+
    }
   −
ime_updateAreas();
+
    ime_updateAreas();
ime_editArea(ime_currentlyEditing);
+
    ime_editArea(ime_currentlyEditing);
 
}
 
}
    
function ime_importLines() {
 
function ime_importLines() {
var text = document.ime.importText.value;
+
    var text = document.ime.importText.value;
var lines = text.split("\n");
+
    var lines = text.split("\n");
   −
for (var i=0; i<lines.length; i++) {
+
    for (var i = 0; i < lines.length; i++) {
var rectMatch = /rect +(\d+) +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;
+
        var rectMatch = /rect +(\d+) +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;
var circleMatch = /circle +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;
+
        var circleMatch = /circle +(\d+) +(\d+) +(\d+) +\[\[([^|]*)(|(.*))?\]\]/i;
var polyMatch = /poly +(.*?) +\[\[([^|]*)(|(.*))?\]\]/i;
+
        var polyMatch = /poly +(.*?) +\[\[([^|]*)(|(.*))?\]\]/i;
   −
var line = lines[i];
+
        var line = lines[i];
   −
if (rectMatch.test(line)) {
+
        if (rectMatch.test(line)) {
var results = rectMatch.exec(line);
+
            var results = rectMatch.exec(line);
var area = new ime_Area("rect");
+
            var area = new ime_Area("rect");
area.coords.left = parseInt(results[1]);
+
            area.coords.left = parseInt(results[1]);
area.coords.top = parseInt(results[2]);
+
            area.coords.top = parseInt(results[2]);
area.coords.right = parseInt(results[3]);
+
            area.coords.right = parseInt(results[3]);
area.coords.bottom = parseInt(results[4]);
+
            area.coords.bottom = parseInt(results[4]);
area.link = results[5];
+
            area.link = results[5];
if (results[6]) area.title = results[6].substring(1);
+
            if (results[6]) area.title = results[6].substring(1);
ime_areas.push(area);
+
            ime_areas.push(area);
}
+
        } else if (circleMatch.test(line)) {
else if (circleMatch.test(line)) {
+
            var results = circleMatch.exec(line);
var results = circleMatch.exec(line);
+
            var area = new ime_Area("circle");
var area = new ime_Area("circle");
+
            area.coords.x = parseInt(results[1]);
area.coords.x = parseInt(results[1]);
+
            area.coords.y = parseInt(results[2]);
area.coords.y = parseInt(results[2]);
+
            area.coords.radius = parseInt(results[3]);
area.coords.radius = parseInt(results[3]);
+
            area.link = results[4];
area.link = results[4];
+
            if (results[5]) area.title = results[5].substring(1);
if (results[5]) area.title = results[5].substring(1);
+
            ime_areas.push(area);
ime_areas.push(area);
+
        } else if (polyMatch.test(line)) {
}
+
            var results = polyMatch.exec(line);
else if (polyMatch.test(line)) {
+
            var area = new ime_Area("poly");
var results = polyMatch.exec(line);
+
            area.coords.points = results[1].replace(/ +/, " ").split(" ");
var area = new ime_Area("poly");
+
            for (var j = 0; j < area.coords.points.length; j++) {
area.coords.points = results[1].replace(/ +/," ").split(" ");
+
                area.coords.points[j] = parseInt(area.coords.points[j]);
for (var j=0; j<area.coords.points.length; j++) {
+
            }
area.coords.points[j] = parseInt(area.coords.points[j]);
+
            area.link = results[2];
}
+
            if (results[3]) area.title = results[3].substring(1);
area.link = results[2];
+
            ime_areas.push(area);
if (results[3]) area.title = results[3].substring(1);
+
        }
ime_areas.push(area);
+
    }
}
+
    ime_updateAreas();
}
+
    ime_hideImport();
ime_updateAreas();
+
}
ime_hideImport();
+
 
 +
function ime_showResult() {
 +
    $('#imeResult').show();
 +
    $('#imeResultShow').hide();
 +
    $('#imeResultHide').show();
 +
}
 +
 
 +
function ime_hideResult() {
 +
    $('#imeResult').hide();
 +
    $('#imeResultShow').show();
 +
    $('#imeResultHide').hide();
 
}
 
}
    
function ime_showImport() {
 
function ime_showImport() {
$('#imeImport').show();
+
    $('#imeImport').show();
$('#imeImportShow').hide();
+
    $('#imeImportShow').hide();
$('#imeImportHide').show();
+
    $('#imeImportHide').show();
 
}
 
}
    
function ime_hideImport() {
 
function ime_hideImport() {
$('#imeImport').hide();
+
    $('#imeImport').hide();
$('#imeImportShow').show();
+
    $('#imeImportShow').show();
$('#imeImportHide').hide();
+
    $('#imeImportHide').hide();
 
}
 
}
   Line 1,013: Line 1,104:  
*/
 
*/
 
function ime_removeOtherUIElements() {
 
function ime_removeOtherUIElements() {
// Remove all UI elements of the 'annotations' feature used on Wikimedia
+
    // Remove all UI elements of the 'annotations' feature used on Wikimedia
// Commons.
+
    // Commons.
$('#ImageAnnotationAddButton').remove();
+
    $('#ImageAnnotationAddButton').remove();
 
}
 
}
   Line 1,022: Line 1,113:  
*/
 
*/
 
function ime_findATag(node) {
 
function ime_findATag(node) {
// We just look at the first child until there is none or it is an <a> tag
+
    // We just look at the first child until there is none or it is an <a> tag
var a = node;
+
    var a = node;
while (a != null && a.nodeName.toUpperCase() != 'A') {
+
    while (a != null && a.nodeName.toUpperCase() != 'A') {
a = a.firstChild;
+
        a = a.firstChild;
}
+
    }
return a;
+
    return a;
 
}
 
}
 +
 +
 +
var ime_templateHtml = `<form name="ime" action=""> <fieldset style="margin:0.5ex;padding:0 1ex 1ex"> <legend>ImageMapEdit</legend> <fieldset style="float:left;margin:0 0.5ex 0.5ex;padding:0 1ex 1ex"> <legend style="padding:0 0.5ex" class="ime_t_newarea">Create new area</legend> <a href="javascript:ime_newArea('rect')" style="padding:1px;background:white;color:darkblue" class="ime_t_rect">rect(angle)</a> <br /> <a href="javascript:ime_newArea('circle')" style="padding:1px;background:white;color:darkblue" class="ime_t_circle">circle</a> <br /> <a href="javascript:ime_newArea('poly')" style="padding:1px;background:white;color:darkblue" class="ime_t_poly">poly(gon)</a> </fieldset> <fieldset style="float:left;margin:0 0.5ex 0.5ex;padding:0 1ex 1ex"> <legend style="padding:0 0.5ex" class="ime_t_editarea">Edit area</legend> <select name="area" size="10" style="float:left;height:10em;margin:0.5ex;width:10em" onclick="ime_editArea(document.ime.area.selectedIndex)"></select> <div id="imeProps" style="float:left;margin:0.5ex;padding:0 1ex 1ex;display:none"> <div style="float:left;margin:0.5ex;padding:0 1ex 1ex"> <label for="ime_areaLink" class="ime_t_linktarget">Link target</label> <br /> <input id="ime_areaLink" name="areaLink" style="width:10em" onchange="ime_saveArea()" /> <br /> <label for="ime_areaTitle"><span class="ime_t_linktitle">Link title</span> (<span class="ime_t_optional">optional</span>)</label> <br /> <input id="ime_areaTitle" name="areaTitle" style="width:10em" onchange="ime_saveArea()" /> </div> <div id="imePropsRect" style="float:left;margin:0.5ex;padding:0 1ex 1ex;display:none"> <label for="ime_areaRectLeft" class="ime_t_rectleft">Left</label>/<label for="ime_areaRectTop" class="ime_t_recttop">Top</label> <br /> <input id="ime_areaRectLeft" name="areaRectLeft" style="width:4em" onchange="ime_saveArea()" /> <input id="ime_areaRectTop" name="areaRectTop" style="width:4em" onchange="ime_saveArea()" /> <span class="ime_t_rectchoose1">Select with left mouse button</span> <br/> <label for="ime_areaRectRight" class="ime_t_rectright">Right</label>/<label for="ime_areaRectBottom" class="ime_t_rectbottom">Bottom</label> <br /> <input id="ime_areaRectRight" name="areaRectRight" style="width:4em" onchange="ime_saveArea()" /> <input id="ime_areaRectBottom" name="areaRectBottom" style="width:4em" onchange="ime_saveArea()" /> <span class="ime_t_rectchoose2">Select with right mouse button</span> </div> <div id="imePropsCircle" style="float:left;margin:0.5ex;padding:0 1ex 1ex;display:none"> <label class="ime_t_position">Position</label> <br /> <input name="areaCircleX" style="width:4em" onchange="ime_saveArea()" /> <input name="areaCircleY" style="width:4em" onchange="ime_saveArea()" /> <span class="ime_t_circlechoose1">Select with left mouse button</span> <br /> <label for="ime_areaCircleRadius" class="ime_t_radius">Radius</label> <br /> <input id="ime_areaCircleRadius" name="areaCircleRadius" style="width:4em" onchange="ime_saveArea()" /> <span class="ime_t_circlechoose2">Select with right mouse button</span> </div> <div id="imePropsPoly" style="float:left;margin:0.5ex;padding:0 1ex 1ex;display:none"> <label class="ime_t_coordinates">Coordinates</label> <br /> <p id="imePropsPolyCoords" style="font-size:0.8em;max-width:20em;"></p> <a href="javascript:ime_deletePolyCoords()" style="padding:1px;background:white;color:darkblue" class="ime_t_deletecoordinates">Delete all coordinates</a> <br /> <span class="ime_t_polychoose">Add new corner with left mouse button</span> </div> <div style="clear:both"></div> <a href="javascript:ime_deleteArea()" style="padding:1px;background:white;color:darkblue" class="ime_t_deletearea">Delete selected area</a> </div> <div style="clear:both"></div> </fieldset> <div style="clear:both"></div> <fieldset style="margin:0 0.5ex 0.5ex;padding:0 1ex 1ex"> <legend class="ime_t_preferences">General preferences</legend> <div style="float:left;margin-right:1em;"> <label for="ime_imageDescription" class="ime_t_imagedescription">Image description</label> <br /> <input id="ime_imageDescription" name="imageDescription" onchange="ime_updateResult()" /> </div> <div style="float:left"> <label style="display:block" class="ime_t_infolinkposition">Position of information link</label> <div style="float:left"> <input type="radio" name="imageDescriptionPos" value="bottom-left" onchange="ime_updateResult()" checked="checked" id="ime_imageDescriptionPos_bottomleft" /><label for="ime_imageDescriptionPos_bottomleft"><span class="ime_t_bottomleft">Bottom left</span> (<span class="ime_t_default">default</span>)</label> </div> <div style="float:left"> <input type="radio" name="imageDescriptionPos" value="bottom-right" onchange="ime_updateResult()" id="ime_imageDescriptionPos_bottomright" /><label for="ime_imageDescriptionPos_bottomright" class="ime_t_bottomright">Bottom right</label> </div> <div style="float:left"> <input type="radio" name="imageDescriptionPos" value="top-left" onchange="ime_updateResult()" id="ime_imageDescriptionPos_topleft" /><label for="ime_imageDescriptionPos_topleft" class="ime_t_topleft">Top left</label> </div> <div style="float:left"> <input type="radio" name="imageDescriptionPos" value="top-right" onchange="ime_updateResult()" id="ime_imageDescriptionPos_topright" /><label for="ime_imageDescriptionPos_topright" class="ime_t_topright">Top right</label> </div> <div style="float:left"> <input type="radio" name="imageDescriptionPos" value="none" onchange="ime_updateResult()" id="ime_imageDescriptionPos_none" /><label for="ime_imageDescriptionPos_none" class="ime_t_nolink">No link</label> </div> </div> <div style="clear:both"></div> </fieldset> <fieldset style="margin:0.5ex;padding:0 1ex 1ex"> <legend class="ime_t_importareas">Import areas from wikicode</legend> <a href="javascript:ime_showImport()" style="padding:1px;background:white;color:darkblue" id="imeImportShow"><span class="ime_t_showtextbox">Show text box</span> &gt;</a> <a href="javascript:ime_hideImport()" style="padding:1px;background:white;color:darkblue;display:none" id="imeImportHide"><span class="ime_t_hidetextbox">Hide text box</span> &lt;</a> <div id="imeImport" style="display:none"> <textarea name="importText" style="width:100%;margin:0;height:10em;display:block"></textarea> <a href="javascript:ime_importLines()" style="padding:1px;background:white;color:darkblue" class="ime_t_import">Import</a> </div> </fieldset> <fieldset style="margin:0.5ex;padding:0 1ex 1ex"> <legend class="ime_t_generatedwikicode">Generated wikicode</legend> <a href="javascript:ime_showResult()" style="padding:1px;background:white;color:darkblue" id="imeResultShow"><span class="ime_t_showwikicode">Show wikicode</span> &gt;</a> <a href="javascript:ime_hideResult()" style="padding:1px;background:white;color:darkblue;display:none" id="imeResultHide"><span class="ime_t_hidewikicode">Hide wikicode</span> &lt;</a> <div> <code id="imeResult" style="display:block;line-height:1.2em"></code> </div> </fieldset> </fieldset></form>`;
Bots, bulkpusher, Bureaucrats, checkuser, filepusher, Interface administrators, oversight, pusher, rdfioadministrator, rdfiocurator, Administrators (Semantic MediaWiki), Curators (Semantic MediaWiki), Editors (Semantic MediaWiki), Administrators
5,444

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.