https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Benutzer%3AISBN%2FwikEdDiff.js
Benutzer:ISBN/wikEdDiff.js - Versionsgeschichte
2025-07-31T19:20:43Z
Versionsgeschichte dieser Seite in Wikipedia
MediaWiki 1.45.0-wmf.11
https://de.wikipedia.org/w/index.php?title=Benutzer:ISBN/wikEdDiff.js&diff=52236985&oldid=prev
ISBN: AZ: Die Seite wurde neu angelegt.
2008-10-25T19:33:42Z
<p><a href="/wiki/Hilfe:Zusammenfassung_und_Quelle#Auto-Zusammenfassung" class="mw-redirect" title="Hilfe:Zusammenfassung und Quelle">AZ</a>: Die Seite wurde neu angelegt.</p>
<p><b>Neue Seite</b></p><div>// <pre><nowiki><br />
<br />
// version info<br />
window.wikEdDiffProgramVersion = '0.9.5f';<br />
window.wikEdDiffProgramDate = 'August 19, 2008';<br />
<br />
/*<br />
<br />
== wikEdDiff ==<br />
<br />
A user script that provides an improved and easier to read diff view for comparing article versions<br />
on Wikipedia and other MediaWiki sites.<br />
<br />
Features:<br />
* Additions and deletions are highlighted by color in a single article text<br />
* Block moves are detected and indicated by color<br />
* Unchanged regions of the text are omitted from the output<br />
* Highly optimized for MediaWiki source texts<br />
* Compatibel with Greasemonkey<br />
<br />
wikEdDiff uses the Cacycle diff.js routines [[en:User:Cacycle/diff]] and is also an integrated part of wikEd,<br />
the full-featured JavaScript in-browser editor (http://en.wikipedia.org/wiki/User:Cacycle/wikEd)<br />
<br />
Homepage: http://en.wikipedia.org/wiki/User:Cacycle/wikEdDiff<br />
Author: Cacycle (http://en.wikipedia.org/wiki/User:Cacycle)<br />
License: This code has been released into the public domain<br />
<br />
== Installation ==<br />
<br />
* Copy the following short block of code to [[User:YOURUSERNAME/monobook.js]]<br />
* Press SHIFT-Reload to update to the newest version<br />
* PLEASE DO NOT COPY THE WHOLE PROGRAM<br />
* See http://en.wikipedia.org/wiki/User:Cacycle/wikEdDiff for detailed instructions<br />
* Users of wikEd do not have to install wikEdDiff<br />
<br />
// ---- START INSTALLATION CODE ----<br />
<br />
// install [[User:Cacycle/wikEdDiff]] enhanced diff view using ajax<br />
document.write('<script type="text/javascript" src="'<br />
+ 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js'<br />
+ '&action=raw&ctype=text/javascript"></script>');<br />
<br />
// ---- END INSTALLATION CODE ----<br />
<br />
*/<br />
<br />
<br />
//<br />
// WikEdDiffInit: initialize variables<br />
//<br />
<br />
window.WikEdDiffInit = function() {<br />
<br />
//<br />
// user configurable variables<br />
//<br />
<br />
// diff.js routines URL, also defined in wikEd.js<br />
if (typeof(wikEdDiffScriptSrc) == 'undefined') { window.wikEdDiffScriptSrc = 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js&action=raw&ctype=text/javascript'; }<br />
<br />
// allow ajax requests from local copy for testing, also defined in wikEd.js<br />
if (typeof(wikEdAllowLocalAjax) == 'undefined') { window.wikEdAllowLocalAjax = false; }<br />
<br />
// wikEdDiff css rules<br />
if (typeof(wikEdDiffCSS) == 'undefined') { window.wikEdDiffCSS = []; }<br />
WikEdDiffInitObject(wikEdDiffCSS, {<br />
'.wikEdDiffWrapper': 'margin: 0 0 1em 0;',<br />
'.wikEdDiffButtonWrapper': 'text-align: center;',<br />
'.wikEdDiffButton': 'padding: 0; margin: 0.2em 0 0.33em 0;',<br />
'.wikEdDiffDiv': 'background: #faf8f6; padding: 0.5em; border: 1px solid; border-color: #808080;'<br />
});<br />
<br />
// use local copies of images for testing (set to true in local copy of edit page), also defined in wikEd.js<br />
if (typeof(wikEdUseLocalImages) == 'undefined') { window.wikEdUseLocalImages = false; }<br />
<br />
// path to local images for testing, also defined in wikEd.js<br />
if (typeof(wikEdImagePathLocal) == 'undefined') { window.wikEdImagePathLocal = 'file:///D:/wikEd/images/'; }<br />
<br />
// path to images, also defined in wikEd.js<br />
if (typeof(wikEdImagePath) == 'undefined') { window.wikEdImagePath = '/media/wikipedia/commons/'; }<br />
<br />
// image filenames, also defined in wikEd.js<br />
if (typeof(wikEdImage) == 'undefined') { window.wikEdImage = []; }<br />
WikEdDiffInitImage(wikEdImage, {<br />
'wikEdDiff': 'c/c6/WikEdDiff.png'<br />
});<br />
<br />
// user readable texts, copy changes to http://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js<br />
if (typeof(wikEdText) == 'undefined') { window.wikEdText = []; }<br />
WikEdDiffInitObject(wikEdText, {<br />
'wikEdDiffButtonImg alt': 'wikEdDiff',<br />
'wikEdDiffButton title': 'Show improved diff view',<br />
'wikEdDiffLoading': '...'<br />
});<br />
<br />
// show complete unshortened article text for local diff, also defined in wikEd.js<br />
if (typeof(wikEdFullDiff) == 'undefined') { window.wikEdFullDiff = false; }<br />
<br />
//<br />
// end of user configurable variables<br />
//<br />
<br />
<br />
// global dom elements<br />
window.wikEdDiffDiv = null;<br />
window.wikEdDiffWrapper = null;<br />
window.wikEdDiffButtonWrapper = null;<br />
window.wikEdDiffButton = null;<br />
window.wikEdDiffGetGlobalNode = null;<br />
<br />
// hash of loaded scripts, also defined in wikEd.js<br />
if (typeof(wikEdExternalScripts) == 'undefined') { window.wikEdExternalScripts = null; }<br />
if (typeof(wikEdDiffPreset) == 'undefined') { window.wikEdDiffPreset = false; }<br />
<br />
// get global MediaWiki settings, also defined in wikEd.js<br />
window.wikEdDiffWikiGlobals = [];<br />
<br />
// diff table element<br />
window.wikEdDiffTable = null;<br />
}<br />
<br />
// variables needed during startup<br />
if (typeof(wikEdDiffStartup) == 'undefined') { window.wikEdDiffStartup = false; }<br />
<br />
<br />
//<br />
// WikEdDiffSetup: call the setup routine<br />
//<br />
<br />
window.WikEdDiffStartup = function() {<br />
<br />
// check if this has already been run<br />
if (window.wikEdDiffStartup == true) {<br />
return;<br />
}<br />
window.wikEdDiffStartup = true;<br />
<br />
// run the setup routine if loaded dynamically from wikEd<br />
if (window.wikEdPageLoaded == true) {<br />
WikEdDiffSetup();<br />
}<br />
<br />
// schedule the setup routine<br />
else {<br />
if (window.attachEvent != null) {<br />
window.attachEvent('onload', WikEdDiffSetup);<br />
}<br />
else {<br />
window.addEventListener('load', WikEdDiffSetup, false);<br />
}<br />
return;<br />
}<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffSetup: create wikEdDiff elements<br />
//<br />
<br />
window.WikEdDiffSetup = function() {<br />
<br />
// check if this has already been run<br />
if (document.getElementById('wikEdDiffSetupFlag') != null) {<br />
return;<br />
}<br />
var flag = document.createElement('span');<br />
flag.id = 'wikEdDiffSetupFlag';<br />
flag.style.display = 'none';<br />
flag.style.visibility = 'hidden';<br />
document.body.appendChild(flag);<br />
<br />
// initialize variables<br />
WikEdDiffInit();<br />
<br />
// detect diff table<br />
var table = document.getElementsByTagName('table');<br />
for (var i = 0; i < table.length; i ++) {<br />
if (table[i].className == 'diff') {<br />
wikEdDiffTable = table[i];<br />
}<br />
}<br />
<br />
// check if this is a diff page<br />
if (wikEdDiffTable == null) {<br />
return;<br />
}<br />
<br />
// check if this is executed under Greasemonkey, also tested in wikEd.js<br />
window.wikEdDiffGreasemonkey = false;<br />
if (typeof(GM_getValue) == 'function' ) {<br />
wikEdDiffGreasemonkey = true;<br />
}<br />
<br />
// parse global MediaWiki globals into hash<br />
var variable = ['wgServer', 'wgArticlePath', 'wgScriptPath', 'wgCurRevisionId'];<br />
for (var i = 0; i < variable.length; i ++) {<br />
wikEdDiffWikiGlobals[ variable[i] ] = WikEdDiffGetGlobal(variable[i]);<br />
}<br />
<br />
// detect already loaded external scripts<br />
if (wikEdExternalScripts == null) {<br />
wikEdExternalScripts = [];<br />
var pageScripts = document.getElementsByTagName('script');<br />
for (var i = 0; i < pageScripts.length; i ++) {<br />
var scriptSrc = pageScripts[i].src;<br />
var nameMatch = scriptSrc.match(/\/([^\/]*?)($|\?)/);<br />
if (nameMatch != null) {<br />
var scriptName = nameMatch[1];<br />
if (scriptName != '') {<br />
<br />
// ignore other diff.js scripts<br />
if ( (scriptName == 'diff.js') && (scriptSrc != wikEdDiffScriptSrc) ) {<br />
continue;<br />
}<br />
wikEdExternalScripts[scriptName] = true;<br />
}<br />
}<br />
}<br />
}<br />
<br />
// load the external diff script<br />
var head = document.getElementsByTagName('head')[0];<br />
if (wikEdExternalScripts['diff.js'] == null) {<br />
if (typeof(WDiffString) == 'undefined') {<br />
var script = document.createElement('script');<br />
script.type = 'text/javascript';<br />
script.src = wikEdDiffScriptSrc;<br />
head.appendChild(script);<br />
}<br />
wikEdExternalScripts['diff.js'] = true;<br />
}<br />
<br />
// add stylesheet definitions (slow method for IE compatibility)<br />
var diffStyle = new WikEdDiffStyleSheet();<br />
var rules = '';<br />
for (var ruleName in wikEdDiffCSS) {<br />
var ruleStyle = wikEdDiffCSS[ruleName];<br />
diffStyle.addRule(ruleName, ruleStyle);<br />
}<br />
<br />
// create wikEdDiff wrapper<br />
wikEdDiffWrapper = document.createElement('div');<br />
wikEdDiffWrapper.id = 'wikEdDiffWrapper';<br />
wikEdDiffWrapper.className = 'wikEdDiffWrapper';<br />
<br />
// create wikEdDiff button wrapper<br />
wikEdDiffButtonWrapper = document.createElement('div');<br />
wikEdDiffButtonWrapper.id = 'wikEdDiffButtonWrapper';<br />
wikEdDiffButtonWrapper.className = 'wikEdDiffButtonWrapper';<br />
wikEdDiffWrapper.appendChild(wikEdDiffButtonWrapper);<br />
<br />
// create wikEdDiff button<br />
wikEdDiffButton = document.createElement('button');<br />
wikEdDiffButton.id = 'wikEdDiffButton';<br />
wikEdDiffButton.title = wikEdText['wikEdDiffButton title'];<br />
wikEdDiffButton.className = 'wikEdDiffButton';<br />
wikEdDiffButtonWrapper.appendChild(wikEdDiffButton);<br />
<br />
// add button image<br />
var diffImg = document.createElement('img');<br />
diffImg.id = 'wikEdDiffButtonImg';<br />
diffImg.src = wikEdImage['wikEdDiff'];<br />
diffImg.title = wikEdText['wikEdDiffButton title'];<br />
diffImg.alt = wikEdText['wikEdDiffButtonImg alt'];<br />
wikEdDiffButton.appendChild(diffImg);<br />
<br />
wikEdDiffDiv = document.createElement('div');<br />
wikEdDiffDiv.id = 'wikEdDiffDiv';<br />
wikEdDiffDiv.className = 'wikEdDiffDiv';<br />
wikEdDiffDiv.style.display = 'none';<br />
<br />
// add wrapper after diff table<br />
wikEdDiffWrapper.appendChild(wikEdDiffDiv);<br />
if (wikEdDiffTable.nextSibling != null) {<br />
wikEdDiffTable.parentNode.insertBefore(wikEdDiffWrapper, wikEdDiffTable.nextSibling);<br />
}<br />
else {<br />
wikEdDiffTable.parentNode.appendChild(wikEdDiffWrapper);<br />
}<br />
<br />
// add event listener to button<br />
if (window.attachEvent != null) {<br />
wikEdDiffButton.attachEvent('onclick', WikEdDiff);<br />
}<br />
else {<br />
wikEdDiffButton.addEventListener('click', WikEdDiff, true);<br />
}<br />
<br />
// linkify wikilinks in diff text<br />
var cells = wikEdDiffTable.getElementsByTagName('td');<br />
for (var i = 0; i < cells.length; i ++) {<br />
if (cells[i].className.indexOf('title') < 0) {<br />
cells[i].innerHTML = WikEdDiffLinkify(cells[i].innerHTML);<br />
}<br />
}<br />
<br />
// run WikEdDiff if enabled in wikEd<br />
var setting = WikEdDiffGetPersistent('wikEdDiff');<br />
if ( (setting == '') && (typeof(wikEdDiffPreset) == 'boolean') ) {<br />
setting = wikEdDiffPreset;<br />
}<br />
else if (setting == '1') {<br />
setting = true;<br />
}<br />
if (setting == true) {<br />
WikEdDiff();<br />
}<br />
<br />
// register links for Lupin's Wikipedia:Tools/Navigation_popups<br />
if (typeof(setupTooltips) == 'function') {<br />
setupTooltips(wikEdDiffTable);<br />
}<br />
<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiff: fetch the old versions using ajax to display a diff<br />
//<br />
<br />
window.WikEdDiff = function() {<br />
<br />
// check if set tup<br />
if (wikEdDiffDiv == null) {<br />
return;<br />
}<br />
<br />
// check if diff.js is loaded<br />
if (typeof(WDiffString) == 'undefined') {<br />
return;<br />
}<br />
<br />
// display diff<br />
wikEdDiffDiv.style.display = 'block';<br />
<br />
// fetch only once<br />
if (wikEdDiffDiv.innerHTML.length > 0) {<br />
return;<br />
}<br />
<br />
// check if this is a diff page<br />
if (wikEdDiffTable == null) {<br />
return;<br />
}<br />
<br />
// display div<br />
wikEdDiffDiv.innerHTML = wikEdText['wikEdDiffLoading'];<br />
<br />
// generate request url from MediaWiki variables or from location url<br />
var url;<br />
var server = WikEdDiffGetGlobal('wgServer');<br />
var scriptPath = WikEdDiffGetGlobal('wgScriptPath');<br />
scriptPath = scriptPath.replace(server, '');<br />
if ( (server != '') && (scriptPath != '') ) {<br />
url = server + scriptPath.replace(/\$1/, '') + '/index.php';<br />
}<br />
else {<br />
url = window.location.protocol + '//' + window.location.hostname + '/' + window.location.pathname;<br />
}<br />
<br />
var article;<br />
var pageName = WikEdDiffGetGlobal('wgPageName');<br />
if (pageName != '') {<br />
article = pageName;<br />
}<br />
else {<br />
var articleMatch = window.location.search.match(/(\?|&)title=([^&#]+)/);<br />
if(articleMatch != null) {<br />
article = articleMatch[2];<br />
}<br />
}<br />
url += '?title=' + encodeURIComponent(article) + '&action=raw&maxage=0';<br />
<br />
// get diff table and version link cells<br />
var tdArray = document.getElementsByTagName('TD');<br />
var tdOld;<br />
var tdNew;<br />
for (var i = 0; i < tdArray.length; i ++) {<br />
if (tdArray[i].className == 'diff-otitle') {<br />
tdOld = tdArray[i];<br />
}<br />
else if (tdArray[i].className == 'diff-ntitle') {<br />
tdNew = tdArray[i];<br />
break;<br />
}<br />
}<br />
if ( (tdOld == null) || (tdNew == null) ) {<br />
return;<br />
}<br />
<br />
var oldVersion = null;<br />
var newVersion = null;<br />
<br />
var oldUrl;<br />
var newUrl;<br />
<br />
// preview pages use latest article version and textarea<br />
if (<br />
(/(\?|&)action=submit\b/.test(window.location.search) == true) ||<br />
(/(\?|&)undoafter=/.test(window.location.search) == true)<br />
) {<br />
var textarea = document.getElementsByName('wpTextbox1');<br />
if (textarea.length == 0) {<br />
return;<br />
}<br />
newVersion = textarea[0].value;<br />
newVersion = newVersion.replace(/\s+$/g, '');<br />
var curRevisionId = WikEdDiffGetGlobal('wgCurRevisionId');<br />
if (curRevisionId != '') {<br />
oldUrl = url + '&oldid=' + curRevisionId;<br />
}<br />
else {<br />
oldUrl = url;<br />
}<br />
<br />
// get section for section editing<br />
var section = document.getElementsByName('wpSection');<br />
if (section != null) {<br />
if (section.length > 0) {<br />
if (section[0].value != '') {<br />
oldUrl += '&section=' + section[0].value;<br />
}<br />
}<br />
}<br />
}<br />
<br />
// diff pages use two different old versions<br />
else {<br />
<br />
// get revision id numbers from links in table cells<br />
var versionMatchOld = tdOld.innerHTML.match(/(\?|&amp;)oldid=(\d+)/);<br />
var versionMatchNew = tdNew.innerHTML.match(/(\?|&amp;)oldid=(\d+)/);<br />
if (versionMatchOld == null) {<br />
return;<br />
}<br />
oldUrl = url + '&oldid=' + versionMatchOld[2];<br />
if (versionMatchNew != null) {<br />
newUrl = url + '&oldid=' + versionMatchNew[2];<br />
}<br />
else {<br />
newUrl = url;<br />
}<br />
}<br />
<br />
// get the old version using ajax<br />
WikEdDiffAjaxRequest('GET', oldUrl, null, null, null, null, function(ajax) {<br />
oldVersion = ajax.responseText;<br />
if (newVersion != null) {<br />
WikEdDiffResponse(oldVersion, newVersion);<br />
}<br />
return;<br />
});<br />
<br />
// get the new version using ajax<br />
if (newUrl != null) {<br />
WikEdDiffAjaxRequest('GET', newUrl, null, null, null, null, function(ajax) {<br />
newVersion = ajax.responseText;<br />
if (oldVersion != null) {<br />
WikEdDiffResponse(oldVersion, newVersion);<br />
// does not work yet because added and removed are in same text<br />
// wikEdDiffDiv.innerHTML = WikEdDiffLinkify(wikEdDiffDiv.innerHTML);<br />
}<br />
return;<br />
});<br />
}<br />
<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffResponse: calculate and display the diff between two versions<br />
//<br />
<br />
window.WikEdDiffResponse = function(oldVersion, newVersion) {<br />
<br />
// call external diff program<br />
var diffText = WDiffString(oldVersion, newVersion);<br />
if (wikEdFullDiff != true) {<br />
diffText = WDiffShortenOutput(diffText);<br />
}<br />
wikEdDiffDiv.innerHTML = diffText;<br />
wikEdDiffDiv.style.display = 'block';<br />
<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffLinkify: linkify wikilinks<br />
//<br />
<br />
window.WikEdDiffLinkify = function(html) {<br />
<br />
// URLs, allowed chars: \w / . & ? = - @ # % ~ + : (; allowed because of common misuse, : allowed for wikipedia links)<br />
html = html.replace(/((https?|ftp):(\/\/[^\u0000-\u0020\!\"\$\'\(\)\*\,\<\>\[\\\]\^\`\{-\|\}\u007f-\uffff]*|<[^>]*>)+)/gi,<br />
function (p, p1) {<br />
var preTag = p;<br />
var postTag = '';<br />
var regExpMatch = /^(.*?)(<.*)$/.exec(preTag);<br />
if (regExpMatch != null) {<br />
preTag = regExpMatch[1];<br />
postTag = regExpMatch[2];<br />
}<br />
var targetNoTags = p1.replace(/<[^>]*>/g, '');<br />
targetNoTags = targetNoTags.replace(/&lt;.*?&gt;/g, '');<br />
targetNoTags = targetNoTags.replace(/&lt;.*$/g, '');<br />
var url = encodeURI(targetNoTags);<br />
url = url.replace(/\"/g, '%22');<br />
url = url.replace(/\'/g, '%27');<br />
url = url.replace(/#/g, '%23');<br />
var linkTitle = targetNoTags.replace(/\"/g, '&quot;');<br />
return('<a href = "' + url + '" style="text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color);" title="' + linkTitle + '">' + preTag + '</a>' + postTag);<br />
}<br />
);<br />
<br />
if ((wikEdDiffWikiGlobals['wgServer'] != null) && (wikEdDiffWikiGlobals['wgArticlePath'] != null)) {<br />
<br />
// 12 [ 23 <> 3 [ 4 <> 4 156 article 67 text 75<br />
html = html.replace(/((\[|\{)(<[^>]*>)*\2(<[^>]*>)*)(([^\|\[\]\{\}\n]*)([^\n\[\]\{\}]*))/g,<br />
function (p, p1, p2, p3, p4, p5, p6, p7, p8) {<br />
var linkType = p2;<br />
var wholeLink = p5;<br />
var linkTarget = p6;<br />
<br />
// stop linking after first <<br />
var preTag = wholeLink;<br />
var postTag = '';<br />
var regExpMatch = /^(.*?)(<.*)$/.exec(preTag);<br />
if (regExpMatch != null) {<br />
preTag = regExpMatch[1];<br />
postTag = regExpMatch[2] + postTag;<br />
}<br />
<br />
// stop linking after first &lt;<br />
var regExpMatch = /^(.*?)(&lt;.*)$/.exec(preTag);<br />
if (regExpMatch != null) {<br />
preTag = regExpMatch[1];<br />
postTag = regExpMatch[2] + postTag;<br />
}<br />
<br />
// create article name<br />
var targetNoTags = linkTarget.replace(/<[^>]*>/g, '');<br />
targetNoTags = targetNoTags.replace(/&lt;.*?&gt;/g, '');<br />
targetNoTags = targetNoTags.replace(/&lt;.*$/g, '');<br />
targetNoTags = targetNoTags.replace(/^\s+|\s+$/g, '');<br />
<br />
// create url<br />
var url = encodeURI(targetNoTags);<br />
url = url.replace(/\"/g, '%22');<br />
url = url.replace(/\'/g, '%27');<br />
url = url.replace(/#/g, '%23');<br />
var articleTitle = targetNoTags.replace(/\"/g, '&quot;');<br />
if (linkType == '{') {<br />
if (/^[^\|\}\n\r]*:/.test(targetNoTags) == false) {<br />
url = 'Template:' + url;<br />
articleTitle = 'Template:' + articleTitle;<br />
}<br />
}<br />
url = wikEdDiffWikiGlobals['wgServer'] + wikEdDiffWikiGlobals['wgArticlePath'].replace(/\$1/, url);<br />
return(p1 + '<a href = "' + url + '" style = "text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color)" title="' + articleTitle + '">' + preTag + '</a>' + postTag);<br />
}<br />
);<br />
}<br />
<br />
return(html);<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffInitObject: initialize object, keep pre-defined values<br />
//<br />
<br />
window.WikEdDiffInitObject = function(array, preset) {<br />
<br />
for (var key in preset) {<br />
if (array[key] == null) {<br />
array[key] = preset[key];<br />
}<br />
}<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffInitImage: initialize images, keep pre-defined values<br />
//<br />
<br />
window.WikEdDiffInitImage = function(array, preset) {<br />
<br />
for (var key in preset) {<br />
if (array[key] == null) {<br />
<br />
// remove MediaWiki path prefixes and add local path<br />
if (wikEdUseLocalImages == true) {<br />
array[key] = wikEdImagePathLocal + preset[key].replace(/^[0-9a-f]+\/[0-9a-f]+\/()/, '');<br />
}<br />
<br />
// add path<br />
else {<br />
array[key] = wikEdImagePath + preset[key];<br />
}<br />
}<br />
}<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffStyleSheet: create a new style sheet object (code copied from wikEd.js)<br />
//<br />
<br />
window.WikEdDiffStyleSheet = function(contextObj) {<br />
<br />
if (contextObj == null) {<br />
contextObj = document;<br />
}<br />
this.styleElement = null;<br />
<br />
// MS IE compatibility<br />
if (contextObj.createStyleSheet) {<br />
this.styleElement = contextObj.createStyleSheet();<br />
}<br />
<br />
// standards compliant browsers<br />
else {<br />
this.styleElement = contextObj.createElement('style');<br />
this.styleElement.from = 'text/css';<br />
var insert = contextObj.getElementsByTagName('head')[0];<br />
if (insert != null) {<br />
this.styleElement.appendChild(contextObj.createTextNode('')); // Safari 3 fix<br />
insert.appendChild(this.styleElement);<br />
}<br />
}<br />
<br />
// addRule: add one rule at the time using DOM method, very slow<br />
<br />
// IE<br />
this.addRule = function(selector, declaration) {<br />
if (this.styleElement.addRule) {<br />
this.styleElement.addRule(selector, declaration);<br />
}<br />
<br />
// standards compliant browsers<br />
else {<br />
if (this.styleElement.sheet != null) {<br />
if (this.styleElement.sheet.insertRule != null) {<br />
this.styleElement.sheet.insertRule(selector + ' { ' + declaration + ' } ', 0);<br />
}<br />
}<br />
}<br />
};<br />
<br />
// addRules: add all rules at once, much faster<br />
this.addRules = function(rules) {<br />
this.styleElement.innerHTML = rules;<br />
return;<br />
}<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffGetPersistent: get a cookie or a Greasemonkey persistent value ode copied from wikEd.js)<br />
//<br />
<br />
window.WikEdDiffGetPersistent = function(name) {<br />
<br />
var getStr = '';<br />
<br />
// get a Greasemonkey persistent value<br />
if (wikEdDiffGreasemonkey == true) {<br />
getStr = GM_getValue(name, '');<br />
}<br />
<br />
// get a cookie value<br />
else {<br />
getStr = WikEdDiffGetCookie(name);<br />
}<br />
return(getStr);<br />
}<br />
<br />
<br />
<br />
//<br />
// WikEdDiffGetCookie: get a cookie (code copied from wikEd.js)<br />
//<br />
<br />
window.WikEdDiffGetCookie = function(cookieName) {<br />
<br />
var cookie = ' ' + document.cookie;<br />
var search = ' ' + cookieName + '=';<br />
var cookieValue = '';<br />
var offset = 0;<br />
var end = 0;<br />
offset = cookie.indexOf(search);<br />
if (offset != -1) {<br />
offset += search.length;<br />
end = cookie.indexOf(';', offset)<br />
if (end == -1) {<br />
end = cookie.length;<br />
}<br />
cookieValue = cookie.substring(offset, end);<br />
cookieValue = cookieValue.replace(/\\+/g, ' ');<br />
cookieValue = decodeURIComponent(cookieValue);<br />
}<br />
return(cookieValue);<br />
}<br />
<br />
<br />
//<br />
// WikEdAjaxRequest: cross browser wrapper for Ajax requests (code copied from wikEd.js)<br />
//<br />
<br />
window.WikEdDiffAjaxRequest = function(requestMethod, requestUrl, headerName, headerValue, bodyData, overrideMimeType, responseHandler) {<br />
<br />
var request;<br />
<br />
// use Greasemonkey GM_xmlhttpRequest<br />
if (wikEdDiffGreasemonkey == true) {<br />
var headerArray = { 'User-Agent': navigator.userAgent }<br />
if (headerName != null) {<br />
headerArray[headerName] = headerValue;<br />
}<br />
request = new GM_xmlhttpRequest({<br />
'method': requestMethod,<br />
'url': requestUrl,<br />
'headers': headerArray,<br />
'data': bodyData,<br />
'onreadystatechange':<br />
function(ajax) {<br />
if (ajax.readyState != 4) {<br />
return;<br />
}<br />
responseHandler(ajax);<br />
return;<br />
}<br />
});<br />
}<br />
<br />
// use standard XMLHttpRequest<br />
else {<br />
<br />
// allow ajax request from local copy for testing<br />
if (wikEdAllowLocalAjax == true) {<br />
if (typeof(netscape) == 'object') {<br />
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');<br />
}<br />
}<br />
<br />
// new ajax request object<br />
try {<br />
request = new XMLHttpRequest();<br />
}<br />
<br />
// IE 6<br />
catch(err) {<br />
try {<br />
request = new ActiveXObject('Microsoft.XMLHTTP');<br />
}<br />
<br />
// IE 5.5<br />
catch(err) {<br />
try {<br />
request = new ActiveXObject('Msxml2.XMLHTTP');<br />
}<br />
catch(err) {<br />
return;<br />
}<br />
}<br />
}<br />
request.open(requestMethod, requestUrl, true);<br />
if (headerName != null) {<br />
request.setRequestHeader(headerName, headerValue);<br />
}<br />
if ( (request.overrideMimeType != null) && (overrideMimeType != null) ) {<br />
request.overrideMimeType(overrideMimeType);<br />
}<br />
request.send(bodyData);<br />
request.onreadystatechange = function() {<br />
if (request.readyState != 4) {<br />
return;<br />
}<br />
responseHandler(request);<br />
return;<br />
}<br />
}<br />
return;<br />
}<br />
<br />
<br />
//<br />
// WikEdDiffGetOffsetTop: get element offset relative to window top (code copied from wikEd.js)<br />
//<br />
<br />
window.WikEdDiffGetOffsetTop = function(element) {<br />
var offset = 0;<br />
do {<br />
offset += element.offsetTop;<br />
} while ( (element = element.offsetParent) != null );<br />
return(offset);<br />
}<br />
<br />
//<br />
// WikEdDiffGetGlobal: access values of global variables from Greasemonkey scripts using the 'location hack' (code copied to wikEdDiff.js)<br />
//<br />
<br />
window.WikEdDiffGetGlobal = function(globalName) {<br />
<br />
var globalValue;<br />
if (wikEdDiffGreasemonkey == true) {<br />
if (wikEdDiffGetGlobalNode == null) {<br />
wikEdDiffGetGlobalNode = document.getElementById('wikEdDiffGetGlobalNode');<br />
}<br />
if (wikEdDiffGetGlobalNode == null) {<br />
wikEdDiffGetGlobalNode = document.createElement('textarea');<br />
wikEdDiffGetGlobalNode.id = 'wikEdDiffGetGlobalNode';<br />
wikEdDiffGetGlobalNode.style.display = 'none';<br />
wikEdDiffGetGlobalNode.style.visibility = 'hidden';<br />
document.body.appendChild(wikEdDiffGetGlobalNode);<br />
}<br />
location.href = 'javascript:void(typeof(' + globalName + ')!=\'undefined\'?(' + globalName + '!=null?(document.getElementById(\'wikEdDiffGetGlobalNode\').value=' + globalName + '.toString()):null):null)';<br />
globalValue = wikEdDiffGetGlobalNode.value;<br />
}<br />
else {<br />
try {<br />
globalValue = eval(globalName + '.toString();');<br />
}<br />
catch(err) { }<br />
}<br />
return(globalValue);<br />
}<br />
<br />
<br />
//<br />
// initialize<br />
//<br />
<br />
WikEdDiffStartup();<br />
<br />
<br />
// </nowiki></pre></div>
ISBN