<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>http://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A%3AGadget-page-authors-simple.js</id>
	<title>ميدياويكي:Gadget-page-authors-simple.js - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="http://www.copticpedia.org/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A%3AGadget-page-authors-simple.js"/>
	<link rel="alternate" type="text/html" href="http://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-page-authors-simple.js&amp;action=history"/>
	<updated>2026-06-26T01:26:14Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-page-authors-simple.js&amp;diff=8374&amp;oldid=prev</id>
		<title>Gerges: مراجعة واحدة</title>
		<link rel="alternate" type="text/html" href="http://www.copticpedia.org/index.php?title=%D9%85%D9%8A%D8%AF%D9%8A%D8%A7%D9%88%D9%8A%D9%83%D9%8A:Gadget-page-authors-simple.js&amp;diff=8374&amp;oldid=prev"/>
		<updated>2021-03-19T00:25:14Z</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;//[[fa:MediaWiki:Gadget-PageContributions.js]]&lt;br /&gt;
//[[no:MediaWiki:Gadget-page-authors-simple.js]]&lt;br /&gt;
&lt;br /&gt;
(function(mw, $) {&lt;br /&gt;
&lt;br /&gt;
    var query = {&lt;br /&gt;
        action: 'query',&lt;br /&gt;
        prop: 'revisions',&lt;br /&gt;
        titles: mw.config.get('wgPageName'),&lt;br /&gt;
        rvlimit:10,&lt;br /&gt;
        rvprop: 'ids|timestamp|user|size|content',&lt;br /&gt;
        format: 'json'&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'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;lt;h3&amp;gt;من ساهم في الصفحة&amp;lt;/h3&amp;gt;&amp;lt;small id=&amp;quot;progress&amp;quot;&amp;gt;&amp;lt;/small&amp;gt;', 'page-authors' );&lt;br /&gt;
                $('#mw-js-message.mw-js-message-page-authors h3').each(function(i, el) { injectSpinner( el, 'page-authors' ); });&lt;br /&gt;
                getRevisions();&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                alert('Already in progress!');&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;lt;h3&amp;gt;من ساهم في الصفحة&amp;lt;/h3&amp;gt;' + str, 'page-authors' );&lt;br /&gt;
                $('#mw-js-message.mw-js-message-page-authors').show().find('ul').slideDown(1000);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                isOpen = false;&lt;br /&gt;
                $('#mw-js-message.mw-js-message-page-authors').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( 'api' ),&lt;br /&gt;
            dataType: 'json',&lt;br /&gt;
            data: query,&lt;br /&gt;
            context: document.body,&lt;br /&gt;
            success: function(data, textStatus) {&lt;br /&gt;
                if (textStatus != 'success') {&lt;br /&gt;
                    alert('Success, but with &amp;quot;' + textStatus + '&amp;quot;');&lt;br /&gt;
                    $('#mw-js-message.mw-js-message-page-authors').slideUp(1000);&lt;br /&gt;
                }&lt;br /&gt;
                var r = data['query'].pages[parseInt(mw.config.get('wgArticleId'))].revisions;&lt;br /&gt;
                for (var x in r) {&lt;br /&gt;
                    if (typeof r[x]['*'] == 'undefined') {&lt;br /&gt;
                        hidden++;&lt;br /&gt;
                        continue;&lt;br /&gt;
                    }&lt;br /&gt;
                    r[x].lsh = lsh(r[x]['*']);&lt;br /&gt;
                    r[x].fnv = toHex(fnv(r[x]['*']));&lt;br /&gt;
                    if(r[x].size == 'undefined') r[x].size = r[x]['*'].length;&lt;br /&gt;
                    r[x].vec = rvec(r[x]['*']);&lt;br /&gt;
                    r[x]['*'] = null; // conserve space&lt;br /&gt;
                    revisions.push(r[x]);&lt;br /&gt;
                }&lt;br /&gt;
                if (data['query-continue']) {&lt;br /&gt;
                    $('#mw-js-message.mw-js-message-page-authors #progress').html( revisions.length + ' من المراجعات حملت&amp;amp;hellip;' );&lt;br /&gt;
                    query.rvstartid = data['query-continue'].revisions.rvstartid;&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('Error, but with &amp;quot;' + textStatus + '&amp;quot;');&lt;br /&gt;
                $('#mw-js-message.mw-js-message-page-authors').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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'جميع المراجعات حملت&amp;amp;hellip;' );&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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'Calculate FNV-digests&amp;amp;hellip;' );&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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html(  'Calculate cosine measure&amp;amp;hellip;' );&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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'Adjust cosine measure&amp;amp;hellip;' );&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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'Accumulate cosine measure&amp;amp;hellip;' );&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;
        // sort out the main contributors&lt;br /&gt;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'Sort out main contributors&amp;amp;hellip;' );&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;
        for (var x in pseudonyms.sort(function(a, b){ return users[b].cosine - users[a].cosine })) {&lt;br /&gt;
            var name = pseudonyms[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;
        $('#mw-js-message.mw-js-message-page-authors #progress').html( 'Create presentation&amp;amp;hellip;' );&lt;br /&gt;
        str = '&amp;lt;p&amp;gt;هذه قائمة بأسماء الذين ساهموا في كتابة هذه الصفحة والنسبة المئوية لمساهمة كل منهم. ';&lt;br /&gt;
        str += 'أخذ بالحسبان ' + num + ' مما مجموعه ' + revisions.length + ' من المراجعات. ';&lt;br /&gt;
        if (0&amp;lt;hidden)&lt;br /&gt;
            str += 'منها ' + hidden + ' من المراجعات المخفية. ';&lt;br /&gt;
        if (0&amp;lt;shunted || 0&amp;lt;similar)&lt;br /&gt;
            str += 'منها ' + shunted + ' من المراجعات غير المؤثرة، و' + similar + ' من المراجعات المشابهة لنسخ سابقة من الصفحة. ';&lt;br /&gt;
        else&lt;br /&gt;
            str += 'أخذت جميع المراجعات بالحسبان. ';&lt;br /&gt;
        str += '&amp;lt;ul style=&amp;quot;display:none&amp;quot;&amp;gt;';&lt;br /&gt;
        var part = 0;&lt;br /&gt;
        for (var x in authors) {&lt;br /&gt;
            var name = authors[x];&lt;br /&gt;
            part += users[name].cosine;&lt;br /&gt;
            str += '&amp;lt;li&amp;gt;';&lt;br /&gt;
            str += '&amp;lt;a href=&amp;quot;' + mw.util.getUrl('User:' + name) + '&amp;quot;&amp;gt;' + name + '&amp;lt;/a&amp;gt;';&lt;br /&gt;
            str += ' (';&lt;br /&gt;
            str += '&amp;lt;a href=&amp;quot;' + mw.util.getUrl('User_talk:' + name) + '&amp;quot;&amp;gt;نقاش&amp;lt;/a&amp;gt;';&lt;br /&gt;
            str += ' | ';&lt;br /&gt;
            str += '&amp;lt;a href=&amp;quot;' + mw.util.getUrl('Special:Contributions/' + name) + '&amp;quot;&amp;gt;مساهمات&amp;lt;/a&amp;gt;';&lt;br /&gt;
            str += ') ';&lt;br /&gt;
//            str += ' &amp;lt;em&amp;gt;';&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(/\./, ',') + ' %' + ' من المساهمات';&lt;br /&gt;
            if (revs[revs.length-1].user == name) str += '، &amp;lt;b&amp;gt;وأول المساهمين&amp;lt;/b&amp;gt;';&lt;br /&gt;
//            str += '.&amp;lt;/em&amp;gt;';&lt;br /&gt;
            str += '&amp;lt;/li&amp;gt;';&lt;br /&gt;
        }&lt;br /&gt;
        str += '&amp;lt;li&amp;gt;بقية المساهمات بنسبة ' + String(Math.round(100*(acc.cosine-part)/acc.cosine)).replace(/\./, ',') + ' % من الصفحة.&amp;lt;/li&amp;gt;';&lt;br /&gt;
        str += '&amp;lt;/ul&amp;gt;';&lt;br /&gt;
        str += '&amp;lt;p&amp;gt;&amp;lt;small&amp;gt;الحساب قد يكون غير مضبوط. انظر &amp;lt;a href=&amp;quot;/wiki/مساعدة:مساهمات المستخدم&amp;quot;&amp;gt;صفحة المساعدة&amp;lt;/a&amp;gt; للمزيد.&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;';&lt;br /&gt;
        $('#mw-js-message.mw-js-message-page-authors #progress').remove();&lt;br /&gt;
        $('#mw-js-message.mw-js-message-page-authors h3').each(function(i, el) { removeSpinner( 'page-authors' ); });&lt;br /&gt;
        $('#mw-js-message.mw-js-message-page-authors').append(str);&lt;br /&gt;
        $('#mw-js-message.mw-js-message-page-authors ul').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('wgNamespaceNumber'));&lt;br /&gt;
    if (0 &amp;lt;= nsnum &amp;amp;&amp;amp; 0 == nsnum%2 &amp;amp;&amp;amp; mw.config.get('wgIsArticle') &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;
                '#',&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;
            $('#t-article-authors').click(onclick);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
})(mediaWiki, jQuery);&lt;/div&gt;</summary>
		<author><name>Gerges</name></author>
	</entry>
</feed>