MediaWiki:HalopediaUpload.js

// // Original script written by Espyo for Pikipedia // https://www.pikminwiki.com/MediaWiki:PikipediaUpload.js

var summary_input; var type_select; var media_select; var specific_media_text; var game_select; var specific_game_text; var subgame_select; var film_select; var specific_film_text; var comic_select; var specific_comic_text; var screenshot_select; var icon_select; var artwork_select; var artist_select; var specific_artist_text; var source_select; var specific_source_text; var filename_input; var license_select; var final_textarea;

var summary_tr; var type_tr; var media_tr; var specific_media_span; var game_tr; var specific_game_span; var subgame_tr; var film_tr; var specific_film_span; var comic_tr; var specific_comic_span; var screenshot_tr; var icon_tr; var artwork_tr; var artist_tr; var specific_artist_span; var source_tr; var specific_source_span; var filename_tr; var license_tr; var final_tr;

var final_toggler_a;

var has_game = false; var has_subgame = false; var has_film = false; var has_comic = false; var has_book = false; var has_screenshot = false; var has_icon = false; var has_artwork = false; var has_artist = false; var has_source = false; var has_filename = false; var has_license = false;

var insert; var ogFileName;

function main { if (typeof(mw) === "undefined" || mw.config.get("wgCanonicalNamespace") != "Special" || mw.config.get("wgTitle") != "Upload") return; if (window.location.href.indexOf("wpForReUpload=1") != -1) return;

//Get the table with the upload fields. var table; if (mw.config.get('wgMFMode')) table = document.getElementById("mw-htmlform-description"); else table = document.getElementById("mw-htmlform-description").firstChild; if (document.getElementById("wpUploadDescription") && document.getElementById("wpUploadDescription").value.length > 0) { //Hold on, there's already text here! Chances are this is the warning page. //Let's just hide the license box and quit. hide_license(table); return; }

insert = 1; ogFileName = "";

create_media_list(table); create_game_list(table); create_subgame_list(table); create_film_list(table); create_comic_list(table); create_type_list(table); create_screenshot_list(table); create_icon_list(table); create_artwork_list(table); create_summary_input(table); create_artist_list(table); create_source_list(table); create_filename_input(table); create_license_list(table); hide_license(table); setup_final(table); handle_type_choice; }

function create_summary_input(table) { summary_input = document.createElement("input"); summary_input.size = "60"; summary_input.onchange = create_final_result; summary_tr = add_field("Summary:", summary_input, table); }

function create_filename_input(table) { filename_input = document.createElement("input"); filename_input.size = "52"; filename_input.onchange = create_final_result; filename_tr = add_field("Original filename:", filename_input, table); }

function create_type_list(table) { type_select = document.createElement("select"); type_select.name = "type"; type_select.onchange = handle_type_choice; add_option("screenshot", "Screenshot", type_select); add_option("icon", "Icon image", type_select); add_option("artwork", "Artwork", type_select); add_option("render", "Render", type_select); add_option("logo", "Logo", type_select); add_option("asset", "Raw asset", type_select); add_option("page", "Page scan", type_select); add_option("document", "Document", type_select); add_option("audio", "Audio file", type_select); add_option("real", "Real-world image", type_select); add_option("user", "Personal user image", type_select); add_option("wiki", "Halopedia site image", type_select); type_tr = add_field("File type:", type_select, table); }

function create_media_list(table) { var media_span = document.createElement("span"); media_select = document.createElement("select"); media_select.name = "media"; media_select.onchange = handle_media_choice; media_span.appendChild(media_select); add_option("game", "Game", media_select); add_option("film", "Film/series", media_select); add_option("comic", "Comic/graphic novel", media_select); add_option("book", "Other book", media_select); add_option("album", "Album", media_select); add_option("merch", "Merchandise", media_select); add_option("marketing", "Marketing material", media_select); add_option("website", "Website", media_select); add_option("nonhalo", "Non-Halo media", media_select); add_option("other", "N/A", media_select); specific_media_span = document.createElement("span"); media_span.appendChild(specific_media_span); specific_media_text = document.createElement("input"); specific_media_text.size = "44"; specific_media_text.onchange = update_fields; specific_media_span.appendChild(document.createTextNode(" Please enter the book name exactly: ")); specific_media_span.appendChild(specific_media_text); media_tr = add_field("Halo media:", media_span, table); }

function create_game_list(table) { var game_span = document.createElement("span"); game_select = document.createElement("select"); game_select.name = "game"; game_select.onchange = handle_game_choice; game_span.appendChild(game_select); add_media("Halo: Combat Evolved", game_select); add_media("Halo: Combat Evolved Anniversary", game_select); add_media("Halo 2", game_select); add_media("Halo 2: Anniversary", game_select); add_media("Halo 3", game_select); add_media("Halo 3: ODST", game_select); add_media("Halo: Reach", game_select); add_media("Halo 4", game_select); add_media("Halo 5: Guardians", game_select); add_media("Halo Infinite", game_select); add_media("Halo: The Master Chief Collection", game_select); add_media("Halo Wars", game_select); add_media("Halo Wars 2", game_select); add_media("Halo: Spartan Assault", game_select); add_media("Halo: Spartan Strike", game_select); add_media("Halo: Fireteam Raven", game_select); add_media("Halo Online", game_select); add_media("Other", game_select); specific_game_span = document.createElement("span"); game_span.appendChild(specific_game_span); specific_game_text = document.createElement("input"); specific_game_text.size = "30"; specific_game_text.onchange = update_fields; specific_game_span.appendChild(document.createTextNode(" Please enter the game name exactly: ")); specific_game_span.appendChild(specific_game_text); game_tr = add_field("Game:", game_span, table); }

function create_subgame_list(table) { subgame_select = document.createElement("select"); subgame_select.name = "subgame"; subgame_select.onchange = update_fields; add_media("Halo: Combat Evolved", subgame_select); add_media("Halo: Combat Evolved Anniversary", subgame_select); add_media("Halo 2", subgame_select); add_media("Halo 2: Anniversary", subgame_select); add_media("Halo 3", subgame_select); add_media("Halo 3: ODST", subgame_select); add_media("Halo: Reach", subgame_select); add_media("Halo 4", subgame_select); add_media("N/A", subgame_select); subgame_tr = add_field("Sub-game:", subgame_select, table); }

function create_film_list(table) { var film_span = document.createElement("span"); film_select = document.createElement("select"); film_select.name = "film"; film_select.onchange = handle_film_choice; film_span.appendChild(film_select); add_media("Halo Legends", film_select); add_media("Halo 4: Forward Unto Dawn", film_select); add_media("Halo: Nightfall", film_select); add_media("Halo: The Television Series", film_select); add_media("Halo: The Fall of Reach - The Animated Series", film_select); add_media("Halo: The Complete Video Collection", film_select); add_media("Other", film_select); specific_film_span = document.createElement("span"); film_span.appendChild(specific_film_span); specific_film_text = document.createElement("input"); specific_film_text.size = "24"; specific_film_text.onchange = update_fields; specific_film_span.appendChild(document.createTextNode(" Please enter the film/series name exactly: ")); specific_film_span.appendChild(specific_film_text); film_tr = add_field("Film/series:", film_span, table); }

function create_comic_list(table) { var comic_span = document.createElement("span"); comic_select = document.createElement("select"); comic_select.name = "comic"; comic_select.onchange = handle_comic_choice; comic_span.appendChild(comic_select); add_media("Halo: Uprising", comic_select); add_media("Halo: Helljumper", comic_select); add_media("Halo: Blood Line", comic_select); add_media("Halo: Fall of Reach", comic_select); add_media("Halo: Initiation", comic_select); add_media("Halo: Escalation", comic_select); add_media("Halo: Rise of Atriox", comic_select); add_media("Halo: Collateral Damage", comic_select); add_media("Halo: Lone Wolf", comic_select); add_media("Other/graphic novel", comic_select); specific_comic_span = document.createElement("span"); comic_span.appendChild(specific_comic_span); specific_comic_text = document.createElement("input"); specific_comic_text.size = "20"; specific_comic_text.onchange = update_fields; specific_comic_span.appendChild(document.createTextNode(" Please enter the comic series/graphic novel name exactly: ")); specific_comic_span.appendChild(specific_comic_text); comic_tr = add_field("Comic series:", comic_span, table); }

function create_screenshot_list(table) { screenshot_select = document.createElement("select"); screenshot_select.name = "screenshot"; screenshot_select.onchange = update_fields; add_option("character", "Character or AI unit", screenshot_select); add_option("weapon", "Weapon", screenshot_select); add_option("vehicle", "Vehicle", screenshot_select); add_option("multiplayer", "Multiplayer content", screenshot_select); add_option("menu", "Menu", screenshot_select); add_option("other", "Other", screenshot_select); screenshot_tr = add_field("Subject:", screenshot_select, table); }

function create_icon_list(table) { icon_select = document.createElement("select"); icon_select.name = "icon"; icon_select.onchange = update_fields; add_option("achievement", "Achievement", icon_select); add_option("medal", "Multiplayer medal", icon_select); add_option("rank", "Rank image", icon_select); add_option("skull", "Skull image", icon_select); add_option("menuicon", "Menu icon", icon_select); add_option("other", "Other", icon_select); icon_tr = add_field("Icon type:", icon_select, table); }

function create_artwork_list(table) { artwork_select = document.createElement("select"); artwork_select.name = "artwork"; artwork_select.onchange = update_fields; add_option("concept", "Concept art", artwork_select); add_option("cover", "Cover art", artwork_select); add_option("character", "Character", artwork_select); add_option("storyboard", "Storyboard", artwork_select); add_option("wallpaper", "Wallpaper", artwork_select); add_option("other", "Other", artwork_select); artwork_tr = add_field("Art type:", artwork_select, table); }

function create_artist_list(table) { var artist_span = document.createElement("span"); artist_select = document.createElement("select"); artist_select.name = "known"; artist_select.onchange = handle_artist_choice; artist_span.appendChild(artist_select); add_option("unknown", "Unknown", artist_select); add_option("known", "Known artist", artist_select); add_option("self", "I created it", artist_select); specific_artist_span = document.createElement("span"); artist_span.appendChild(specific_artist_span); specific_artist_text = document.createElement("input"); specific_artist_text.size = "58"; specific_artist_text.onchange = create_final_result; specific_artist_span.appendChild(document.createTextNode(" Please enter the artist's name: ")); specific_artist_span.appendChild(specific_artist_text); artist_tr = add_field("Artist:", artist_span, table); }

function create_source_list(table) { var source_span = document.createElement("span"); source_select = document.createElement("select"); source_select.name = "source"; source_select.onchange = handle_source_choice; source_span.appendChild(source_select); add_option("self", "I created the file myself", source_select); add_option("web", "From a website", source_select); add_option("direct", "Direct rip from media files", source_select); add_option("unknown", "Unknown", source_select); specific_source_span = document.createElement("span"); source_span.appendChild(specific_source_span); specific_source_text = document.createElement("input"); specific_source_text.size = "52"; specific_source_text.onchange = create_final_result; specific_source_span.appendChild(document.createTextNode(" Please link to the page: ")); specific_source_span.appendChild(specific_source_text); source_tr = add_field("Source:", source_span, table); }

function create_license_list(table) { license_select = document.createElement("select"); license_select.name = "license"; license_select.onchange = create_final_result; add_option("fairuse", "Fair use (most common)", license_select); add_option("permission", "Used with permission", license_select); add_option("freeuse", "Copyrighted free use", license_select); add_option("pd", "Public domain", license_select); add_option("gfdl", "GNU FDL", license_select); add_option("cc-by-sa-3.0", "CC-BY-SA 3.0", license_select); add_option("unknown", "I don't know", license_select); license_tr = add_field("License:", license_select, table); }

function handle_type_choice { handle_media_choice; handle_game_choice; handle_film_choice; handle_comic_choice; handle_artist_choice; handle_source_choice; update_fields; }

function handle_media_choice { var cur_media = get_option(media_select); if(cur_media == "book") { specific_media_span.style.display = "inline"; } else { specific_media_span.style.display = "none"; } update_fields; }

function handle_game_choice { var cur_game = get_option(game_select); if(cur_game == "Other") { specific_game_span.style.display = "inline"; } else { specific_game_span.style.display = "none"; } update_fields; }

function handle_film_choice { var cur_film = get_option(film_select); if(cur_film == "Other") { specific_film_span.style.display = "inline"; } else { specific_film_span.style.display = "none"; } update_fields; }

function handle_comic_choice { var cur_comic = get_option(comic_select); if(cur_comic == "Other/graphic novel") { specific_comic_span.style.display = "inline"; } else { specific_comic_span.style.display = "none"; } update_fields; }

function handle_artist_choice { var cur_artist = get_option(artist_select); if(cur_artist == "known") { specific_artist_span.style.display = "inline"; } else { specific_artist_span.style.display = "none"; } update_fields; }

function handle_source_choice { var cur_source = get_option(source_select); if(cur_source == "web") { specific_source_span.style.display = "inline"; } else { specific_source_span.style.display = "none"; } update_fields; }

$("#wpUploadFile").change(function { ogFileName = $("#wpUploadFile").val.split('\\').pop;  $('select[name="source"]').change; });

$("#wpUploadFileURL").change(function { ogFileName = $("#wpUploadFileURL").val.split('/').pop;  $('select[name="source"]').val('web').change; });

function getAcronym(input) { return input.split(' ').map(function(item){return item[0]}).join('').toUpperCase; }

function getGameAbbr(cur_game) { switch (cur_game) { case "Other": if (specific_game_text.value != "") return getAcronym(specific_game_text.value); return "Game"; case "Halo 3: ODST": return "H3ODST"; case "Halo Infinite": return "HINF"; } return getAcronym(cur_game); }

function getFilmAbbr(cur_film) { switch (cur_film) { case "Other": if (specific_film_text.value != "") return getAcronym(specific_film_text.value); return "Film"; } return getAcronym(cur_film); }

function getComicAbbr(cur_comic) { switch (cur_comic) { case "Other/graphic novel": if (specific_comic_text.value != "") return getAcronym(specific_comic_text.value); return "Comic"; } return getAcronym(cur_comic); }

function capitalizeFirstLetter(input) { var firstChar = input.substring(0,1); firstChar = firstChar.toUpperCase; var tail = input.substring(1); input = firstChar + tail; return input; }

function update_fields { var cur_type = get_option(type_select); var cur_media = get_option(media_select); var cur_game = get_option(game_select); var cur_subgame = get_option(subgame_select); var cur_film = get_option(film_select); var cur_comic = get_option(comic_select); var cur_screenshot = get_option(screenshot_select); var cur_icon = get_option(icon_select); var cur_artwork = get_option(artwork_select); var cur_artist = get_option(artist_select); var cur_source = get_option(source_select); has_game = false; has_subgame = false; has_film = false; has_comic = false; has_book = false; has_screenshot = false; has_icon = false; has_artwork = false; has_artist = false; has_source = true; has_filename = false; has_license = true;

if(cur_media == "game") { has_game = true; }

if(cur_media == "game" && cur_game == "Halo: The Master Chief Collection") { has_subgame = true; }

if(cur_media == "film") { has_film = true; }

if(cur_media == "comic") { has_comic = true; }

if(cur_media == "book") { has_book = true; }

if(cur_media == "game" && cur_type == "screenshot") { has_screenshot = true; }

if(cur_media == "game" && cur_type == "icon") { has_icon = true; }

if(cur_type == "artwork") { has_artwork = true; }

if(   cur_type == "artwork" || cur_type == "icon" ||    cur_type == "render" || cur_type == "logo" ||    cur_type == "asset" || cur_type == "page" ||    cur_type == "document" || cur_type == "audio"  ) { has_artist = true; }

if (has_artist && cur_artist == "self") { has_source = false; }

if (has_source && cur_source != "self" && cur_source != "unknown") { has_filename = true; }

if (mw.config.get('wgMFMode')) var show = "block"; else var show = "table-row";

media_tr.style.display = show; game_tr.style.display = has_game ? show : "none"; subgame_tr.style.display = has_subgame ? show : "none"; film_tr.style.display = has_film ? show : "none"; comic_tr.style.display = has_comic ? show : "none"; screenshot_tr.style.display = has_screenshot ? show : "none"; icon_tr.style.display = has_icon ? show : "none"; artwork_tr.style.display = has_artwork ? show : "none"; artist_tr.style.display = has_artist ? show : "none"; source_tr.style.display = has_source ? show : "none"; filename_tr.style.display = has_filename ? show : "none"; license_tr.style.display = has_license ? show : "none";

if (ogFileName != "") { var cur_type = get_option(type_select); var cur_icon = get_option(icon_select); var cur_artwork = get_option(artwork_select); if (has_icon && cur_icon != "other" ) { cur_type = cur_icon; } else if (has_artwork && cur_artwork != "other" ) { cur_type = cur_artwork; } else if (has_screenshot && cur_screenshot != "other" ) { cur_type = cur_screenshot; }	cur_type = capitalizeFirstLetter(cur_type); if (has_game) { abbr = getGameAbbr(cur_game); if (has_subgame && cur_subgame != "N/A") abbr = abbr + " " + getGameAbbr(cur_subgame); } else if (has_film) abbr = getFilmAbbr(cur_film); else if (has_comic) abbr = getComicAbbr(cur_comic); else if (has_book && specific_media_text.value != "") abbr = getAcronym(specific_media_text.value); else abbr = capitalizeFirstLetter(cur_media); filename_input.value = ogFileName; // $("#wpDestFile").val(abbr + " " + cur_type + " " + capitalizeFirstLetter(ogFileName)); }

create_final_result; }

function create_final_result { var t = ""; var cur_media = get_option(media_select); var cur_type = get_option(type_select); var cur_game = get_option(game_select); var cur_subgame = get_option(subgame_select); var cur_film = get_option(film_select); var cur_comic = get_option(comic_select); var cur_screenshot = get_option(screenshot_select); var cur_icon = get_option(icon_select); var cur_artwork = get_option(artwork_select); var cur_artist = get_option(artist_select); var cur_source = get_option(source_select); var cur_license = get_option(license_select); t += "\n\n" if(t.substr(t.length - 2) == "\n\n") { t = t.slice(0, t.length - 1); } final_textarea.value = t; }

function hide_license(table) { document.getElementById("wpLicense").parentNode.parentNode.style.display = "none"; }

function setup_final(table) { var final_toggler_div = document.createElement("div"); final_toggler_div.id = "toggler"; final_toggler_a = document.createElement("a"); final_toggler_a.href = "#"; final_toggler_a.innerHTML = "Show" final_toggler_a.onclick = function(e) { e.preventDefault; toggle_final; }; final_toggler_div.appendChild(document.createTextNode("[")); final_toggler_div.appendChild(final_toggler_a); final_toggler_div.appendChild(document.createTextNode("] summary result (add categories below template)")); add_field("", final_toggler_div, table); final_tr = document.getElementById("wpUploadDescription").parentNode.parentNode; final_textarea = final_tr.getElementsByTagName("textarea")[0]; final_tr.style.display = "none"; final_tr.parentNode.appendChild(final_tr); //Move to last row. }

function toggle_final { if(final_tr.style.display == "none") { if (mw.config.get('wgMFMode')) var show = "block"; else var show = "table-row"; final_tr.style.display = show; final_toggler_a.innerHTML = "Hide"; } else { final_tr.style.display = "none"; final_toggler_a.innerHTML = "Show"; } }

function clear_el(el) { while(el.firstChild){ el.removeChild(el.firstChild); } }

function get_option(sel) { if (sel.options.length == 0) return null; return sel.options[sel.selectedIndex].value; }

function add_option(value, innerHTML, parent, selected) { var opt = document.createElement("option"); opt.value = value; opt.innerHTML = innerHTML; parent.appendChild(opt); if(typeof(selected) != "undefined") { opt.setAttribute("selected", ""); } return opt; }

function add_media(value, parent, selected) { var opt = document.createElement("option"); opt.value = value; opt.innerHTML = value; parent.appendChild(opt); if(typeof(selected) != "undefined") { opt.setAttribute("selected", ""); } return opt; }

function add_optgroup(label, parent) { var optgroup = document.createElement("optgroup"); optgroup.label = label; parent.appendChild(optgroup); return optgroup; }

function add_field(label, content, table) { if (mw.config.get('wgMFMode')) { var tr = document.createElement("div"); tr.className = "mw-htmlform-field-HTMLTextField"; var td1 = document.createElement("div"); td1.className = "mw-label"; td1.innerHTML = label; tr.appendChild(td1); var td2 = document.createElement("div"); td2.className = "mw-input"; td2.appendChild(content); tr.appendChild(td2); } else { var tr = document.createElement("tr"); var td1 = document.createElement("td"); td1.className = "mw-label"; td1.innerHTML = label; tr.appendChild(td1); var td2 = document.createElement("td"); td2.className = "mw-input"; td2.appendChild(content); tr.appendChild(td2); } if (label == "") table.appendChild(tr); else { table.insertBefore(tr, table.childNodes[insert]); insert++; } return tr; }

main;

//