<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://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-watchlist.js</id>
	<title>ميدياويكي:Gadget-watchlist.js - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://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-watchlist.js"/>
	<link rel="alternate" type="text/html" href="https://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-watchlist.js&amp;action=history"/>
	<updated>2026-04-10T05:35:15Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://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-watchlist.js&amp;diff=8760&amp;oldid=prev</id>
		<title>Gerges: مراجعة واحدة</title>
		<link rel="alternate" type="text/html" href="https://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-watchlist.js&amp;diff=8760&amp;oldid=prev"/>
		<updated>2021-03-19T01:08:28Z</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;//[[en:User:Js/watchlist.js]]&lt;br /&gt;
&lt;br /&gt;
function WLScript(){&lt;br /&gt;
&lt;br /&gt;
var whenPageLoaded = +(new Date()) - 20000; //add 20 sec just in case&lt;br /&gt;
&lt;br /&gt;
var mainTab, hideInterfaceCSS;&lt;br /&gt;
var alreadySorted, alreadyAddedUnwatch;&lt;br /&gt;
&lt;br /&gt;
mw.util.addCSS('\&lt;br /&gt;
a.failure {color:red}\&lt;br /&gt;
a.unwatched {text-decoration: line-through}\&lt;br /&gt;
');&lt;br /&gt;
&lt;br /&gt;
//arwiki&lt;br /&gt;
var mm = &lt;br /&gt;
{sortTip:'ترتيب الصفحات بحسب العدد الزوج الدال على نطاقها وبحسب عنوانها'&lt;br /&gt;
,sortDone:'صفحات القائمة مرتبة'&lt;br /&gt;
,unwatchTip:'جعل علامة [أزل] لإيقاف المراقبة'&lt;br /&gt;
,unwatchDone:'إيقاف المراقبة'&lt;br /&gt;
,onlynew:'الجديدة فقط'&lt;br /&gt;
,onlynewTip:'إظهار ما وقع من تغيير بعد آخر تحميل للقائمة'&lt;br /&gt;
,expandAll:'عرض التفاصيل'&lt;br /&gt;
,fullPage:'إظهار الواجهة وإخفاؤها'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//enhanced RC: make [أزل] appear by clicking on timestamp&lt;br /&gt;
var isEnhanced = mw.util.$content.find('ul.special').length == 0;&lt;br /&gt;
if( isEnhanced ) mw.util.$content.click(toggleXLink);&lt;br /&gt;
&lt;br /&gt;
//find insertion points for links:  after &amp;quot;days all&amp;quot;&lt;br /&gt;
var linksAt = $('#mw-watchlist-options').find('a[href*=&amp;quot;&amp;amp;days=7&amp;quot;]').eq(0).next().next();&lt;br /&gt;
if( !linksAt.length ) linksAt = $('#mw-watchlist-options').find('hr:last');&lt;br /&gt;
//find &amp;quot;Special&amp;quot; tab&lt;br /&gt;
mainTab = $('#ca-special, #ca-nstab-special').eq(0);&lt;br /&gt;
&lt;br /&gt;
//&amp;quot;only new&amp;quot; link and tab&lt;br /&gt;
addLnk(mm.onlynew, mm.onlynewTip).mousedown(onlyNewEntries).attr('id', 'listSince');&lt;br /&gt;
addTab(mm.onlynew, mm.onlynewTip).mousedown(onlyNewEntries);&lt;br /&gt;
&lt;br /&gt;
//&amp;quot;unwatch&amp;quot; link(s)&lt;br /&gt;
if( window.unwatchLinksOnLoad ) addXLinks();&lt;br /&gt;
else addLnk('إزالة' , mm.unwatchTip).click(addXLinks);&lt;br /&gt;
&lt;br /&gt;
//&amp;quot;sort&amp;quot; link&lt;br /&gt;
addLnk('رتب', mm.sortTip).click(sortWatchlist);&lt;br /&gt;
&lt;br /&gt;
//&amp;quot;expand all&amp;quot; link&lt;br /&gt;
if( $('#mw-rc-openarrow-0').length )&lt;br /&gt;
  addLnk('أظهر', mm.expandAll).click(expandMultipleEdits);&lt;br /&gt;
&lt;br /&gt;
//&amp;quot;hideInterface&amp;quot; tab&lt;br /&gt;
addTab('واجهة',mm.fullPage).click(hideInterface).attr('href','#');&lt;br /&gt;
if( document.cookie.indexOf('wlmax=1') != -1 )&lt;br /&gt;
  hideInterface();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function addLnk(txt, tip){&lt;br /&gt;
  linksAt.before(' | ');&lt;br /&gt;
  return $('&amp;lt;a href=# title=&amp;quot;'+tip+'&amp;quot; style=&amp;quot;font-weight:bold&amp;quot;&amp;gt;'+txt+'&amp;lt;/a&amp;gt;').insertBefore(linksAt);&lt;br /&gt;
}&lt;br /&gt;
function addTab(txt, tip){&lt;br /&gt;
  if( window.wlNoTabs ) return;&lt;br /&gt;
  var tab = mainTab.clone(true).removeClass('selected').attr('id','');&lt;br /&gt;
  tab.find('a').text(txt).attr('title', tip).attr('accesskey','');&lt;br /&gt;
  return tab.appendTo(mainTab.parent());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function onlyNewEntries(e) {&lt;br /&gt;
 var url = window.location.href.split('#')[0];&lt;br /&gt;
 var days = ( +(new Date()) - whenPageLoaded)/(1000 * 3600 * 24);&lt;br /&gt;
 e.target.href = /[?&amp;amp;]days=/.test(url)&lt;br /&gt;
  ? url.replace(/([?&amp;amp;]days=)[^&amp;amp;]*/, '$1'+days)&lt;br /&gt;
  : url + (url.indexOf('?') &amp;lt; 0 ? '?':'&amp;amp;') + 'days=' + days;&lt;br /&gt;
 return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function sortWatchlist(e){&lt;br /&gt;
 e.preventDefault();&lt;br /&gt;
 if( alreadySorted ) return alert(mm.sortDone);&lt;br /&gt;
 mw.util.$content.find('h4').each(function(i, H4){ //sort all days separately&lt;br /&gt;
   sortDay($(H4).next('div, ul'));&lt;br /&gt;
 });&lt;br /&gt;
 alreadySorted = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function sortDay(dayDiv){&lt;br /&gt;
 var i, pgname, rowElem, hiddenDiv, rows = dayDiv.find('a[href*=&amp;quot;&amp;amp;action=history&amp;quot;]');&lt;br /&gt;
 for (i = 0; i &amp;lt; rows.length; i++){&lt;br /&gt;
   pgname = getLinkTitle(rows[i]);&lt;br /&gt;
   ns = getTitleNamespace(pgname);&lt;br /&gt;
   if( ns&amp;gt;0 ) pgname = pgname.replace(/^.+?:/,''); //remove prefix&lt;br /&gt;
   if( ns%2 ) ns--; //sort talk page as if it was a base page&lt;br /&gt;
   rows[i].sortkey = zzz(ns) + ':' + pgname; //assign custom tag attribute: namespace+title&lt;br /&gt;
 }&lt;br /&gt;
 //sort rows array&lt;br /&gt;
 rows.sort(function(a,b){&lt;br /&gt;
   if( a.sortkey &amp;gt; b.sortkey ) return 1;&lt;br /&gt;
   else if( a.sortkey &amp;lt; b.sortkey ) return -1;&lt;br /&gt;
   else return 0;&lt;br /&gt;
 });&lt;br /&gt;
 //sort rows in HTML, by moving all to the bottom&lt;br /&gt;
 if( isEnhanced )&lt;br /&gt;
   for (i=0; i&amp;lt;rows.length; i++){&lt;br /&gt;
     rowElem = rows.eq(i).closest('table');&lt;br /&gt;
     hiddenDiv = rowElem.next('div');&lt;br /&gt;
     dayDiv.append(rowElem, hiddenDiv);&lt;br /&gt;
   }&lt;br /&gt;
 else&lt;br /&gt;
   for (i=0; i&amp;lt;rows.length; i++){&lt;br /&gt;
     rowElem = rows.eq(i).closest('li');&lt;br /&gt;
     dayDiv.append(rowElem);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function expandMultipleEdits(e){&lt;br /&gt;
 e.preventDefault();&lt;br /&gt;
 var i = 0, sp, state = $('#mw-rc-openarrow-0')[0].style.display;&lt;br /&gt;
 sp=document.getElementById('mw-rc-openarrow-'+(i++).toString());&lt;br /&gt;
 while( sp )&lt;br /&gt;
   if( sp.style.display == state ) $(sp.firstChild).click();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function addXLinks(e){&lt;br /&gt;
 if( e ) e.preventDefault();&lt;br /&gt;
 if( alreadyAddedUnwatch ) return alert(mm.unwatchDone);&lt;br /&gt;
 mw.util.$content.find('a[href*=&amp;quot;&amp;amp;action=history&amp;quot;]')&lt;br /&gt;
 .each( function(i, lnk){ addXLink( $(lnk) ) } );&lt;br /&gt;
 alreadyAddedUnwatch = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addXLink(histLink){ //create and append [أزل] link to the row with histLink&lt;br /&gt;
  var xLnk = $('&amp;lt;a class=aj-unwatch style=&amp;quot;font-size:smaller&amp;quot; href=&amp;quot;'&lt;br /&gt;
            + histLink.attr('href').replace(/&amp;amp;curid=\d+/,'') + '&amp;quot; /&amp;gt;')&lt;br /&gt;
          .click(ajaxUnwatch);&lt;br /&gt;
  if( isEnhanced ) histLink.parent().prepend( xLnk.text('[أزل]'), ' ' );&lt;br /&gt;
  else histLink.after( ' | ', xLnk.text('x') );&lt;br /&gt;
  updateXLink(xLnk);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function updateXLink(xLnk, state){ //change title and url of [أزل] link&lt;br /&gt;
  if( !xLnk.length ) return;&lt;br /&gt;
  state = state ? 'watch' : 'unwatch';&lt;br /&gt;
  xLnk.attr( 'title', mw.msg(state) )&lt;br /&gt;
      .attr( 'href', xLnk.attr('href').replace(/&amp;amp;action=\w+/, '&amp;amp;action='+ state) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function toggleXLink(e){ //add [أزل] when clicking on timestamp&lt;br /&gt;
   if( ! $(e.target).filter('td.mw-enhanced-rc').length ) return;&lt;br /&gt;
   var tbl = $(e.target).parents('table.mw-enhanced-rc');&lt;br /&gt;
   var x = tbl.find('a.aj-unwatch');&lt;br /&gt;
   if( x.length ) x.remove();&lt;br /&gt;
   else addXLink(tbl.find('a[href*=&amp;quot;&amp;amp;action=history&amp;quot;]'));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function ajaxUnwatch(e) {&lt;br /&gt;
 var xLnk = $(this), errMsg = '';&lt;br /&gt;
 var req = { action: 'watch', format: 'json', title: getLinkTitle(xLnk),&lt;br /&gt;
             token: mw.user.options.get('watchToken') };&lt;br /&gt;
 if( /&amp;amp;action=unwatch/.test(xLnk.attr('href')) ) req.unwatch = '';&lt;br /&gt;
 $.ajax({ &lt;br /&gt;
   type:'POST', dataType: 'json', &lt;br /&gt;
   url: mw.util.wikiScript( 'api' ),&lt;br /&gt;
   data: req,&lt;br /&gt;
   timeout: 5000,&lt;br /&gt;
   success: function(resp){&lt;br /&gt;
     if( resp.error ) errMsg = resp.error.info;&lt;br /&gt;
     else if( !resp.watch ) errMsg = 'empty response';&lt;br /&gt;
     else if( typeof resp.watch.unwatched === 'string') unwatchSuccess( req.title, true )&lt;br /&gt;
     else if( typeof resp.watch.watched   === 'string') unwatchSuccess( req.title, false )&lt;br /&gt;
     else errMsg = 'unrecognized response'&lt;br /&gt;
   },&lt;br /&gt;
   error: function(xhr, status, err) {&lt;br /&gt;
     errMsg = status + ':' + err&lt;br /&gt;
   },&lt;br /&gt;
   complete: function(){ //update X link&lt;br /&gt;
     if( errMsg ) xLnk.attr( 'title', 'API error: ' + errMsg ).addClass('failure')&lt;br /&gt;
     else xLnk.removeClass('failure')&lt;br /&gt;
   }&lt;br /&gt;
 })&lt;br /&gt;
 return false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function unwatchSuccess(name, isUnwatched) {&lt;br /&gt;
  //find full name of associated talk page (or vice versa)&lt;br /&gt;
  var ns = getTitleNamespace(name)&lt;br /&gt;
  var name2 = name&lt;br /&gt;
  if( ns &amp;gt; 0 ) name2 = name2.replace(/^.+?:/,'') //remove old prefix&lt;br /&gt;
  if( ns % 2 )  ns--; else ns++ //switch to  &amp;quot;other&amp;quot; namespace&lt;br /&gt;
  if( ns &amp;gt; 0 ) name2 = mw.config.get('wgFormattedNamespaces')[ns] + ':' +  name2 //add new prefix&lt;br /&gt;
  //mark all rows that are either name or name2&lt;br /&gt;
  mw.util.$content.find('a[href*=&amp;quot;&amp;amp;action=history&amp;quot;]').each(function(){&lt;br /&gt;
    var ttl = getLinkTitle(this)&lt;br /&gt;
    if( ttl != name &amp;amp;&amp;amp; ttl != name2 ) return&lt;br /&gt;
    var row = $(this).parent()&lt;br /&gt;
    zthis = this&lt;br /&gt;
    row.children('a[href^=&amp;quot;/wiki&amp;quot;]:first').toggleClass('unwatched', isUnwatched)&lt;br /&gt;
    updateXLink( row.children('a.aj-unwatch'), isUnwatched )&lt;br /&gt;
       &lt;br /&gt;
  })&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function hideInterface(e){&lt;br /&gt;
&lt;br /&gt;
 if( e ) e.preventDefault()&lt;br /&gt;
&lt;br /&gt;
 if (!hideInterfaceCSS)  hideInterfaceCSS = mw.util.addCSS('\&lt;br /&gt;
 div#siteNotice, h1#firstHeading, #siteSub, #contentSub, fieldset#mw-watchlist-options,\&lt;br /&gt;
 div.mw-rc-label-legend, #mw-fr-watchlist-pending-notice {display:none}')&lt;br /&gt;
 else hideInterfaceCSS.disabled = !hideInterfaceCSS.disabled&lt;br /&gt;
&lt;br /&gt;
 document.cookie = 'wlmax=' + (!hideInterfaceCSS.disabled ? '1' : '0;expires=' + (new Date()).toGMTString() + ';;')&lt;br /&gt;
&lt;br /&gt;
 var a = mainTab.find('a') //replace &amp;quot;Special&amp;quot; tab text with &amp;quot;Watchlist&amp;quot;&lt;br /&gt;
 if( hideInterfaceCSS.disabled ){ //restore&lt;br /&gt;
     a.text( a.attr('oldtext') )&lt;br /&gt;
 }else{//set to &amp;quot;watchlist&amp;quot;&lt;br /&gt;
   a.attr('oldtext', a.text())&lt;br /&gt;
   a.text($('h1#firstHeading').text())&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function getTitleNamespace(title){ //returns namespace number&lt;br /&gt;
 var prefix = /^(.+?):/.exec(title)&lt;br /&gt;
 if( !prefix ) return 0 //no prefix means article&lt;br /&gt;
 return mw.config.get('wgNamespaceIds')[ prefix[1].toLowerCase().replace(/ /g,'_') ] || 0&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
function getLinkTitle (lnk){ //gets 'title=' part from a link&lt;br /&gt;
  var ma = /(&amp;amp;|\?)title=([^&amp;amp;]+)/.exec( $(lnk).attr('href') )&lt;br /&gt;
  if( ma ) return decodeURIComponent(ma[2]).replace(/_/g,' ')&lt;br /&gt;
  else return ''&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function zzz(s){ // 5 -&amp;gt; 005&lt;br /&gt;
 s = s.toString()&lt;br /&gt;
 if( s.length==1 ) return '00'+s&lt;br /&gt;
 else if( s.length==2 ) return '0'+s&lt;br /&gt;
 else return s&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if( mw.config.get('wgCanonicalSpecialPageName') == 'Watchlist' &amp;amp;&amp;amp; mw.config.get('wgAction') == 'view' ) $(WLScript)&lt;/div&gt;</summary>
		<author><name>Gerges</name></author>
	</entry>
</feed>