Benutzer:GeriDev/monobook.js
Zur Navigation springen
Zur Suche springen
Hinweis: Leere nach dem Veröffentlichen 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/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/* Function formatChemicalFormula()
*
* This function formats a chemical formula and links the elements to the appropriate article.
*
* It relies on a template with the following slogger:
*
* <includeonly>
* <span class="summenformel">{{{1|}}}</span>
* {{ #if: {{{2|}}} | <span id="exception_source" style="color:red;"></span> <span id="exception"></span> }} ... to display JS exceptions
* {{ #if: {{{3|}}} | <div id="debug"></div> }} ... to display debug infos
* </includeonly>
*
* History:
* v1.0: Initial version
* v2.0: Class ChemicalFormulaFormatter created
*/
addOnloadHook( // DON'T FORGET TO UN-COMMENT THIS LINE IN WIKI's *.js, AND TO COMMENT IT WHEN TESTING LOCALLY
function formatChemicalFormula()
{
try
{
//var debug = document.getElementById( "debug" ); debug.innerHTML += "→ formatChemicalFormula";
var allSpans = document.getElementsByTagName( "span" ); //debug.innerHTML += "<br />\nallSpans.len: " + allSpans.length;
for ( var spanIdx = 0; spanIdx < allSpans.length; spanIdx++ )
{
var span = allSpans[spanIdx];
if ( span.className == "summenformel" )
{ //debug.innerHTML += ( "<br />\nspan: " + span.innerHTML );
var chemicalFormula = new ChemicalFormula( span.innerHTML );
span.innerHTML = new ChemicalFormulaFormatter( chemicalFormula, wgArticlePath ).getHTML();
} // if ( summenformel )
} // for ( span )
}
catch ( exception )
{
document.getElementById( 'exception_source' ).innerHTML += "monobook.js: formatChemicalFormula() - ";
document.getElementById( 'exception' ).innerHTML += exception + " - ";
//alert( "Exception in monobook.js: formatChemicalFormula():\n\n" + exception );
}
} // formatChemicalFormula()
) // addOnloadHook(); // DON'T FORGET TO UN-COMMENT THIS LINE IN WIKI's *.js, AND TO COMMENT IT WHEN TESTING LOCALLY
// Class ChemicalFormulaFormatter
function ChemicalFormulaFormatter( chemicalFormula, articlePath )
{
try
{
var html = "";
var tokens = chemicalFormula.getTokens(); //debug.innerHTML += "<br />\ntokens(" + tokens.length + "): " + tokens;
for ( var tokenIdx = 0; tokenIdx < tokens.length ; tokenIdx++ )
{
with ( tokens[tokenIdx] )
{ //debug.innerHTML += "<br />\ntoken[n]: " + getSymbol() + ", " + getName() + ", " + getLemma();
if ( getSymbol().match( /[0-9]/ ) ) // numbers
{
html += getSymbol().sub();
}
else
{
if ( getSymbol() == "(" || getSymbol() == ")" ) // parenthesis
{
html += getSymbol();
}
else
{
if ( getLemma() == "" ) // unknown element
{
html += "<span title=\"" + getName() + "\">" + getSymbol() + "</span>";
}
else
{
html += "<a href=\"" + articlePath.replace( "$1", getLemma() ) + "\" title=\"" + getName() + "\">" + getSymbol() + "</a>";
}
} // if ( parenthesis )
} // if ( number )
} // with ( token )
} // for ( token )
function getHTML()
{
return html;
}
//public methods
this.getHTML = getHTML;
}
catch ( exception )
{
document.getElementById( 'exception_source' ).innerHTML += "monobook.js: ChemicalFormulaFormatter - ";
document.getElementById( 'exception' ).innerHTML += exception + " - ";
//alert( "Exception in monobook.js: ChemicalFormulaFormatter:\n\n" + exception );
}
} // ChemicalFormulaFormatter()
// Class ChemicalFormula
function ChemicalFormula( formula )
{
try
{
//var debug = document.getElementById( "debug" ); debug.innerHTML += "<br />\n→ ChemicalFormula(" + formula + ")";
var formula = formula;
var tokens = new Array();
var previousCharacter = "";
var character = "";
var subString = "";
// split the formula into tokens
for ( var charIdx = 0; charIdx < formula.length; charIdx++ )
{
character = formula.substr( charIdx, 1);
// A token is found if...
if ( ( previousCharacter.match( /[a-zA-Z]/ ) && character.match( /[0-9]/ ) ) || // ...digit after letter
( previousCharacter.match( /[0-9]/ ) && character.match( /[A-Z]/ ) ) || // ...letter after digit
( previousCharacter.match( /[a-z]/ ) && character.match( /[A-Z]/ ) ) || // ...uppercase after lowercase
( previousCharacter.match( /[A-Z]/ ) && character.match( /[A-Z]/ ) ) || // ...uppercase after uppercase
previousCharacter == "(" || previousCharacter == ")" || character == "(" || character == ")" )
{
tokens.push( new ChemicalElement( subString ) );
subString = character; //debug.innerHTML += "<br />\ntrue.char: " + character + " ... true.subString: " + subString;
}
else
{
subString += character; //debug.innerHTML += "<br />\nfalse.char: " + character + " ... false.subString: " + subString;
}
previousCharacter = character;
} // for ( char )
tokens.push( new ChemicalElement( subString ) ); // add last token
//debug.innerHTML += "<br />\ntokens.len: " + tokens.length;
function getTokens()
{
return tokens;
}
//public methods
this.getTokens = getTokens;
}
catch( exception )
{
document.getElementById( "exception_source" ).innerHTML += "monobook.js: ChemicalFormula - ";
document.getElementById( "exception" ).innerHTML += exception + " - ";
//alert( "Exception in monobook.js: ChemicalFormula:\n\n" + exception );
}
} // ChemicalFormula
// Class ChemicalElement
function ChemicalElement( symbol )
{
try
{
//var debug = document.getElementById( "debug" ); debug.innerHTML += "<br />\n→ Element";
var symbol = symbol;
var name = "";
var lemma = "";
var symbols = new Array(
"H","He","Li","Be","B","C","N","O","F","Ne", // 10
"Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca", // 20
"Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn", // 30
"Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr", // 40
"Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn", // 50
"Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd", // 60
"Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb", // 70
"Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg", // 80
"Tl","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th", // 90
"Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm", // 100
"Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Ds", // 110
"Rg","Uub","Uut","Uuq","Uup","Uuh","Uus","Uuo","Uue","Ubn", // 120
"Ubu","Ubb","Ubt","Ubq","Ubp","Ubh"); // 126
var names = new Array(
"Wasserstoff","Helium","Lithium","Beryllium","Bor","Kohlenstoff","Stickstoff","Sauerstoff","Fluor","Neon", // 10
"Natrium","Magnesium","Aluminium","Silizium","Phosphor","Schwefel","Chlor","Argon","Kalium","Calcium", // 20
"Scandium","Titan","Vanadium","Chrom","Mangan","Eisen","Cobalt","Nickel","Kupfer","Zink", // 30
"Gallium","Germanium","Arsen","Selen","Brom","Krypton","Rubidium","Strontium","Yttrium","Zirkonium", // 40
"Niob","Molybdän","Technetium","Ruthenium","Rhodium","Palladium","Silber","Cadmium","Indium","Zinn", // 50
"Antimon","Tellur","Iod","Xenon","Caesium","Barium","Lanthan","Cer","Praseodym","Neodym", // 60
"Promethium","Samarium","Europium","Gadolinium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium", // 70
"Lutetium","Hafnium","Tantal","Wolfram","Rhenium","Osmium","Iridium","Platin","Gold","Quecksilber", // 80
"Thallium","Blei","Bismut","Polonium","Astat","Radon","Francium","Radium","Actinium","Thorium", // 90
"Protactinium","Uran","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einsteinium","Fermium", // 100
"Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium","Meitnerium","Darmstadtium", // 110
"Roentgenium","Ununbium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium","Ununennium","Unbinilium", // 120
"Unbiunium","Unbibium","Unbitrium","Unbiquadium","Unbipentium","Unbihexium"); // 126
var lemmas = new Array(
"","","","","","","","","","", // 10
"","","","Silicium","","","","","","", // 20
"","Titan (Element)","","","","","","","","", // 30
"","","","","","","","","","Zirconium", // 40
"","","","","","","","","","", // 50
"","","","","","","","","","", // 60
"","","","","","","","","","", // 70
"","","","","","","","","","", // 80
"","","","","","","","","","", // 90
"","","","","","","","","","", // 100
"","","","","","","","","","", // 110
"","","","","","","","","","", // 120
"","","","","","",""); // 126
var symbolIdx = 0;
do
{}
while ( symbols[symbolIdx] != symbol && symbolIdx++ < symbols.length);
if ( symbolIdx <= symbols.length )
{
name = names[symbolIdx];
lemma = ( lemmas[symbolIdx] == "" ) ? name : lemmas[symbolIdx];
}
else
{
name = "Element mit Symbol '" + symbol + "' nicht definiert!";
}
//debug.innerHTML += "<br />\nChemicalElement: " + symbol + ", " + name + ", " + lemma;
function getSymbol()
{
return symbol;
}
function getName()
{
return name;
}
function getLemma()
{
return lemma;
}
// public methods
this.getSymbol = getSymbol;
this.getName = getName;
this.getLemma = getLemma;
}
catch( exception )
{
document.getElementById( "exception_source" ).innerHTML += "monobook.js: ChemicalElement - ";
document.getElementById( "exception" ).innerHTML += exception + " - ";
//alert( "Exception in monobook.js: ChemicalElement:\n\n" + exception );
}
} // ChemicalElement
/*
addOnloadHook(
function Summenformel() {
var elements = ('H=Wasserstoff,He=Helium,'+
'Li=Lithium,Be=Beryllium,B=Bor,C=Kohlenstoff,N=Stickstoff,O=Sauerstoff,F=Fluor,Ne=Neon,'+
'Na=Natrium,Mg=Magnesium,Al=Aluminium,Si=Silicium,P=Phosphor,S=Schwefel,Cl=Chlor,Ar=Argon,'+
'K=Kalium,Ca=Calcium,Sc=Scandium,'+
'Ti=Titan (Element),V=Vanadium,Cr=Chrom,Mn=Mangan,Fe=Eisen,Co=Cobalt,Ni=Nickel,Cu=Kupfer,Zn=Zink,Ga=Gallium,Ge=Germanium,As=Arsen,Se=Selen,Br=Brom,Kr=Krypton,'+
'Rb=Rubidium,Sr=Strontium,Y=Yttrium,'+
'Zr=Zirconium,Nb=Niob,Mo=Molybdän,Tc=Technetium,Ru=Ruthenium,Rh=Rhodium,Pd=Palladium,Ag=Silber,Cd=Cadmium,In=Indium,Sn=Zinn,Sb=Antimon,Te=Tellur,I=Iod,Xe=Xenon,'+
'Cs=Caesium,Ba=Barium,'+
'La=Lanthan,Ce=Cer,Pr=Praseodym,Nd=Neodym,Pm=Promethium,Sm=Samarium,Eu=Europium,Gd=Gadolinium,Tb=Terbium,Dy=Dysprosium,Ho=Holmium,Er=Erbium,Tm=Thulium,Yb=Ytterbium,Lu=Lutetium,'+
'Hf=Hafnium,Ta=Tantal,W=Wolfram,Re=Rhenium,Os=Osmium,Ir=Iridium,Pt=Platin,Au=Gold,Hg=Quecksilber,Tl=Thallium,Pb=Blei,Bi=Bismut,Po=Polonium,At=Astat,Rn=Radon,'+
'Fr=Francium,Ra=Radium,'+
'Ac=Actinium,Th=Thorium,Pa=Protactinium,U=Uran,Np=Neptunium,Pu=Plutonium,Am=Americium,Cm=Curium,Bk=Berkelium,Cf=Californium,Es=Einsteinium,Fm=Fermium,Md=Mendelevium,No=Nobelium,Lr=Lawrencium,'+
'Rf=Rutherfordium,Db=Dubnium,Sg=Seaborgium,Bh=Bohrium,Hs=Hassium,Mt=Meitnerium,Ds=Darmstadtium,Rg=Roentgenium,Uub=Ununbium,Uut=Ununtrium,Uuq=Ununquadium,Uup=Ununpentium,Uuh=Ununhexium,Uus=Ununseptium,Uuo=Ununoctium').
split(',');
var names = new Array();
for (var number = 0; number<elements.length; number++) {
var parts = elements[number].split('=');
names[parts[0]] = parts[1];
}
var spans = document.getElementsByTagName('span');
for (var number = 0; number<spans.length; number++) {
var span = spans[number];
if (span.className=='summenformel') {
var content = span.innerHTML;
content = content.replace(/(\d+)/g, '<sub>$1</sub>');
while (matches = content.match(/^(.*?)((?:[A-Z]|Uu)[a-z]?)(?!(?:[a-z]|<\/))(.*?)$/))
content = matches[1]+
'<a href="'+wgArticlePath.replace('$1', names[matches[2]])+'" title="'+names[matches[2]]+'">'+matches[2]+'</a>'+
matches[3];
span.innerHTML = content;
}
}
}
)
*/