Benutzer:Wirthi/common.js

Aus LinzWiki
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
var cwTitle;
var cwAction;

function cwInit() {
  cwTitle = mw.config.get("wgTitle");
  cwAction = mw.config.get("wgAction");

  console.log("action: "+cwAction);
  if (cwAction === "edit") {
    cwAddToolbarButton("weblinksToTemplate", "weblinksToTemplate()" );
    cwAddToolbarButton("weblinksCheckOnline", "checkWeblinksOnline()" );
    cwAddToolbarButton("fixSlippymap", "fixSlippymap()" );
  }
}

function cwAddToolbarButton(name, action) {
  var toolbar = document.getElementById("toolbar");
  if (toolbar) {
    toolbar.innerHTML += '<img width="23" height="22" src="/w/skins/common/images/de/button_bold.png" alt="'+name+'" title="'+name+'" id="mw-editbutton-'+name+'" class="mw-toolbar-editbutton" onClick="'+action+'">';
  }
}

function getArticleText() {
  return document.getElementById("wpTextbox1").value;
}

function setArticleText(newValue) {
  document.getElementById("wpTextbox1").value = newValue;
}

function checkWeblinksOnline() {
  console.log("Task: Check weblinks online");
  checkWeblinksOnlineIntl(getArticleText(), "Webseite");
  checkWeblinksOnlineIntl(getArticleText(), "WebseiteSicher");
  console.log("Task: Check weblinks online DONE");
}

function checkWeblinksOnlineIntl(text, templateName) {
  var start = text.indexOf("{{"+templateName);
  while (start >= 0) {
    var weblink = parseWeblink(text, start-2, templateName);
    console.log("Website: "+weblink);
    window.open(weblink.link, "_blank");
    start = text.indexOf("{{"+templateName, start+1);
  }  
}

function parseWeblink(text, start, templateName) {
  var firstBar = text.indexOf("1=",start);
  var secondBar = text.indexOf("|",firstBar);
  var end = text.indexOf("}}", firstBar);

  var hasSection2 = secondBar > firstBar && secondBar < end;

  var endSection1 = hasSection2 ? secondBar : end;
  var rawLinkText = text.substring(firstBar+2,endSection1);
  var protocol = templateName==="WebseiteSicher"?"https":"http";
  var link = protocol + "://"+rawLinkText;

  var name = hasSection2? text.substring(secondBar+2, end):"";
 
  return {link: link, name: name, start: start, end: end+2};
}

function weblinksToTemplate() {
  console.log("Task: Weblinks to Templates");
  var text = getArticleText();
  text = weblinksToTemplateIntl(text, "http://", "Webseite");
  text = weblinksToTemplateIntl(text, "https://", "WebseiteSicher");

  text = updateOON(text, "Webseite");
  text = updateOON(text, "WebseiteSicher");
  text = updateGemeinderaete(text, "Webseite");
  text = updateGemeinderaete(text, "WebseiteSicher");

  setArticleText(text);
}

function updateOON(text, templateName) {
  //link to nachrichten.at => template OON
  var start = text.indexOf("nachrichten.at/");
  if (start > 0) {
    alert("Weblink to Nachrichten.at, replace with template OÖN");
  }
  return text;
}

function updateGemeinderaete(text, templateName) {
  //broken link to linz.at/gemeinderäte => template LinkGemeinderat

  var start = text.indexOf("{{"+templateName);
  while (start >= 0) {
    var weblink = parseWeblink(text, start-2,templateName);
    console.log(weblink);
    var idStart = weblink.link.indexOf("/6298_");
    if (idStart > 0) {
      var id = weblink.link.substring(idStart+6,weblink.link.indexOf(".",idStart+6));
      text = text.substring(0,weblink.start+2)+"{{LinkGemeinderat|ID="+id+"|name={{PAGENAME}}}}"+text.substring(weblink.end);
    }
    start = text.indexOf("{{"+templateName, start+1);
  }  
  return text;
}
   
function weblinksToTemplateIntl(text, pattern, templateName) {
  var start = text.indexOf(pattern);
  while (start >= 0) {
    console.log("found at "+start);
    var isEmbedded = (start > 0) && text[start-1] === '[';
    console.log("embedded: "+isEmbedded);
    if (isEmbedded) {      
      var end = text.indexOf("]",start);
      var endLink = text.indexOf(" ",start);
      var link = text.substring(start,endLink);
      var description = text.substring(endLink+1,end);
      var templateCode = "{{"+templateName+"|1="+link.substring(pattern.length)+"|2="+description+"}}";
      alert("link: |"+link+"|\ndesc: |"+description+"|\n"+templateCode);
      text = text.substring(0,start-1) + templateCode + text.substring(end+1);
    } else {
      var endLink = nextWhitespaceAfter(text,start);
      var link = text.substring(start,endLink);
      var templateCode = "{{"+templateName+"|1="+link.substring(pattern.length)+"|2=}}";
      alert("link: |"+link+"|\ndesc: |"+description+"|\n"+templateCode);
      text = text.substring(0,start) + templateCode + text.substring(endLink);    
    }
    start = text.indexOf(pattern);
  } 
  return text;
}

function nextWhitespaceAfter(text, start) {
  var pos=text.length;
  pos = nextCharAfter(text, start, pos, " ");
  pos = nextCharAfter(text, start, pos, "\n");
  pos = nextCharAfter(text, start, pos, "\r");
  pos = nextCharAfter(text, start, pos, "\t");
  return pos;
}

function nextCharAfter(text, start, pos, character) {
  var idx = text.indexOf(character, start);
  if (idx >= start && idx < pos) {
    return idx;
  }
  return pos;
}

function portSlippymap() {
  console.log("Task: Port Slippmap to Template Karte");
  var text = getArticleText();
  text = portSlippymapInternal(text);
  setArticleText(text);
}

function portSlippymap(text) {
  var start = text.indexOf("slippymap");
  var indexLat = text.indexOf("lat=", start);
  var indexLat2 = text.indexOf(" ",indexLat);
  var lat = text.substring(indexLat+4, indexLat2);

  var indexLon = text.indexOf("lon=", start);
  var indexLon2 = text.indexOf(" ",indexLon);
  var lon = text.substring(indexLon+4, indexLon2);

  console.log("replace with: |"+lat+"|"+lon+"|");
}


console.log("load page");
cwInit();