MediaWiki:Script/Newpages.js

ХӀара гӀирс Википеди чуьра бу — маьрша энциклопеди

Билгалдаккхар: Ӏалашйинчул тӀаьхьа хийцамаш га браузеран кэш цӀанйан йезаш хила мега.

  • Firefox / Safari: Shift тӀетаӀийна йитина, гӀирсийн панелан тӀера тӀетаӀайе Карлайаккха йа Ctrl+F5 йа Ctrl+R (⌘+R Mac тӀехь)
  • Google Chrome: тӀетаӀайе Ctrl+Shift+R (⌘+Shift+R Mac тӀехь)
  • Internet Explorer / Edge: тӀетаӀийна йитина Ctrl, тӀетаӀайе Карлайаккха йа тӀетаӀайе Ctrl+F5
  • Opera: тӀетаӀайе Ctrl+F5.
var newPages = new function(){

var msg =
{legend:'New pages'
,info:'Pages: $1. <span id=update>Update</span>'
,next:'Request 50 next (200 | 500)'
,showlogs:'Display previous deletions'
,nsall:'all'
,ns0:'(articles)'
}

if( wgUserLanguage == 'ce' ) msg =
{legend:'Дукху хан йоцуш кхоьллина агӀонаш'
,info:'Гайта агӀонаш: $1. <span id=update>Карлайаккха</span>'
,next:'Гайта 50 хӀорш (200 | 500)'
,'Show only':'Гайта бен'
,patrolled:'муха йу хьаьжнарш'
,anon:'IP нисдарш'
,redirect:'дӀасахьажор'
,showlogs:'Гайта хьалхо дӀайаьхнарш'
,nsall:'массо'
,ns0:'(агӀонаш)'
}

function mm(txt){ return msg[txt] || txt }


//VARs
var pagesTotal, lastUpdated, isDisplayLogs
var apiNextRC, apiTopRC, apiLog // for simpleQuery




this.start = function (){ //create interface

mw.util.addCSS('\
#output {font-size:88%}\
span.more {color:#0645AD; cursor:pointer}\
#result tr {background-color:white}\
#result tr.viewed td.timestamp {background-color: #ddd}\
span.page-quote {font-size: 90%}\
td.timestamp, td.newlen {text-align:right; font-size:90%}\
tr.patrolled td.title {background:#eaffea}\
td.redirect a {font-style:italic; color:gray}\
.show {opacity:0.4}\
.checked {opacity:1}\
')

$(document.body).children().hide()

var nsOptions = '<option>' + mm('nsall') + '</option>'
  + '<option value=0 selected>'+ mm('ns0') + '</option>'
for (var i in mw.config.get('wgFormattedNamespaces')){
  if (i <= 0) continue
  nsOptions += '<option value=' + i + '>' + mw.config.get('wgFormattedNamespaces')[i] + '</option>'
}

 $('<div id=output>\
<div id=messages />\
<fieldset id=dialog><legend>'+mm('legend')+'</legend>\
<form style="display:inline">'
+mm('Show only')
+ ': <select id=namespace>' + nsOptions + '</select>'
+ chooseShow ('anon')
+ chooseShow ('patrolled')
+ chooseShow ('redirect')
+'</form> \
<input type=button id=go value=↓>\
<br /><hr />\
<input type=checkbox id=logs /><label for=logs>' + mm('showlogs') + '</label>\
</fieldset>\
<div id=header />\
<div id=results />\
<div id=js-footer />\
</div>')
.appendTo(document.body)


var chboxes =  $('#dialog').find('input.show')
.click( function(e){ //loop value between '', 'anon', '!anon'
   var ch = $(this), lbl = ch.next(), txt = lbl.attr('title')
   if ( /^!/.test( ch.val() ) )
	  ch.val('')
   else if ( ch.val() ){
	  ch.val( '!' + ch.attr('name') )
	  txt = '<s>' + txt + '</s>'
   }else
     ch.val( ch.attr('name') )
  ch.attr('checked', ch.val() ). toggleClass( 'checked', ch.attr('checked') )
  lbl.html( txt ).toggleClass( 'checked', ch.attr('checked') )
})



$('#go').click( function(){ //prepare RC request parameters
  var sh = ['!bot']
  chboxes.filter(':checked').each (function(){
     sh.push( $(this).val() )
  })
  isDisplayLogs = $('#logs').attr('checked')
  firstRequest( { show: sh.join('|'), namespace: $('#namespace').val() }  )
})


function chooseShow(param){ // 3-way checkbox
 return '<input type=checkbox value="" class=show id=' + param + ' name=' + param + '>'
 + '<label class=show for=' + param + ' title="' + mm(param) + '">' + mm(param) + '</label>'
}


}//start





function firstRequest( rcParams ){

 //default RC parameters
 rcParams = $.extend(
 {type: 'new'
 ,prop: 'user|parsedcomment|flags|timestamp|title|ids|sizes|redirect|patrolled'
 },
 rcParams)

 //define RC queries
 apiNextRC = new apl.simpleQuery( 'rc', rcParams, displayPages )
 apiTopRC = new apl.simpleQuery( 'rc', rcParams, displayPages )

 //query for requesting logs
 apiLog = new  apl.simpleQuery(
  'le',
  { type:'delete', limit:10, prop: 'ids|user|timestamp|details|parsedcomment' },
  displayLogs
 )

 //initialize and do first request
 pagesTotal = 0
 lastUpdated = ''
 $('#result').remove()
 requestNextRC(10)
}



function requestNextRC( N ){
 //spinner2('#dialog form')
 //displayPages( simulate_newpages() )
 apl.spinner('#header')
 if (typeof N != 'number') N = parseInt( $(this).text() ) //when called as onclick event
 apiNextRC.call( N )
}



function requestTopRC(){
  apl.spinner('#header')
  apiTopRC.call ( { start:'', end: lastUpdated, limit:100 } )
}



function displayPages(pages){

 apl.spinner()
 zpages = pages

 //old rows: mark as viewed and update time
 $('#result').find('tr').addClass('viewed')
 .find('td.timestamp').each( function(){
   $(this).find('span:last').html(
      apl.output( $(this).find('span.sort').text(), 'timestamp')
    )
 })

 //check if we have new results
 if (pages.length == 0){
   $('#results').html('No results')
   return
 }


 //create table if needed
 if ( ! $('#result').length ) {
  var addTH = function(tip, ico){
    return '<th title="' + tip + '">' + (ico ? apl.icon(ico, 15) : '') + '</th>'
  }
  $('#results').html('<table class=wikitable id=result><tr>'
   + addTH('Time ago: hh:mm or dd,hh', '2/26/Clock_simple.svg')
   + addTH('User', '1/12/User_icon_2.svg')
   + addTH('Page', '8/8a/Icons-mini-page_new.gif')
   + addTH('Size')
   + addTH('Comment')
   + (isDisplayLogs
     ? addTH('Previous deletions', '9/9a/Fairytale_Trash_Question.svg')
	 : '' )
   + '</tr></table>')
  ts_makeSortable($('#result')[0])
 }

 //update "last updated"
 var isTop
 if ( pages[0].timestamp > lastUpdated ){
   isTop = true
   lastUpdated = pages[0].timestamp
 }

 //add every row and request logs too
 var pg, htmRows = ''
 var addCell = function(kk){  htmRows += apl.output( pg[kk], kk, 'td' ) }
 for ( var i=0; i<pages.length; i++ ){
  pg = pages[i]
  if ( $('#result').find('tr.'+pg.pageid).length ) continue // avoid duplicates
  pagesTotal++
  pg.parsedcomment = simplifyNewPageComment(pg.parsedcomment)
  htmRows +=  '<tr class="' + pg.pageid
  + (typeof pg.patrolled=='string' ? ' patrolled" title="patrolled' : '')
  + '">'
  + apl.outputCell(pg, 'timestamp')
  + apl.outputCell(pg, 'user')
  + apl.outputCell(pg, 'title')
  + apl.outputCell(pg, 'newlen')
  + apl.outputCell(pg, 'parsedcomment')
  if( isDisplayLogs ){
    htmRows += apl.outputCell('<small>(?)</small>', 'log')
    apiLog.call( { title:pages[i].title, requestid:pages[i].pageid } )
 }
 htmRows += '</tr>'
}

 //append to the table
 htmRows = '<tbody>' + htmRows + '</tbody>'
 if (isTop)
   $('#result').find('tbody').eq(0).after( htmRows )
 else
   $('#result').append( htmRows )
 //update top and bottom text
 $('#header').html(   mm('info').replace('$1', pagesTotal) )
 $('#update').addClass('more').click( requestTopRC )

 //if (! apiNextRC.isMore) return // !!! doesn't work yet
 $('#js-footer')
 .html( mm('next').replace(/\d+/g, '<span class=more>$&</span>') )
 .find( 'span.more' )
 .click( requestNextRC )

}



function displayLogs(logs, api){

 //find the cell by pageid
 var cell =
 $( '#result' )
 .find( 'tr.' + api.requestid )
 .find( 'td.log' )
 .empty()

 if (!logs.length) return

 //create popup html
 var htm = ''
 for (var i=0; i<logs.length; i++)
   htm += '<small>' + logs[i].timestamp.replace(/(T|:\d\dZ)/g,' ') + '</small>'
	+ ' : ' + logs[i].user
	+ ' : <small>' + logs[i].parsedcomment + '</small>'
	+ '<br />'

 //put time and save popup HTML as data
 cell
 .append( apl.output(logs[0].timestamp, 'timestamp') )
 .addPopup( htm )

}



function simplifyNewPageComment(txt){
 var ma
 if ( ma = txt.match(/^<a[^>]+>←<\/a> Керла агӀо: «(.*)»$/) )
   txt = '<span class="page-quote">«' + ma[1] + '»</span>'
 else if ( ma = txt.match(/^<a[^>]+>←<\/a> <a[^>]+>ДӀасахьажор<\/a> → «(.*)»(.*)$/) )
   txt = '→ ' + ma[1] + ma[2]
 else
   txt = '<i>' + txt + '</i>'
 return txt
}


}//main

if( /^Википедия:Скрипты/.test(mw.config.get('wgPageName')) ){
mw.loader.load('//ru.wikipedia.org/w/index.php?title=user:js/apl01.js&action=raw&ctype=text/javascript')
 newPages.start()
}