commit d196e531858b0696483782863182440f43a7b678
parent 30b8754abbc8d025efbea199a1822b28fb9d0822
Author: AsherMorgan <59518073+AsherMorgan@users.noreply.github.com>
Date: Sat, 20 Mar 2021 18:56:18 -0700
Add default filter settings
Diffstat:
7 files changed, 140 insertions(+), 5 deletions(-)
diff --git a/css/filtersPage.css b/css/filtersPage.css
@@ -59,7 +59,7 @@
}
/* Hide non-quizzer settings & labels */
-.filtersPage main .settingsInput .appearanceSettings {
+.filtersPage main .settingsInput>div:not(.quizzerPromptsSettings, .quizzerGradingSettings) {
display: none;
}
diff --git a/css/settingsPage.css b/css/settingsPage.css
@@ -10,6 +10,16 @@
.settingsInput input[type=number] {
width: 50px;
}
+.settingsInput .defaultFiltersSettings select {
+ margin-bottom: 5px;
+ margin-right: 5px;
+}
+@media only screen and (max-width: 600px) {
+ .settingsInput .defaultFiltersSettings select {
+ width: 100%;
+ height: 35px;
+ }
+}
diff --git a/js/filtersPage.js b/js/filtersPage.js
@@ -40,10 +40,10 @@ const filterInput = Vue.component("filterInput", {
*/
AddFilter: function() {
if (this.category === "verbs") {
- this.verbFilters.push({tense:"All Tenses", type:"All Types", subject:"All Subjects", direction:"Eng. → Conj."});
+ this.verbFilters.push(getSettings().defaultFilters.verbs);
}
else if (this.category === "vocab") {
- this.vocabFilters.push({category:"All Categories", type:"All Types", direction:"Eng. ↔ Esp."});
+ this.vocabFilters.push(getSettings().defaultFilters.vocab);
}
},
diff --git a/js/global.js b/js/global.js
@@ -37,6 +37,11 @@ function getSettings() {
onMissedPrompt: "Correct me",
repeatPrompts: "Never",
multipleAnswers: "Require all",
+
+ defaultFilters: {
+ verbs: {tense:"All Tenses", type:"All Types", subject:"All Subjects", direction:"Eng. → Conj."},
+ vocab: {category:"All Categories", type:"All Types", direction:"Eng. ↔ Esp."},
+ },
};
// Detect prefered theme
@@ -84,6 +89,11 @@ function getSettings() {
settings.multipleAnswers = parsedSettings.multipleAnswers;
}
+ if (parsedSettings.defaultFilters) {
+ if (parsedSettings.defaultFilters.verbs) settings.defaultFilters.verbs = parsedSettings.defaultFilters.verbs;
+ if (parsedSettings.defaultFilters.vocab) settings.defaultFilters.vocab = parsedSettings.defaultFilters.vocab;
+ }
+
// Return parsed settings
return settings;
}
diff --git a/js/settingsPage.js b/js/settingsPage.js
@@ -97,6 +97,89 @@ const settingsInput = Vue.component("settingsInput", {
</select>
</div>
</div>
+
+ <div class="defaultFiltersSettings">
+ <h2>Default Verb Filter</h2>
+ <div>
+ <select v-model="value.defaultFilters.verbs.tense">
+ <option>All Tenses</option>
+ <option>Present Participles</option>
+ <option>Past Participles</option>
+ <option>Present Tense</option>
+ <option>Preterite Tense</option>
+ <option>Imperfect Tense</option>
+ <option>Simple Future Tense</option>
+ <option>Present Subjunctive Tense</option>
+ </select>
+ <select v-model="value.defaultFilters.verbs.type">
+ <option>All Types</option>
+ <option>Reflexive</option>
+ <option>Regular</option>
+ <option>Nonregular</option>
+ <option>Stem Changing</option>
+ <option>Orthographic</option>
+ <option>Irregular</option>
+ </select>
+ <select v-model="value.defaultFilters.verbs.subject">
+ <option>All Subjects</option>
+ <option>Type</option>
+ <option>Yo</option>
+ <option>Tú</option>
+ <option>Él</option>
+ <option>Nosotros</option>
+ <option>Ellos</option>
+ </select>
+ <select v-model="value.defaultFilters.verbs.direction">
+ <option>Eng. → Conj.</option>
+ <option>Esp. → Conj.</option>
+ <option>Conj. → Eng.</option>
+ <option>Conj. → Esp.</option>
+ </select>
+ </div>
+ <h2>Default Vocab Filter</h2>
+ <div>
+ <select v-model="value.defaultFilters.vocab.category">
+ <option>All Categories</option>
+ <optgroup label="Common Words">
+ <option>Adjectives</option>
+ <option>Adverbs</option>
+ <option>Prepositions</option>
+ <option>Transitions</option>
+ <option>Verbs</option>
+ </optgroup>
+ <optgroup label="Basic Words">
+ <option>Colors</option>
+ <option>Days</option>
+ <option>Months</option>
+ <option>Numbers</option>
+ <option>Questions</option>
+ </optgroup>
+ <optgroup label="Advanced Words">
+ <option>Childhood</option>
+ <option>Clothes</option>
+ <option>Family</option>
+ <option>Food</option>
+ <option>Health</option>
+ <option>House</option>
+ <option>Nature</option>
+ <option>Professions</option>
+ <option>Vacation</option>
+ <option>Weather</option>
+ </optgroup>
+ </select>
+ <select v-model="value.defaultFilters.vocab.type">
+ <option>All Types</option>
+ <option>Adjectives</option>
+ <option>Nouns</option>
+ <option>Verbs</option>
+ </select>
+ <select v-model="value.defaultFilters.vocab.direction">
+ <option>Eng. ↔ Esp.</option>
+ <option>Eng. → Esp.</option>
+ <option>Esp. → Eng.</option>
+ </select>
+ </div>
+ </div>
</div>
`,
});
diff --git a/tests/test.filtersPage.js b/tests/test.filtersPage.js
@@ -75,12 +75,23 @@ describe("FilterInput", function() {
expect(FilterInput.verbFilters.length).to.equal(0);
expect(FilterInput.vocabFilters.length).to.equal(0);
+ // Override getSettings method
+ let old_getSettings = getSettings
+ getSettings = function() {
+ let settings = old_getSettings();
+ settings.defaultFilters.verbs = {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."};
+ return settings;
+ };
+
// Add filter
FilterInput.AddFilter();
+ // Restore getSettings method
+ getSettings = old_getSettings;
+
// Assert filter added
expect(FilterInput.verbFilters).to.have.deep.members([
- {tense:"All Tenses", type:"All Types", subject:"All Subjects", direction:"Eng. → Conj."},
+ {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."},
]);
expect(FilterInput.vocabFilters).to.have.deep.members([]);
});
@@ -93,12 +104,23 @@ describe("FilterInput", function() {
expect(FilterInput.verbFilters.length).to.equal(0);
expect(FilterInput.vocabFilters.length).to.equal(0);
+ // Override getSettings method
+ let old_getSettings = getSettings
+ getSettings = function() {
+ let settings = old_getSettings();
+ settings.defaultFilters.vocab = {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."};
+ return settings;
+ };
+
// Add filter
FilterInput.AddFilter();
+ // Restore getSettings method
+ getSettings = old_getSettings;
+
// Assert filter added
expect(FilterInput.vocabFilters).to.have.deep.members([
- {category:"All Categories", type:"All Types", direction:"Eng. ↔ Esp."},
+ {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."},
]);
expect(FilterInput.verbFilters).to.have.deep.members([]);
});
diff --git a/tests/test.global.js b/tests/test.global.js
@@ -17,6 +17,11 @@ describe("Global.js", function() {
onMissedPrompt: "Tell me",
repeatPrompts: "5 prompts later",
multipleAnswers: "Require any",
+
+ defaultFilters: {
+ verbs: {tense:"Present Tense", type:"Regular", subject:"Yo", direction:"Esp. → Conj."},
+ vocab: {category:"Childhood", type:"Adjectives", direction:"Eng. → Esp."},
+ },
};
localStorage.setItem("settings", JSON.stringify(expected));
@@ -73,6 +78,11 @@ describe("Global.js", function() {
onMissedPrompt: "Correct me",
repeatPrompts: "Never",
multipleAnswers: "Require all",
+
+ defaultFilters: {
+ verbs: {tense:"All Tenses", type:"All Types", subject:"All Subjects", direction:"Eng. → Conj."},
+ vocab: {category:"All Categories", type:"All Types", direction:"Eng. ↔ Esp."},
+ },
});
// Restore original setting to localStorage