| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |   <v-container fluid> | 
					
						
							|  |  |  |     <v-container fluid class="pa-0"> | 
					
						
							|  |  |  |       <v-row dense> | 
					
						
							|  |  |  |         <v-col> | 
					
						
							|  |  |  |           <v-text-field | 
					
						
							|  |  |  |             v-model="searchString" | 
					
						
							|  |  |  |             outlined | 
					
						
							|  |  |  |             autofocus | 
					
						
							|  |  |  |             color="primary accent-3" | 
					
						
							|  |  |  |             :placeholder="$t('search.search-placeholder')" | 
					
						
							|  |  |  |             :prepend-inner-icon="$globals.icons.search" | 
					
						
							|  |  |  |             clearable | 
					
						
							|  |  |  |           > | 
					
						
							|  |  |  |           </v-text-field> | 
					
						
							|  |  |  |         </v-col> | 
					
						
							|  |  |  |         <v-col cols="12" md="2" sm="12"> | 
					
						
							|  |  |  |           <v-text-field | 
					
						
							|  |  |  |             v-model="maxResults" | 
					
						
							|  |  |  |             class="mt-0 pt-0" | 
					
						
							|  |  |  |             :label="$t('search.max-results')" | 
					
						
							|  |  |  |             type="number" | 
					
						
							|  |  |  |             outlined | 
					
						
							|  |  |  |           /> | 
					
						
							|  |  |  |         </v-col> | 
					
						
							|  |  |  |       </v-row> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <ToggleState> | 
					
						
							|  |  |  |         <template #activator="{ state, toggle }"> | 
					
						
							|  |  |  |           <v-switch :value="state" color="info" class="ma-0 pa-0" label="Advanced" @input="toggle" @click="toggle"> | 
					
						
							|  |  |  |             Advanced | 
					
						
							|  |  |  |           </v-switch> | 
					
						
							|  |  |  |         </template> | 
					
						
							|  |  |  |         <template #default="{ state }"> | 
					
						
							|  |  |  |           <v-expand-transition> | 
					
						
							|  |  |  |             <v-row v-show="state" dense class="my-0 dense flex-row align-center justify-space-around"> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |               <v-col cols="12" class="d-flex flex-wrap flex-md-nowrap justify-center" style="gap: 0.8rem"> | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                 <RecipeOrganizerSelector | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                   v-model="includeCategories" | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                   :input-attrs="{ | 
					
						
							|  |  |  |                     solo: true, | 
					
						
							|  |  |  |                     hideDetails: true, | 
					
						
							|  |  |  |                     dense: false, | 
					
						
							|  |  |  |                   }" | 
					
						
							|  |  |  |                   :show-add="false" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                   :return-object="false" | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                   selector-type="categories" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |                 <RecipeSearchFilterSelector class="mb-1" @update="updateCatParams" /> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |               </v-col> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |               <v-col cols="12" class="d-flex flex-wrap flex-md-nowrap justify-center" style="gap: 0.8rem"> | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                 <RecipeOrganizerSelector | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                   v-model="includeTags" | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                   :input-attrs="{ | 
					
						
							|  |  |  |                     solo: true, | 
					
						
							|  |  |  |                     hideDetails: true, | 
					
						
							|  |  |  |                     dense: false, | 
					
						
							|  |  |  |                   }" | 
					
						
							|  |  |  |                   :show-add="false" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                   :return-object="false" | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |                   selector-type="tags" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |                 <RecipeSearchFilterSelector class="mb-1" @update="updateTagParams" /> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |               </v-col> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |               <v-col cols="12" class="d-flex flex-wrap flex-md-nowrap justify-center" style="gap: 0.8rem"> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                 <v-autocomplete | 
					
						
							|  |  |  |                   v-model="includeFoods" | 
					
						
							|  |  |  |                   chips | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |                   hide-details | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                   deletable-chips | 
					
						
							|  |  |  |                   solo | 
					
						
							|  |  |  |                   multiple | 
					
						
							|  |  |  |                   :items="foods || []" | 
					
						
							|  |  |  |                   item-text="name" | 
					
						
							|  |  |  |                   :prepend-inner-icon="$globals.icons.foods" | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |                   label="Foods" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |                 > | 
					
						
							|  |  |  |                   <template #selection="data"> | 
					
						
							|  |  |  |                     <v-chip | 
					
						
							|  |  |  |                       :key="data.index" | 
					
						
							|  |  |  |                       class="ma-1" | 
					
						
							|  |  |  |                       :input-value="data.selected" | 
					
						
							|  |  |  |                       close | 
					
						
							|  |  |  |                       label | 
					
						
							|  |  |  |                       color="accent" | 
					
						
							|  |  |  |                       dark | 
					
						
							|  |  |  |                       @click:close="includeFoods.splice(data.index, 1)" | 
					
						
							|  |  |  |                     > | 
					
						
							|  |  |  |                       {{ data.item.name || data.item }} | 
					
						
							|  |  |  |                     </v-chip> | 
					
						
							|  |  |  |                   </template> | 
					
						
							|  |  |  |                 </v-autocomplete> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |                 <RecipeSearchFilterSelector class="mb-1" @update="updateFoodParams" /> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |               </v-col> | 
					
						
							|  |  |  |             </v-row> | 
					
						
							|  |  |  |           </v-expand-transition> | 
					
						
							|  |  |  |         </template> | 
					
						
							|  |  |  |       </ToggleState> | 
					
						
							|  |  |  |     </v-container> | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |     <v-container class="px-0 mt-6"> | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |       <RecipeCardSection | 
					
						
							|  |  |  |         class="mt-n5" | 
					
						
							| 
									
										
										
										
											2022-03-29 09:38:23 -08:00
										 |  |  |         :icon="$globals.icons.search" | 
					
						
							|  |  |  |         title="Results" | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         :recipes="showRecipes.slice(0, maxResults)" | 
					
						
							|  |  |  |         @sort="assignFuzzy" | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |     </v-container> | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |   </v-container> | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | </template> | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  | import Fuse from "fuse.js"; | 
					
						
							| 
									
										
										
										
											2021-11-26 22:37:06 -09:00
										 |  |  | import { defineComponent, toRefs, computed, reactive } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  | import RecipeSearchFilterSelector from "~/components/Domain/Recipe/RecipeSearchFilterSelector.vue"; | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  | import RecipeOrganizerSelector from "~/components/Domain/Recipe/RecipeOrganizerSelector.vue"; | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  | import RecipeCardSection from "~/components/Domain/Recipe/RecipeCardSection.vue"; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:29:59 -08:00
										 |  |  | import { useRecipes, allRecipes } from "~/composables/recipes"; | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  | import { RecipeSummary } from "~/types/api-types/recipe"; | 
					
						
							|  |  |  | import { useRouteQuery } from "~/composables/use-router"; | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  | import { RecipeTag } from "~/types/api-types/user"; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:29:59 -08:00
										 |  |  | import { useFoodStore } from "~/composables/store"; | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  | interface GenericFilter { | 
					
						
							|  |  |  |   exclude: boolean; | 
					
						
							|  |  |  |   matchAny: boolean; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |   components: { | 
					
						
							| 
									
										
										
										
											2022-06-03 20:12:32 -08:00
										 |  |  |     RecipeOrganizerSelector, | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |     RecipeSearchFilterSelector, | 
					
						
							|  |  |  |     RecipeCardSection, | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |   setup() { | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |     const { assignSorted } = useRecipes(true); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     // ================================================================
 | 
					
						
							|  |  |  |     // Global State
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const state = reactive({ | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       maxResults: 21, | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  |       // Filters
 | 
					
						
							|  |  |  |       includeCategories: [] as string[], | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       catFilter: { | 
					
						
							|  |  |  |         exclude: false, | 
					
						
							|  |  |  |         matchAny: false, | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |       } as GenericFilter, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       includeTags: [] as string[], | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       tagFilter: { | 
					
						
							|  |  |  |         exclude: false, | 
					
						
							|  |  |  |         matchAny: false, | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |       } as GenericFilter, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       includeFoods: [] as string[], | 
					
						
							|  |  |  |       foodFilter: { | 
					
						
							|  |  |  |         exclude: false, | 
					
						
							|  |  |  |         matchAny: false, | 
					
						
							|  |  |  |       } as GenericFilter, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Recipes Holders
 | 
					
						
							|  |  |  |       searchResults: [] as RecipeSummary[], | 
					
						
							|  |  |  |       sortedResults: [] as RecipeSummary[], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Search Options
 | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       options: { | 
					
						
							| 
									
										
										
										
											2022-08-09 20:34:08 -08:00
										 |  |  |         ignoreLocation: true, | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |         shouldSort: true, | 
					
						
							|  |  |  |         threshold: 0.6, | 
					
						
							|  |  |  |         location: 0, | 
					
						
							|  |  |  |         distance: 100, | 
					
						
							|  |  |  |         findAllMatches: true, | 
					
						
							|  |  |  |         maxPatternLength: 32, | 
					
						
							|  |  |  |         minMatchCharLength: 2, | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         keys: ["name", "description", "recipeIngredient.note", "recipeIngredient.food.name"], | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // ================================================================
 | 
					
						
							|  |  |  |     // Search Functions
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const searchString = useRouteQuery("q", ""); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const filteredRecipes = computed(() => { | 
					
						
							|  |  |  |       if (!allRecipes.value) { | 
					
						
							|  |  |  |         return []; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       // TODO: Fix Type Declarations for RecipeSummary
 | 
					
						
							|  |  |  |       return allRecipes.value.filter((recipe: RecipeSummary) => { | 
					
						
							|  |  |  |         const includesTags = check( | 
					
						
							|  |  |  |           state.includeTags, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-16 03:38:11 +01:00
										 |  |  |           // @ts-ignore See above
 | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  |           recipe.tags.map((x: RecipeTag) => x.name), | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |           state.tagFilter.matchAny, | 
					
						
							|  |  |  |           state.tagFilter.exclude | 
					
						
							| 
									
										
										
										
											2021-10-02 22:07:29 -08:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         const includesCats = check( | 
					
						
							|  |  |  |           state.includeCategories, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-16 03:38:11 +01:00
										 |  |  |           // @ts-ignore See above
 | 
					
						
							| 
									
										
										
										
											2021-10-02 22:07:29 -08:00
										 |  |  |           recipe.recipeCategory.map((x) => x.name), | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |           state.catFilter.matchAny, | 
					
						
							|  |  |  |           state.catFilter.exclude | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |         ); | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         const includesFoods = check( | 
					
						
							|  |  |  |           state.includeFoods, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-16 03:38:11 +01:00
										 |  |  |           // @ts-ignore See above
 | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |           recipe.recipeIngredient.map((x) => x?.food?.name || ""), | 
					
						
							|  |  |  |           state.foodFilter.matchAny, | 
					
						
							|  |  |  |           state.foodFilter.exclude | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         return [includesTags, includesCats, includesFoods].every((x) => x === true); | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       }); | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const fuse = computed(() => { | 
					
						
							|  |  |  |       return new Fuse(filteredRecipes.value, state.options); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const fuzzyRecipes = computed(() => { | 
					
						
							|  |  |  |       if (searchString.value.trim() === "") { | 
					
						
							|  |  |  |         return filteredRecipes.value; | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2022-05-25 09:38:21 -08:00
										 |  |  |       const result = fuse.value.search(searchString.value.trim() as string); | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       return result.map((x) => x.item); | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const showRecipes = computed(() => { | 
					
						
							|  |  |  |       if (state.sortedResults.length > 0) { | 
					
						
							|  |  |  |         return state.sortedResults; | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |         return fuzzyRecipes.value; | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // ================================================================
 | 
					
						
							|  |  |  |     // Utility Functions
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function check(filterBy: string[], recipeList: string[], matchAny: boolean, exclude: boolean) { | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  |       let isMatch = true; | 
					
						
							|  |  |  |       if (filterBy.length === 0) return isMatch; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (recipeList) { | 
					
						
							|  |  |  |         if (matchAny) { | 
					
						
							|  |  |  |           isMatch = filterBy.some((t) => recipeList.includes(t)); // Checks if some items are a match
 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |           isMatch = filterBy.every((t) => recipeList.includes(t)); // Checks if every items is a match
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return exclude ? !isMatch : isMatch; | 
					
						
							|  |  |  |       } else; | 
					
						
							|  |  |  |       return false; | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function assignFuzzy(val: RecipeSummary[]) { | 
					
						
							|  |  |  |       state.sortedResults = val; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function updateTagParams(params: GenericFilter) { | 
					
						
							|  |  |  |       state.tagFilter = params; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function updateCatParams(params: GenericFilter) { | 
					
						
							|  |  |  |       state.catFilter = params; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     function updateFoodParams(params: GenericFilter) { | 
					
						
							|  |  |  |       state.foodFilter = params; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-29 17:29:59 -08:00
										 |  |  |     const { foods } = useFoodStore(); | 
					
						
							| 
									
										
										
										
											2021-11-08 21:12:13 -09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       ...toRefs(state), | 
					
						
							|  |  |  |       allRecipes, | 
					
						
							|  |  |  |       assignFuzzy, | 
					
						
							|  |  |  |       assignSorted, | 
					
						
							|  |  |  |       check, | 
					
						
							|  |  |  |       foods, | 
					
						
							|  |  |  |       searchString, | 
					
						
							|  |  |  |       showRecipes, | 
					
						
							|  |  |  |       updateCatParams, | 
					
						
							|  |  |  |       updateFoodParams, | 
					
						
							|  |  |  |       updateTagParams, | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   head() { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       title: this.$t("search.search") as string, | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2021-07-31 15:07:19 -08:00
										 |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | </script> | 
					
						
							| 
									
										
										
										
											2021-08-08 20:52:44 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | <style></style> |