User:Ricordisamoa/Levenshtein.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* <nowiki>
* Levenshtein.js by [[User:Ricordisamoa]]
*
* computes the Levenshtein distance for an edit in MediaWiki diff view
*/
$(document).ready(function(){
var revid;
if(mw.util.getParamValue('diff')!=null&&mw.util.getParamValue('oldid')==null) revid=mw.util.getParamValue('diff');
else if(mw.util.getParamValue('diff')=='prev'&&mw.util.getParamValue('oldid')!=null) revid=mw.util.getParamValue('oldid');
else return;
$(mw.util.addPortletLink('p-cactions','#','Levenshtein distance','Levenshtein','Compute the Levenshtein distance for this edit'))
.click(function(event){
event.preventDefault();
var api=new mw.Api(),
levenshtein=function(str1, str2) {
var m = str1.length,
n = str2.length,
d = [],
i, j;
if (!m) return n;
if (!n) return m;
for (i = 0; i <= m; i++) d[i] = [i];
for (j = 0; j <= n; j++) d[0][j] = j;
for (j = 1; j <= n; j++) {
for (i = 1; i <= m; i++) {
if (str1[i-1] == str2[j-1]) d[i][j] = d[i - 1][j - 1];
else d[i][j] = Math.min(d[i-1][j], d[i][j-1], d[i-1][j-1]) + 1;
}
}
return d[m][n];
};
api.get({
prop:'revisions',
titles:mw.config.get('wgPageName'),
rvstartid:revid,
rvlimit:2,
rvprop:'content|user|ids'
})
.done(function(d){
var revs=d.query.pages[Object.keys(d.query.pages)[0]].revisions;
mw.util.jsMessage('The Levenshtein distance is:<br/><big><strong>'+levenshtein(revs[1]['*'],revs[0]['*'])+'</strong></big>');
});
});
});