<link href="../fonts/font.css" rel="stylesheet" type="text/css">

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
		<id>https://wiki.imaroof.ir/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-metadata.js</id>
		<title>مدیاویکی:Gadget-metadata.js - تاریخچهٔ ویرایش‌ها</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.imaroof.ir/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-metadata.js"/>
		<link rel="alternate" type="text/html" href="https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-metadata.js&amp;action=history"/>
		<updated>2026-08-01T15:15:22Z</updated>
		<subtitle>تاریخچهٔ ویرایش‌های این صفحه در ویکی</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-metadata.js&amp;diff=236&amp;oldid=prev</id>
		<title>Admin: صفحه‌ای تازه حاوی «/**  * Metadata assessment script  * Finds the WP 1.0/WikiProject assessment of every article you go to, then  * displays that information...» ایجاد کرد</title>
		<link rel="alternate" type="text/html" href="https://wiki.imaroof.ir/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-metadata.js&amp;diff=236&amp;oldid=prev"/>
				<updated>2016-03-01T07:08:16Z</updated>
		
		<summary type="html">&lt;p&gt;صفحه‌ای تازه حاوی «/**  * Metadata assessment script  * Finds the WP 1.0/WikiProject assessment of every article you go to, then  * displays that information...» ایجاد کرد&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Metadata assessment script&lt;br /&gt;
 * Finds the WP 1.0/WikiProject assessment of every article you go to, then&lt;br /&gt;
 * displays that information in the article header.&lt;br /&gt;
 * @author Outriggr - created the script and used to maintain it&lt;br /&gt;
 * @author Pyrospirit - currently maintains and updates the script&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
if (typeof(unsafeWindow) != 'undefined')&lt;br /&gt;
{&lt;br /&gt;
	addOnloadHook = mw.util.addOnloadHook;&lt;br /&gt;
	console = unsafeWindow.console;&lt;br /&gt;
	importStylesheet = unsafeWindow.importStylesheet;&lt;br /&gt;
	mw = unsafeWindow.mw;&lt;br /&gt;
	sajax_init_object = unsafeWindow.sajax_init_object;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Import stylesheet with custom classes for header colors&lt;br /&gt;
importStylesheet('مدیاویکی:Gadget-metadata.css');&lt;br /&gt;
&lt;br /&gt;
var assessment = {&lt;br /&gt;
    showOldPeerReviews: false,&lt;br /&gt;
    /**&lt;br /&gt;
     * Starts the script object running. The main function of the script. If the&lt;br /&gt;
     * getMainType() function can find the assessment, it uses that assessment&lt;br /&gt;
     * for the page, parses it, and displays it in the header. Otherwise, it runs&lt;br /&gt;
     * ajaxMain().&lt;br /&gt;
     */&lt;br /&gt;
    init: function init () {&lt;br /&gt;
        if( !$('#siteSub').length ) return; //This skin is not compatible with the tool&lt;br /&gt;
        this.callHooks('init_before');&lt;br /&gt;
        var initialAssessment = this.checkArticle(); // checks for types visible from article page&lt;br /&gt;
        if (initialAssessment.exists) {&lt;br /&gt;
            this.currentAssessment = initialAssessment;&lt;br /&gt;
            var data = this.talkAssess(this.currentAssessment);&lt;br /&gt;
            this.update(data.newClass, data.slogan, data.info);&lt;br /&gt;
        }&lt;br /&gt;
        else this.ajaxMain(); // proceed to check the talk page&lt;br /&gt;
        this.callHooks('init_after');&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * The main function when an AJAX request is needed to find the assessment.&lt;br /&gt;
     * Creates an AJAX request for the contents of a URL (defaults to the&lt;br /&gt;
     * first section of the article's talk page), then sends the request. After&lt;br /&gt;
     * getting the requested data back, it finds the assessment information in&lt;br /&gt;
     * the data, then uses and displays that assessment in the header.&lt;br /&gt;
     * @param {String} url - Optional: override the default URL for the request.&lt;br /&gt;
     * @param {Function} stateChange - Optional: override the default request callback&lt;br /&gt;
     * @param optionalArgument - Optional: passed to the stateChange function&lt;br /&gt;
     */&lt;br /&gt;
    ajaxMain: function ajaxMain (url, stateChange, optionalArgument) {&lt;br /&gt;
        if (!url || !/^https?:\/\//i.test(url)) // optional url override&lt;br /&gt;
            url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=بحث:' + encodeURIComponent(mw.config.get('wgPageName'))&lt;br /&gt;
            + '&amp;amp;action=raw&amp;amp;section=0';&lt;br /&gt;
        if (typeof stateChange !== 'function') {&lt;br /&gt;
            stateChange = this.stateChange;&lt;br /&gt;
            this.url = url;&lt;br /&gt;
        }&lt;br /&gt;
        var request = sajax_init_object();&lt;br /&gt;
        if (request) {&lt;br /&gt;
            var that = this; // store value of 'this'&lt;br /&gt;
            request.onreadystatechange = function () {&lt;br /&gt;
                stateChange.call(that, request, optionalArgument);&lt;br /&gt;
            }&lt;br /&gt;
            request.open('GET', url, true);&lt;br /&gt;
            request.send(null);&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * This function is passed as a parameter to ajaxMain. It is called each time&lt;br /&gt;
     * this.request updates, and the code inside the conditional runs when the&lt;br /&gt;
     * data is available.&lt;br /&gt;
     */&lt;br /&gt;
    stateChange: function stateChange (request) {&lt;br /&gt;
        if (request.readyState == 4 &amp;amp;&amp;amp; request.status == 200) {&lt;br /&gt;
            this.text = request.responseText;&lt;br /&gt;
            this.request = request;&lt;br /&gt;
            var rating = this.getRating(this.text);&lt;br /&gt;
            this.currentAssessment = this.getAssessment(this.text, rating);&lt;br /&gt;
            var data = this.talkAssess(this.currentAssessment);&lt;br /&gt;
            this.update(data.newClass, data.slogan, data.info);&lt;br /&gt;
            this.callHooks('onCompletedRequest');&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Checks for various objects on the article page that indicate a certain&lt;br /&gt;
     * assessment, such as a featured star or disambiguation page notice. If this&lt;br /&gt;
     * function can find the assessment, AJAX is not needed for this page.&lt;br /&gt;
     * @return {Object} assess - the assessment in an easily readable format&lt;br /&gt;
     * @static&lt;br /&gt;
     */&lt;br /&gt;
    checkArticle: function checkArticle () {&lt;br /&gt;
        var assess = {};&lt;br /&gt;
        assess.extra == '';&lt;br /&gt;
        assess.exists = true;&lt;br /&gt;
        if ($('#disambig').length || $('#disambig_disambigbox').length&lt;br /&gt;
                || $('#disambigbox').length)&lt;br /&gt;
            assess.rating = 'dab';&lt;br /&gt;
        else if ($('#setindexbox').length)&lt;br /&gt;
            assess.rating = 'setindex';&lt;br /&gt;
        else if ($('#contentSub').length&lt;br /&gt;
                &amp;amp;&amp;amp; $('#contentSub').text() == 'Redirect page')&lt;br /&gt;
            assess.rating = 'redir';&lt;br /&gt;
        else if ($('#ca-talk').length&lt;br /&gt;
                &amp;amp;&amp;amp; $('#ca-talk').hasClass('new')) // no talk page&lt;br /&gt;
            assess.rating = 'none';&lt;br /&gt;
        else assess.exists = false; // none of the above, no assessment found&lt;br /&gt;
        return assess;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Searches the provided wikicode for the rating part of an assessment and&lt;br /&gt;
     * returns it as a string.&lt;br /&gt;
     * Note that a higher assessment takes priority, and less-used assessments&lt;br /&gt;
     * such as &amp;quot;list&amp;quot;, &amp;quot;current&amp;quot;, or &amp;quot;future&amp;quot; are used only if nothing else can&lt;br /&gt;
     * be found.&lt;br /&gt;
     * @param {String} text - some wikitext to be searched for assessment info&lt;br /&gt;
     * @return {String} rating - the article's current assessment&lt;br /&gt;
     */&lt;br /&gt;
    getRating: function getRating (text) {&lt;br /&gt;
        this.callHooks('getRating_before');&lt;br /&gt;
        var rating = 'none';&lt;br /&gt;
        if (text.match(/\|\s*(کلاس|درجه)\s*=\s*برگزیده/i))&lt;br /&gt;
            rating = 'fa';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\sفهرست برگزیده/i))&lt;br /&gt;
            rating = 'fl';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*a/i)) {&lt;br /&gt;
            if (text.match(/\|\s*(کلاس|درجه)\s*=\s*خوب|\|\s*currentstatus\s*=\s*(ffa\/)?ga/i))&lt;br /&gt;
                rating = 'a/ga'; // A-class articles that are also GA's&lt;br /&gt;
            else rating = 'a';&lt;br /&gt;
        } else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*خوب|\|\s*currentstatus\s*=\s*(ffa\/)?ga\b|\{\{\s*ga\s*\|/i)&lt;br /&gt;
                   &amp;amp;&amp;amp; !text.match(/\|\s*currentstatus\s*=\s*dga/i))&lt;br /&gt;
            rating = 'ga';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*متوسط/i))&lt;br /&gt;
            rating = 'b';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*bplus/i))&lt;br /&gt;
            rating = 'bplus'; // used by WP Math&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*ضعیف/i))&lt;br /&gt;
            rating = 'c';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*ابتدایی/i))&lt;br /&gt;
            rating = 'start';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*خرد/i))&lt;br /&gt;
            rating = 'stub';&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*فهرست/i))&lt;br /&gt;
            rating = 'list';&lt;br /&gt;
        else if (text.match(/\|\s*class\s*=\s*sl/i))&lt;br /&gt;
            rating = 'sl'; // used by WP Plants&lt;br /&gt;
        else if (text.match(/\|\s*(کلاس|درجه)\s*=\s*(ابهام|ابهامu\200cزدایی)/i))&lt;br /&gt;
            rating = 'dab';&lt;br /&gt;
        else if (text.match(/\|\s*class\s*=\s*cur(rent)?/i))&lt;br /&gt;
            rating = 'cur';&lt;br /&gt;
        else if (text.match(/\|\s*class\s*=\s*future/i))&lt;br /&gt;
            rating = 'future';&lt;br /&gt;
        this.callHooks('getRating_after');&lt;br /&gt;
        return rating;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Searches the provided wikicode for data on the article's current and past&lt;br /&gt;
     * featured or good status and returns an object that contains this data&lt;br /&gt;
     * along with some miscellaneous other bits of information.&lt;br /&gt;
     * @param {String} text - some wikitext to be searched for assessment info&lt;br /&gt;
     * @return {Object} assess - the assessment data for the page&lt;br /&gt;
     */&lt;br /&gt;
    getAssessment: function getAssessment (text, rating) {&lt;br /&gt;
        this.callHooks('getAssessment_before');&lt;br /&gt;
        var assess = {rating: rating, pageLink: [null, null], extra: [], activeReview: null};&lt;br /&gt;
        var actionNumber = 0, pageLinkFlag = false, tempMatch, articleName;&lt;br /&gt;
&lt;br /&gt;
        // Current nominations (FAC, FLC, or GAN)&lt;br /&gt;
        if ((assess.reg = text.match(/\{\{\s*featured[ _]article[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i))) {&lt;br /&gt;
            assess.extra.push('fac');&lt;br /&gt;
            if (assess.reg[1] &amp;amp;&amp;amp; (articleName = this.decodeEntities($.trim(assess.reg[1]))))&lt;br /&gt;
                assess.pageLink[0] = 'Wikipedia:Featured_article_candidates\/' + articleName;&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*featured[ _]list[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i))) {&lt;br /&gt;
            assess.extra.push('flc');&lt;br /&gt;
            if (assess.reg[1] &amp;amp;&amp;amp; (articleName = this.decodeEntities($.trim(assess.reg[1]))))&lt;br /&gt;
                assess.pageLink[0] = 'Wikipedia:Featured_list_candidates\/' + articleName;&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*ga ?nominee\s*[\|\}][^\}]*\}\}/i))) {&lt;br /&gt;
            assess.extra.push('gan');&lt;br /&gt;
            tempMatch = assess.reg[0].match(/\|\s*page\s*=\s*(\d+).*\|\s*status\s*=\s*\w+\b/i);&lt;br /&gt;
            if (tempMatch)&lt;br /&gt;
                assess.pageLink[0] = 'Talk:' + this.encodePageName(mw.config.get('wgPageName')) + '\/GA' + tempMatch[1];&lt;br /&gt;
        }&lt;br /&gt;
        // Current reviews of a status (FAR, FLRC, or GAR)&lt;br /&gt;
        else if ((assess.reg = text.match(/\{\{\s*featured[ _]article[ _]review\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i))) {&lt;br /&gt;
            assess.extra.push('far');&lt;br /&gt;
            if (assess.reg[1] &amp;amp;&amp;amp; (articleName = this.decodeEntities($.trim(assess.reg[1]))))&lt;br /&gt;
                assess.pageLink[0] = 'Wikipedia:Featured_article_review\/' + articleName;&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*featured[ _]list[ _]removal[ _]candidates\s*(?:[\|\}]\s*([^\|\}]*))?[^\}]*?\}\}/i))) {&lt;br /&gt;
            assess.extra.push('flrc');&lt;br /&gt;
            if (assess.reg[1] &amp;amp;&amp;amp; (articleName = this.decodeEntities($.trim(assess.reg[1]))))&lt;br /&gt;
                assess.pageLink[0] = 'Wikipedia:Featured_list_removal_candidates\/' + articleName;&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*gar\/link\s*[\|\}][^\}]*\}\}/i))) {&lt;br /&gt;
            assess.extra.push('gar');&lt;br /&gt;
            tempMatch = assess.reg[0].match(/\|\s*GARpage\s*=\s*(\d+).*\|/i);&lt;br /&gt;
            if (tempMatch)&lt;br /&gt;
                assess.pageLink[0] = this.getGARLink(this.encodePageName(mw.config.get('wgPageName')), tempMatch[1]);&lt;br /&gt;
        }&lt;br /&gt;
        // Former statuses (FFA, FFL, or DGA)&lt;br /&gt;
        if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*ffa\b/i))) {&lt;br /&gt;
            tempMatch = text.match(/\|\s*action(\d+)\s*=\s*far\b/gi);&lt;br /&gt;
            actionNumber = tempMatch[tempMatch.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('ffa');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*action(\d+)\s*=\s*far\b/gi))&lt;br /&gt;
                // This checks if the last FAR entry in ArticleHistory resulted in removal.&lt;br /&gt;
                &amp;amp;&amp;amp; text.match(RegExp(&lt;br /&gt;
                    '\\|\\s*action' + assess.reg[assess.reg.length - 1].match(/\d+/)&lt;br /&gt;
                        + 'result\\s*=\\s*removed\\b', 'i'&lt;br /&gt;
                )) &amp;amp;&amp;amp; assess.rating.search(/f[al]/i) == -1) {&lt;br /&gt;
            actionNumber = assess.reg[assess.reg.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('ffa');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*formerfa2?\b/i))) {&lt;br /&gt;
            assess.extra.push('ffa');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*ffl\b/i))) {&lt;br /&gt;
            assess.extra.push('ffl');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*ffl\s*[\|\}]/i))) {&lt;br /&gt;
            assess.extra.push('ffl');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*dga\b/i))) {&lt;br /&gt;
            tempMatch = text.match(/\|\s*action(\d+)\s*=\s*gar\b/gi);&lt;br /&gt;
            actionNumber = tempMatch[tempMatch.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('dga');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*d(elisted)?ga\s*[\|\}]/i))) {&lt;br /&gt;
            assess.extra.push('dga');&lt;br /&gt;
        }&lt;br /&gt;
        // Former nominations (former FAC, FLC, or GAN)&lt;br /&gt;
        else if ((assess.reg = text.match(/\|\s*action(\d+)\s*=\s*fac\b/gi))&lt;br /&gt;
                &amp;amp;&amp;amp; assess.rating.search(/f[al]/i) == -1) {&lt;br /&gt;
            actionNumber = assess.reg[assess.reg.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('ffac');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*ffac\b/i))) {&lt;br /&gt;
            assess.extra.push('ffac');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*fac?(failed|(\-|[ _]\()?contested\)?)\s*[\|\}]/i))) {&lt;br /&gt;
            assess.extra.push('ffac');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*action(\d+)\s*=\s*flc\b/gi))&lt;br /&gt;
                &amp;amp;&amp;amp; assess.rating.search(/f[al]/i) == -1) {&lt;br /&gt;
            actionNumber = assess.reg[assess.reg.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('fflc');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*fflc\b/i))) {&lt;br /&gt;
            assess.extra.push('fflc');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*action(\d+)\s*=\s*gan\b/gi))&lt;br /&gt;
                &amp;amp;&amp;amp; assess.rating.search(/f[al]|(a\/)?ga/i) == -1) {&lt;br /&gt;
            actionNumber = assess.reg[assess.reg.length - 1].match(/\d+/);&lt;br /&gt;
            pageLinkFlag = true;&lt;br /&gt;
            assess.extra.push('fgan');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\|\s*currentstatus\s*=\s*fgan\b/i))) {&lt;br /&gt;
            assess.extra.push('fgan');&lt;br /&gt;
        } else if ((assess.reg = text.match(/\{\{\s*f(ailed ?)?ga\s*[\|\}]/i))) {&lt;br /&gt;
            assess.extra.push('fgan');&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Looks for currently active peer reviews&lt;br /&gt;
        var peerReview;&lt;br /&gt;
        if ((peerReview = text.match(/\{\{\s*peer[_ ]?review\s*\|\s*archive\s*=\s*(\d+)\b/i))) {&lt;br /&gt;
            assess.review = 'Wikipedia:Peer_review/' + mw.config.get('wgPageName') + '/archive'&lt;br /&gt;
                + peerReview[1];&lt;br /&gt;
            assess.activeReview = true;&lt;br /&gt;
        } else if (this.showOldPeerReviews) {&lt;br /&gt;
            // TODO: Add code for old peer reviews&lt;br /&gt;
        } else assess.review = null;&lt;br /&gt;
&lt;br /&gt;
        // Scans for the link associated with an action in ArticleHistory&lt;br /&gt;
        if (pageLinkFlag) {&lt;br /&gt;
            var linkPattern = RegExp('\\|\\s*action' + actionNumber + 'link\\s*=\\s*([^\\n\\|]+)\\s*\\|');&lt;br /&gt;
            var linkMatch = text.match(linkPattern);&lt;br /&gt;
            assess.pageLink[1] = linkMatch ? this.decodeEntities(linkMatch[1]) : null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        assess.exists = true;&lt;br /&gt;
        this.callHooks('getAssessment_after');&lt;br /&gt;
        return assess;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Parses an assessment object into the HTML and CSS code needed to update&lt;br /&gt;
     * the article header. If it doesn't recognize a part of the information&lt;br /&gt;
     * given, it will simply ignore it and mark as unassessed.&lt;br /&gt;
     * @param {Object} assess - assessment information for this article&lt;br /&gt;
     * @return {String} newClass - the CSS class corresponding to its assessment&lt;br /&gt;
     * @return {String} slogan - HTML giving (with a link) the main assessment&lt;br /&gt;
     * @return {String} info - HTML giving (with a link) additional information&lt;br /&gt;
     */&lt;br /&gt;
    talkAssess: function talkAssess (assess) {&lt;br /&gt;
        this.callHooks('talkAssess_before');&lt;br /&gt;
&lt;br /&gt;
        var path = mw.config.get('wgArticlePath').replace('$1', '');&lt;br /&gt;
        var assessLink = path + 'وپ:در';&lt;br /&gt;
        if (typeof assess.extra === 'undefined') assess.extra = '';&lt;br /&gt;
        var extra = assess.extra, rating = assess.rating;&lt;br /&gt;
        var pageLink = assess.pageLink ? [this.encodePageName(assess.pageLink[0]),&lt;br /&gt;
            this.encodePageName(assess.pageLink[1])] : [null, null];&lt;br /&gt;
        var peerReview = this.encodePageName(assess.review);&lt;br /&gt;
&lt;br /&gt;
        var info = this.getExtraInfo(extra, pageLink);&lt;br /&gt;
        var peerReviewText = this.addPeerReview(peerReview, assess.activeReview);&lt;br /&gt;
        if (peerReviewText)&lt;br /&gt;
            info.push(peerReviewText);&lt;br /&gt;
        var newClass, slogan;&lt;br /&gt;
&lt;br /&gt;
        if (rating == 'a' || rating == 'a/ga') {&lt;br /&gt;
            newClass = 'assess-a-text';&lt;br /&gt;
            slogan = 'An &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;A-class&amp;lt;/a&amp;gt; article';&lt;br /&gt;
            if (rating == 'a/ga') {&lt;br /&gt;
                info.push('Also a &amp;lt;a href=&amp;quot;' + path + 'Wikipedia:Good_Articles&amp;quot;&amp;gt;good article&amp;lt;/a&amp;gt;.');&lt;br /&gt;
            }&lt;br /&gt;
        } else if (rating == 'ga') {&lt;br /&gt;
            newClass = 'assess-ga-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'وپ:نخ&amp;quot;&amp;gt;مقاله خوب&amp;lt;/a&amp;gt;'&lt;br /&gt;
        } else if (rating == 'b') {&lt;br /&gt;
            newClass = 'assess-b-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;متوسط &amp;lt;a/&amp;gt;';&lt;br /&gt;
        } else if (rating == 'bplus') {&lt;br /&gt;
            newClass = 'assess-bplus-text';&lt;br /&gt;
            slogan = 'A &amp;lt;a href=&amp;quot;' + path + 'Wikipedia:WikiProject_Mathematics/Wikipedia_1.0'&lt;br /&gt;
                + '/Grading_scheme&amp;quot;&amp;gt;B-plus-class&amp;lt;/a&amp;gt; article';&lt;br /&gt;
        } else if (rating == 'c') {&lt;br /&gt;
            newClass = 'assess-c-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;ضعیف&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'start') {&lt;br /&gt;
            newClass = 'assess-start-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;ابتدایی&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'stub') {&lt;br /&gt;
            newClass = 'assess-stub-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;خرد&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'sl') {&lt;br /&gt;
            newClass = 'assess-sl-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;خرد&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'list') {&lt;br /&gt;
            newClass = 'assess-list-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'Wikipedia:Lists&amp;quot;&amp;gt;فهرست&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'dab') {&lt;br /&gt;
            newClass = 'assess-dab-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'وپ:ابهام&amp;quot;&amp;gt;صفحه ابهام زدایی&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'setindex') {&lt;br /&gt;
            newClass = 'assess-setindex-text';&lt;br /&gt;
            slogan = 'A &amp;lt;a href=&amp;quot;' + path + 'Wikipedia:Disambiguation#Set_index_articles&amp;quot;&amp;gt;'&lt;br /&gt;
                + 'set index article&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'redir') {&lt;br /&gt;
            newClass = 'assess-redir-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'راهنما:تغییرمسیر&amp;quot;&amp;gt;صفحه تغییرمسیر&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'fl') {&lt;br /&gt;
            newClass = 'assess-fl-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'وپ:فب&amp;quot;&amp;gt;فهرست برگزیده&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'fa') {&lt;br /&gt;
            newClass = 'assess-fa-text';&lt;br /&gt;
            slogan = 'یک &amp;lt;a href=&amp;quot;' + path + 'وپ:مب&amp;quot;&amp;gt;مقاله برگزیده&amp;lt;/a&amp;gt;';&lt;br /&gt;
        } else if (rating == 'cur') {&lt;br /&gt;
            newClass = 'assess-cur-text';&lt;br /&gt;
            slogan = 'A &amp;lt;a href=&amp;quot;' + path + 'Portal:Current_events&amp;quot;&amp;gt;current-class&amp;lt;/a&amp;gt; article';&lt;br /&gt;
        } else if (rating == 'future') {&lt;br /&gt;
            newClass = 'assess-future-text';&lt;br /&gt;
            slogan = 'A &amp;lt;a href=&amp;quot;' + path + 'Category:Future-Class_articles&amp;quot;&amp;gt;future-class&amp;lt;/a&amp;gt;'&lt;br /&gt;
                + ' article';&lt;br /&gt;
        } else {&lt;br /&gt;
            newClass = 'assess-unassessed-text';&lt;br /&gt;
            slogan = 'یک مقاله &amp;lt;a href=&amp;quot;' + assessLink + '&amp;quot;&amp;gt;درجه‌بندی‌نشده&amp;lt;/a&amp;gt;';&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        this.callHooks('talkAssess_after');&lt;br /&gt;
        return {newClass: newClass, slogan: slogan, info: info};&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Creates an info string based on the assessment info and a page link.&lt;br /&gt;
     */&lt;br /&gt;
    getExtraInfo: function getExtraInfo (extra, pageLink) {&lt;br /&gt;
        var info = [];&lt;br /&gt;
        var page = this.encodePageName(mw.config.get('wgPageName'));&lt;br /&gt;
        // Current nominations and reviews&lt;br /&gt;
        if (extra.indexOf('fac') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_article_candidates/'&lt;br /&gt;
                + page, 'featured article candidate', null));&lt;br /&gt;
        } else if (extra.indexOf('flc') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_list_candidates/'&lt;br /&gt;
                + page, 'featured list candidate', null));&lt;br /&gt;
        } else if (extra.indexOf('gan') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('Currently a', pageLink[0], 'Wikipedia:Good_article_nominations',&lt;br /&gt;
                'good article nominee', null));&lt;br /&gt;
        } else if (extra.indexOf('far') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('Currently undergoing', pageLink[0], 'Wikipedia:Featured_article_review/'&lt;br /&gt;
                + page, 'review', 'of its featured status'));&lt;br /&gt;
        } else if (extra.indexOf('flrc') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('Currently a', pageLink[0], 'Wikipedia:Featured_list_removal_candidates/'&lt;br /&gt;
                + page, 'candidate', 'for removal as a featured list'));&lt;br /&gt;
        } else if (extra.indexOf('gar') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('&amp;lt;span id=&amp;quot;assess-gar-link&amp;quot;&amp;gt;Currently undergoing a', pageLink[0],&lt;br /&gt;
                'Wikipedia:Good_article_reassessment', 'good article reassessment', '&amp;lt;\/span&amp;gt;', true));&lt;br /&gt;
        }&lt;br /&gt;
        // Past statuses and nominations&lt;br /&gt;
        if (extra.indexOf('ffa') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A', pageLink[1], 'Wikipedia:Featured_article_review/' + page,&lt;br /&gt;
                'former', 'featured article'));&lt;br /&gt;
        } else if (extra.indexOf('ffl') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A', pageLink[1], 'Wikipedia:Featured_list_removal_candidates/'&lt;br /&gt;
                + page, 'former', 'featured list'));&lt;br /&gt;
        } else if (extra.indexOf('dga') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A', pageLink[1], 'Wikipedia:Good_article_reassessment',&lt;br /&gt;
                'delisted', 'good article'));&lt;br /&gt;
        } else if (extra.indexOf('ffac') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A former', pageLink[1], 'Wikipedia:Featured_article_candidates/'&lt;br /&gt;
                + page, 'featured article candidate', null));&lt;br /&gt;
        } else if (extra.indexOf('fflc') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A former', pageLink[1], 'Wikipedia:Featured_list_candidates/'&lt;br /&gt;
                + page, 'featured list candidate', null));&lt;br /&gt;
        } else if (extra.indexOf('fgan') != -1) {&lt;br /&gt;
            info.push(this.makeInfoString('A former', pageLink[1], 'Wikipedia:Good_article_nominations',&lt;br /&gt;
                'good article nominee', null));&lt;br /&gt;
        }&lt;br /&gt;
        return info;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Get the correct link for Good Article reassessments. These things require an&lt;br /&gt;
     * additional AJAX request to determine whether it's a community or individual&lt;br /&gt;
     * reassessment. The trick is to assume it's a community reassessment, then&lt;br /&gt;
     * switch the link once the request returns if it's actually not.&lt;br /&gt;
     */&lt;br /&gt;
    getGARLink: function getGARLink (articleName, reviewNumber) {&lt;br /&gt;
        var communityTitle = 'Wikipedia:Good_article_reassessment\/' + articleName + '\/' + reviewNumber,&lt;br /&gt;
            individualTitle = 'Talk:' + articleName + '\/GA' + reviewNumber,&lt;br /&gt;
            url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '\/api.php?action=query&amp;amp;titles='&lt;br /&gt;
                + communityTitle + '|' + individualTitle + '&amp;amp;prop=info&amp;amp;format=json';&lt;br /&gt;
        this.ajaxMain(url, this.getGARLinkCallback, [communityTitle, individualTitle]);&lt;br /&gt;
        return communityTitle;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Now we have the information back from the API and need to figure out if the&lt;br /&gt;
     * link needs to be changed.&lt;br /&gt;
     */&lt;br /&gt;
    getGARLinkCallback: function getGARLinkCallback (request, altTitles) {&lt;br /&gt;
        if (request.readyState == 4 &amp;amp;&amp;amp; request.status == 200) {&lt;br /&gt;
            var text = request.responseText;&lt;br /&gt;
            if (JSON &amp;amp;&amp;amp; JSON.parse) {&lt;br /&gt;
                var query = JSON.parse(text)['query'];&lt;br /&gt;
            }&lt;br /&gt;
            else return;&lt;br /&gt;
            var communityTitleNorm = altTitles[0],&lt;br /&gt;
                individualTitleNorm = altTitles[1];&lt;br /&gt;
            var len = query['normalized'].length;&lt;br /&gt;
            for (var j = 0; j &amp;lt; len; j++) {&lt;br /&gt;
                switch (query['normalized'][j]['from']) {&lt;br /&gt;
                    case altTitles[0]:&lt;br /&gt;
                        communityTitleNorm = query['normalized'][j]['to'];&lt;br /&gt;
                        break;&lt;br /&gt;
                    case altTitles[1]:&lt;br /&gt;
                        individualTitleNorm = query['normalized'][j]['to'];&lt;br /&gt;
                        break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var noCommunityAssessment = false;&lt;br /&gt;
            for (var i = -1; i &amp;gt;= -2; i--) {&lt;br /&gt;
                if (query['pages'][i] &amp;amp;&amp;amp; typeof query['pages'][i]['missing'] === 'string') {&lt;br /&gt;
                    if (query['pages'][i]['title'] == individualTitleNorm) {&lt;br /&gt;
                        // No individual assessment, no need to change anything.&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    else if (query['pages'][i]['title'] == communityTitleNorm) {&lt;br /&gt;
                        // There's no community assessment, so flag it.&lt;br /&gt;
                        noCommunityAssessment = true;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
			var garLink = $('#assess-gar-link a:first');&lt;br /&gt;
			if (noCommunityAssessment &amp;amp;&amp;amp; garLink.length)&lt;br /&gt;
			{&lt;br /&gt;
				// There's an individual assessment but no community assessment. Switch the link.&lt;br /&gt;
				garLink.attr('href', mw.config.get('wgArticlePath').replace('$1', '') + altTitles[1]);&lt;br /&gt;
			}&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Creates the peer review text from an info string, if a peer review was detected earlier.&lt;br /&gt;
     */&lt;br /&gt;
    addPeerReview: function addPeerReview (peerReview, activeReview) {&lt;br /&gt;
        var reviewText = null, path = mw.config.get('wgArticlePath').replace('$1', '');&lt;br /&gt;
        if (peerReview) {&lt;br /&gt;
            reviewText = (activeReview&lt;br /&gt;
                ? 'Currently being &amp;lt;a href=&amp;quot;' + path + peerReview + '&amp;quot;&amp;gt;peer reviewed&amp;lt;/a&amp;gt;.'&lt;br /&gt;
                : 'Previously &amp;lt;a href=&amp;quot;' + path + peerReview + '&amp;quot;&amp;gt;peer reviewed&amp;lt;/a&amp;gt;.');&lt;br /&gt;
            reviewText = '&amp;lt;span class=&amp;quot;assess-info-review&amp;quot;&amp;gt;' + reviewText + '&amp;lt;/span&amp;gt;';&lt;br /&gt;
        }&lt;br /&gt;
        return reviewText;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Updates article header with new assessment information by giving it a new&lt;br /&gt;
     * class (for style information such as color) and altering the tagline below&lt;br /&gt;
     * it to state the assessment found.&lt;br /&gt;
     * @param {String} newClass - the CSS class name added to the article header&lt;br /&gt;
     * @param {String} slogan - italicized text prepended to the tagline, showing&lt;br /&gt;
     *        the article's main assessment&lt;br /&gt;
     * @param {String} info - additional assessment info appended to the tagline&lt;br /&gt;
     * @static&lt;br /&gt;
     */&lt;br /&gt;
    update: function update (newClass, slogan, info) {&lt;br /&gt;
		var firstHeading = $('h1:first');&lt;br /&gt;
		var siteSub = '&amp;lt;span class=&amp;quot;assess-article-rating&amp;quot;&amp;gt;' + slogan + '&amp;lt;\/span&amp;gt; از ویکی‌پدیا، دانشنامهٔ آزاد';&lt;br /&gt;
		if (info &amp;amp;&amp;amp; info.length &amp;gt; 0) siteSub += '&amp;lt;span class=&amp;quot;assess-info-all&amp;quot;&amp;gt;. ' + (typeof info.join === 'undefined' ? info.toString() : info.join(' ')) + '&amp;lt;\/span&amp;gt;';&lt;br /&gt;
		firstHeading.addClass((typeof newClass.join === 'undefined' ? newClass.toString() : newClass.join(' '))); // add newClass as additional class(es)&lt;br /&gt;
		$('#siteSub').html(siteSub);&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Creates a string formatted for the 'info' parameter in the update method.&lt;br /&gt;
     * @param start - text at the beginning of the string, before the link&lt;br /&gt;
     * @param pageLink - a link to the target page&lt;br /&gt;
     * @param defLink - the backup page link if !pageLink&lt;br /&gt;
     * @param linkText - the text of the link&lt;br /&gt;
     * @param end - text after the link&lt;br /&gt;
     * @return {String} output - the info string&lt;br /&gt;
     * @static&lt;br /&gt;
     */&lt;br /&gt;
    makeInfoString: function makeInfoString (start, pageLink, defLink, linkText, end, noEndSpace) {&lt;br /&gt;
        var output;&lt;br /&gt;
        var path = mw.config.get('wgArticlePath').replace('$1', '');&lt;br /&gt;
        var page = pageLink ? path + pageLink : (defLink ? path + defLink : null);&lt;br /&gt;
        start = start ? start.toString() + ' ' : '';&lt;br /&gt;
        linkText = linkText ? linkText.toString() : '';&lt;br /&gt;
        end = (end ? (noEndSpace ? '' : ' ') + end.toString() + '.' : '.');&lt;br /&gt;
        output = start + (page ? '&amp;lt;a href=&amp;quot;' + page + '&amp;quot;' + (linkText ? '&amp;gt;' : ' \/&amp;gt;') : '')&lt;br /&gt;
            + linkText + ((page &amp;amp;&amp;amp; linkText) ? '&amp;lt;\/a&amp;gt;' : '') + end;&lt;br /&gt;
        return output;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Encodes the URL of a Wikipedia page for use in the talkAssess method.&lt;br /&gt;
     * @param {String} inputText - the unencoded full page name&lt;br /&gt;
     * @return {String} outputText - the encoded page name&lt;br /&gt;
     * @static&lt;br /&gt;
     */&lt;br /&gt;
    encodePageName: function encodePageName (inputText) {&lt;br /&gt;
        if (!inputText) return null;&lt;br /&gt;
        var outputText = encodeURIComponent(inputText);&lt;br /&gt;
        while (outputText != null &amp;amp;&amp;amp; outputText.match(/(\%20|\%2F|\%253A)/i)) {&lt;br /&gt;
            outputText = outputText.replace(/\%20/i, '_'); // unescape spaces for readability&lt;br /&gt;
            outputText = outputText.replace(/\%2F/i, '\/'); // %2F must be unescaped&lt;br /&gt;
			outputText = outputText.replace(/\%253A/i, ':'); // &amp;quot;%253A&amp;quot; for special cases such as [[Metroid: Other M]]&lt;br /&gt;
        }&lt;br /&gt;
        return outputText;&lt;br /&gt;
    },&lt;br /&gt;
    callHooks: function callHooks (hook) {&lt;br /&gt;
        for (funct in this[hook]) {&lt;br /&gt;
            this[hook][funct].call(this);&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    addHook: function addHook (hook, funct) {&lt;br /&gt;
        if (typeof this[hook] === 'undefined')&lt;br /&gt;
            this[hook] = [];&lt;br /&gt;
        this[hook][this[hook].length] = funct;&lt;br /&gt;
        return this;&lt;br /&gt;
    },&lt;br /&gt;
    /**&lt;br /&gt;
     * Decodes all HTML entities in the string provided.&lt;br /&gt;
     */&lt;br /&gt;
    decodeEntities: function decodeEntities (str) {&lt;br /&gt;
        var t = document.createElement(&amp;quot;textarea&amp;quot;);&lt;br /&gt;
        t.innerHTML = str;&lt;br /&gt;
        return t.value;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Implement Array.indexOf for older browsers that don't have it&lt;br /&gt;
if (!Array.prototype.indexOf) {&lt;br /&gt;
    Array.prototype.indexOf = function indexOf (elt, from) {&lt;br /&gt;
        var len = this.length &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        var from = Number(arguments[1]) || 0;&lt;br /&gt;
        from = (from &amp;lt; 0) ? Math.ceil(from) : Math.floor(from);&lt;br /&gt;
        if (from &amp;lt; 0)&lt;br /&gt;
            from += len;&lt;br /&gt;
        for (; from &amp;lt; len; from++) {&lt;br /&gt;
            if (from in this &amp;amp;&amp;amp; this[from] === elt)&lt;br /&gt;
                return from;&lt;br /&gt;
        }&lt;br /&gt;
        return -1;&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Initializes the script on page load&lt;br /&gt;
 */&lt;br /&gt;
if (mw.config.get('wgNamespaceNumber') == 0 &amp;amp;&amp;amp; (mw.config.get('wgAction') == 'view' || mw.config.get('wgAction') == 'purge') &amp;amp;&amp;amp; !mw.util.getParamValue('printable') &amp;amp;&amp;amp; mw.config.get('wgPageName') != 'Main_Page' )&lt;br /&gt;
{&lt;br /&gt;
	$(document).ready(function()&lt;br /&gt;
	{&lt;br /&gt;
		assessment.init();&lt;br /&gt;
	});&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>