User:Bradv/catlist.js

importScript('User:AzaToth/morebits.js');

function catlist { if (mw.config.get('wgCanonicalNamespace') == "Category" || mw.config.get('wgPageName') == "User:Bradv15/catlist.js") { mw.util.addPortletLink( 'p-cactions', "javascript:catlist.callback", "catlist", "catlist", "Generate List", ""); } } $(catlist); catlist.callback = function catlistCallback( uid ) { var Window = new SimpleWindow( 600, 400 ); Window.setTitle(mw.config.get('wgTitle'));

var form = new QuickForm( catlist.callback.evaluate );

form.append( {type:'button', label:'Plain text',            name:'text',  event: function(e){catlist.callback.update(e)}} ); form.append( {type:'button', label:'Wikilinks',             name:'links', event: function(e){catlist.callback.update(e)}} ); form.append( {type:'button', label:'Extended links',        name:'extd',  event: function(e){catlist.callback.update(e)}} ); form.append( {type:'button', label:'Extended links (with headers)',       name:'extdhdr',  event: function(e){catlist.callback.update(e)}} );

var output = form.append( {type:'div', id:'catlistOutput'} );

var result = form.render; Window.setContent( result ); Window.display; }

catlist.callback.update = function catlistUpdate(e) { var output = document.getElementById('catlistOutput');

while (output.firstChild) {       output.removeChild(output.firstChild); };   var pre = output.appendChild(document.createElement('pre'));

var lstTD = document.evaluate('//div[@id="mw-pages"]//td/*', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var i=0; i<lstTD.snapshotLength; i++) { var nod = lstTD.snapshotItem(i); if (nod.tagName == 'H3' && e.target.name == 'extdhdr') { if (nod.innerHTML.length==1) { pre.appendChild(document.createTextNode('==='+nod.innerHTML+'===\n\n')); }       }        else if (nod.tagName == 'UL') { var lstA = document.evaluate('.//a', nod, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); for (var j=0;j<lstA.snapshotLength; j++) { var title = lstA.snapshotItem(j).title; var text = ''; switch (e.target.name) { case 'text': text = title; break; case 'links': text = +title+; break; case 'extd': case 'extdhdr': text = ''; break; }               pre.appendChild(document.createTextNode(text+'\n\n')); }       }    } }