codsworth-namegen/index.html

249 lines
16 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="author" content="Felix W. Dekker" />
<meta name="application-name" content="Codsworth name generator" />
<meta name="description"
content="Choose a fitting name for your Fallout 4 character that Codsworth can pronounce." />
<meta name="theme-color" content="#0033cc" />
<title>Codsworth name generator</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic"
crossorigin="anonymous" />
<link rel="stylesheet" href="https://static.fwdekker.com/css/milligram-bundle.min.css" crossorigin="anonymous" />
</head>
<body>
<main class="wrapper">
<!-- Header -->
<header class="header">
<section class="container">
<h1>Codsworth name generator</h1>
<noscript>
<span style="color: red; font-weight: bold;">
This website does not function if JavaScript is disabled.
Please check the <a href="https://www.enable-javascript.com/">
instructions on how to enable JavaScript in your web browser</a>.
</span>
</noscript>
<blockquote>
<p><em>
These generators use the
<a href="http://www.cinemablend.com/games/Fallout-4-Full-List-Names-Codsworth-Can-Say-98407.html">
list of names that can be pronounced by Codsworth
</a>
to help you find an appropriate name for your character.
</em></p>
</blockquote>
</section>
</header>
<!-- Generators -->
<section class="container">
<!-- Headers -->
<div class="row">
<div class="column">
<h2>Similar names</h2>
</div>
<div class="column">
<h2>Random names</h2>
</div>
</div>
<!-- Inputs -->
<div class="row">
<div class="column">
<label for="similarInput">Your name</label>
<input id="similarInput" type="text" autofocus />
</div>
<div class="column"></div>
</div>
<!-- Outputs -->
<div class="row">
<div class="column">
<button id="generateSimilar" type="button">Generate similar names</button>
<label for="similarNames">Similar names are...</label>
<textarea id="similarNames" style="height: 10em;" readonly></textarea>
</div>
<div class="column">
<button id="generateRandom" type="button">Generate random name</button>
<label for="randomNames">Your name is...</label>
<textarea id="randomNames" style="height: 10em;" readonly></textarea>
</div>
</div>
</section>
<!-- Footer -->
<footer class="footer">
<section class="container">
Made by <a href="https://fwdekker.com/">Felix W. Dekker</a>.
Licensed under the
<a href="https://git.fwdekker.com/FWDekker/codsworth-namegen/src/branch/master/LICENSE">MIT License</a>.
Source code available on <a href="https://git.fwdekker.com/FWDekker/codsworth-namegen/">git</a>.
<div style="float: right;">v1.0.8</div>
</section>
</footer>
</main>
<!-- Scripts -->
<script src="jaro-winkler.js"></script>
<script src="https://static.fwdekker.com/js/common.js" crossorigin="anonymous"></script>
<script>
/// Constants
const similarCount = 25;
const randomCount = 25;
const nameList = ["Aaliyah", "Aaron", "Abigail", "Abram", "Abrams", "Adalyn", "Adam", "Adams", "Addison", "Adeline", "Adrian", "Ahn", "Aideen", "Aiden", "Akira", "Al", "Alaina", "Alan", "Alana", "Alex", "Alexander", "Alexandra", "Alexis", "Alice", "Allen", "Allison", "Altman", "Alyssa", "Amanda", "Amelia", "Anderson", "Andonov", "Andrew", "Andy", "Angel", "Angela", "Anna", "Annabelle", "Anthony", "Archer", "Aria", "Arianna", "Asdf", "Ash", "Asher", "Ashford", "Ashley", "Asimov", "Assface", "Atkins", "Atkinson", "Atom", "Atomic", "Atticus", "Aubrey", "Audrey", "Austin", "Autumn", "Ava", "Avery", "Bacon", "Badass", "Bailey", "Baker", "Banner", "Bannerman", "Bannion", "Barnes", "Barron", "Barry", "Bash", "Bastard", "Battosai", "Batty", "Baudoin", "Bell", "Bella", "Ben", "Benjamin", "Bennell", "Bennett", "Bentley", "Bery", "Bill", "Billy", "Bilodeau", "Black", "Blaise", "Blake", "Blaze", "Bob", "Bobbi", "Bobby", "Bogdanove", "Bond", "Boob", "Boobie", "Boobies", "Boom", "Boston", "Bowman", "Bradley", "Braun", "Brayden", "Brenda", "Brenna", "Brian", "Brianna", "Brick", "Brigner", "Brock", "Brody", "Brooklyn", "Brooks", "Browder", "Brown", "Browne", "Bruce", "Bruckheimer", "Bryan", "Bryant", "Buffy", "Bulger", "Bull", "Burgess", "Burke", "Burt", "Butch", "Butler", "Caden", "Cal", "Caleb", "Callie", "Camden", "Camilla", "Campbell", "Capable", "Carey", "Carnow", "Carofano", "Caroline", "Carson", "Carter", "Carver", "Casserly", "Castle", "Catherine", "Cha", "Chapin", "Chappy", "Charles", "Charlie", "Charlotte", "Chase", "Cheng", "Cherise", "Cherry", "CherryBomb", "Chloe", "Chopper", "Chris", "Christian", "Christiane", "Christopher", "Church", "Claire", "Clara", "Clark", "Clarke", "Claw", "Clemens", "Clunk", "Cobb", "Cobra", "Cock", "Cockerham", "Cole", "Colin", "Collins", "Colton", "Conall", "Connor", "Cook", "Cooke", "Cooper", "Cormac", "Corman", "Cornelius", "Cornett", "Corrie", "Corrine", "Corvo", "Corwin", "Cory", "Cosgrove", "Courtenay", "Courtney", "Cox", "Coyle", "Craig", "Crash", "Cruz", "Cubbison", "Cullen", "Cummings", "Dag", "Damien", "Dan", "Dane", "Danger", "Daniel", "Daniels", "Danny", "Darrel", "Darren", "Darryl", "Daryl", "Dave", "David", "Davis", "Dawson", "Deag", "Death", "Deb", "Debbie", "Deborah", "Deckard", "Declan", "Deitrick", "Delaney", "Dell", "Dennis", "Denton", "Deschain", "Deth", "Diana", "Diane", "DiAngelo", "Diaz", "Dick", "DiMaggio", "Dinolt", "DJ", "Django", "Dom", "Domics", "Dominguez", "Dominic", "Don", "Donald", "Dong", "DongJun", "Donnie", "Donny", "Doug", "Douglas", "Dragon", "Draper", "Dulany", "Dutch", "Duvall", "Dylan", "Eagle", "East", "Ed", "Eddie", "Eddy", "Edwards", "Elena", "Eli", "Eliana", "Elijah", "Elizabeth", "Ella", "Ellie", "Elliot", "Elliott", "Emil", "Emile", "Emily", "Emma", "Erectus", "Eric", "Erik", "Erin", "Ernest", "Ernie", "Ethan", "Eugene", "Eva", "Evan", "Evans", "Evelyn", "Everdeen", "Everett", "Felipe", "Ferret", "Fifi", "Finn", "Finster", "Fiona", "Fisher", "Flag", "Flagg", "Flash", "Flores", "Flynn", "Foster", "Fox", "Fragile", "Francis", "Franke", "Freeman", "Frost", "Fuck", "Fucker", "Fuckface", "Furiosa", "Fury", "Gabriel", "Gabriella", "Gardiner", "Gary", "Gavin", "Gene", "George", "Georgia", "Gerry", "Gianna", "Gil", "Glen", "Gomez", "Gonzalez", "Goose", "Gordon", "Graber", "Grace", "Grant", "Gravato", "Gray", "Grayson", "Greco", "Green", "Greene", "Grey", "Griffin", "Grognak", "Gryphon", "Gutierrez", "Guy", "Hackman", "Hailey", "Hall", "Ham", "Hamilton", "Hamm", "Hammer", "Hammett", "Hamrick", "Han", "Hannah", "Hans", "Harden", "Hardi", "Harold", "Harper", "Harris", "Harry", "Haschart", "Hasenbuhler", "Hastings", "Hawk", "Hawke", "Hazel", "Henning", "Henry", "Herbert", "Hicks", "Hill", "Hines", "Holly", "Holmes", "Hook", "Hopgood", "Houle", "Howard", "Hudson", "Hughes", "Humongous", "Humungus", "Hyun", "Ian", "Ilya", "Imperator", "Indiana", "Indy", "Isaac", "Isabella", "Isabelle", "Isaiah", "Ist", "Istvan", "J.P.", "Jack", "Jackson", "Jacob", "Jag", "Jake", "James", "Jangjoon", "Jasmine", "Jason", "Jay", "Jayce", "Jayden", "Jeff", "Jeffery", "Jen", "Jenkins", "Jennifer", "Jeremiah", "Jeremy", "Jerry", "Jerusalem", "Jess", "Jessica", "Jessie", "Jet", "Jim", "Jimmy", "Joan", "Joe", "Joel", "Joey", "John", "Johnson", "Jon", "Jonathan", "Jones", "JonPaul", "Jordan", "Jordyn", "Joseph", "Josh", "Joshua", "Josiah", "JP", "Juan", "Julia", "Julian", "Juliana", "Justin", "Kaela", "Kaelyn", "Kaitlyn", "Kal", "KalEl", "Kaneda", "Kate", "Katharine", "Katherine", "Katniss", "Kauffman", "Kayla", "Kaylee", "Keira", "Kelley", "Kelly", "Kelvin", "Ken", "Kennedy", "Kenshin", "Kevin", "Kim", "King", "Kirk", "Knight", "Krietz", "Kuhlmann", "Kurt", "Kylie", "Lafferty", "Lamb", "Landon", "Lane", "Langlois", "Laura", "Lauren", "Laurie", "Layla", "Lea", "Leah", "Lederer", "Lee", "Leo", "Leon", "Les", "Leslie", "Levi", "Lewis", "Li", "Liam", "Liesegang", "Lila", "Liliana", "Lillian", "Lily", "Lincoln", "Linda", "Lionheart", "Lipari", "Liz", "Logan", "London", "Loner", "Long", "Lopez", "Losi", "Lucas", "Luce", "Lucy", "Luke", "Lundin", "Lupe", "Lynda", "Maam", "Mackenzie", "Macklin", "Madam", "Madeleine", "Madelyn", "Madison", "Makayla", "Mal", "Malcolm", "Mamba", "Mandy", "Mara", "Marcus", "Marge", "Maria", "Marie", "Marji", "Marjorie", "Mark", "Markiepoo", "Marko", "Markus", "Marlowe", "Marsden", "Martin", "Martinez", "Marty", "Mary", "Mason", "Mateo", "Matt", "Matthew", "Matty", "Max", "Maya", "McCoy", "McDyer", "McFly", "McKay", "McPherson", "Means", "Megan", "Meister", "Mejillones", "Mia", "Micah", "Michael", "Michonne", "Miguel", "Mikami", "Mike", "Mila", "Miles", "Miller", "Mitchell", "Mohammed", "Molly", "Monster", "Montana", "Moonves", "Moore", "Morales", "Morgan", "Morgue", "Morpheus", "Morris", "Muck", "Mudguts", "Muhammad", "Mulder", "Muldoon", "Murphy", "Myers", "Nadia", "Nancy", "Nanes", "Nardone", "Nasty", "Natalia", "Natalie", "Natasha", "Nate", "Nathan", "Nathaniel", "Nazarov", "nchez", "Neary", "Nelson", "Neo", "Nesmith", "Neville", "Nguyen", "Nicholas", "Nico", "Nipple", "Noah", "Nogueira", "Nolan", "Noonan", "Nora", "Norm", "Norm", "Norman", "Normand", "North", "Northup", "Nourmohammadi", "Nuclear", "Nuke", "Olds", "Oliver", "Olivia", "Ollie", "Olsen", "Olson", "Optical", "Orgasmo", "Orin", "Ortiz", "Owen", "Owens", "Pagliarulo", "Palmer", "Paris", "Parker", "Parson", "Pat", "Patrick", "Patty", "Paul", "Pely", "Pendleton", "Penelope", "Perez", "Perry", "Pete", "Peter", "Peterson", "Peyton", "Phil", "Philip", "Phillips", "Picard", "Plissken", "Powell", "Preacher", "Price", "Priest", "Prince", "Princess", "Psycho", "Puma", "Purkey", "Purkeypile", "Python", "Qin", "Quartermain", "Quatermass", "Queen", "Quinn", "Rabil", "Raf", "Rafael", "Ramirez", "Ramsey", "Randal", "Randall", "Rankin", "Rapp", "Ray", "Raymond", "Reagan", "Red", "Reed", "Reese", "Rex", "Reyes", "Reynolds", "Ricardo", "Richard", "Richards", "Richardson", "Rick", "Ricky", "Rictus", "Riddick", "Riley", "Ripken", "Ripley", "River", "Rivera", "Rob", "Robb", "Robert", "Roberts", "Robinson", "Rock", "Rockatansky", "Rocky", "Rodriguez", "Roger", "Rogers", "Roland", "Rollins", "Romanov", "Romanova", "Romero", "Ron", "Ronald", "Ronnie", "Ronny", "Rook", "Rosa", "Rose", "Ross", "Roy", "Ruby", "Russell", "Ryan", "Sadie", "Sage", "Salvatore", "Sam", "Samantha", "Sammie", "Sammy", "Samuel", "Sanchez", "Sanders", "Sandra", "Sanjuro", "Sara", "Sarah", "Sarse", "Savannah", "Sawyer", "Scarlett", "Schaefer", "Scharf", "Schram", "Schreiber", "Scott", "Scully", "Sears", "Sebastian", "Selena", "Seljenes", "Serena", "Seth", "Sex", "Sexy", "Shane", "Shannon", "Sheiman", "Shen", "Shinji", "Shrike", "Sidney", "Simmons", "Singer", "Sir", "Skyler", "Slaughter", "Slinger", "Slit", "Sloan", "Smirnova", "Smith", "Snake", "Snow", "Snyder", "Solo", "Solomon", "Sophia", "Sophie", "South", "Southie", "Spade", "Spider", "Spike", "Splendid", "Spring", "Springsteen", "Stark", "Stef", "Stella", "Steph", "Stephanie", "Stephen", "Sterling", "Steve", "Steven", "Steward", "Stewart", "Stone", "Struthers", "Stuart", "Sullivan", "Summer", "Sunshine", "Sweetpea", "Sydney", "Tallahassee", "Taylor", "Teare", "Ted", "Teddy", "Teitel", "Tesla", "Tetsuo", "Texas", "Thomas", "Thompson", "Thorn", "Thorne", "Tiana", "Tim", "Timmy", "Timothy", "Tit", "Tittie", "Titties", "Toadie", "Toast", "Todd", "Toecutter", "Tom", "Tommy", "Tonon", "Tony", "Torres", "Tracey", "Tracy", "Treadway", "Tresnjak", "Trinity", "Tristan", "Trump", "Tuck", "Turner", "Tyler", "Unbreakable", "Utting", "Valenti", "Valentina", "Valkyrie", "Vargas", "Vash", "Venkman", "Vic", "Vicens", "Victoria", "Violet", "Vivian", "Vlatko", "Wagner", "Walker", "Walton", "Wanderer", "Ward", "Washington", "Watson", "Watts", "Wayne", "Webb", "Wells", "Wes", "West", "Weyland", "Wez", "White", "Whitey", "Wikus", "Will", "William", "Williams", "Willy", "Wilson", "Winter", "Wisnewski", "Wood", "Woodward", "Wright", "Wyatt", "Xavier", "Yan", "Yojimbo", "Yorick", "Young", "Yutani", "Zachary", "Zdana", "Zed", "Zenith", "Zetta", "Ziggy", "Zip", "Zoe"];
/// Shared functions
// Loads user options in template and returns combination
const optionDefault = (template, options) => {
for (let prop in options)
if (options.hasOwnProperty(prop))
template[prop] = options[prop];
return template;
};
// Returns a mod b
const modulo = (a, b) => (((a % b) + b) % b);
/// Name generator
class Name {
constructor(size) {
size = (size === undefined ? 10 : size);
this.count_ = 0;
this.history_ = [];
this.size_ = size;
}
// Returns a random name
static generate_() {
return nameList[Math.floor(Math.random() * nameList.length)];
}
// Adds given name to history
add(name) {
if (name !== undefined) {
this.history_[modulo(this.count_, this.size_)] = name;
this.count_++;
}
return name;
}
// Adds a random name to history
addRandom() {
return this.add(Name.generate_());
};
// Returns history
getHistory(separator, count) {
count = (count === undefined ? Math.min(this.size_, this.count_) : count);
const out = [];
for (let i = count; i > 0; i--) {
const name = this.history_[modulo((this.count_ - i), this.size_)];
if (name === undefined)
break;
out.push(name);
}
return out.join(separator);
};
}
/// Jaro-Winkler similarity
class JaroWinkler {
constructor(name) {
this.algo_ = jaro_winkler;
this.name_ = name;
this.reset_();
this.populate_();
}
// Comparator for values returned by algorithm
static comparator_(a, b) {
return b[1] - a[1];
}
// Resets object
reset_() {
this.hits_ = [];
};
// Populates hits
populate_() {
const listSize = nameList.length;
for (let i = 0; i < listSize; i++) {
const name = nameList[i];
const value = this.algo_(this.name_, name, {caseSensitive: false});
this.hits_[i] = [name, value];
}
this.hits_.sort(JaroWinkler.comparator_);
};
// Returns `amount` best matches
getSimilar(amount) {
const similar = [];
for (let i = 0; i < amount; i++)
similar[i] = this.hits_[i][0];
return similar;
};
}
/// Event handling
const generateSimilar = () => {
const name = $("#similarInput").value;
if (name === undefined || name === "")
return;
const names = (new JaroWinkler(name)).getSimilar(similarCount);
$("#similarNames").value = names.join("\n");
};
$("#generateSimilar").onclick = generateSimilar;
$("#similarInput").addEventListener("keypress", e => {
if (e.key === "Enter") {
generateSimilar();
e.preventDefault();
}
});
const randNamer = new Name(randomCount);
const generateRandom = () => {
randNamer.addRandom();
const randOutput = $("#randomNames");
randOutput.value = randNamer.getHistory("\n");
randOutput.scrollTop = randOutput.scrollHeight;
};
$("#generateRandom").onclick = generateRandom;
</script>
</body>
</html>