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>// &lt;pre&gt;&lt;nowiki&gt;<br /> <br /> // version info<br /> window.wikEdDiffProgramVersion = &#039;0.9.5f&#039;;<br /> window.wikEdDiffProgramDate = &#039;August 19, 2008&#039;;<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(&#039;&lt;script type=&quot;text/javascript&quot; src=&quot;&#039;<br /> + &#039;http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&#039;<br /> + &#039;&amp;action=raw&amp;ctype=text/javascript&quot;&gt;&lt;/script&gt;&#039;);<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) == &#039;undefined&#039;) { window.wikEdDiffScriptSrc = &#039;http://en.wikipedia.org/w/index.php?title=User:Cacycle/diff.js&amp;action=raw&amp;ctype=text/javascript&#039;; }<br /> <br /> // allow ajax requests from local copy for testing, also defined in wikEd.js<br /> if (typeof(wikEdAllowLocalAjax) == &#039;undefined&#039;) { window.wikEdAllowLocalAjax = false; }<br /> <br /> // wikEdDiff css rules<br /> if (typeof(wikEdDiffCSS) == &#039;undefined&#039;) { window.wikEdDiffCSS = []; }<br /> WikEdDiffInitObject(wikEdDiffCSS, {<br /> &#039;.wikEdDiffWrapper&#039;: &#039;margin: 0 0 1em 0;&#039;,<br /> &#039;.wikEdDiffButtonWrapper&#039;: &#039;text-align: center;&#039;,<br /> &#039;.wikEdDiffButton&#039;: &#039;padding: 0; margin: 0.2em 0 0.33em 0;&#039;,<br /> &#039;.wikEdDiffDiv&#039;: &#039;background: #faf8f6; padding: 0.5em; border: 1px solid; border-color: #808080;&#039;<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) == &#039;undefined&#039;) { window.wikEdUseLocalImages = false; }<br /> <br /> // path to local images for testing, also defined in wikEd.js<br /> if (typeof(wikEdImagePathLocal) == &#039;undefined&#039;) { window.wikEdImagePathLocal = &#039;file:///D:/wikEd/images/&#039;; }<br /> <br /> // path to images, also defined in wikEd.js<br /> if (typeof(wikEdImagePath) == &#039;undefined&#039;) { window.wikEdImagePath = &#039;/media/wikipedia/commons/&#039;; }<br /> <br /> // image filenames, also defined in wikEd.js<br /> if (typeof(wikEdImage) == &#039;undefined&#039;) { window.wikEdImage = []; }<br /> WikEdDiffInitImage(wikEdImage, {<br /> &#039;wikEdDiff&#039;: &#039;c/c6/WikEdDiff.png&#039;<br /> });<br /> <br /> // user readable texts, copy changes to http://en.wikipedia.org/wiki/User:Cacycle/wikEd_international_en.js<br /> if (typeof(wikEdText) == &#039;undefined&#039;) { window.wikEdText = []; }<br /> WikEdDiffInitObject(wikEdText, {<br /> &#039;wikEdDiffButtonImg alt&#039;: &#039;wikEdDiff&#039;,<br /> &#039;wikEdDiffButton title&#039;: &#039;Show improved diff view&#039;,<br /> &#039;wikEdDiffLoading&#039;: &#039;...&#039;<br /> });<br /> <br /> // show complete unshortened article text for local diff, also defined in wikEd.js<br /> if (typeof(wikEdFullDiff) == &#039;undefined&#039;) { 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) == &#039;undefined&#039;) { window.wikEdExternalScripts = null; }<br /> if (typeof(wikEdDiffPreset) == &#039;undefined&#039;) { 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) == &#039;undefined&#039;) { 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(&#039;onload&#039;, WikEdDiffSetup);<br /> }<br /> else {<br /> window.addEventListener(&#039;load&#039;, 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(&#039;wikEdDiffSetupFlag&#039;) != null) {<br /> return;<br /> }<br /> var flag = document.createElement(&#039;span&#039;);<br /> flag.id = &#039;wikEdDiffSetupFlag&#039;;<br /> flag.style.display = &#039;none&#039;;<br /> flag.style.visibility = &#039;hidden&#039;;<br /> document.body.appendChild(flag);<br /> <br /> // initialize variables<br /> WikEdDiffInit();<br /> <br /> // detect diff table<br /> var table = document.getElementsByTagName(&#039;table&#039;);<br /> for (var i = 0; i &lt; table.length; i ++) {<br /> if (table[i].className == &#039;diff&#039;) {<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) == &#039;function&#039; ) {<br /> wikEdDiffGreasemonkey = true;<br /> }<br /> <br /> // parse global MediaWiki globals into hash<br /> var variable = [&#039;wgServer&#039;, &#039;wgArticlePath&#039;, &#039;wgScriptPath&#039;, &#039;wgCurRevisionId&#039;];<br /> for (var i = 0; i &lt; 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(&#039;script&#039;);<br /> for (var i = 0; i &lt; 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 != &#039;&#039;) {<br /> <br /> // ignore other diff.js scripts<br /> if ( (scriptName == &#039;diff.js&#039;) &amp;&amp; (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(&#039;head&#039;)[0];<br /> if (wikEdExternalScripts[&#039;diff.js&#039;] == null) {<br /> if (typeof(WDiffString) == &#039;undefined&#039;) {<br /> var script = document.createElement(&#039;script&#039;);<br /> script.type = &#039;text/javascript&#039;;<br /> script.src = wikEdDiffScriptSrc;<br /> head.appendChild(script);<br /> }<br /> wikEdExternalScripts[&#039;diff.js&#039;] = true;<br /> }<br /> <br /> // add stylesheet definitions (slow method for IE compatibility)<br /> var diffStyle = new WikEdDiffStyleSheet();<br /> var rules = &#039;&#039;;<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(&#039;div&#039;);<br /> wikEdDiffWrapper.id = &#039;wikEdDiffWrapper&#039;;<br /> wikEdDiffWrapper.className = &#039;wikEdDiffWrapper&#039;;<br /> <br /> // create wikEdDiff button wrapper<br /> wikEdDiffButtonWrapper = document.createElement(&#039;div&#039;);<br /> wikEdDiffButtonWrapper.id = &#039;wikEdDiffButtonWrapper&#039;;<br /> wikEdDiffButtonWrapper.className = &#039;wikEdDiffButtonWrapper&#039;;<br /> wikEdDiffWrapper.appendChild(wikEdDiffButtonWrapper);<br /> <br /> // create wikEdDiff button<br /> wikEdDiffButton = document.createElement(&#039;button&#039;);<br /> wikEdDiffButton.id = &#039;wikEdDiffButton&#039;;<br /> wikEdDiffButton.title = wikEdText[&#039;wikEdDiffButton title&#039;];<br /> wikEdDiffButton.className = &#039;wikEdDiffButton&#039;;<br /> wikEdDiffButtonWrapper.appendChild(wikEdDiffButton);<br /> <br /> // add button image<br /> var diffImg = document.createElement(&#039;img&#039;);<br /> diffImg.id = &#039;wikEdDiffButtonImg&#039;;<br /> diffImg.src = wikEdImage[&#039;wikEdDiff&#039;];<br /> diffImg.title = wikEdText[&#039;wikEdDiffButton title&#039;];<br /> diffImg.alt = wikEdText[&#039;wikEdDiffButtonImg alt&#039;];<br /> wikEdDiffButton.appendChild(diffImg);<br /> <br /> wikEdDiffDiv = document.createElement(&#039;div&#039;);<br /> wikEdDiffDiv.id = &#039;wikEdDiffDiv&#039;;<br /> wikEdDiffDiv.className = &#039;wikEdDiffDiv&#039;;<br /> wikEdDiffDiv.style.display = &#039;none&#039;;<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(&#039;onclick&#039;, WikEdDiff);<br /> }<br /> else {<br /> wikEdDiffButton.addEventListener(&#039;click&#039;, WikEdDiff, true);<br /> }<br /> <br /> // linkify wikilinks in diff text<br /> var cells = wikEdDiffTable.getElementsByTagName(&#039;td&#039;);<br /> for (var i = 0; i &lt; cells.length; i ++) {<br /> if (cells[i].className.indexOf(&#039;title&#039;) &lt; 0) {<br /> cells[i].innerHTML = WikEdDiffLinkify(cells[i].innerHTML);<br /> }<br /> }<br /> <br /> // run WikEdDiff if enabled in wikEd<br /> var setting = WikEdDiffGetPersistent(&#039;wikEdDiff&#039;);<br /> if ( (setting == &#039;&#039;) &amp;&amp; (typeof(wikEdDiffPreset) == &#039;boolean&#039;) ) {<br /> setting = wikEdDiffPreset;<br /> }<br /> else if (setting == &#039;1&#039;) {<br /> setting = true;<br /> }<br /> if (setting == true) {<br /> WikEdDiff();<br /> }<br /> <br /> // register links for Lupin&#039;s Wikipedia:Tools/Navigation_popups<br /> if (typeof(setupTooltips) == &#039;function&#039;) {<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) == &#039;undefined&#039;) {<br /> return;<br /> }<br /> <br /> // display diff<br /> wikEdDiffDiv.style.display = &#039;block&#039;;<br /> <br /> // fetch only once<br /> if (wikEdDiffDiv.innerHTML.length &gt; 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[&#039;wikEdDiffLoading&#039;];<br /> <br /> // generate request url from MediaWiki variables or from location url<br /> var url;<br /> var server = WikEdDiffGetGlobal(&#039;wgServer&#039;);<br /> var scriptPath = WikEdDiffGetGlobal(&#039;wgScriptPath&#039;);<br /> scriptPath = scriptPath.replace(server, &#039;&#039;);<br /> if ( (server != &#039;&#039;) &amp;&amp; (scriptPath != &#039;&#039;) ) {<br /> url = server + scriptPath.replace(/\$1/, &#039;&#039;) + &#039;/index.php&#039;;<br /> }<br /> else {<br /> url = window.location.protocol + &#039;//&#039; + window.location.hostname + &#039;/&#039; + window.location.pathname;<br /> }<br /> <br /> var article;<br /> var pageName = WikEdDiffGetGlobal(&#039;wgPageName&#039;);<br /> if (pageName != &#039;&#039;) {<br /> article = pageName;<br /> }<br /> else {<br /> var articleMatch = window.location.search.match(/(\?|&amp;)title=([^&amp;#]+)/);<br /> if(articleMatch != null) {<br /> article = articleMatch[2];<br /> }<br /> }<br /> url += &#039;?title=&#039; + encodeURIComponent(article) + &#039;&amp;action=raw&amp;maxage=0&#039;;<br /> <br /> // get diff table and version link cells<br /> var tdArray = document.getElementsByTagName(&#039;TD&#039;);<br /> var tdOld;<br /> var tdNew;<br /> for (var i = 0; i &lt; tdArray.length; i ++) {<br /> if (tdArray[i].className == &#039;diff-otitle&#039;) {<br /> tdOld = tdArray[i];<br /> }<br /> else if (tdArray[i].className == &#039;diff-ntitle&#039;) {<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 /> (/(\?|&amp;)action=submit\b/.test(window.location.search) == true) ||<br /> (/(\?|&amp;)undoafter=/.test(window.location.search) == true)<br /> ) {<br /> var textarea = document.getElementsByName(&#039;wpTextbox1&#039;);<br /> if (textarea.length == 0) {<br /> return;<br /> }<br /> newVersion = textarea[0].value;<br /> newVersion = newVersion.replace(/\s+$/g, &#039;&#039;);<br /> var curRevisionId = WikEdDiffGetGlobal(&#039;wgCurRevisionId&#039;);<br /> if (curRevisionId != &#039;&#039;) {<br /> oldUrl = url + &#039;&amp;oldid=&#039; + curRevisionId;<br /> }<br /> else {<br /> oldUrl = url;<br /> }<br /> <br /> // get section for section editing<br /> var section = document.getElementsByName(&#039;wpSection&#039;);<br /> if (section != null) {<br /> if (section.length &gt; 0) {<br /> if (section[0].value != &#039;&#039;) {<br /> oldUrl += &#039;&amp;section=&#039; + 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;amp;)oldid=(\d+)/);<br /> var versionMatchNew = tdNew.innerHTML.match(/(\?|&amp;amp;)oldid=(\d+)/);<br /> if (versionMatchOld == null) {<br /> return;<br /> }<br /> oldUrl = url + &#039;&amp;oldid=&#039; + versionMatchOld[2];<br /> if (versionMatchNew != null) {<br /> newUrl = url + &#039;&amp;oldid=&#039; + versionMatchNew[2];<br /> }<br /> else {<br /> newUrl = url;<br /> }<br /> }<br /> <br /> // get the old version using ajax<br /> WikEdDiffAjaxRequest(&#039;GET&#039;, 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(&#039;GET&#039;, 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 = &#039;block&#039;;<br /> <br /> return;<br /> }<br /> <br /> <br /> //<br /> // WikEdDiffLinkify: linkify wikilinks<br /> //<br /> <br /> window.WikEdDiffLinkify = function(html) {<br /> <br /> // URLs, allowed chars: \w / . &amp; ? = - @ # % ~ + : (; allowed because of common misuse, : allowed for wikipedia links)<br /> html = html.replace(/((https?|ftp):(\/\/[^\u0000-\u0020\!\&quot;\$\&#039;\(\)\*\,\&lt;\&gt;\[\\\]\^\`\{-\|\}\u007f-\uffff]*|&lt;[^&gt;]*&gt;)+)/gi,<br /> function (p, p1) {<br /> var preTag = p;<br /> var postTag = &#039;&#039;;<br /> var regExpMatch = /^(.*?)(&lt;.*)$/.exec(preTag);<br /> if (regExpMatch != null) {<br /> preTag = regExpMatch[1];<br /> postTag = regExpMatch[2];<br /> }<br /> var targetNoTags = p1.replace(/&lt;[^&gt;]*&gt;/g, &#039;&#039;);<br /> targetNoTags = targetNoTags.replace(/&amp;lt;.*?&amp;gt;/g, &#039;&#039;);<br /> targetNoTags = targetNoTags.replace(/&amp;lt;.*$/g, &#039;&#039;);<br /> var url = encodeURI(targetNoTags);<br /> url = url.replace(/\&quot;/g, &#039;%22&#039;);<br /> url = url.replace(/\&#039;/g, &#039;%27&#039;);<br /> url = url.replace(/#/g, &#039;%23&#039;);<br /> var linkTitle = targetNoTags.replace(/\&quot;/g, &#039;&amp;quot;&#039;);<br /> return(&#039;&lt;a href = &quot;&#039; + url + &#039;&quot; style=&quot;text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color);&quot; title=&quot;&#039; + linkTitle + &#039;&quot;&gt;&#039; + preTag + &#039;&lt;/a&gt;&#039; + postTag);<br /> }<br /> );<br /> <br /> if ((wikEdDiffWikiGlobals[&#039;wgServer&#039;] != null) &amp;&amp; (wikEdDiffWikiGlobals[&#039;wgArticlePath&#039;] != null)) {<br /> <br /> // 12 [ 23 &lt;&gt; 3 [ 4 &lt;&gt; 4 156 article 67 text 75<br /> html = html.replace(/((\[|\{)(&lt;[^&gt;]*&gt;)*\2(&lt;[^&gt;]*&gt;)*)(([^\|\[\]\{\}\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 &lt;<br /> var preTag = wholeLink;<br /> var postTag = &#039;&#039;;<br /> var regExpMatch = /^(.*?)(&lt;.*)$/.exec(preTag);<br /> if (regExpMatch != null) {<br /> preTag = regExpMatch[1];<br /> postTag = regExpMatch[2] + postTag;<br /> }<br /> <br /> // stop linking after first &amp;lt;<br /> var regExpMatch = /^(.*?)(&amp;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(/&lt;[^&gt;]*&gt;/g, &#039;&#039;);<br /> targetNoTags = targetNoTags.replace(/&amp;lt;.*?&amp;gt;/g, &#039;&#039;);<br /> targetNoTags = targetNoTags.replace(/&amp;lt;.*$/g, &#039;&#039;);<br /> targetNoTags = targetNoTags.replace(/^\s+|\s+$/g, &#039;&#039;);<br /> <br /> // create url<br /> var url = encodeURI(targetNoTags);<br /> url = url.replace(/\&quot;/g, &#039;%22&#039;);<br /> url = url.replace(/\&#039;/g, &#039;%27&#039;);<br /> url = url.replace(/#/g, &#039;%23&#039;);<br /> var articleTitle = targetNoTags.replace(/\&quot;/g, &#039;&amp;quot;&#039;);<br /> if (linkType == &#039;{&#039;) {<br /> if (/^[^\|\}\n\r]*:/.test(targetNoTags) == false) {<br /> url = &#039;Template:&#039; + url;<br /> articleTitle = &#039;Template:&#039; + articleTitle;<br /> }<br /> }<br /> url = wikEdDiffWikiGlobals[&#039;wgServer&#039;] + wikEdDiffWikiGlobals[&#039;wgArticlePath&#039;].replace(/\$1/, url);<br /> return(p1 + &#039;&lt;a href = &quot;&#039; + url + &#039;&quot; style = &quot;text-decoration: none; color: inherit; color: expression(parentElement.currentStyle.color)&quot; title=&quot;&#039; + articleTitle + &#039;&quot;&gt;&#039; + preTag + &#039;&lt;/a&gt;&#039; + 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]+\/()/, &#039;&#039;);<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(&#039;style&#039;);<br /> this.styleElement.from = &#039;text/css&#039;;<br /> var insert = contextObj.getElementsByTagName(&#039;head&#039;)[0];<br /> if (insert != null) {<br /> this.styleElement.appendChild(contextObj.createTextNode(&#039;&#039;)); // 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 + &#039; { &#039; + declaration + &#039; } &#039;, 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 = &#039;&#039;;<br /> <br /> // get a Greasemonkey persistent value<br /> if (wikEdDiffGreasemonkey == true) {<br /> getStr = GM_getValue(name, &#039;&#039;);<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 = &#039; &#039; + document.cookie;<br /> var search = &#039; &#039; + cookieName + &#039;=&#039;;<br /> var cookieValue = &#039;&#039;;<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(&#039;;&#039;, offset)<br /> if (end == -1) {<br /> end = cookie.length;<br /> }<br /> cookieValue = cookie.substring(offset, end);<br /> cookieValue = cookieValue.replace(/\\+/g, &#039; &#039;);<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 = { &#039;User-Agent&#039;: navigator.userAgent }<br /> if (headerName != null) {<br /> headerArray[headerName] = headerValue;<br /> }<br /> request = new GM_xmlhttpRequest({<br /> &#039;method&#039;: requestMethod,<br /> &#039;url&#039;: requestUrl,<br /> &#039;headers&#039;: headerArray,<br /> &#039;data&#039;: bodyData,<br /> &#039;onreadystatechange&#039;:<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) == &#039;object&#039;) {<br /> netscape.security.PrivilegeManager.enablePrivilege(&#039;UniversalBrowserRead&#039;);<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(&#039;Microsoft.XMLHTTP&#039;);<br /> }<br /> <br /> // IE 5.5<br /> catch(err) {<br /> try {<br /> request = new ActiveXObject(&#039;Msxml2.XMLHTTP&#039;);<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) &amp;&amp; (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 &#039;location hack&#039; (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(&#039;wikEdDiffGetGlobalNode&#039;);<br /> }<br /> if (wikEdDiffGetGlobalNode == null) {<br /> wikEdDiffGetGlobalNode = document.createElement(&#039;textarea&#039;);<br /> wikEdDiffGetGlobalNode.id = &#039;wikEdDiffGetGlobalNode&#039;;<br /> wikEdDiffGetGlobalNode.style.display = &#039;none&#039;;<br /> wikEdDiffGetGlobalNode.style.visibility = &#039;hidden&#039;;<br /> document.body.appendChild(wikEdDiffGetGlobalNode);<br /> }<br /> location.href = &#039;javascript:void(typeof(&#039; + globalName + &#039;)!=\&#039;undefined\&#039;?(&#039; + globalName + &#039;!=null?(document.getElementById(\&#039;wikEdDiffGetGlobalNode\&#039;).value=&#039; + globalName + &#039;.toString()):null):null)&#039;;<br /> globalValue = wikEdDiffGetGlobalNode.value;<br /> }<br /> else {<br /> try {<br /> globalValue = eval(globalName + &#039;.toString();&#039;);<br /> }<br /> catch(err) { }<br /> }<br /> return(globalValue);<br /> }<br /> <br /> <br /> //<br /> // initialize<br /> //<br /> <br /> WikEdDiffStartup();<br /> <br /> <br /> // &lt;/nowiki&gt;&lt;/pre&gt;</div> ISBN