MediaWiki:Gadget-code-snippets.js: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
"use strict"; |
|||
/**<nowiki> |
/**<nowiki> |
||
* Gadget that loads a couple of snippets for easier access to commonly copy/pasted templates and sections |
* Gadget that loads a couple of snippets for easier access to commonly copy/pasted templates and sections |
||
Line 5: | Line 7: | ||
*/ |
*/ |
||
$(function() { |
$(function () { |
||
var today = new Date().toLocaleString('en-GB', { |
|||
day: 'numeric', |
|||
var pagename = mw.config.get('wgTitle'); |
|||
month: 'long', |
|||
year: 'numeric', |
|||
var preloadMsgs = [ |
|||
timeZone: 'UTC' |
|||
'NPC', |
|||
}); |
|||
'equipment', |
|||
var pagename = mw.config.get('wgTitle'); |
|||
'item', |
|||
var preloadMsgs = ['NPC', 'equipment', 'item', 'location', 'monster', 'scenery', 'shop' |
|||
'location', |
|||
//'navbox', |
|||
//'navbox-oneline', |
|||
'scenery', |
|||
//'navbox-subgroup', |
|||
'shop', |
|||
].map(function (msg) { |
|||
//'navbox', |
|||
return 'newarticletext-' + msg; |
|||
//'navbox-oneline', |
|||
}); |
|||
//'navbox-subgroup', |
|||
function snippet(label, parts) { |
|||
].map(function(msg) {return 'newarticletext-'+msg;}); |
|||
if (typeof parts == 'string') parts = [parts]; // if string is given, only use pre |
|||
return { |
|||
function snippet(label, parts) { |
|||
label: label, |
|||
if (typeof(parts) == 'string') parts = [parts]; // if string is given, only use pre |
|||
action: { |
|||
return { |
|||
type: 'encapsulate', |
|||
label: label, |
|||
options: { |
|||
action: { |
|||
pre: parts[0] || '', |
|||
type: 'encapsulate', |
|||
peri: parts[1] || '', |
|||
options: { |
|||
post: parts[2] || '' |
|||
} |
|||
peri: parts[1] || '', |
|||
} |
|||
post: parts[2] || '', |
|||
}; |
|||
} |
|||
} |
|||
function getLicense(name, chars, param) { |
|||
}; |
|||
var label = name; |
|||
} |
|||
if (name instanceof Array) { |
|||
// if the label shouldn't be the same as the name |
|||
function getLicense(name, chars, param) { |
|||
label = name[1]; |
|||
name = name[0]; |
|||
if (name instanceof Array) { // if the label shouldn't be the same as the name |
|||
} |
|||
label = name[1]; |
|||
return snippet(label, ['{{' + name + ' license|', pagename.slice(0, -chars), (param || '') + '}}']); |
|||
name = name[0]; |
|||
} |
|||
function getPreloads(preloads) { |
|||
return snippet(label, [ |
|||
var arr = []; |
|||
'{{'+name+' license|', |
|||
for (var i = 0; i < preloads.length; i++) { |
|||
pagename.slice(0, -chars), |
|||
var msg = mw.message(preloads[i], mw.config.get('wgTitle'), mw.config.get('wgTitle').split(' (')[0]).plain(); |
|||
(param || '') + '}}' |
|||
msg = msg.replace(/<\/?includeonly>/g, '').replace(/<noinclude>[\s\S]*<\/noinclude>/g, ''); // remove include-tags |
|||
]); |
|||
var obj = { |
|||
} |
|||
label: preloads[i].charAt(15).toUpperCase() + preloads[i].substr(16), |
|||
action: { |
|||
function getPreloads(preloads) { |
|||
type: 'encapsulate', |
|||
var arr = []; |
|||
options: { |
|||
for (var i=0;i<preloads.length;i++) { |
|||
pre: msg |
|||
var msg = mw.message(preloads[i], mw.config.get('wgTitle'), mw.config.get('wgTitle').split(' (')[0]).plain(); |
|||
} |
|||
msg = msg.replace(/<\/?includeonly>/g, '').replace(/<noinclude>[\s\S]*<\/noinclude>/g, ''); // remove include-tags |
|||
} |
|||
var obj = { |
|||
}; |
|||
label: preloads[i].charAt(15).toUpperCase() + preloads[i].substr(16), |
|||
arr.push(obj); |
|||
action: { |
|||
} |
|||
type: 'encapsulate', |
|||
return arr; |
|||
options: { |
|||
} |
|||
pre: msg, |
|||
$('#wpTextbox1').on('wikiEditor-toolbar-doneInitialSections', function () { |
|||
}, |
|||
if (typeof $('#wpTextbox1').wikiEditor != 'function') return console.log($('#wpTextbox1'), $('#wpTextbox1').wikiEditor); |
|||
}, |
|||
var preloads = { |
|||
}; |
|||
label: 'Preloads', |
|||
arr.push(obj); |
|||
layout: 'characters', |
|||
} |
|||
characters: [] // will be filled after MW messages have loaded. |
|||
return arr; |
|||
}; |
|||
} |
|||
var templates = { |
|||
'label': 'Template presets', |
|||
$( '#wpTextbox1' ).on('wikiEditor-toolbar-doneInitialSections', function() { |
|||
'layout': 'characters', |
|||
if (typeof($('#wpTextbox1').wikiEditor) != 'function') return console.log($('#wpTextbox1'), $('#wpTextbox1').wikiEditor); |
|||
'characters': [snippet('Single {{Map}}', ['{{Map|name=' + pagename + '|x=3200|y=3200|plane=0|r=4|mapID=0|mtype=', 'square', '}}']), snippet('Multi-pin {{Map}}', ['{{Map|name=' + pagename + '|', '3200,3200|3232,3200', '|plane=0|mapID=0|mtype=pin}}']), snippet('{{Synced switch}}', ['{{Synced switch\n|version1 = ', '', '\n|version2 = \n|version3 = \n}}\n']), snippet('{{DropLogProject}}', ['{{DropLogProject|kills=', '0', '}}\n']), snippet('{{DropLogProject|type=}}', ['{{DropLogProject|kills=0|type=', 'chests', '}}\n']), snippet('{{Relative location}}', ['{{Relative location\n|location = ' + pagename + '\n|north = ', '', '\n|west = \n|south = \n|east = \n}}\n']), snippet('{{External}}', ['{{External|rs', '|rsc', '}}\n']), snippet('{{Listen}}', ['{{Listen\n|title = \n|desc = \n|filename = ', '', '}}\n']), snippet('{{Otheruses}}', ['{{Otheruses|', '', '}}\n']), snippet('{{Redirect}}', ['{{Redirect|', '', '}}\n'])] |
|||
}; |
|||
var preloads = { |
|||
var sections = { |
|||
label: 'Preloads', |
|||
'label': 'Section presets', |
|||
layout: 'characters', |
|||
'layout': 'characters', |
|||
characters: [], // will be filled after MW messages have loaded. |
|||
'characters': [snippet('==References==', ['==References==\n{{Reflist', '', '}}\n']), snippet('==NPC Locations==', ['==Locations==\n{{LocTableHead}}\n{{LocLine\n|name = ' + pagename + '\n|location = ', '', '\n|levels = \n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{LocTableBottom}}\n']), snippet('==Object Locations==', ['==Locations==\n{{ObjectTableHead}}\n{{ObjectLocLine\n|name = ' + pagename + '\n|location = ', '', '\n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{ObjectTableBottom}}\n']), snippet('==Monster Drops==', ['==Drops==\n\n===100%===\n{{DropsTableHead}}\n{{DropsLine|name=', '', '|quantity=1|rarity=Always}}\n{{DropsTableBottom}}\n']), snippet('==Item Creation==', ['== Creation ==\n{{Recipe\n|skill1 = ', '', '\n|skill1lvl = \n|skill1boostable = \n|skill1exp = \n|ticks = \n|members = \n|mat1 = \n|mat2 = \n|output1 = ' + pagename + '\n|output1quantity = 1}}\n']), snippet('==Item Products==', ['==Products==\n{{Uses material list|', pagename, '}}\n']), snippet('==Item sources==', ['==Item sources==\n{{Drop sources|', pagename, '}}\n']), snippet('===Shop locations===', ['===Shop locations===\n{{Store locations list|', pagename, '}}\n']), snippet('===Spawns===', ['===Spawns===\n{{ItemSpawnTableHead}}\n{{ItemSpawnLine|name=' + pagename + '|location=', '', '|members=|3200,3200}}\n{{ItemSpawnTableBottom}}\n']), snippet('==Changes==', ['==Changes==\n{{Subject changes header}}\n{{Subject changes\n|date = ', today, '\n|update = \n|poll = \n|change = \n}}\n{{Subject changes footer}}\n']), snippet('==Combat styles==', ['==Combat styles==\n{{CombatStyles|', '', '}}\n']), snippet('==Dialogue==', ['==Dialogue==\n{{Hastranscript|', 'npc', '}}\n'])] |
|||
} |
|||
}; |
|||
var templates = { |
|||
var currentDate = new Date().toISOString().split('T')[0]; |
|||
'label': 'Template presets', |
|||
var references = { |
|||
'layout': 'characters', |
|||
'label': 'References', |
|||
'characters': [ |
|||
'layout': 'characters', |
|||
snippet('Single {{Map}}', [ |
|||
'characters': [snippet('Ref section', ['==References==\n{{Reflist', '', '}}\n']), snippet('Ref list', ['{{Reflist|group=', '', '}}\n']), snippet('CiteTwitter', ['{{CiteTwitter|author=|url=|date=|archiveurl=|archivedate=', currentDate, '|quote=|notes=|name=|group=}}']), snippet('CiteReddit', ['{{CiteReddit|author=|url=|title=|quote=|date=|archiveurl=|archivedate=', currentDate, '|notes=|name=}}']), snippet('CiteNews', ['{{CiteNews|author=|url=', '', '|title=|newsdate=|notes=|name=}}']), snippet('CiteVideo', ['{{CiteVideo|author=|title=|url=', '', '|timestamp=|date=|site=|notes=|name=}}']), snippet('CiteNPC', ['{{CiteNPC|npc=', '', '|quote=|loc=|notes=|name=}}']), snippet('CiteGeneral', ['{{CiteGeneral|url=|title=|author=|date=|accessdate=', currentDate, '|publisher=|archiveurl=|archivedate=|quote=}}']), snippet('NamedRef', ['{{CiteNPC|name=', '', '|group=}}'])] |
|||
'{{Map|name='+pagename+'|x=3200|y=3200|plane=0|r=4|mapID=0|mtype=', |
|||
}; |
|||
'square', |
|||
var transcript = { |
|||
'}}' |
|||
'label': 'Transcripts', |
|||
]), |
|||
'layout': 'characters', |
|||
snippet('Multi-pin {{Map}}', [ |
|||
'characters': [snippet('==Dialogue==', ['==Dialogue==\n{{Hastranscript|', 'npc', '}}\n']), snippet('{{Transcript}}', ['{{Transcript|', 'npc', '}}\n\n==Standard dialogue==\n* ']), snippet('{{overhead}}', ['{{overhead|', 'Cor blimey mate, what are ye doing in me pockets?', '}}']), snippet('{{mes}}', ['{{mes|', 'Nothing interesting happens.', '}}']), snippet('End of dialogue', '{{tact|end}}'), snippet('Members-only notice', '{{tact|members}}'), snippet('Interface opens', ['{{tact|opens=', 'Interface', '}}']), snippet('Unlinked interface opens', ['{{tact|opens2=', 'Interface', '}}']), snippet('Receives item', ['{{tact|receives=', 'an [[item]]', '}}']), snippet('Shows previous', '{{tact|previous}}'), snippet('Shows prev-to-prev', '{{tact|previous2}}'), snippet('Shows initial', '{{tact|initial}}'), snippet('Shows other options', '{{tact|other}}'), snippet('Same as above', '{{tact|above}}'), snippet('Same as below', '{{tact|below}}'), snippet('Continues below', '{{tact|continue}}')] |
|||
'{{Map|name='+pagename+'|', |
|||
}; |
|||
'3200,3200|3232,3200', |
|||
var licenses = { |
|||
'|plane=0|mapID=0|mtype=pin}}' |
|||
'label': 'File licenses', |
|||
]), |
|||
'layout': 'characters', |
|||
snippet('{{Synced switch}}', [ |
|||
'characters': [getLicense('Inventory', 4), getLicense(['DII', 'Detailed item'], 11), getLicense('Worn equipment', 13), getLicense('NPC', 4), getLicense(['Chathead', 'NPC chathead'], 13, '|sub=npc'), getLicense(['Chathead', 'Pet chathead'], 13, '|sub=pet'), getLicense(['Chathead', 'player chathead'], 13, '|sub=player'), getLicense('Monster', 4), getLicense('Scenery', 4), getLicense(['POH', 'POH furniture'], 4), getLicense('Location', 4), getLicense('Map', 13), getLicense('Interface', 1e10), getLicense('Emote', 4), getLicense(['Prayer', 'Prayer icon'], 4), getLicense(['Spell', 'Spell icon'], 4), getLicense(['Quest', 'Quest scroll'], 18, '|sub=scroll'), getLicense(['Quest', 'Quest infobox'], 4, '|sub=infobox'), getLicense('Animation', 1e10), snippet('Audio', '{{Non-free audio}}'), getLicense('Miscellaneous', 4), snippet('Fair use', '{{Fair use}}'), snippet('CC-BY-SA', '{{CC-BY-SA}}')] |
|||
'{{Synced switch\n|version1 = ', |
|||
}; |
|||
'', |
|||
var feedback = { |
|||
'\n|version2 = \n|version3 = \n}}\n' |
|||
'label': 'Missing something?', |
|||
]), |
|||
'layout': 'table', |
|||
snippet('{{DropLogProject}}', [ |
|||
'headings': [{ |
|||
'{{DropLogProject|kills=', |
|||
text: 'Are you missing a code snippet that would be useful here?' |
|||
'0', |
|||
}], |
|||
'}}\n' |
|||
'rows': [{ |
|||
]), |
|||
text: { |
|||
snippet('{{DropLogProject|type=}}', [ |
|||
html: 'You can <a href="https://oldschool.runescape.wiki/w/RuneScape:User_help?action=edit§ion=new&preloadtitle=Requesting%20new%20code%20snippet%20in%20editor" target="_blank">' + 'request a snippet</a> to be added.' + (mw.config.get('wgUserGroups').includes('sysop') ? '<br/>Admins may edit the <a href="/w/MediaWiki:Gadget-code-snippets.js" title="MediaWiki:Gadget-code-snippets.js">code snippets script</a>.' : '') |
|||
'{{DropLogProject|kills=0|type=', |
|||
} |
|||
'chests', |
|||
}] |
|||
'}}\n' |
|||
}; |
|||
]), |
|||
var isRedirect = /^\#REDIRECT\s*\[\[[^\]]+\]\](\n|$)/i.test($('#wpTextbox1').val()) && $('#wikiPreview div').text().length == 0; |
|||
snippet('{{Relative location}}', [ |
|||
var groups = {}; |
|||
'{{Relative location\n|location = '+pagename+'\n|north = ', |
|||
if (isRedirect && $('body').is('.ns-0')) groups['section-preloads'] = preloads; // will be filled after messages have loaded. |
|||
'', |
|||
groups['section-templates'] = templates; |
|||
'\n|west = \n|south = \n|east = \n}}\n' |
|||
if ($('body').is('.ns-0')) groups['section-sections'] = sections; // listed sections are only relevant to mainspace |
|||
]), |
|||
groups['section-refs'] = references; |
|||
snippet('{{External}}', [ |
|||
if ($('body').is('.ns-120')) groups['section-transcript'] = transcript; // only show on Transcript: namespace. |
|||
'{{External|rs', |
|||
if ($('body').is('.ns-6')) groups['section-licenses'] = licenses; // only show on File: namespace. |
|||
'|rsc', |
|||
groups['section-feedback'] = feedback; |
|||
'}}\n' |
|||
]), |
|||
snippet('{{Listen}}', [ |
|||
'{{Listen\n|title = \n|desc = \n|filename = ', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('{{Otheruses}}', [ |
|||
'{{Otheruses|', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('{{Redirect}}', [ |
|||
'{{Redirect|', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
] |
|||
}; |
|||
var sections = { |
|||
'label': 'Section presets', |
|||
'layout': 'characters', |
|||
'characters': [ |
|||
snippet('==References==', [ |
|||
'==References==\n{{Reflist', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('==NPC Locations==', [ |
|||
'==Locations==\n{{LocTableHead}}\n{{LocLine\n|name = '+pagename+'\n|location = ', |
|||
'', |
|||
'\n|levels = \n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{LocTableBottom}}\n' |
|||
]), |
|||
snippet('==Object Locations==', [ |
|||
'==Locations==\n{{ObjectTableHead}}\n{{ObjectLocLine\n|name = '+pagename+'\n|location = ', |
|||
'', |
|||
'\n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{ObjectTableBottom}}\n' |
|||
]), |
|||
snippet('==Monster Drops==', [ |
|||
'==Drops==\n\n===100%===\n{{DropsTableHead}}\n{{DropsLine|name=', |
|||
'', |
|||
'|quantity=1|rarity=Always}}\n{{DropsTableBottom}}\n' |
|||
]), |
|||
snippet('==Item Creation==', [ |
|||
'== Creation ==\n{{Recipe\n|skill1 = ', |
|||
'', |
|||
'\n|skill1lvl = \n|skill1boostable = \n|skill1exp = \n|ticks = \n|members = \n|mat1 = \n|mat2 = \n|output1 = '+pagename+'\n|output1quantity = 1}}\n' |
|||
]), |
|||
snippet('==Item Products==', [ |
|||
'==Products==\n{{Uses material list|', |
|||
pagename, |
|||
'}}\n' |
|||
]), |
|||
snippet('==Item sources==', [ |
|||
'==Item sources==\n{{Drop sources|', |
|||
pagename, |
|||
'}}\n' |
|||
]), |
|||
snippet('===Shop locations===', [ |
|||
'===Shop locations===\n{{Store locations list|', |
|||
pagename, |
|||
'}}\n' |
|||
]), |
|||
snippet('===Spawns===', [ |
|||
'===Spawns===\n{{ItemSpawnTableHead}}\n{{ItemSpawnLine|name='+pagename+'|location=', |
|||
'', |
|||
'|members=|3200,3200}}\n{{ItemSpawnTableBottom}}\n' |
|||
]), |
|||
snippet('==Changes==', [ |
|||
'==Changes==\n{{Subject changes header}}\n{{Subject changes\n|date = ', |
|||
today, |
|||
'\n|update = \n|poll = \n|change = \n}}\n{{Subject changes footer}}\n' |
|||
]), |
|||
snippet('==Combat styles==', [ |
|||
'==Combat styles==\n{{CombatStyles|', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('==Dialogue==', [ |
|||
'==Dialogue==\n{{Hastranscript|', |
|||
'npc', |
|||
'}}\n' |
|||
]), |
|||
] |
|||
}; |
|||
let currentDate = new Date().toISOString().split('T')[0]; |
|||
var references = { |
|||
'label': 'References', |
|||
'layout': 'characters', |
|||
'characters': [ |
|||
snippet('Ref section', [ |
|||
'==References==\n{{Reflist', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('Ref list', [ |
|||
'{{Reflist|group=', |
|||
'', |
|||
'}}\n' |
|||
]), |
|||
snippet('CiteTwitter', [ |
|||
'{{CiteTwitter|author=|url=|date=|archiveurl=|archivedate=', |
|||
currentDate, |
|||
'|quote=|notes=|name=|group=}}' |
|||
]), |
|||
snippet('CiteReddit', [ |
|||
'{{CiteReddit|author=|url=|title=|quote=|date=|archiveurl=|archivedate=', |
|||
currentDate, |
|||
'|notes=|name=}}' |
|||
]), |
|||
snippet('CiteNews', [ |
|||
'{{CiteNews|author=|url=', |
|||
'', |
|||
'|title=|newsdate=|notes=|name=}}' |
|||
]), |
|||
snippet('CiteVideo', [ |
|||
'{{CiteVideo|author=|title=|url=', |
|||
'', |
|||
'|timestamp=|date=|site=|notes=|name=}}' |
|||
]), |
|||
snippet('CiteNPC', [ |
|||
'{{CiteNPC|npc=', |
|||
'', |
|||
'|quote=|loc=|notes=|name=}}' |
|||
]), |
|||
snippet('CiteGeneral', [ |
|||
'{{CiteGeneral|url=|title=|author=|date=|accessdate=', |
|||
currentDate, |
|||
'|publisher=|archiveurl=|archivedate=|quote=}}' |
|||
]), |
|||
snippet('NamedRef', [ |
|||
'{{CiteNPC|name=', |
|||
'', |
|||
'|group=}}' |
|||
]), |
|||
] |
|||
}; |
|||
var transcript = { |
|||
'label': 'Transcripts', |
|||
'layout': 'characters', |
|||
'characters': [ |
|||
snippet('==Dialogue==', [ |
|||
'==Dialogue==\n{{Hastranscript|', |
|||
'npc', |
|||
'}}\n' |
|||
]), |
|||
snippet('{{Transcript}}', [ |
|||
'{{Transcript|', |
|||
'npc', |
|||
'}}\n\n==Standard dialogue==\n* ' |
|||
]), |
|||
snippet('{{overhead}}', [ |
|||
'{{overhead|', |
|||
'Cor blimey mate, what are ye doing in me pockets?', |
|||
'}}' |
|||
]), |
|||
snippet('{{mes}}', [ |
|||
'{{mes|', |
|||
'Nothing interesting happens.', |
|||
'}}' |
|||
]), |
|||
snippet('End of dialogue', '{{tact|end}}'), |
|||
snippet('Members-only notice', '{{tact|members}}'), |
|||
snippet('Interface opens', [ |
|||
'{{tact|opens=', |
|||
'Interface', |
|||
'}}' |
|||
]), |
|||
snippet('Unlinked interface opens', [ |
|||
'{{tact|opens2=', |
|||
'Interface', |
|||
'}}' |
|||
]), |
|||
snippet('Receives item', [ |
|||
'{{tact|receives=', |
|||
'an [[item]]', |
|||
'}}' |
|||
]), |
|||
snippet('Shows previous', '{{tact|previous}}'), |
|||
snippet('Shows prev-to-prev', '{{tact|previous2}}'), |
|||
snippet('Shows initial', '{{tact|initial}}'), |
|||
snippet('Shows other options', '{{tact|other}}'), |
|||
snippet('Same as above', '{{tact|above}}'), |
|||
snippet('Same as below', '{{tact|below}}'), |
|||
snippet('Continues below', '{{tact|continue}}'), |
|||
] |
|||
}; |
|||
var licenses = { |
|||
'label': 'File licenses', |
|||
'layout': 'characters', |
|||
'characters': [ |
|||
getLicense('Inventory', 4), |
|||
getLicense(['DII', 'Detailed item'], 11), |
|||
getLicense('Worn equipment', 13), |
|||
getLicense('NPC', 4), |
|||
getLicense(['Chathead', 'NPC chathead'], 13, '|sub=npc'), |
|||
getLicense(['Chathead', 'Pet chathead'], 13, '|sub=pet'), |
|||
getLicense(['Chathead', 'player chathead'], 13, '|sub=player'), |
|||
getLicense('Monster', 4), |
|||
getLicense('Scenery', 4), |
|||
getLicense(['POH', 'POH furniture'], 4), |
|||
getLicense('Location', 4), |
|||
getLicense('Map', 13), |
|||
getLicense('Interface', 1e10), |
|||
getLicense('Emote', 4), |
|||
getLicense(['Prayer', 'Prayer icon'], 4), |
|||
getLicense(['Spell', 'Spell icon'], 4), |
|||
getLicense(['Quest', 'Quest scroll'], 18, '|sub=scroll'), |
|||
getLicense(['Quest', 'Quest infobox'], 4, '|sub=infobox'), |
|||
getLicense('Animation', 1e10), |
|||
snippet('Audio', '{{Non-free audio}}'), |
|||
getLicense('Miscellaneous', 4), |
|||
snippet('Fair use', '{{Fair use}}'), |
|||
snippet('CC-BY-SA', '{{CC-BY-SA}}'), |
|||
] |
|||
}; |
|||
var feedback = { |
|||
'label': 'Missing something?', |
|||
'layout': 'table', |
|||
'headings': [ |
|||
{ text: 'Are you missing a code snippet that would be useful here?' } |
|||
], |
|||
'rows': [ |
|||
{ |
|||
text: { html: |
|||
'You can <a href="https://oldschool.runescape.wiki/w/RuneScape:User_help?action=edit§ion=new&preloadtitle=Requesting%20new%20code%20snippet%20in%20editor" target="_blank">'+ |
|||
'request a snippet</a> to be added.'+ |
|||
(mw.config.get('wgUserGroups').includes('sysop') ? '<br/>Admins may edit the <a href="/w/MediaWiki:Gadget-code-snippets.js" title="MediaWiki:Gadget-code-snippets.js">code snippets script</a>.' : ''), |
|||
}, |
|||
} |
|||
], |
|||
}; |
|||
var isRedirect = /^\#REDIRECT\s*\[\[[^\]]+\]\](\n|$)/i.test($('#wpTextbox1').val()) && $('#wikiPreview div').text().length == 0; |
|||
var groups = {}; |
|||
if (isRedirect && $('body').is('.ns-0')) groups['section-preloads'] = preloads; // will be filled after messages have loaded. |
|||
groups['section-templates'] = templates; |
|||
if ($('body').is('.ns-0')) groups['section-sections'] = sections; // listed sections are only relevant to mainspace |
|||
groups['section-refs'] = references; |
|||
if ($('body').is('.ns-120')) groups['section-transcript'] = transcript; // only show on Transcript: namespace. |
|||
if ($('body').is('.ns-6')) groups['section-licenses'] = licenses; // only show on File: namespace. |
|||
groups['section-feedback'] = feedback; |
|||
// Show additional snippets, except for MediaWiki:, Module:, Exchange:, talk pages. |
|||
// Other namespaces might not necessarily need very many of these snippets, but there might be snippets for those in the future. |
|||
// Show additional snippets, except for MediaWiki:, Module:, Exchange:, talk pages. |
|||
if (!$('body').is('.ns-8, .ns-114, .ns-828, .ns-talk')) { |
|||
// Other namespaces might not necessarily need very many of these snippets, but there might be snippets for those in the future. |
|||
$('#wpTextbox1').wikiEditor('addToToolbar', { |
|||
if (!$('body').is('.ns-8, .ns-114, .ns-828, .ns-talk')) { |
|||
'sections': { |
|||
$('#wpTextbox1').wikiEditor('addToToolbar', { |
|||
'snippets': { |
|||
'type': 'booklet', |
|||
'snippets': { |
|||
'label': 'Presets/snippets', |
|||
'type': 'booklet', |
|||
'pages': groups |
|||
'label': 'Presets/snippets', |
|||
} |
|||
'pages': groups, |
|||
} |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
if (isRedirect && $('body').is('.ns-0')) { |
|||
} |
|||
$.when(mw.loader.using(['mediawiki.api', 'mediawiki.jqueryMsg']), $.ready).then(function () { |
|||
return new mw.Api().loadMessagesIfMissing(preloadMsgs); |
|||
if (isRedirect && $('body').is('.ns-0')) { |
|||
}).then(function () { |
|||
$('#wpTextbox1').wikiEditor('addToToolbar', { |
|||
return new mw.Api().loadMessagesIfMissing(preloadMsgs); |
|||
section: 'snippets', |
|||
}).then(function() { |
|||
page: 'section-preloads', |
|||
$('#wpTextbox1').wikiEditor('addToToolbar', { |
|||
characters: getPreloads(preloadMsgs) |
|||
section: 'snippets', |
|||
}); |
|||
page: 'section-preloads', |
|||
}); |
|||
characters: getPreloads(preloadMsgs), |
|||
} |
|||
}); |
|||
}); |
|||
} |
|||
}); |
|||
}); |
}); |
||
//</nowiki> |
//</nowiki> |
Latest revision as of 12:06, 20 October 2024
"use strict";
/**<nowiki>
* Gadget that loads a couple of snippets for easier access to commonly copy/pasted templates and sections
* Authors:
** Joeytje50
*/
$(function () {
var today = new Date().toLocaleString('en-GB', {
day: 'numeric',
month: 'long',
year: 'numeric',
timeZone: 'UTC'
});
var pagename = mw.config.get('wgTitle');
var preloadMsgs = ['NPC', 'equipment', 'item', 'location', 'monster', 'scenery', 'shop'
//'navbox',
//'navbox-oneline',
//'navbox-subgroup',
].map(function (msg) {
return 'newarticletext-' + msg;
});
function snippet(label, parts) {
if (typeof parts == 'string') parts = [parts]; // if string is given, only use pre
return {
label: label,
action: {
type: 'encapsulate',
options: {
pre: parts[0] || '',
peri: parts[1] || '',
post: parts[2] || ''
}
}
};
}
function getLicense(name, chars, param) {
var label = name;
if (name instanceof Array) {
// if the label shouldn't be the same as the name
label = name[1];
name = name[0];
}
return snippet(label, ['{{' + name + ' license|', pagename.slice(0, -chars), (param || '') + '}}']);
}
function getPreloads(preloads) {
var arr = [];
for (var i = 0; i < preloads.length; i++) {
var msg = mw.message(preloads[i], mw.config.get('wgTitle'), mw.config.get('wgTitle').split(' (')[0]).plain();
msg = msg.replace(/<\/?includeonly>/g, '').replace(/<noinclude>[\s\S]*<\/noinclude>/g, ''); // remove include-tags
var obj = {
label: preloads[i].charAt(15).toUpperCase() + preloads[i].substr(16),
action: {
type: 'encapsulate',
options: {
pre: msg
}
}
};
arr.push(obj);
}
return arr;
}
$('#wpTextbox1').on('wikiEditor-toolbar-doneInitialSections', function () {
if (typeof $('#wpTextbox1').wikiEditor != 'function') return console.log($('#wpTextbox1'), $('#wpTextbox1').wikiEditor);
var preloads = {
label: 'Preloads',
layout: 'characters',
characters: [] // will be filled after MW messages have loaded.
};
var templates = {
'label': 'Template presets',
'layout': 'characters',
'characters': [snippet('Single {{Map}}', ['{{Map|name=' + pagename + '|x=3200|y=3200|plane=0|r=4|mapID=0|mtype=', 'square', '}}']), snippet('Multi-pin {{Map}}', ['{{Map|name=' + pagename + '|', '3200,3200|3232,3200', '|plane=0|mapID=0|mtype=pin}}']), snippet('{{Synced switch}}', ['{{Synced switch\n|version1 = ', '', '\n|version2 = \n|version3 = \n}}\n']), snippet('{{DropLogProject}}', ['{{DropLogProject|kills=', '0', '}}\n']), snippet('{{DropLogProject|type=}}', ['{{DropLogProject|kills=0|type=', 'chests', '}}\n']), snippet('{{Relative location}}', ['{{Relative location\n|location = ' + pagename + '\n|north = ', '', '\n|west = \n|south = \n|east = \n}}\n']), snippet('{{External}}', ['{{External|rs', '|rsc', '}}\n']), snippet('{{Listen}}', ['{{Listen\n|title = \n|desc = \n|filename = ', '', '}}\n']), snippet('{{Otheruses}}', ['{{Otheruses|', '', '}}\n']), snippet('{{Redirect}}', ['{{Redirect|', '', '}}\n'])]
};
var sections = {
'label': 'Section presets',
'layout': 'characters',
'characters': [snippet('==References==', ['==References==\n{{Reflist', '', '}}\n']), snippet('==NPC Locations==', ['==Locations==\n{{LocTableHead}}\n{{LocLine\n|name = ' + pagename + '\n|location = ', '', '\n|levels = \n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{LocTableBottom}}\n']), snippet('==Object Locations==', ['==Locations==\n{{ObjectTableHead}}\n{{ObjectLocLine\n|name = ' + pagename + '\n|location = ', '', '\n|members = \n|mapID = \n|plane = 0\n|x:3200,y:3200,icon:redPin\n|x:3232,y:3232,icon:redPin\n|mtype = pin\n|group = \n}}\n{{ObjectTableBottom}}\n']), snippet('==Monster Drops==', ['==Drops==\n\n===100%===\n{{DropsTableHead}}\n{{DropsLine|name=', '', '|quantity=1|rarity=Always}}\n{{DropsTableBottom}}\n']), snippet('==Item Creation==', ['== Creation ==\n{{Recipe\n|skill1 = ', '', '\n|skill1lvl = \n|skill1boostable = \n|skill1exp = \n|ticks = \n|members = \n|mat1 = \n|mat2 = \n|output1 = ' + pagename + '\n|output1quantity = 1}}\n']), snippet('==Item Products==', ['==Products==\n{{Uses material list|', pagename, '}}\n']), snippet('==Item sources==', ['==Item sources==\n{{Drop sources|', pagename, '}}\n']), snippet('===Shop locations===', ['===Shop locations===\n{{Store locations list|', pagename, '}}\n']), snippet('===Spawns===', ['===Spawns===\n{{ItemSpawnTableHead}}\n{{ItemSpawnLine|name=' + pagename + '|location=', '', '|members=|3200,3200}}\n{{ItemSpawnTableBottom}}\n']), snippet('==Changes==', ['==Changes==\n{{Subject changes header}}\n{{Subject changes\n|date = ', today, '\n|update = \n|poll = \n|change = \n}}\n{{Subject changes footer}}\n']), snippet('==Combat styles==', ['==Combat styles==\n{{CombatStyles|', '', '}}\n']), snippet('==Dialogue==', ['==Dialogue==\n{{Hastranscript|', 'npc', '}}\n'])]
};
var currentDate = new Date().toISOString().split('T')[0];
var references = {
'label': 'References',
'layout': 'characters',
'characters': [snippet('Ref section', ['==References==\n{{Reflist', '', '}}\n']), snippet('Ref list', ['{{Reflist|group=', '', '}}\n']), snippet('CiteTwitter', ['{{CiteTwitter|author=|url=|date=|archiveurl=|archivedate=', currentDate, '|quote=|notes=|name=|group=}}']), snippet('CiteReddit', ['{{CiteReddit|author=|url=|title=|quote=|date=|archiveurl=|archivedate=', currentDate, '|notes=|name=}}']), snippet('CiteNews', ['{{CiteNews|author=|url=', '', '|title=|newsdate=|notes=|name=}}']), snippet('CiteVideo', ['{{CiteVideo|author=|title=|url=', '', '|timestamp=|date=|site=|notes=|name=}}']), snippet('CiteNPC', ['{{CiteNPC|npc=', '', '|quote=|loc=|notes=|name=}}']), snippet('CiteGeneral', ['{{CiteGeneral|url=|title=|author=|date=|accessdate=', currentDate, '|publisher=|archiveurl=|archivedate=|quote=}}']), snippet('NamedRef', ['{{CiteNPC|name=', '', '|group=}}'])]
};
var transcript = {
'label': 'Transcripts',
'layout': 'characters',
'characters': [snippet('==Dialogue==', ['==Dialogue==\n{{Hastranscript|', 'npc', '}}\n']), snippet('{{Transcript}}', ['{{Transcript|', 'npc', '}}\n\n==Standard dialogue==\n* ']), snippet('{{overhead}}', ['{{overhead|', 'Cor blimey mate, what are ye doing in me pockets?', '}}']), snippet('{{mes}}', ['{{mes|', 'Nothing interesting happens.', '}}']), snippet('End of dialogue', '{{tact|end}}'), snippet('Members-only notice', '{{tact|members}}'), snippet('Interface opens', ['{{tact|opens=', 'Interface', '}}']), snippet('Unlinked interface opens', ['{{tact|opens2=', 'Interface', '}}']), snippet('Receives item', ['{{tact|receives=', 'an [[item]]', '}}']), snippet('Shows previous', '{{tact|previous}}'), snippet('Shows prev-to-prev', '{{tact|previous2}}'), snippet('Shows initial', '{{tact|initial}}'), snippet('Shows other options', '{{tact|other}}'), snippet('Same as above', '{{tact|above}}'), snippet('Same as below', '{{tact|below}}'), snippet('Continues below', '{{tact|continue}}')]
};
var licenses = {
'label': 'File licenses',
'layout': 'characters',
'characters': [getLicense('Inventory', 4), getLicense(['DII', 'Detailed item'], 11), getLicense('Worn equipment', 13), getLicense('NPC', 4), getLicense(['Chathead', 'NPC chathead'], 13, '|sub=npc'), getLicense(['Chathead', 'Pet chathead'], 13, '|sub=pet'), getLicense(['Chathead', 'player chathead'], 13, '|sub=player'), getLicense('Monster', 4), getLicense('Scenery', 4), getLicense(['POH', 'POH furniture'], 4), getLicense('Location', 4), getLicense('Map', 13), getLicense('Interface', 1e10), getLicense('Emote', 4), getLicense(['Prayer', 'Prayer icon'], 4), getLicense(['Spell', 'Spell icon'], 4), getLicense(['Quest', 'Quest scroll'], 18, '|sub=scroll'), getLicense(['Quest', 'Quest infobox'], 4, '|sub=infobox'), getLicense('Animation', 1e10), snippet('Audio', '{{Non-free audio}}'), getLicense('Miscellaneous', 4), snippet('Fair use', '{{Fair use}}'), snippet('CC-BY-SA', '{{CC-BY-SA}}')]
};
var feedback = {
'label': 'Missing something?',
'layout': 'table',
'headings': [{
text: 'Are you missing a code snippet that would be useful here?'
}],
'rows': [{
text: {
html: 'You can <a href="https://oldschool.runescape.wiki/w/RuneScape:User_help?action=edit§ion=new&preloadtitle=Requesting%20new%20code%20snippet%20in%20editor" target="_blank">' + 'request a snippet</a> to be added.' + (mw.config.get('wgUserGroups').includes('sysop') ? '<br/>Admins may edit the <a href="/w/MediaWiki:Gadget-code-snippets.js" title="MediaWiki:Gadget-code-snippets.js">code snippets script</a>.' : '')
}
}]
};
var isRedirect = /^\#REDIRECT\s*\[\[[^\]]+\]\](\n|$)/i.test($('#wpTextbox1').val()) && $('#wikiPreview div').text().length == 0;
var groups = {};
if (isRedirect && $('body').is('.ns-0')) groups['section-preloads'] = preloads; // will be filled after messages have loaded.
groups['section-templates'] = templates;
if ($('body').is('.ns-0')) groups['section-sections'] = sections; // listed sections are only relevant to mainspace
groups['section-refs'] = references;
if ($('body').is('.ns-120')) groups['section-transcript'] = transcript; // only show on Transcript: namespace.
if ($('body').is('.ns-6')) groups['section-licenses'] = licenses; // only show on File: namespace.
groups['section-feedback'] = feedback;
// Show additional snippets, except for MediaWiki:, Module:, Exchange:, talk pages.
// Other namespaces might not necessarily need very many of these snippets, but there might be snippets for those in the future.
if (!$('body').is('.ns-8, .ns-114, .ns-828, .ns-talk')) {
$('#wpTextbox1').wikiEditor('addToToolbar', {
'sections': {
'snippets': {
'type': 'booklet',
'label': 'Presets/snippets',
'pages': groups
}
}
});
}
if (isRedirect && $('body').is('.ns-0')) {
$.when(mw.loader.using(['mediawiki.api', 'mediawiki.jqueryMsg']), $.ready).then(function () {
return new mw.Api().loadMessagesIfMissing(preloadMsgs);
}).then(function () {
$('#wpTextbox1').wikiEditor('addToToolbar', {
section: 'snippets',
page: 'section-preloads',
characters: getPreloads(preloadMsgs)
});
});
}
});
});
//</nowiki>