User:CarrONoir/common.js: Difference between revisions
From The Fifth City Wiki
Blank Tag: Blanking |
Fine, test here Tag: Reverted |
||
Line 1: | Line 1: | ||
//Simple citation generator with 4 input fields (URL, title, source, quote) and copy-to-clipboard function | |||
//Output format: <ref>{{Citation|url|title|source|}} ''"quoted text"''</ref> | |||
$(function () { | |||
const citebox = document.getElementById('citegen'); | |||
if (citebox === null) {return;} //Abort if not found | |||
//Create elements, set properties | |||
const output = document.createElement('p'); | |||
const input_url = document.createElement('input'); | |||
const input_title = document.createElement('input'); | |||
const input_source = document.createElement('input'); | |||
const input_quote = document.createElement('input'); | |||
const auto_check = document.createElement('input'); | |||
const check_label = document.createElement('label'); | |||
const manual_button = document.createElement('button'); | |||
output.id = 'citegen_output'; | |||
output.innerHTML = '<ref>{{Citation||||}}</ref>'; //Entities to disrupt parsing | |||
input_url.type = 'text'; | |||
input_url.placeholder = 'URL'; | |||
input_url.id = 'citegen_input_url'; | |||
input_url.name = 'citegen_input_url'; | |||
input_title.type = 'text'; | |||
input_title.placeholder = 'Title'; | |||
input_title.id = 'citegen_input_title'; | |||
input_title.name = 'citegen_input_title'; | |||
input_source.type = 'text'; | |||
input_source.placeholder = 'Source'; | |||
input_source.id = 'citegen_input_source'; | |||
input_source.name = 'citegen_input_source'; | |||
input_quote.type = 'text'; | |||
input_quote.placeholder = 'Quote'; | |||
input_quote.id = 'citegen_input_quote'; | |||
input_quote.name = 'citegen_input_quote'; | |||
auto_check.type = 'checkbox'; | |||
auto_check.id = 'citegen_auto'; | |||
auto_check.name = 'citegen_auto'; | |||
check_label.id = 'citegen_auto_label'; | |||
check_label.for = 'citegen_auto'; | |||
check_label.innerHTML = ' Auto copy?'; | |||
manual_button.type = 'button'; | |||
manual_button.id = 'citegen_cpybtn'; | |||
manual_button.innerHTML = 'Copy to clipboard'; | |||
//Insert elements | |||
citebox.querySelector('#citecont_url').prepend(input_url); | |||
citebox.querySelector('#citecont_title').prepend(input_title); | |||
citebox.querySelector('#citecont_source').prepend(input_source); | |||
citebox.querySelector('#citecont_quote').prepend(input_quote); | |||
citebox.querySelector('#citecont_opt').prepend(auto_check); | |||
citebox.querySelector('#citecont_opt').prepend(check_label); | |||
citebox.querySelector('#citecont_opt').prepend(manual_button); | |||
citebox.querySelector('#citecont_output').prepend(output); | |||
//Add events | |||
input_url.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); | |||
input_title.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); | |||
input_source.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); | |||
input_quote.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); | |||
manual_button.addEventListener('click', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, true);}); | |||
//Focus main field | |||
input_url.focus(); | |||
}()); | |||
//Update output whenever text changes | |||
function convert(input_url, input_title, input_source, input_quote, output, autocopy, manual) { | |||
let url = input_url.value; | |||
let newlink = '{{Citation|' + url + '|'; | |||
let title = ''; | |||
let sub = url.search('/wiki/') + 6; | |||
//Try to recognise URLs from other wikis | |||
if (input_title.value !== '') { | |||
title = input_title.value; | |||
} else if (url.search('/wiki/') > -1) { | |||
title = url.substring(sub); | |||
title = title.replace(/_/g, ' '); | |||
title = title.replace(/%21/g, '!'); | |||
title = title.replace(/%22/g, '\''); | |||
title = title.replace(/%27/g, '\''); | |||
title = title.replace(/%28/g, '('); | |||
title = title.replace(/%29/g, ')'); | |||
title = title.replace(/%2C/g, ','); | |||
title = title.replace(/%3F/g, '?'); | |||
} | |||
newlink = newlink + title + '|'; | |||
//Try to recognise common sources | |||
if (input_source.value !== '') { | |||
newlink = newlink + input_source.value + '|'; | |||
} else { | |||
if (url.search('fallenlondon.wiki') > -1) { | |||
newlink = newlink + 'Fallen London' + '|'; | |||
input_source.placeholder = 'Source (FLWiki detected!)'; | |||
} else if (url.search('sunlesssea.fandom') > -1) { | |||
newlink = newlink + 'Sunless Sea' + '|'; | |||
input_source.placeholder = 'Source (SSea wiki detected!)'; | |||
} else if (url.search('sunlessskies.fandom') > -1) { | |||
newlink = newlink + 'Sunless Skies' + '|'; | |||
input_source.placeholder = 'Source (SSkies wiki detected!)'; | |||
} else if (url.search('wikipedia.org') > -1) { | |||
newlink = newlink + 'Wikipedia' + '|'; | |||
input_source.placeholder = 'Source (Wikipedia detected!)'; | |||
} else { | |||
newlink = newlink + '|'; | |||
input_title.placeholder = 'Title'; | |||
input_source.placeholder = 'Source'; | |||
} | |||
if (title !== '') { | |||
input_title.placeholder = 'Title (Found: ' + title + ')'; | |||
} | |||
} | |||
//Optional quote | |||
newlink = newlink + '}}'; | |||
if (input_quote.value !== '') { | |||
newlink = newlink + ' \'\'"' + input_quote.value + '"\'\''; | |||
} | |||
//Output and optional clipboard copy (optional on-update or when button clicked) | |||
output.innerHTML = '<ref>' + newlink + '</ref>'; | |||
if (autocopy.checked === true || manual === true) { | |||
navigator.clipboard.writeText('<ref>' + newlink + '</ref>'); | |||
} | |||
} |
Revision as of 08:32, 4 April 2023
//Simple citation generator with 4 input fields (URL, title, source, quote) and copy-to-clipboard function //Output format: <ref>{{Citation|url|title|source|}} ''"quoted text"''</ref> $(function () { const citebox = document.getElementById('citegen'); if (citebox === null) {return;} //Abort if not found //Create elements, set properties const output = document.createElement('p'); const input_url = document.createElement('input'); const input_title = document.createElement('input'); const input_source = document.createElement('input'); const input_quote = document.createElement('input'); const auto_check = document.createElement('input'); const check_label = document.createElement('label'); const manual_button = document.createElement('button'); output.id = 'citegen_output'; output.innerHTML = '<ref>{{Citation||||}}</ref>'; //Entities to disrupt parsing input_url.type = 'text'; input_url.placeholder = 'URL'; input_url.id = 'citegen_input_url'; input_url.name = 'citegen_input_url'; input_title.type = 'text'; input_title.placeholder = 'Title'; input_title.id = 'citegen_input_title'; input_title.name = 'citegen_input_title'; input_source.type = 'text'; input_source.placeholder = 'Source'; input_source.id = 'citegen_input_source'; input_source.name = 'citegen_input_source'; input_quote.type = 'text'; input_quote.placeholder = 'Quote'; input_quote.id = 'citegen_input_quote'; input_quote.name = 'citegen_input_quote'; auto_check.type = 'checkbox'; auto_check.id = 'citegen_auto'; auto_check.name = 'citegen_auto'; check_label.id = 'citegen_auto_label'; check_label.for = 'citegen_auto'; check_label.innerHTML = ' Auto copy?'; manual_button.type = 'button'; manual_button.id = 'citegen_cpybtn'; manual_button.innerHTML = 'Copy to clipboard'; //Insert elements citebox.querySelector('#citecont_url').prepend(input_url); citebox.querySelector('#citecont_title').prepend(input_title); citebox.querySelector('#citecont_source').prepend(input_source); citebox.querySelector('#citecont_quote').prepend(input_quote); citebox.querySelector('#citecont_opt').prepend(auto_check); citebox.querySelector('#citecont_opt').prepend(check_label); citebox.querySelector('#citecont_opt').prepend(manual_button); citebox.querySelector('#citecont_output').prepend(output); //Add events input_url.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); input_title.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); input_source.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); input_quote.addEventListener('keyup', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, false);}); manual_button.addEventListener('click', function(){convert(input_url, input_title, input_source, input_quote, output, auto_check, true);}); //Focus main field input_url.focus(); }()); //Update output whenever text changes function convert(input_url, input_title, input_source, input_quote, output, autocopy, manual) { let url = input_url.value; let newlink = '{{Citation|' + url + '|'; let title = ''; let sub = url.search('/wiki/') + 6; //Try to recognise URLs from other wikis if (input_title.value !== '') { title = input_title.value; } else if (url.search('/wiki/') > -1) { title = url.substring(sub); title = title.replace(/_/g, ' '); title = title.replace(/%21/g, '!'); title = title.replace(/%22/g, '\''); title = title.replace(/%27/g, '\''); title = title.replace(/%28/g, '('); title = title.replace(/%29/g, ')'); title = title.replace(/%2C/g, ','); title = title.replace(/%3F/g, '?'); } newlink = newlink + title + '|'; //Try to recognise common sources if (input_source.value !== '') { newlink = newlink + input_source.value + '|'; } else { if (url.search('fallenlondon.wiki') > -1) { newlink = newlink + 'Fallen London' + '|'; input_source.placeholder = 'Source (FLWiki detected!)'; } else if (url.search('sunlesssea.fandom') > -1) { newlink = newlink + 'Sunless Sea' + '|'; input_source.placeholder = 'Source (SSea wiki detected!)'; } else if (url.search('sunlessskies.fandom') > -1) { newlink = newlink + 'Sunless Skies' + '|'; input_source.placeholder = 'Source (SSkies wiki detected!)'; } else if (url.search('wikipedia.org') > -1) { newlink = newlink + 'Wikipedia' + '|'; input_source.placeholder = 'Source (Wikipedia detected!)'; } else { newlink = newlink + '|'; input_title.placeholder = 'Title'; input_source.placeholder = 'Source'; } if (title !== '') { input_title.placeholder = 'Title (Found: ' + title + ')'; } } //Optional quote newlink = newlink + '}}'; if (input_quote.value !== '') { newlink = newlink + ' \'\'"' + input_quote.value + '"\'\''; } //Output and optional clipboard copy (optional on-update or when button clicked) output.innerHTML = '<ref>' + newlink + '</ref>'; if (autocopy.checked === true || manual === true) { navigator.clipboard.writeText('<ref>' + newlink + '</ref>'); } }