Diferencia entre revisiones de «Usuario:Stargazer/common.js»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (MediaWiki's not letting this be easy)
m (Double check I'm not about to break something)
Línea 1: Línea 1:
  +
/* 2018-09-16 display Arcanum entry on Cite:Arcanum-X page */
  +
function show_arcanum_entry() {
  +
// check that it's an Arcanum page
  +
const page_name = mw.config.get('wgPageName');
  +
if (!page_name.startsWith('Cite:Arcanum-')) return;
  +
// work out the api url
  +
const entry = page_name.split('-')[1];
  +
const url = 'https://wob.coppermind.net/api/entry/'+ entry +'/';
  +
// start fetching from Arcanum
  +
console.warn('gadget:', 'Arcanum-fetch-quote')
  +
console.debug('Arcanum:', 'fetch', url);
  +
fetch(url)
  +
.then(function fetch_to_json(resp) { return resp.json() })
  +
.then(function show_Arcanum_on_page(json) {
  +
// debugging:
  +
console.debug('Arcanum:', 'entry '+ entry, json);
  +
// create containing element
  +
const entry_el = document.createElement('article');
  +
entry_el.classList.add('arcanum-entry');
  +
// add lines
  +
json.lines.forEach(function show_each_line(line) {
  +
// create speaker element
  +
const speaker = document.createElement('h4');
  +
speaker.innerText = line.speaker;
  +
if (speaker.innerText.includes('href') && (speaker.innerText.includes('twitter.com') || speaker.innerText.includes('17thshard.com'))) {
  +
// speaker is a link to twitter, so show it as such
  +
speaker.innerHTML = speaker.innerText
  +
}
  +
// append the speaker and html from the line
  +
entry_el.appendChild(speaker);
  +
entry_el.innerHTML += line.text;
  +
});
  +
// place container on page
  +
const users_el = document.getElementById('Users').parentElement
  +
users_el.parentElement.insertBefore(entry_el, users_el);
  +
});
  +
};
  +
mw.hook('wikipage.content').add(show_arcanum_entry)
  +
 
// Copy of the "tag status change" gadget that is case insensitive (i.e. works for {{t|Stub}}, {{t|Partial}}, and {{t|Complete}}) and excludes non-articles
 
// Copy of the "tag status change" gadget that is case insensitive (i.e. works for {{t|Stub}}, {{t|Partial}}, and {{t|Complete}}) and excludes non-articles
 
mw.hook('wikipage.diff').add(function tag_status_change() {
 
mw.hook('wikipage.diff').add(function tag_status_change() {

Revisión del 01:37 5 dic 2021

/* 2018-09-16 display Arcanum entry on Cite:Arcanum-X page */
function show_arcanum_entry() {
  // check that it's an Arcanum page
  const page_name = mw.config.get('wgPageName');
  if (!page_name.startsWith('Cite:Arcanum-')) return;
  // work out the api url
  const entry = page_name.split('-')[1];
  const url = 'https://wob.coppermind.net/api/entry/'+ entry +'/';
  // start fetching from Arcanum
  console.warn('gadget:', 'Arcanum-fetch-quote')
  console.debug('Arcanum:', 'fetch', url);
  fetch(url)
    .then(function fetch_to_json(resp) { return resp.json() })
    .then(function show_Arcanum_on_page(json) {
  // debugging:
  console.debug('Arcanum:', 'entry '+ entry, json);
  // create containing element
  const entry_el = document.createElement('article');
  entry_el.classList.add('arcanum-entry');
  // add lines
  json.lines.forEach(function show_each_line(line) {
    // create speaker element
    const speaker = document.createElement('h4');
    speaker.innerText = line.speaker;
    if (speaker.innerText.includes('href') && (speaker.innerText.includes('twitter.com') || speaker.innerText.includes('17thshard.com'))) {
      // speaker is a link to twitter, so show it as such
      speaker.innerHTML = speaker.innerText
    }
    // append the speaker and html from the line
    entry_el.appendChild(speaker);
    entry_el.innerHTML += line.text;
  });
  // place container on page
  const users_el = document.getElementById('Users').parentElement
  users_el.parentElement.insertBefore(entry_el, users_el);
    });
};
mw.hook('wikipage.content').add(show_arcanum_entry)

// Copy of the "tag status change" gadget that is case insensitive (i.e. works for {{t|Stub}}, {{t|Partial}}, and {{t|Complete}}) and excludes non-articles
mw.hook('wikipage.diff').add(function tag_status_change() {

// 2021-02-22 exclude pages outside ns 0
if (mw.config.get('wgNamespaceNumber') != 0) return

// 2018-11-06 add status-change tags to pages with diffs that change the status
const diff = document.querySelector('.diff')
if (!diff) return;

diff.querySelectorAll('.diff-addedline').forEach(function find_status_change(el) {
  if (!/\{\{([sS]tub|[pP]artial|[cC]omplete)\}\}/.test(el.innerText)) return
  const row = el.parentElement
  const rem = row.querySelector('.diff-deletedline')
  const add = row.querySelector('.diff-addedline')
  const msg = rem.innerText.trim() +' => '+ add.innerText.trim()

// guard against tagging latest revision in multi-change diffs
if (diff.querySelector('.diff-multi')) {
 // TODO: determine which of the revisions to tag?
 console.warn('gadget:', 'tag-status-change', 'ignored on combination diff')
 mw.notify('theses revisions contain a potential status-change ('+ msg +') which has been ignored')
 return; 
}

console.warn('gadget:', 'tag-status-change')

// send the notification 
;(new mw.Api).postWithToken('csrf', {
  action: 'tag',
  revid: mw.config.get('wgRevisionId'),
  add: 'status-change',
  reason: msg,
}).then(function notify_success() {
     mw.notify('revision tagged with '+ msg)
})


})

})


// Copy of the "mark as reviewed" button gadget that is case insensitive (i.e. works for {{t|Complete}})
mw.hook('wikipage.content').add(function tag_complete_button() {

// only show button on latest revision of page
if (mw.config.get('wgCurRevisionId') != mw.config.get('wgRevisionId')) return;

// find the {{t|complete}} template
const notice = document.querySelector('.quality-complete')
if (!notice) return;

// don't show button on edit
const editor = document.querySelector('.mw-editform')
if (editor) return;
// TODO: instead add a button that saves and marks as complete

const button = document.createElement('button')
button.textContent = 'Mark as Reviewed'
button.onclick = mark_article_as_complete

// find the message to replace with a button
const place_for_button = notice.querySelector('.unsigned')
if (!place_for_button) return

place_for_button.replaceWith(button)

console.warn('gadget:', 'tag-complete-button')

})

function mark_article_as_complete(ev) {

const api = new mw.Api
const page_name = mw.config.get('wgPageName')

console.warn('gadget:', 'tag-complete-button', 'button pressed')

// try to edit the article
return api.edit(page_name, function try_signing_article(revision) {

return {
  // find {{t|complete}} and replace with {{t|complete|~x4}}
  text: revision.content.replace( /\{\{[cC]omplete}}/, '{'+'{complete|~~'+'~~}}' ),
  summary: 'mark as complete',
 }

}).catch(console.warn).then(function try_tagging_revision(revision) {
  console.debug('gadget:', 'tag-complete-button', 'revision:', revision)
  if (revision.nochange === true) return
  console.warn('gadget:', 'tag-complete-button', 'tagging')
  // tag the revision
  return api.postWithToken('csrf', {
    action: 'tag',
    revid: revision.newrevid,
    add: 'completed',
    reason: 'from tag-complete-button gadget',
  }).catch(console.warn).then(function show_result_of_complet_button_press() {
    // show the user that it worked
    mw.notify('Article marked as complete?')
    console.warn('gadget:', 'tag-complete-button', 'tagged')
    // TODO: replace button with signature/reload button section
  })
})

}


/*
// Add edit notice when editing pages in certain categories
// Problems: When editing an old version of the page, this needs to drop the ?
function addEditIntro( name ) {
	$( '#ca-edit' ).find( 'a' ).each( function ( i, el ) {
		el.href = $( this ).attr( 'href' ) + '?&editintro=' + name;
	} );
}

if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
	$( function () {
		var cats = mw.config.get( 'wgCategories' );
		if ( !cats ) {
			return;
		}
		if ( $.inArray( 'Stormlight Archive', cats ) !== -1 || $.inArray( 'General cosmere', cats ) !== -1 ) {
			addEditIntro( 'MediaWiki:Top-notice-ns-0' );
		}
	} );
}

// Add edit notice when editing sections of pages in certain categories
// Problems: When clicking the [edit] link on templates, this gets appended to the URL, making the page name invalid
function addEditSectionIntro( name ) {
	$( '.mw-editsection' ).find( 'a' ).each( function ( i, el ) {
		el.href = $( this ).attr( 'href' ) + '&editintro=' + name;
	} );
}

if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
	$( function () {
		var cats = mw.config.get( 'wgCategories' );
		if ( !cats ) {
			return;
		}
		if ( $.inArray( 'Stormlight Archive', cats ) !== -1 || $.inArray( 'General cosmere', cats ) !== -1 ) {
			addEditSectionIntro( 'MediaWiki:Top-notice-ns-0' );
		}
	} );
}
*/

/*
// Claim button for objectives
// I'm pretty sure I didn't quite get this to work; objective-related stuff isn't really a priority right now, but I'm leaving it here commented out to maybe look at later
mw.hook('wikipage.content').add(function objective_claim_button() {

	// only show button on latest revision of page
	if (mw.config.get('wgCurRevisionId') != mw.config.get('wgRevisionId')) return;

	// find the {{t|objective}} template
	const notice = document.querySelector('.objective')
	if (!notice) return;

	// don't show button on edit
	const editor = document.querySelector('.mw-editform')
	if (editor) return;

	const button = document.createElement('button')
	button.textContent = 'Claim Objective'
	button.onclick = mark_objective_as_claimed

	// find the message to replace with a button
	const place_for_button = notice.querySelector('.unclaimed')
	if (!place_for_button) return;

	place_for_button.replaceWith(button)

	console.warn('gadget:', 'objective-claim-button')

})

function mark_objective_as_claimed() {
	const api = new mw.Api
	const page_name = mw.config.get('wgPageName');
	const user = mw.config.get( 'wgUserName' );

	console.warn('gadget:', 'objective-claim-button', 'button pressed');

	// try to edit the article
	return api.edit(page_name, function try_claiming_objective(revision) {
		return {
			text: revision.content.replace( '{{objective|date=}}', '{{objective|claim=user|date=}}' ),
			summary: 'claimed objective',
			minor: true
		}
	})
}
*/

/*
//Tweaks to editing toolbar
var customizeToolbar = function() {
  // Your code goes here

  //Remove references button
  $( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', {
	  'section': 'main',
	  'group': 'insert',
	  'tool': 'reference'
  });
*/

/* 
 * Check if view is in edit mode and that the required modules are available. Then, customize the toolbar...
 * Don't touch below this line!

if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1) {
  mw.loader.using('user.options').then(function() {
    // This can be the string "0" if the user disabled the preference ([[phab:T54542#555387]])
    if (mw.user.options.get('usebetatoolbar') == 1) {
      $.when(
        mw.loader.using('ext.wikiEditor'), $.ready
      ).then(customizeToolbar);
    }
  });
}
 */