<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://www.iran-pedia.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-PageContributions.js</id>
	<title>مدیاویکی:Gadget-PageContributions.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://www.iran-pedia.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-PageContributions.js"/>
	<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-PageContributions.js&amp;action=history"/>
	<updated>2026-04-26T07:36:57Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-PageContributions.js&amp;diff=2566&amp;oldid=prev</id>
		<title>Rootadmin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-PageContributions.js&amp;diff=2566&amp;oldid=prev"/>
		<updated>2017-12-02T11:06:55Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fa&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;→ نسخهٔ قدیمی‌تر&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;نسخهٔ ‏۲ دسامبر ۲۰۱۷، ساعت ۱۳:۰۶&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fa&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(بدون تفاوت)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Rootadmin</name></author>
	</entry>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-PageContributions.js&amp;diff=2565&amp;oldid=prev</id>
		<title>Rootadmin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-PageContributions.js&amp;diff=2565&amp;oldid=prev"/>
		<updated>2017-08-29T15:52:15Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(function(mw, $) {&lt;br /&gt;
&lt;br /&gt;
    var query = {&lt;br /&gt;
        action: &amp;#039;query&amp;#039;,&lt;br /&gt;
        prop: &amp;#039;revisions&amp;#039;,&lt;br /&gt;
        titles: mw.config.get(&amp;#039;wgPageName&amp;#039;),&lt;br /&gt;
        rvlimit:10,&lt;br /&gt;
        rvprop: &amp;#039;ids|timestamp|user|size|content&amp;#039;,&lt;br /&gt;
        format: &amp;#039;json&amp;#039;&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var inProgress = false;&lt;br /&gt;
&lt;br /&gt;
    var isOpen = false;&lt;br /&gt;
&lt;br /&gt;
    var revisions = [];&lt;br /&gt;
&lt;br /&gt;
    var str = null;&lt;br /&gt;
    &lt;br /&gt;
    var hidden = 0;&lt;br /&gt;
    &lt;br /&gt;
    function toHex(n) {&lt;br /&gt;
        if (n &amp;lt; 0) n = 0xFFFFFFFF + n + 1;&lt;br /&gt;
        return n.toString(16);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function fnv(str) {&lt;br /&gt;
        // this is an implementation of the Fowler-Noll-Vo hash algorithm&lt;br /&gt;
        var hash = 2166136261; // the 32 bit offset&lt;br /&gt;
        for (var i = 0, l = str.length; i &amp;lt; l; i++) {&lt;br /&gt;
            hash += (hash &amp;lt;&amp;lt; 1) + (hash &amp;lt;&amp;lt; 4) + (hash &amp;lt;&amp;lt; 7) + (hash &amp;lt;&amp;lt; 8) + (hash &amp;lt;&amp;lt; 24);&lt;br /&gt;
            hash = hash ^ str.charCodeAt(i);&lt;br /&gt;
        }&lt;br /&gt;
        return hash &amp;amp; 0x0ffffffff;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    var perm = [ // permutations for the lsh algorithm&lt;br /&gt;
        1, 14, 110, 25, 97, 174, 132, 119, 138, 170, 125, 118, 27, 233, 140, 51,&lt;br /&gt;
        87, 197, 177, 107, 234, 169, 56, 68, 30, 7, 173, 73, 188, 40, 36, 65,&lt;br /&gt;
        49, 213, 104, 190, 57, 211, 148, 223, 48, 115, 15, 2, 67, 186, 210, 28,&lt;br /&gt;
        12, 181, 103, 70, 22, 58, 75, 78, 183, 167, 238, 157, 124, 147, 172, 144,&lt;br /&gt;
        176, 161, 141, 86, 60, 66, 128, 83, 156, 241, 79, 46, 168, 198, 41, 254,&lt;br /&gt;
        178, 85, 253, 237, 250, 154, 133, 88, 35, 206, 95, 116, 252, 192, 54, 221,&lt;br /&gt;
        102, 218, 255, 240, 82, 106, 158, 201, 61, 3, 89, 9, 42, 155, 159, 93,&lt;br /&gt;
        166, 80, 50, 34, 175, 195, 100, 99, 26, 150, 16, 145, 4, 33, 8, 189,&lt;br /&gt;
        121, 64, 77, 72, 208, 245, 130, 122, 143, 55, 105, 134, 29, 164, 185, 194,&lt;br /&gt;
        193, 239, 101, 242, 5, 171, 126, 11, 74, 59, 137, 228, 108, 191, 232, 139,&lt;br /&gt;
        6, 24, 81, 20, 127, 17, 91, 92, 251, 151, 225, 207, 21, 98, 113, 112,&lt;br /&gt;
        84, 226, 18, 214, 199, 187, 13, 32, 94, 220, 224, 212, 247, 204, 196, 43,&lt;br /&gt;
        249, 236, 45, 244, 111, 182, 153, 136, 129, 90, 217, 202, 19, 165, 231, 71,&lt;br /&gt;
        230, 142, 96, 227, 62, 179, 246, 114, 162, 53, 160, 215, 205, 180, 47, 109,&lt;br /&gt;
        44, 38, 31, 149, 135, 0, 216, 52, 63, 23, 37, 69, 39, 117, 146, 184,&lt;br /&gt;
        163, 200, 222, 235, 248, 243, 219, 10, 152, 131, 123, 229, 203, 76, 120, 209 ];&lt;br /&gt;
&lt;br /&gt;
     function lsh(str) {&lt;br /&gt;
        // this is an implementation of a lsh algorithm, loosley similar to nilsimsa&lt;br /&gt;
        var arr = Array();&lt;br /&gt;
        for (var i = 0; i &amp;lt;= 0x0ff; i++) {&lt;br /&gt;
            arr[i] = 0;&lt;br /&gt;
        }&lt;br /&gt;
        for (var i = 0, l = str.length-2; i &amp;lt; l; i++) {&lt;br /&gt;
             // first we do a Pearson hash of trigram from the text&lt;br /&gt;
             var hash = 0;&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i)) &amp;amp; 0x0ff ];&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i+1)) &amp;amp; 0x0ff ];&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i+2)) &amp;amp; 0x0ff ];&lt;br /&gt;
             // then we accumulate in the array at indices given by the hash&lt;br /&gt;
             arr[hash]++;&lt;br /&gt;
        }&lt;br /&gt;
        // fold the array&lt;br /&gt;
        for (var i = 0; i &amp;lt;= 0x01f; i++) {&lt;br /&gt;
            arr[i] += arr[i+0x020] + arr[i+0x040] + arr[i+0x060] + arr[i+0x080] + arr[i+0x0a0] + arr[i+0x0c0] + arr[i+0x0e0];&lt;br /&gt;
        }&lt;br /&gt;
        var acc = 0;&lt;br /&gt;
        var lim = arr.slice(0, 0x01f).sort(function(a,b){return a-b})[0x00f];&lt;br /&gt;
        for (var i = 0; i &amp;lt;= 0x01f; i++) {&lt;br /&gt;
            acc |= (((lim &amp;lt; arr[i]) ? 0 : 1) &amp;lt;&amp;lt; i);&lt;br /&gt;
        }&lt;br /&gt;
        return acc &amp;amp; 0x0ffffffff;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function rvec(str) {&lt;br /&gt;
        // this is an implementation of a subspace reduction algorithm based upon the Pearson hash&lt;br /&gt;
        var arr = new Array();&lt;br /&gt;
        for (var i = 0; i &amp;lt;= 0x0ff; i++) {&lt;br /&gt;
            arr[i] = 0;&lt;br /&gt;
        }&lt;br /&gt;
        for (var i = 0, l = str.length-2; i &amp;lt; l; i++) {&lt;br /&gt;
             // first we do a Pearson hash of trigram from the text&lt;br /&gt;
             var hash = 0;&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i)) &amp;amp; 0x0ff ];&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i+1)) &amp;amp; 0x0ff ];&lt;br /&gt;
             hash = perm[ (hash ^ str.charCodeAt(i+2)) &amp;amp; 0x0ff ];&lt;br /&gt;
             // then we accumulate in the array at indices given by the hash&lt;br /&gt;
             arr[hash]++;&lt;br /&gt;
        }&lt;br /&gt;
        return arr;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function beans(n) {&lt;br /&gt;
        // implementation of a bean counter&lt;br /&gt;
        // make an unsigned 32bits int&lt;br /&gt;
        if (n &amp;lt; 0) n = 0xFFFFFFFF + n + 1;&lt;br /&gt;
        // From Hacker&amp;#039;s Delight, p. 66, Figure 5-2&lt;br /&gt;
        n = n - ((n &amp;gt;&amp;gt; 1) &amp;amp; 0x55555555);&lt;br /&gt;
        n = (n &amp;amp; 0x33333333) + ((n &amp;gt;&amp;gt; 2) &amp;amp; 0x33333333);&lt;br /&gt;
        n = (n + (n &amp;gt;&amp;gt; 4)) &amp;amp; 0x0F0F0F0F;&lt;br /&gt;
        n = n + (n &amp;gt;&amp;gt; 8);&lt;br /&gt;
        n = n + (n &amp;gt;&amp;gt; 16);&lt;br /&gt;
        return n &amp;amp; 0x0000003F;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function cosine(vec1, vec2) {&lt;br /&gt;
        // really just a difference measure for the trigram vectors&lt;br /&gt;
        var combined = Object();&lt;br /&gt;
        for (var x in vec1)&lt;br /&gt;
            combined[x] = vec1[x];&lt;br /&gt;
        for (var x in vec2) {&lt;br /&gt;
            if (combined[x] == null) combined[x] = 0;&lt;br /&gt;
            combined[x] -= vec2[x];&lt;br /&gt;
        }&lt;br /&gt;
        var acc = 0;&lt;br /&gt;
        for (var x in combined)&lt;br /&gt;
            acc += combined[x] * combined[x];&lt;br /&gt;
        return Math.sqrt(acc);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function rcos(vec1, vec2) {&lt;br /&gt;
        // really just a difference measure for the trigram vectors&lt;br /&gt;
        var acc = 0;&lt;br /&gt;
        for (var i = 0; i &amp;lt;= 0x0ff; i++)&lt;br /&gt;
            acc += Math.pow((vec1 ? vec1[i] : 0) - (vec2 ? vec2[i] : 0), 2);&lt;br /&gt;
        return Math.sqrt(acc);&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function onclick() {&lt;br /&gt;
        // just an onclick handler to start processing&lt;br /&gt;
        if (str === null) {&lt;br /&gt;
            if (!inProgress) {&lt;br /&gt;
                inProgress = true;&lt;br /&gt;
                isOpen = true;&lt;br /&gt;
                jsMsg(&amp;#039;&amp;lt;h3&amp;gt;فهرست مشارکت‌کنندگان اصلی&amp;lt;/h3&amp;gt;&amp;lt;small id=&amp;quot;progress&amp;quot; /&amp;gt;&amp;#039;, &amp;#039;page-authors&amp;#039; );&lt;br /&gt;
                $(&amp;#039;#mw-js-message.mw-js-message-page-authors h3&amp;#039;).each(function(i, el) { injectSpinner( el, &amp;#039;page-authors&amp;#039; ); });&lt;br /&gt;
                getRevisions();&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                alert(&amp;#039;Already in progress!&amp;#039;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            if (!isOpen) {&lt;br /&gt;
                isOpen = true;&lt;br /&gt;
                jsMsg(&amp;#039;&amp;lt;h3&amp;gt;فهرست مشارکت‌کنندگان اصلی&amp;lt;/h3&amp;gt;&amp;#039; + str, &amp;#039;page-authors&amp;#039; );&lt;br /&gt;
                $(&amp;#039;#mw-js-message.mw-js-message-page-authors&amp;#039;).show().find(&amp;#039;ul&amp;#039;).slideDown(1000);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                isOpen = false;&lt;br /&gt;
                $(&amp;#039;#mw-js-message.mw-js-message-page-authors&amp;#039;).slideUp(1000);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function getRevisions() {&lt;br /&gt;
        // ajax object&lt;br /&gt;
        $.ajax({&lt;br /&gt;
            url: mw.util.wikiScript( &amp;#039;api&amp;#039; ),&lt;br /&gt;
            dataType: &amp;#039;json&amp;#039;,&lt;br /&gt;
            data: query,&lt;br /&gt;
            context: document.body,&lt;br /&gt;
            success: function(data, textStatus) {&lt;br /&gt;
                if (textStatus != &amp;#039;success&amp;#039;) {&lt;br /&gt;
                    alert(&amp;#039;Success, but with &amp;quot;&amp;#039; + textStatus + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
                    $(&amp;#039;#mw-js-message.mw-js-message-page-authors&amp;#039;).slideUp(1000);&lt;br /&gt;
                }&lt;br /&gt;
                var r = data[&amp;#039;query&amp;#039;].pages[parseInt(mw.config.get(&amp;#039;wgArticleId&amp;#039;))].revisions;&lt;br /&gt;
                for (var x = 0; x &amp;lt; r.length; x++) {&lt;br /&gt;
                    if (typeof r[x][&amp;#039;*&amp;#039;] == &amp;#039;undefined&amp;#039;) {&lt;br /&gt;
                        hidden++;&lt;br /&gt;
                        continue;&lt;br /&gt;
                    }&lt;br /&gt;
                    r[x].lsh = lsh(r[x][&amp;#039;*&amp;#039;]);&lt;br /&gt;
                    r[x].fnv = toHex(fnv(r[x][&amp;#039;*&amp;#039;]));&lt;br /&gt;
                    if(r[x].size == &amp;#039;undefined&amp;#039;) r[x].size = r[x][&amp;#039;*&amp;#039;].length;&lt;br /&gt;
                    r[x].vec = rvec(r[x][&amp;#039;*&amp;#039;]);&lt;br /&gt;
                    r[x][&amp;#039;*&amp;#039;] = null; // conserve space&lt;br /&gt;
                    revisions.push(r[x]);&lt;br /&gt;
                }&lt;br /&gt;
                if (data[&amp;#039;query-continue&amp;#039;]) {&lt;br /&gt;
                    $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( String(revisions.length).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;) + &amp;#039; ویرایش دریافت شد&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
                    query.rvstartid = data[&amp;#039;query-continue&amp;#039;].revisions.rvcontinue;&lt;br /&gt;
                    getRevisions();&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    setResult();&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
            error: function(jqXHR, textStatus, errorThrown) {&lt;br /&gt;
                alert(&amp;#039;Error, but with &amp;quot;&amp;#039; + textStatus + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
                $(&amp;#039;#mw-js-message.mw-js-message-page-authors&amp;#039;).slideUp(1000);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    function setResult() {&lt;br /&gt;
        // final handler after all ajax calls has completed&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;All revisions loaded&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
        // variables    &lt;br /&gt;
        var digests = Object();&lt;br /&gt;
        var users = Object();&lt;br /&gt;
        var revids = Object();&lt;br /&gt;
&lt;br /&gt;
        // short form to get the revisions&lt;br /&gt;
        var revs = revisions;&lt;br /&gt;
&lt;br /&gt;
        // get the individual revisions through a revid-key&lt;br /&gt;
        for (var i = 0; i &amp;lt; revs.length; i++) revids[revs[i].revid] = revs[i];&lt;br /&gt;
&lt;br /&gt;
        // get the individual revisions through the fnv-digest&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;Calculate FNV-digests&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        var shunted = 0;&lt;br /&gt;
        for (var i = revs.length-1; 0&amp;lt;=i; i--) {&lt;br /&gt;
            if (digests[revs[i].fnv]) {&lt;br /&gt;
                revs[i].previousid = digests[revs[i].fnv].revid;&lt;br /&gt;
                shunted++;&lt;br /&gt;
            }&lt;br /&gt;
            digests[revs[i].fnv] = revs[i];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // cache the cosine measure and set previousid to reflect the span&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html(  &amp;#039;Calculate cosine measure&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        var i = 0;&lt;br /&gt;
        while (i&amp;lt;revs.length) {&lt;br /&gt;
            var j = i;&lt;br /&gt;
            if (revs[i].previousid) {&lt;br /&gt;
                revs[i].cosine = rcos(revs[i].vec, revids[revs[i].previousid].vec);&lt;br /&gt;
                var previousid = revs[i].previousid;&lt;br /&gt;
                while (revs[i].revid &amp;gt; previousid &amp;amp;&amp;amp; i&amp;lt;revs.length) i++;&lt;br /&gt;
            }&lt;br /&gt;
            else if (revs[i].parentid) {&lt;br /&gt;
                revs[i].cosine = rcos(revs[i].vec, revids[revs[i].parentid].vec);&lt;br /&gt;
                var parentid = revs[i].parentid;&lt;br /&gt;
                while (revs[i].revid &amp;gt; parentid &amp;amp;&amp;amp; i&amp;lt;revs.length) i++;&lt;br /&gt;
            }&lt;br /&gt;
            else if (i+1&amp;lt;revs.length) {&lt;br /&gt;
                revs[i].cosine = rcos(revs[i].vec, revs[i+1].vec);&lt;br /&gt;
                i++;&lt;br /&gt;
            }&lt;br /&gt;
            else if (i+1==revs.length) {&lt;br /&gt;
                revs[i].cosine = rcos(revs[i].vec);&lt;br /&gt;
                revs[j].previousid = 0;&lt;br /&gt;
                break;                                                        &lt;br /&gt;
            }&lt;br /&gt;
            if (i != j) revs[j].previousid = revs[i].revid;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // adjust the cosine measure if lsh is to far off&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;Adjust cosine measure&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        var similar = 0;&lt;br /&gt;
        var revision = revs[0];&lt;br /&gt;
        while (revision) {&lt;br /&gt;
            var previous = revids[revision.previousid];&lt;br /&gt;
            if (previous /* &amp;amp;&amp;amp; revision.size &amp;gt; 100 */ &amp;amp;&amp;amp; 64&amp;lt;revision.cosine) {&lt;br /&gt;
                var p=previous;&lt;br /&gt;
                var lsh=2147483647;&lt;br /&gt;
                var keep = null;&lt;br /&gt;
                for (var j = 0; j &amp;lt; 16; j++) {&lt;br /&gt;
                    if (p) {&lt;br /&gt;
                        var tmp = rcos(revision.vec, p.vec);&lt;br /&gt;
                        if (lsh &amp;gt; tmp) {&lt;br /&gt;
                            lsh = tmp;&lt;br /&gt;
                            keep = p;&lt;br /&gt;
                        }&lt;br /&gt;
                        p = revids[p.previousid];&lt;br /&gt;
                    }&lt;br /&gt;
                    else {&lt;br /&gt;
                        break;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                if (keep &amp;amp;&amp;amp; keep != previous) {&lt;br /&gt;
                    previous = keep;&lt;br /&gt;
                    similar++;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (previous) {&lt;br /&gt;
                revision.previousid = previous.revid;&lt;br /&gt;
                revision.cosine = rcos(revision.vec, previous.vec);&lt;br /&gt;
            }&lt;br /&gt;
            revision = previous;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // accumulate the cosine measure for each user&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;Accumulate cosine measure&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        var revision = revs[0];&lt;br /&gt;
        var num = 0;&lt;br /&gt;
        while (revision) {&lt;br /&gt;
            if (!users[revision.user]) users[revision.user] = { cosine: 0 };&lt;br /&gt;
            users[revision.user].cosine += revision.cosine;&lt;br /&gt;
            revision = revids[revision.previousid];&lt;br /&gt;
            num++;&lt;br /&gt;
        }&lt;br /&gt;
        // accumulate the total cosine measure&lt;br /&gt;
        var acc = { cosine: 0 };&lt;br /&gt;
		for (var x in users) acc.cosine += users[x].cosine;&lt;br /&gt;
		&lt;br /&gt;
        //for (var x = 0; x &amp;lt; users.length; x++) acc.cosine += users[x].cosine;&lt;br /&gt;
&lt;br /&gt;
        // sort out the main contributors&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;Sort out main contributors&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        var authors = Array();&lt;br /&gt;
        var pseudonyms = Array();&lt;br /&gt;
        var count = 0;&lt;br /&gt;
        for (var x in users) pseudonyms.push(x);&lt;br /&gt;
		var sorted=pseudonyms.sort(function(a, b){ return users[b].cosine - users[a].cosine });&lt;br /&gt;
        for (var x = 0; x &amp;lt; sorted.length; x++ ) {&lt;br /&gt;
            var name = sorted[x];&lt;br /&gt;
            var cosine = Math.round(100*users[name].cosine/acc.cosine);&lt;br /&gt;
            if (count++ &amp;lt; 5 &amp;amp;&amp;amp; 0 &amp;lt; cosine) authors.push(name);&lt;br /&gt;
            else if (5 &amp;lt;= cosine ) authors.push(name);&lt;br /&gt;
            else if (revs[revs.length-1].user == name) authors.push(name);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // print the cosine measure for each user&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).html( &amp;#039;Create presentation&amp;amp;hellip;&amp;#039; );&lt;br /&gt;
        str = &amp;#039;&amp;lt;p&amp;gt;این فهرست نشان دهندهٔ آمار ساده شده‌ٔ میزان مشارکت کاربرهای اصلی در این صفحه است.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
        str += &amp;#039;تعداد &amp;#039; + String(num) .replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;)+ &amp;#039; از کل &amp;#039; + String(revisions.length) .replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;)+ &amp;#039; نسخه در محاسبات درنظر گرفته‌شده‌است. &amp;#039;;&lt;br /&gt;
        if (0&amp;lt;hidden)&lt;br /&gt;
            str += &amp;#039;در میان نسخه‌ها &amp;#039; + String(hidden).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;) + &amp;#039; ویرایش مخفی‌شده وجود دارد. &amp;#039;;&lt;br /&gt;
        if (0&amp;lt;shunted || 0&amp;lt;similar)&lt;br /&gt;
            str += &amp;#039; از میان این نسخه‌ها &amp;#039; + String(shunted).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;) + &amp;#039; نسخه بی‌تاثیر بودند و &amp;#039; + String(similar).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;) + &amp;#039; نسخه ویرایش مشابه با نسخه‌های قبلی یافت شد.&amp;#039;;&lt;br /&gt;
        else&lt;br /&gt;
            str += &amp;#039;مورد خاصی یافت نشد.&amp;#039;;&lt;br /&gt;
        str += &amp;#039;&amp;lt;ul style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
        var part = 0;&lt;br /&gt;
        for (var x = 0; x &amp;lt; authors.length; x++) {&lt;br /&gt;
            var name = authors[x];&lt;br /&gt;
			//document.write (acc.cosine);&lt;br /&gt;
            part += users[name].cosine;&lt;br /&gt;
            str += &amp;#039;&amp;lt;li&amp;gt;میزان مشارکت کاربر &amp;#039;;&lt;br /&gt;
            str += &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(&amp;#039;User:&amp;#039; + name) + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + name + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            str += &amp;#039; (&amp;#039;;&lt;br /&gt;
            str += &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(&amp;#039;User_talk:&amp;#039; + name) + &amp;#039;&amp;quot;&amp;gt;بحث&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            str += &amp;#039; | &amp;#039;;&lt;br /&gt;
            str += &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(&amp;#039;Special:Contributions/&amp;#039; + name) + &amp;#039;&amp;quot;&amp;gt;مشارکت‌ها&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            str += &amp;#039;)  &amp;#039;;&lt;br /&gt;
            str += &amp;#039; &amp;lt;em&amp;gt;&amp;#039;;&lt;br /&gt;
            str += String((0.1&amp;lt;users[name].cosine/acc.cosine ? Math.round(100*users[name].cosine/acc.cosine) : Math.round(1000*users[name].cosine/acc.cosine)/10)).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;)+&amp;#039; ٪ &amp;#039; + &amp;#039; از کل مشارکت‌ها &amp;#039;;&lt;br /&gt;
            if (revs[revs.length-1].user == name) str += &amp;#039; و &amp;lt;B&amp;gt;شروع کنندهٔ مقاله&amp;lt;/B&amp;gt; &amp;#039;;&lt;br /&gt;
            str += &amp;#039;است.&amp;lt;/em&amp;gt;&amp;#039;;&lt;br /&gt;
            str += &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
		&lt;br /&gt;
        str += &amp;#039;&amp;lt;li&amp;gt;مشارکت ویرایش‌گران دیگر  &amp;#039; + String(Math.round(100*(acc.cosine-part)/acc.cosine)).replace(/1/g, &amp;quot;۱&amp;quot;).replace(/2/g, &amp;quot;۲&amp;quot;).replace(/3/g, &amp;quot;۳&amp;quot;).replace(/4/g, &amp;quot;۴&amp;quot;).replace(/5/g, &amp;quot;۵&amp;quot;).replace(/,/g, &amp;quot;.&amp;quot;).replace(/6/g, &amp;quot;۶&amp;quot;).replace(/7/g, &amp;quot;۷&amp;quot;).replace(/8/g, &amp;quot;۸&amp;quot;).replace(/9/g, &amp;quot;۹&amp;quot;).replace(/0/g, &amp;quot;۰&amp;quot;) + &amp;#039;٪ از کل مشارکت‌های مقاله است.&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
        str += &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors #progress&amp;#039;).remove();&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors h3&amp;#039;).each(function(i, el) { removeSpinner( &amp;#039;page-authors&amp;#039; ); });&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors&amp;#039;).append(str);&lt;br /&gt;
        $(&amp;#039;#mw-js-message.mw-js-message-page-authors ul&amp;#039;).slideDown(1000);&lt;br /&gt;
        inProgress = false;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    // the strange test (2147483647 &amp;lt;= -1 &amp;gt;&amp;gt;&amp;gt; 1) is to verify that we have at least 32 bit ints&lt;br /&gt;
    // note that 32 bit ints are according to standard, while it can be longer but not shorter to respect the standard&lt;br /&gt;
    var nsnum = parseInt(mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;));&lt;br /&gt;
    if (0 &amp;lt;= nsnum &amp;amp;&amp;amp; 0 == nsnum%2 &amp;amp;&amp;amp; mw.config.get(&amp;#039;wgIsArticle&amp;#039;) &amp;amp;&amp;amp; (2147483647 &amp;lt;= -1 &amp;gt;&amp;gt;&amp;gt; 1)) {&lt;br /&gt;
        $( function() {&lt;br /&gt;
            mw.util.addPortletLink(&lt;br /&gt;
                &amp;quot;p-cactions&amp;quot;,&lt;br /&gt;
                &amp;#039;#&amp;#039;,&lt;br /&gt;
                &amp;quot;میزان مشارکت کاربرها&amp;quot;,&lt;br /&gt;
                &amp;quot;t-article-authors&amp;quot;,&lt;br /&gt;
                &amp;quot;نمایش میزان مشارکت کاربرها در این صفحه&amp;quot;,&lt;br /&gt;
                null,&lt;br /&gt;
                null&lt;br /&gt;
            );&lt;br /&gt;
            $(&amp;#039;#t-article-authors&amp;#039;).click(onclick);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})(mediaWiki, jQuery);&lt;/div&gt;</summary>
		<author><name>Rootadmin</name></author>
	</entry>
</feed>