Jump to content
Wikipedia The Free Encyclopedia

User:Melecie/Scripts/queer-rainbows.js

From Wikipedia, the free encyclopedia
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump.
This code will be executed when previewing this page.
This user script seems to have a documentation page at User:Melecie/Scripts/queer-rainbows.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
 /***************************************************************************************************
 * queer-rainbows.js by [[User:Melecie]] 
 * This fun userscript embeds a related queer gradient for the titles of queer-related pages! :3
 ***************************************************************************************************/

 // init important variables
 letqueerRainbows_banner="";
 letqueerRainbows_categories=mw.config.get("wgCategories");
 letqueerRainbows_namespace=mw.config.get("wgCanonicalNamespace");
 letqueerRainbows_title=mw.config.get("wgTitle");
 letqueerRainbows_skinUsed=mw.config.get("skin");

 for(letiinqueerRainbows_categories){
 queerRainbows_categories[i]=queerRainbows_categories[i].toLowerCase();
 }

 // dictionaries below
 constqueerRainbows_colorGradients={
 "rainbow":["f9bbc0","f9dbbb","f9f1bb","bbf9bb","bbc7f9","e1bbf9"],
 "gay":["95e0e2","bbf7f9","ffffff","bbc7f9","9598e2"],
 "achillean":["bbc7f9","bbc7f9","ffffff","d0ead0","ffffff","bbc7f9","bbc7f9"],
 "lesbian":["e2959e","f9dbbb","ffffff","f9bbf3","d495e2"],
 "sapphic":["f9bbf3","f9bbf3","ffffff","e1a8ed","ffffff","f9bbf3","f9bbf3"],
 "bisexual":["9598e2","9598e2","e1bbf9","d495e2","d495e2"],
 "pansexual":["f9bbd5","f9bbd5","f9bbd5","faefbb","faefbb","faefbb","bbcff9","bbcff9","bbcff9"],
 "aromantic":["bae8b4","d7f9bb","ffffff","e6eae3","d0d3cd"],
 "asexual":["d4c9d6","e4d5e8","ffffff","e1bbf9"],
 "aroace":["e8ceb4","f9f1bb","ffffff","bbcff9","b8c4e0"],
 "transgender":["bbf7f9","f9bbf1","ffffff","f9bbf1","bbf7f9"],
 "transfeminine":["bbf7f9","f7e3f4","f7d4f2","f9bbf1","f7d4f2","f7e3f4","bbf7f9"],
 "transmasculine":["f9bbf1","e6f6f7","d6f8f9","bbf7f9","d6f8f9","e6f6f7","f9bbf1"],
 "nonbinary":["f9f1bb","ffffff","e1bbf9","c2afc6"],
 "genderqueer":["e1bbf9","ffffff","bbf9bb"],
 "genderfluid":["f9bbf3","ffffff","e1bbf9","b8b8d1","9598e2"],
 "agender":["d0d3cd","e6eae3","ffffff","d7f9bb","ffffff","e6eae3","d0d3cd"],
 "intersex":["f9f1bb","f9f1bb","e1bbf9","f9f1bb","f9f1bb"],
 "queer":["f9bbf3","c2afc6"],
 };

 constqueerRainbows_articlesWithPredefinedBanners={
 "":["man","woman","cisgender","personal pronoun","androgyny","endosex"],
 "rainbow":["questioning (sexuality and gender)","kinsey scale","klein sexual orientation grid","androphilia and gynephilia"],
 "gay":[],
 "achillean":[],
 "lesbian":[],
 "sapphic":["sapphism"],
 "bisexual":[],
 "pansexual":[],
 "aromantic":[],
 "asexual":[],
 "aroace":["aro-ace"],
 "transgender":["hormone replacement therapy"],
 "transfeminine":["trans woman"],
 "transmasculine":["trans man"],
 "nonbinary":[],
 "intersex":[],
 };

 constqueerRainbows_bannerRegexes={
 "rainbow_lastcheck":/lgbt|queer|homosexuality|same-sex sexuality|wiki loves pride/g,// will be checked last // lgbt also matches lgbtq of course, but is left as such to also catch anything still using just that
 "rainbow":/^(?!male).*homosexuality$|same-sex sexuality/g,// first section also un-matches "female homosexuality"
 "gay":/gay|male homosexuality/g,
 "lesbian":/lesbian/g,
 "sapphic":/sapphism|sappho/g,// sappho has not much to do with the sexuality other than through sappho herself, but come on i had to do it
 "bisexual":/(bi|pluri)sexual|sexual fluidity/g,
 "pansexual":/pansexual/g,
 "aromantic":/aromantic/g,
 "asexual":/^.*(demi|a)sexual(?! reproduction).*$/g,
 "agender":/agender/g,
 "transgender":/transgender|^(?!disputed).*gender identity.*$|gender transition/g,
 "transmasculine":/masculinizing (hormone therapy|surgery)|transgender men/g,
 "transfeminine":/feminizing (hormone therapy|surgery)|transgender women/g,
 "nonbinary":/non-?binary|third gender|gender systems|gender[- ]neutral/g,
 "genderfluid":/gender ?fluid/g,
 "intersex":/intersex/g,
 };

 // does a regex scan of all categories in a page and returns true if detected
 functionqueerRainbows_checkCategoriesForMatch(regex){
 for(letcofqueerRainbows_categories){
 if(c.match(regex)){returntrue;}
 }
 returnfalse;
 }

 // removes a given item from an array and returns the new array
 functionqueerRainbows_removeFromArray(arr,str){
 if(!arr.includes(str)){returnarr;}
 arr.splice(arr.indexOf(str),1);
 returnarr;
 }

 // run for articlespace
 functionqueerRainbows_articlespace(){
 // some articles get predefined banners.
 // scan if this article is one of them!
 for(letcurrinqueerRainbows_articlesWithPredefinedBanners){
 if(queerRainbows_articlesWithPredefinedBanners[curr].includes(queerRainbows_title.toLowerCase())){
 queerRainbows_banner=curr;
 return;
 }
 }

 // shunt for biographies
 if($(".biography").length>0){
 // biographies
 letbannerArray=[];

 // each banner type gets a regex test, if it passes a regex test, the article gets can get that banner
 for(letcurrof["intersex","agender","genderfluid","nonbinary","transfeminine","transmasculine","transgender","aromantic","asexual","pansexual","bisexual","gay","lesbian"]){
 if(queerRainbows_checkCategoriesForMatch(queerRainbows_bannerRegexes[curr])){
 bannerArray.push(curr);
 }
 }

 if(bannerArray.length==0){
 // try to match against rainbow_lastcheck if nothing has been matched yet
 if(queerRainbows_checkCategoriesForMatch("rainbow_lastcheck")){queerRainbows_banner="rainbow";}
 }else{
 // transfeminine + transgender --> just transfeminine
 if(bannerArray.includes("transgender")&&bannerArray.includes("transfeminine")){
 bannerArray=queerRainbows_removeFromArray(bannerArray,"transgender");
 }
 // transmasculine + transgender --> just transmasculine
 if(bannerArray.includes("transgender")&&bannerArray.includes("transmasculine")){
 bannerArray=queerRainbows_removeFromArray(bannerArray,"transgender");
 }
 console.log(bannerArray);
 // aromantic + asexual --> replace both with aroace
 if(bannerArray.includes("aromantic")&&bannerArray.includes("asexual")){
 bannerArray=queerRainbows_removeFromArray(bannerArray,"aromantic");
 bannerArray=queerRainbows_removeFromArray(bannerArray,"asexual");
 bannerArray.push("aroace");
 }

 // select one of the available categories by random
 idx=Math.floor(Math.random()*bannerArray.length);
 queerRainbows_banner=bannerArray[idx];
 }

 }else{
 // non-biographies
 // each banner type gets a regex test, if it matches one of the articles, the article gets that banner immediately
 for(letcurrof["sapphic","intersex","genderfluid","nonbinary","transfeminine","transmasculine","transgender","aromantic","asexual","pansexual","bisexual","rainbow","gay","lesbian","rainbow_lastcheck"]){
 if(queerRainbows_checkCategoriesForMatch(queerRainbows_bannerRegexes[curr])){
 if(curr=="rainbow_lastcheck"){queerRainbows_banner="rainbow";}
 else{queerRainbows_banner=curr;}
 return;
 }
 }
 }
 }

 // run for userspace
 functionqueerRainbows_userspace(){
 letbannerArray=[];

 // check for all their LGBTQ Wikipedians categories and add each one to the rotation
 if(queerRainbows_categories.includes("gay wikipedians")){bannerArray.push("gay");}
 if(queerRainbows_categories.includes("lesbian wikipedians")){bannerArray.push("lesbian");}
 if(queerRainbows_categories.includes("bisexual wikipedians")){bannerArray.push("bisexual");}
 if(queerRainbows_categories.includes("pansexual wikipedians")){bannerArray.push("pansexual");}
 if(queerRainbows_categories.includes("non-binary wikipedians")){bannerArray.push("nonbinary");}
 if(queerRainbows_categories.includes("agender wikipedians")){bannerArray.push("agender");}
 if(queerRainbows_categories.includes("genderfluid wikipedians")){bannerArray.push("genderfluid");}
 if(queerRainbows_categories.includes("intersex wikipedians")){bannerArray.push("intersex");}
 if(queerRainbows_categories.includes("queer wikipedians")){bannerArray.push("queer");}
 if(queerRainbows_categories.includes("aromantic wikipedians")){bannerArray.push("aromantic");}
 if(queerRainbows_categories.includes("asexual wikipedians")){bannerArray.push("asexual");}

 // prioritize transfem/transmasc banner over a general trans banner
 if(queerRainbows_categories.includes("trans women wikipedians")){bannerArray.push("transfeminine");}
 if(queerRainbows_categories.includes("trans men wikipedians")){bannerArray.push("transmasculine");}
 if(queerRainbows_categories.includes("transgender wikipedians")&&!bannerArray.includes("transfeminine"&&!bannerArray.includes("transmasculine"))){
 bannerArray.push("transgender");
 }

 if(bannerArray.length==0){
 // if they do not have one of the specific categories but have the LGBTQ Wikipedians one anyway, add a rainbow in
 if(queerRainbows_categories.includes("lgbtq wikipedians")){queerRainbows_banner="rainbow";}
 }else{
 // aromantic + asexual --> replace both with aroace
 if(bannerArray.includes("aromantic")&&bannerArray.includes("asexual")){
 bannerArray=queerRainbows_removeFromArray(bannerArray,"aromantic");
 bannerArray=queerRainbows_removeFromArray(bannerArray,"asexual");
 bannerArray.push("aroace");
 }

 // select one of the available categories by random
 idx=Math.floor(Math.random()*bannerArray.length);
 queerRainbows_banner=bannerArray[idx];
 }
 }

 // run for categoryspace
 functionqueerRainbows_categoryspace(){
 // does the name of this category match one of these regexes below?
 // the main way we try to check for the banner to apply to the page is through categories
 // so this simply fits here
 for(letcurrof["sapphic","intersex","genderfluid","nonbinary","transfeminine","transmasculine","transgender","aromantic","asexual","pansexual","bisexual","rainbow","gay","lesbian","rainbow_lastcheck"]){
 if(queerRainbows_title.toLowerCase().match(queerRainbows_bannerRegexes[curr])){
 if(curr=="rainbow_lastcheck"){queerRainbows_banner="rainbow";}
 else{queerRainbows_banner=curr;}
 return;
 }
 }
 }

 // paint the title/name with the applicable banner
 functionqueerRainbows_painter(){
 // end if no selected color gradient
 if(queerRainbows_banner==""||!Object.keys(queerRainbows_colorGradients).includes(queerRainbows_banner)){return;}

 // generate the code for the background css property
 letselectedColorGradient=queerRainbows_colorGradients[queerRainbows_banner];
 letbackgroundCss="linear-gradient(to right,";
 for(leti=0;i<selectedColorGradient.length;i++){
 backgroundCss+="#"+selectedColorGradient[i]+(i+1<selectedColorGradient.length?",":"");
 }
 backgroundCss+=")";

 // switch method of display based on the currently used skin
 letpageTitleObj={};
 switch(queerRainbows_skinUsed){
 case"vector":// Vector Legacy
 pageTitleObj=$(".firstHeading");
 pageTitleObj.css({
 "margin-bottom":"0px 0.2em",
 "padding":"0em 0.8em",
 "border-radius":"8px",
 "border-bottom":"0px none #aaa",
 "background":backgroundCss,
 });
 break;

 case"vector-2022":// Vector 2022
 pageTitleObj=$(".mw-body-header");
 pageTitleObj.css({
 "border-radius":"8px",
 "background":backgroundCss,
 });
 letpageTitleContainerVector2022=$(".firstHeading");
 pageTitleContainerVector2022.css({
 "padding":"0em 0.5em",
 });
 letpageHeaderVector2022=$(".vector-sticky-header");
 pageHeaderVector2022.css({
 "background":backgroundCss,
 });
 break;

 case"monobook":// Monobook / fallback
 pageTitleObj=$(".firstHeading");
 pageTitleObj.css({
 "margin":"0.3em 0em 0em 0em",
 "padding":"0.2em 0.5em",
 "border-radius":"8px",
 "border-bottom":"0px none #aaa",
 "background":backgroundCss,
 });
 break;

 case"minerva":// MinervaNeue
 pageTitleObj=$(".firstHeading");
 pageTitleObj.css({
 "padding":"0em 0.5em",
 "border-radius":"16px",
 "background":backgroundCss,
 });
 break;

 case"timeless":// Timeless
 pageTitleObj=$(".firstHeading");
 pageTitleObj.css({
 "padding":"0.1em 0.5em 0.1em 0.5em",
 "margin":"0.15em 0em 0.4em 0em",
 "border-radius":"8px",
 "background":backgroundCss,
 "border-bottom":"0px none #aaa",
 });
 break;

 case"cologneblue":// Cologne Blue
 pageTitleObj=$("#firstHeading");
 pageTitleObj.css({
 "padding":"0.1em 0.5em 0.1em 0.5em",
 "margin":"0.3em 0em 0em 0em",
 "border-radius":"8px",
 "border-bottom":"0px none #aaa",
 "background":backgroundCss,
 });
 break;

 case"modern":// Modern
 pageTitleObj=$("#mw_header");
 pageTitleObj.css({
 "background":backgroundCss,
 "color":"black",
 });
 letpageHeaderModern=$(".firstHeading");
 pageHeaderModern.css({
 "border-bottom":"0px none #000",
 });
 break;

 case"apioutput":// APIOutput
 pageTitleObj=$("#firstHeading");
 pageTitleObj.css({
 "padding":"0.17em 0.5em 0.17em 0.5em",
 "margin":"0.53em 0em 0.6em 0em",
 "border-radius":"8px",
 "border-bottom":"0px none #aaa",
 "background":backgroundCss,
 });
 break;

 default:// fallback
 console.log("[[User:Melecie/queer_rainbows.js]] - Skin not officially supported - running fallback~");

 pageTitleObj=$(".firstHeading");
 pageTitleObj.css({
 "padding":"0em 0.5em",
 "border-radius":"8px",
 "background":backgroundCss,
 });
 break;
 }
 }

 // main function
 functionqueerRainbows_main(){
 switch(queerRainbows_namespace){
 case"":queerRainbows_articlespace();break;
 case"Project":queerRainbows_articlespace();break;
 case"User":queerRainbows_userspace();break;
 case"Category":queerRainbows_categoryspace();break;
 }
 queerRainbows_painter();
 }

 queerRainbows_main();

AltStyle によって変換されたページ (->オリジナル) /