From 0901d5ef45bd59a532aeb71c95ca9e0c23bb4b08 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Mon, 18 May 2020 10:11:25 -0400 Subject: [PATCH] Add filters for default size and possible sizes --- macrovision.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 6 deletions(-) diff --git a/macrovision.js b/macrovision.js index 24385787..f051f1a7 100644 --- a/macrovision.js +++ b/macrovision.js @@ -413,6 +413,7 @@ function createEntityMaker(info, views, sizes) { maker.name = info.name; maker.info = info; + maker.sizes = sizes; maker.constructor = () => makeEntity(info, views, sizes); maker.authors = []; @@ -2306,31 +2307,97 @@ const filterDefs = { id: "none", name: "No Filter", extract: maker => [], - render: name => name + render: name => name, + sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) }, author: { id: "author", name: "Authors", extract: maker => maker.authors ? maker.authors : [], - render: author => attributionData.people[author].name + render: author => attributionData.people[author].name, + sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) }, owner: { id: "owner", name: "Owners", extract: maker => maker.owners ? maker.owners : [], - render: owner => attributionData.people[owner].name + render: owner => attributionData.people[owner].name, + sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) }, species: { id: "species", name: "Species", extract: maker => maker.info && maker.info.species ? getSpeciesInfo(maker.info.species) : [], - render: species => speciesData[species].name + render: species => speciesData[species].name, + sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) }, tags: { id: "tags", name: "Tags", extract: maker => maker.info && maker.info.tags ? maker.info.tags : [], - render: tag => tagDefs[tag] + render: tag => tagDefs[tag], + sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) + }, + size: { + id: "size", + name: "Normal Size", + extract: maker => maker.sizes && maker.sizes.length > 0 ? Array.from(maker.sizes.reduce((result, size) => { + if (result && !size.default) { + return result; + } + let meters = size.height.toNumber("meters"); + if (meters < 1e-1) { + return ["micro"]; + } else if (meters < 1e1) { + return ["moderate"]; + } else { + return ["macro"]; + } + }, null)) : [], + render: tag => { return { + "micro": "Micro", + "moderate": "Moderate", + "macro": "Macro" + }[tag]}, + sort: (tag1, tag2) => { + const order = { + "micro": 0, + "moderate": 1, + "macro": 2 + }; + + return order[tag1[0]] - order[tag2[0]]; + } + }, + allSizes: { + id: "allSizes", + name: "Possible Size", + extract: maker => maker.sizes ? Array.from(maker.sizes.reduce((set, size) => { + let meters = size.height.toNumber("meters"); + if (meters < 1e-1) { + set.add("micro"); + } else if (meters < 1e1) { + set.add("moderate"); + } else { + set.add("macro"); + } + + return set; + }, new Set())) : [], + render: tag => { return { + "micro": "Micro", + "moderate": "Moderate", + "macro": "Macro" + }[tag]}, + sort: (tag1, tag2) => { + const order = { + "micro": 0, + "moderate": 1, + "macro": 2 + }; + + return order[tag1[0]] - order[tag2[0]]; + } } } @@ -2456,6 +2523,12 @@ function prepareEntities() { const count = makers.length + 1; let index = 0; + if (makers.length > 50) { + if (!confirm("Really spawn " + makers.length + " things at once?")) { + return; + } + } + makers.map(element => { const category = document.querySelector("#category-picker").value; const maker = availableEntities[category][element.value]; @@ -2466,7 +2539,7 @@ function prepareEntities() { }); }); - Array.from(filterSets[filter.id]).map(name => [name, filter.render(name)]).sort((e1, e2) => e1[1].toLowerCase().localeCompare(e2[1].toLowerCase())).forEach(name => { + Array.from(filterSets[filter.id]).map(name => [name, filter.render(name)]).sort(filterDefs[filter.id].sort).forEach(name => { const option = document.createElement("option"); option.innerText = name[1]; option.value = name[0];