diff --git a/LaundrYours/accounts/__pycache__/__init__.cpython-38.pyc b/LaundrYours/accounts/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..082d7a0
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/__init__.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/__init__.cpython-39.pyc b/LaundrYours/accounts/__pycache__/__init__.cpython-39.pyc
index 948d630..919d12a 100644
Binary files a/LaundrYours/accounts/__pycache__/__init__.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/__init__.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/admin.cpython-38.pyc b/LaundrYours/accounts/__pycache__/admin.cpython-38.pyc
new file mode 100644
index 0000000..7321763
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/admin.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/admin.cpython-39.pyc b/LaundrYours/accounts/__pycache__/admin.cpython-39.pyc
index 901c2b4..3b22389 100644
Binary files a/LaundrYours/accounts/__pycache__/admin.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/admin.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/apps.cpython-38.pyc b/LaundrYours/accounts/__pycache__/apps.cpython-38.pyc
new file mode 100644
index 0000000..aaaa1cd
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/apps.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/apps.cpython-39.pyc b/LaundrYours/accounts/__pycache__/apps.cpython-39.pyc
index b2fc04c..a7431ef 100644
Binary files a/LaundrYours/accounts/__pycache__/apps.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/apps.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/models.cpython-38.pyc b/LaundrYours/accounts/__pycache__/models.cpython-38.pyc
new file mode 100644
index 0000000..ca23e40
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/models.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/models.cpython-39.pyc b/LaundrYours/accounts/__pycache__/models.cpython-39.pyc
index 7ccfb0d..03ce45b 100644
Binary files a/LaundrYours/accounts/__pycache__/models.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/models.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/urls.cpython-38.pyc b/LaundrYours/accounts/__pycache__/urls.cpython-38.pyc
new file mode 100644
index 0000000..9986090
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/urls.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/urls.cpython-39.pyc b/LaundrYours/accounts/__pycache__/urls.cpython-39.pyc
index 519e6e6..7875cb3 100644
Binary files a/LaundrYours/accounts/__pycache__/urls.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/urls.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/views.cpython-38.pyc b/LaundrYours/accounts/__pycache__/views.cpython-38.pyc
new file mode 100644
index 0000000..44c8dea
Binary files /dev/null and b/LaundrYours/accounts/__pycache__/views.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/__pycache__/views.cpython-39.pyc b/LaundrYours/accounts/__pycache__/views.cpython-39.pyc
index 65f17f8..30ebb1f 100644
Binary files a/LaundrYours/accounts/__pycache__/views.cpython-39.pyc and b/LaundrYours/accounts/__pycache__/views.cpython-39.pyc differ
diff --git a/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-38.pyc b/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..36ef442
Binary files /dev/null and b/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-38.pyc differ
diff --git a/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-39.pyc b/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-39.pyc
index a4b24e1..a2dd5cf 100644
Binary files a/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-39.pyc and b/LaundrYours/accounts/migrations/__pycache__/__init__.cpython-39.pyc differ
diff --git a/LaundrYours/db.sqlite3 b/LaundrYours/db.sqlite3
index 1cada64..2ca29eb 100644
Binary files a/LaundrYours/db.sqlite3 and b/LaundrYours/db.sqlite3 differ
diff --git a/LaundrYours/images/cotton.jpg b/LaundrYours/images/cotton.jpg
new file mode 100644
index 0000000..45f9a00
Binary files /dev/null and b/LaundrYours/images/cotton.jpg differ
diff --git "a/LaundrYours/images/\354\212\244\355\201\254\353\246\260\354\203\267_2021-11-10_\354\230\244\355\233\204_1.27.30.png" "b/LaundrYours/images/\354\212\244\355\201\254\353\246\260\354\203\267_2021-11-10_\354\230\244\355\233\204_1.27.30.png"
new file mode 100644
index 0000000..fb1baa3
Binary files /dev/null and "b/LaundrYours/images/\354\212\244\355\201\254\353\246\260\354\203\267_2021-11-10_\354\230\244\355\233\204_1.27.30.png" differ
diff --git a/LaundrYours/laundryours/__pycache__/__init__.cpython-37.pyc b/LaundrYours/laundryours/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..1f0efad
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/__init__.cpython-37.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/__init__.cpython-38.pyc b/LaundrYours/laundryours/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..2294c22
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/__init__.cpython-38.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/__init__.cpython-39.pyc b/LaundrYours/laundryours/__pycache__/__init__.cpython-39.pyc
index 50b6ac2..2767ee3 100644
Binary files a/LaundrYours/laundryours/__pycache__/__init__.cpython-39.pyc and b/LaundrYours/laundryours/__pycache__/__init__.cpython-39.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/settings.cpython-37.pyc b/LaundrYours/laundryours/__pycache__/settings.cpython-37.pyc
new file mode 100644
index 0000000..0e03bc5
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/settings.cpython-37.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/settings.cpython-38.pyc b/LaundrYours/laundryours/__pycache__/settings.cpython-38.pyc
new file mode 100644
index 0000000..bfd737f
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/settings.cpython-38.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/settings.cpython-39.pyc b/LaundrYours/laundryours/__pycache__/settings.cpython-39.pyc
index 7a815d1..b326f60 100644
Binary files a/LaundrYours/laundryours/__pycache__/settings.cpython-39.pyc and b/LaundrYours/laundryours/__pycache__/settings.cpython-39.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/urls.cpython-37.pyc b/LaundrYours/laundryours/__pycache__/urls.cpython-37.pyc
new file mode 100644
index 0000000..b612fba
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/urls.cpython-37.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/urls.cpython-38.pyc b/LaundrYours/laundryours/__pycache__/urls.cpython-38.pyc
new file mode 100644
index 0000000..bfac02a
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/urls.cpython-38.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/urls.cpython-39.pyc b/LaundrYours/laundryours/__pycache__/urls.cpython-39.pyc
index 6c72953..3f2c502 100644
Binary files a/LaundrYours/laundryours/__pycache__/urls.cpython-39.pyc and b/LaundrYours/laundryours/__pycache__/urls.cpython-39.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/wsgi.cpython-37.pyc b/LaundrYours/laundryours/__pycache__/wsgi.cpython-37.pyc
new file mode 100644
index 0000000..c235aa6
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/wsgi.cpython-37.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/wsgi.cpython-38.pyc b/LaundrYours/laundryours/__pycache__/wsgi.cpython-38.pyc
new file mode 100644
index 0000000..6ba5a6a
Binary files /dev/null and b/LaundrYours/laundryours/__pycache__/wsgi.cpython-38.pyc differ
diff --git a/LaundrYours/laundryours/__pycache__/wsgi.cpython-39.pyc b/LaundrYours/laundryours/__pycache__/wsgi.cpython-39.pyc
index 576559d..dfbf475 100644
Binary files a/LaundrYours/laundryours/__pycache__/wsgi.cpython-39.pyc and b/LaundrYours/laundryours/__pycache__/wsgi.cpython-39.pyc differ
diff --git a/LaundrYours/laundryours/settings.py b/LaundrYours/laundryours/settings.py
index 1056bd1..206b5c2 100644
--- a/LaundrYours/laundryours/settings.py
+++ b/LaundrYours/laundryours/settings.py
@@ -56,7 +56,7 @@
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
+ 'DIRS':[BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
diff --git a/LaundrYours/laundryours/urls.py b/LaundrYours/laundryours/urls.py
index a4e0036..477bd62 100644
--- a/LaundrYours/laundryours/urls.py
+++ b/LaundrYours/laundryours/urls.py
@@ -16,10 +16,11 @@
from django.contrib import admin
from django.urls import path, include
import accounts.views
-import search.views
+from search.views import *
urlpatterns = [
path('admin/', admin.site.urls),
- path('', search.views.home, name="home"),
+ path('', home, name="home"),
path('accounts/', include('accounts.urls')),
+ path('', fiberResult, name="fiberResult"),
]
diff --git a/LaundrYours/node_modules/vue/LICENSE b/LaundrYours/node_modules/vue/LICENSE
new file mode 100644
index 0000000..b65dd9e
--- /dev/null
+++ b/LaundrYours/node_modules/vue/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-present, Yuxi (Evan) You
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/LaundrYours/node_modules/vue/README.md b/LaundrYours/node_modules/vue/README.md
new file mode 100644
index 0000000..862d58f
--- /dev/null
+++ b/LaundrYours/node_modules/vue/README.md
@@ -0,0 +1,386 @@
+

+
+
+
+
+
+
+
+
+
+
+
+
+Supporting Vue.js
+
+Vue.js is an MIT-licensed open source project with its ongoing development made possible entirely by the support of these awesome [backers](https://github.com/vuejs/vue/blob/dev/BACKERS.md). If you'd like to join them, please consider:
+
+- [Become a backer or sponsor on Patreon](https://www.patreon.com/evanyou).
+- [Become a backer or sponsor on Open Collective](https://opencollective.com/vuejs).
+- [One-time donation via PayPal or crypto-currencies](https://vuejs.org/support-vuejs/#One-time-Donations).
+
+#### What's the difference between Patreon and OpenCollective?
+
+Funds donated via Patreon go directly to support Evan You's full-time work on Vue.js. Funds donated via OpenCollective are managed with transparent expenses and will be used for compensating work and expenses for core team members or sponsoring community events. Your name/logo will receive proper recognition and exposure by donating on either platform.
+
+Special Sponsors
+
+
+
+
+
+
+
+
+
+
+Platinum Sponsors
+
+
+
+
+
+
+Platinum Sponsors (China)
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+Gold Sponsors
+
+
+
+
+
+
+
+Platinum
+
+
+
+
+Gold
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## Introduction
+
+Vue (pronounced `/vjuː/`, like view) is a **progressive framework** for building user interfaces. It is designed from the ground up to be incrementally adoptable, and can easily scale between a library and a framework depending on different use cases. It consists of an approachable core library that focuses on the view layer only, and an ecosystem of supporting libraries that helps you tackle complexity in large Single-Page Applications.
+
+#### Browser Compatibility
+
+Vue.js supports all browsers that are [ES5-compliant](https://kangax.github.io/compat-table/es5/) (IE8 and below are not supported).
+
+## Ecosystem
+
+| Project | Status | Description |
+|---------|--------|-------------|
+| [vue-router] | [![vue-router-status]][vue-router-package] | Single-page application routing |
+| [vuex] | [![vuex-status]][vuex-package] | Large-scale state management |
+| [vue-cli] | [![vue-cli-status]][vue-cli-package] | Project scaffolding |
+| [vue-loader] | [![vue-loader-status]][vue-loader-package] | Single File Component (`*.vue` file) loader for webpack |
+| [vue-server-renderer] | [![vue-server-renderer-status]][vue-server-renderer-package] | Server-side rendering support |
+| [vue-class-component] | [![vue-class-component-status]][vue-class-component-package] | TypeScript decorator for a class-based API |
+| [vue-rx] | [![vue-rx-status]][vue-rx-package] | RxJS integration |
+| [vue-devtools] | [![vue-devtools-status]][vue-devtools-package] | Browser DevTools extension |
+
+[vue-router]: https://github.com/vuejs/vue-router
+[vuex]: https://github.com/vuejs/vuex
+[vue-cli]: https://github.com/vuejs/vue-cli
+[vue-loader]: https://github.com/vuejs/vue-loader
+[vue-server-renderer]: https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer
+[vue-class-component]: https://github.com/vuejs/vue-class-component
+[vue-rx]: https://github.com/vuejs/vue-rx
+[vue-devtools]: https://github.com/vuejs/vue-devtools
+
+[vue-router-status]: https://img.shields.io/npm/v/vue-router.svg
+[vuex-status]: https://img.shields.io/npm/v/vuex.svg
+[vue-cli-status]: https://img.shields.io/npm/v/@vue/cli.svg
+[vue-loader-status]: https://img.shields.io/npm/v/vue-loader.svg
+[vue-server-renderer-status]: https://img.shields.io/npm/v/vue-server-renderer.svg
+[vue-class-component-status]: https://img.shields.io/npm/v/vue-class-component.svg
+[vue-rx-status]: https://img.shields.io/npm/v/vue-rx.svg
+[vue-devtools-status]: https://img.shields.io/chrome-web-store/v/nhdogjmejiglipccpnnnanhbledajbpd.svg
+
+[vue-router-package]: https://npmjs.com/package/vue-router
+[vuex-package]: https://npmjs.com/package/vuex
+[vue-cli-package]: https://npmjs.com/package/@vue/cli
+[vue-loader-package]: https://npmjs.com/package/vue-loader
+[vue-server-renderer-package]: https://npmjs.com/package/vue-server-renderer
+[vue-class-component-package]: https://npmjs.com/package/vue-class-component
+[vue-rx-package]: https://npmjs.com/package/vue-rx
+[vue-devtools-package]: https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd
+
+## Documentation
+
+To check out [live examples](https://vuejs.org/v2/examples/) and docs, visit [vuejs.org](https://vuejs.org).
+
+## Questions
+
+For questions and support please use [the official forum](https://forum.vuejs.org) or [community chat](https://chat.vuejs.org/). The issue list of this repo is **exclusively** for bug reports and feature requests.
+
+## Issues
+
+Please make sure to read the [Issue Reporting Checklist](https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md#issue-reporting-guidelines) before opening an issue. Issues not conforming to the guidelines may be closed immediately.
+
+## Changelog
+
+Detailed changes for each release are documented in the [release notes](https://github.com/vuejs/vue/releases).
+
+## Stay In Touch
+
+- [Twitter](https://twitter.com/vuejs)
+- [Blog](https://medium.com/the-vue-point)
+- [Job Board](https://vuejobs.com/?ref=vuejs)
+
+## Contribution
+
+Please make sure to read the [Contributing Guide](https://github.com/vuejs/vue/blob/dev/.github/CONTRIBUTING.md) before making a pull request. If you have a Vue-related project/component/tool, add it with a pull request to [this curated list](https://github.com/vuejs/awesome-vue)!
+
+Thank you to all the people who already contributed to Vue!
+
+
+
+
+## License
+
+[MIT](https://opensource.org/licenses/MIT)
+
+Copyright (c) 2013-present, Yuxi (Evan) You
diff --git a/LaundrYours/node_modules/vue/dist/README.md b/LaundrYours/node_modules/vue/dist/README.md
new file mode 100644
index 0000000..19386ec
--- /dev/null
+++ b/LaundrYours/node_modules/vue/dist/README.md
@@ -0,0 +1,122 @@
+## Explanation of Build Files
+
+| | UMD | CommonJS | ES Module |
+| --- | --- | --- | --- |
+| **Full** | vue.js | vue.common.js | vue.esm.js |
+| **Runtime-only** | vue.runtime.js | vue.runtime.common.js | vue.runtime.esm.js |
+| **Full (production)** | vue.min.js | | |
+| **Runtime-only (production)** | vue.runtime.min.js | | |
+
+### Terms
+
+- **Full**: builds that contain both the compiler and the runtime.
+
+- **Compiler**: code that is responsible for compiling template strings into JavaScript render functions.
+
+- **Runtime**: code that is responsible for creating Vue instances, rendering and patching virtual DOM, etc. Basically everything minus the compiler.
+
+- **[UMD](https://github.com/umdjs/umd)**: UMD builds can be used directly in the browser via a ``
+ : ''
+ }
+
+ renderScripts (context: Object): string {
+ if (this.clientManifest) {
+ const initial = this.preloadFiles.filter(({ file }) => isJS(file))
+ const async = (this.getUsedAsyncFiles(context) || []).filter(({ file }) => isJS(file))
+ const needed = [initial[0]].concat(async, initial.slice(1))
+ return needed.map(({ file }) => {
+ return ``
+ }).join('')
+ } else {
+ return ''
+ }
+ }
+
+ getUsedAsyncFiles (context: Object): ?Array {
+ if (!context._mappedFiles && context._registeredComponents && this.mapFiles) {
+ const registered = Array.from(context._registeredComponents)
+ context._mappedFiles = this.mapFiles(registered).map(normalizeFile)
+ }
+ return context._mappedFiles
+ }
+
+ // create a transform stream
+ createStream (context: ?Object): TemplateStream {
+ if (!this.parsedTemplate) {
+ throw new Error('createStream cannot be called without a template.')
+ }
+ return new TemplateStream(this, this.parsedTemplate, context || {})
+ }
+}
+
+function normalizeFile (file: string): Resource {
+ const withoutQuery = file.replace(/\?.*/, '')
+ const extension = path.extname(withoutQuery).slice(1)
+ return {
+ file,
+ extension,
+ fileWithoutQuery: withoutQuery,
+ asType: getPreloadType(extension)
+ }
+}
+
+function getPreloadType (ext: string): string {
+ if (ext === 'js') {
+ return 'script'
+ } else if (ext === 'css') {
+ return 'style'
+ } else if (/jpe?g|png|svg|gif|webp|ico/.test(ext)) {
+ return 'image'
+ } else if (/woff2?|ttf|otf|eot/.test(ext)) {
+ return 'font'
+ } else {
+ // not exhausting all possibilities here, but above covers common cases
+ return ''
+ }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/template-renderer/parse-template.js b/LaundrYours/node_modules/vue/src/server/template-renderer/parse-template.js
new file mode 100644
index 0000000..1ccfe89
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/template-renderer/parse-template.js
@@ -0,0 +1,42 @@
+/* @flow */
+
+const compile = require('lodash.template')
+const compileOptions = {
+ escape: /{{([^{][\s\S]+?[^}])}}/g,
+ interpolate: /{{{([\s\S]+?)}}}/g
+}
+
+export type ParsedTemplate = {
+ head: (data: any) => string;
+ neck: (data: any) => string;
+ tail: (data: any) => string;
+};
+
+export function parseTemplate (
+ template: string,
+ contentPlaceholder?: string = ''
+): ParsedTemplate {
+ if (typeof template === 'object') {
+ return template
+ }
+
+ let i = template.indexOf('')
+ const j = template.indexOf(contentPlaceholder)
+
+ if (j < 0) {
+ throw new Error(`Content placeholder not found in template.`)
+ }
+
+ if (i < 0) {
+ i = template.indexOf('')
+ if (i < 0) {
+ i = j
+ }
+ }
+
+ return {
+ head: compile(template.slice(0, i), compileOptions),
+ neck: compile(template.slice(i, j), compileOptions),
+ tail: compile(template.slice(j + contentPlaceholder.length), compileOptions)
+ }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/template-renderer/template-stream.js b/LaundrYours/node_modules/vue/src/server/template-renderer/template-stream.js
new file mode 100644
index 0000000..ed4db78
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/template-renderer/template-stream.js
@@ -0,0 +1,82 @@
+/* @flow */
+
+const Transform = require('stream').Transform
+import type TemplateRenderer from './index'
+import type { ParsedTemplate } from './parse-template'
+
+export default class TemplateStream extends Transform {
+ started: boolean;
+ renderer: TemplateRenderer;
+ template: ParsedTemplate;
+ context: Object;
+ inject: boolean;
+
+ constructor (
+ renderer: TemplateRenderer,
+ template: ParsedTemplate,
+ context: Object
+ ) {
+ super()
+ this.started = false
+ this.renderer = renderer
+ this.template = template
+ this.context = context || {}
+ this.inject = renderer.inject
+ }
+
+ _transform (data: Buffer | string, encoding: string, done: Function) {
+ if (!this.started) {
+ this.emit('beforeStart')
+ this.start()
+ }
+ this.push(data)
+ done()
+ }
+
+ start () {
+ this.started = true
+ this.push(this.template.head(this.context))
+
+ if (this.inject) {
+ // inline server-rendered head meta information
+ if (this.context.head) {
+ this.push(this.context.head)
+ }
+
+ // inline preload/prefetch directives for initial/async chunks
+ const links = this.renderer.renderResourceHints(this.context)
+ if (links) {
+ this.push(links)
+ }
+
+ // CSS files and inline server-rendered CSS collected by vue-style-loader
+ const styles = this.renderer.renderStyles(this.context)
+ if (styles) {
+ this.push(styles)
+ }
+ }
+
+ this.push(this.template.neck(this.context))
+ }
+
+ _flush (done: Function) {
+ this.emit('beforeEnd')
+
+ if (this.inject) {
+ // inline initial store state
+ const state = this.renderer.renderState(this.context)
+ if (state) {
+ this.push(state)
+ }
+
+ // embed scripts needed
+ const scripts = this.renderer.renderScripts(this.context)
+ if (scripts) {
+ this.push(scripts)
+ }
+ }
+
+ this.push(this.template.tail(this.context))
+ done()
+ }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/util.js b/LaundrYours/node_modules/vue/src/server/util.js
new file mode 100644
index 0000000..908f8c9
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/util.js
@@ -0,0 +1,18 @@
+/* @flow */
+
+export const isJS = (file: string): boolean => /\.js(\?[^.]+)?$/.test(file)
+
+export const isCSS = (file: string): boolean => /\.css(\?[^.]+)?$/.test(file)
+
+export function createPromiseCallback () {
+ let resolve, reject
+ const promise: Promise = new Promise((_resolve, _reject) => {
+ resolve = _resolve
+ reject = _reject
+ })
+ const cb = (err: Error, res?: string) => {
+ if (err) return reject(err)
+ resolve(res || '')
+ }
+ return { promise, cb }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/webpack-plugin/client.js b/LaundrYours/node_modules/vue/src/server/webpack-plugin/client.js
new file mode 100644
index 0000000..ec7b875
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/webpack-plugin/client.js
@@ -0,0 +1,67 @@
+const hash = require('hash-sum')
+const uniq = require('lodash.uniq')
+import { isJS, isCSS, getAssetName, onEmit, stripModuleIdHash } from './util'
+
+export default class VueSSRClientPlugin {
+ constructor (options = {}) {
+ this.options = Object.assign({
+ filename: 'vue-ssr-client-manifest.json'
+ }, options)
+ }
+
+ apply (compiler) {
+ const stage = 'PROCESS_ASSETS_STAGE_ADDITIONAL'
+ onEmit(compiler, 'vue-client-plugin', stage, (compilation, cb) => {
+ const stats = compilation.getStats().toJson()
+
+ const allFiles = uniq(stats.assets
+ .map(a => a.name))
+
+ const initialFiles = uniq(Object.keys(stats.entrypoints)
+ .map(name => stats.entrypoints[name].assets)
+ .reduce((assets, all) => all.concat(assets), [])
+ .map(getAssetName)
+ .filter((file) => isJS(file) || isCSS(file)))
+
+ const asyncFiles = allFiles
+ .filter((file) => isJS(file) || isCSS(file))
+ .filter(file => initialFiles.indexOf(file) < 0)
+
+ const manifest = {
+ publicPath: stats.publicPath,
+ all: allFiles,
+ initial: initialFiles,
+ async: asyncFiles,
+ modules: { /* [identifier: string]: Array */ }
+ }
+
+ const assetModules = stats.modules.filter(m => m.assets.length)
+ const fileToIndex = asset => manifest.all.indexOf(getAssetName(asset))
+ stats.modules.forEach(m => {
+ // ignore modules duplicated in multiple chunks
+ if (m.chunks.length === 1) {
+ const cid = m.chunks[0]
+ const chunk = stats.chunks.find(c => c.id === cid)
+ if (!chunk || !chunk.files) {
+ return
+ }
+ const id = stripModuleIdHash(m.identifier)
+ const files = manifest.modules[hash(id)] = chunk.files.map(fileToIndex)
+ // find all asset modules associated with the same chunk
+ assetModules.forEach(m => {
+ if (m.chunks.some(id => id === cid)) {
+ files.push.apply(files, m.assets.map(fileToIndex))
+ }
+ })
+ }
+ })
+
+ const json = JSON.stringify(manifest, null, 2)
+ compilation.assets[this.options.filename] = {
+ source: () => json,
+ size: () => json.length
+ }
+ cb()
+ })
+ }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/webpack-plugin/server.js b/LaundrYours/node_modules/vue/src/server/webpack-plugin/server.js
new file mode 100644
index 0000000..02fab24
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/webpack-plugin/server.js
@@ -0,0 +1,69 @@
+import { validate, isJS, getAssetName, onEmit } from './util'
+
+export default class VueSSRServerPlugin {
+ constructor (options = {}) {
+ this.options = Object.assign({
+ filename: 'vue-ssr-server-bundle.json'
+ }, options)
+ }
+
+ apply (compiler) {
+ validate(compiler)
+
+ const stage = 'PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER'
+ onEmit(compiler, 'vue-server-plugin', stage, (compilation, cb) => {
+ const stats = compilation.getStats().toJson()
+ const entryName = Object.keys(stats.entrypoints)[0]
+ const entryInfo = stats.entrypoints[entryName]
+
+ if (!entryInfo) {
+ // #5553
+ return cb()
+ }
+
+ const entryAssets = entryInfo.assets
+ .map(getAssetName)
+ .filter(isJS)
+
+ if (entryAssets.length > 1) {
+ throw new Error(
+ `Server-side bundle should have one single entry file. ` +
+ `Avoid using CommonsChunkPlugin in the server config.`
+ )
+ }
+
+ const entry = entryAssets[0]
+ if (!entry || typeof entry !== 'string') {
+ throw new Error(
+ `Entry "${entryName}" not found. Did you specify the correct entry option?`
+ )
+ }
+
+ const bundle = {
+ entry,
+ files: {},
+ maps: {}
+ }
+
+ Object.keys(compilation.assets).forEach(name => {
+ if (isJS(name)) {
+ bundle.files[name] = compilation.assets[name].source()
+ } else if (name.match(/\.js\.map$/)) {
+ bundle.maps[name.replace(/\.map$/, '')] = JSON.parse(compilation.assets[name].source())
+ }
+ // do not emit anything else for server
+ delete compilation.assets[name]
+ })
+
+ const json = JSON.stringify(bundle, null, 2)
+ const filename = this.options.filename
+
+ compilation.assets[filename] = {
+ source: () => json,
+ size: () => json.length
+ }
+
+ cb()
+ })
+ }
+}
diff --git a/LaundrYours/node_modules/vue/src/server/webpack-plugin/util.js b/LaundrYours/node_modules/vue/src/server/webpack-plugin/util.js
new file mode 100644
index 0000000..844671b
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/webpack-plugin/util.js
@@ -0,0 +1,73 @@
+const { red, yellow } = require('chalk')
+const webpack = require('webpack')
+
+const prefix = `[vue-server-renderer-webpack-plugin]`
+const warn = exports.warn = msg => console.error(red(`${prefix} ${msg}\n`))
+const tip = exports.tip = msg => console.log(yellow(`${prefix} ${msg}\n`))
+
+const isWebpack5 = !!(webpack.version && webpack.version[0] > 4)
+
+export const validate = compiler => {
+ if (compiler.options.target !== 'node') {
+ warn('webpack config `target` should be "node".')
+ }
+
+ if (compiler.options.output) {
+ if (compiler.options.output.library) {
+ // Webpack >= 5.0.0
+ if (compiler.options.output.library.type !== 'commonjs2') {
+ warn('webpack config `output.library.type` should be "commonjs2".')
+ }
+ } else if (compiler.options.output.libraryTarget !== 'commonjs2') {
+ // Webpack < 5.0.0
+ warn('webpack config `output.libraryTarget` should be "commonjs2".')
+ }
+ }
+
+ if (!compiler.options.externals) {
+ tip(
+ 'It is recommended to externalize dependencies in the server build for ' +
+ 'better build performance.'
+ )
+ }
+}
+
+export const onEmit = (compiler, name, stageName, hook) => {
+ if (isWebpack5) {
+ // Webpack >= 5.0.0
+ compiler.hooks.compilation.tap(name, compilation => {
+ if (compilation.compiler !== compiler) {
+ // Ignore child compilers
+ return
+ }
+ const stage = webpack.Compilation[stageName]
+ compilation.hooks.processAssets.tapAsync({ name, stage }, (assets, cb) => {
+ hook(compilation, cb)
+ })
+ })
+ } else if (compiler.hooks) {
+ // Webpack >= 4.0.0
+ compiler.hooks.emit.tapAsync(name, hook)
+ } else {
+ // Webpack < 4.0.0
+ compiler.plugin('emit', hook)
+ }
+}
+
+export const stripModuleIdHash = id => {
+ if (isWebpack5) {
+ // Webpack >= 5.0.0
+ return id.replace(/\|\w+$/, '')
+ }
+ // Webpack < 5.0.0
+ return id.replace(/\s\w+$/, '')
+}
+
+export const getAssetName = asset => {
+ if (typeof asset === 'string') {
+ return asset
+ }
+ return asset.name
+}
+
+export { isJS, isCSS } from '../util'
diff --git a/LaundrYours/node_modules/vue/src/server/write.js b/LaundrYours/node_modules/vue/src/server/write.js
new file mode 100644
index 0000000..27a5e8a
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/server/write.js
@@ -0,0 +1,50 @@
+/* @flow */
+
+const MAX_STACK_DEPTH = 800
+const noop = _ => _
+
+const defer = typeof process !== 'undefined' && process.nextTick
+ ? process.nextTick
+ : typeof Promise !== 'undefined'
+ ? fn => Promise.resolve().then(fn)
+ : typeof setTimeout !== 'undefined'
+ ? setTimeout
+ : noop
+
+if (defer === noop) {
+ throw new Error(
+ 'Your JavaScript runtime does not support any asynchronous primitives ' +
+ 'that are required by vue-server-renderer. Please use a polyfill for ' +
+ 'either Promise or setTimeout.'
+ )
+}
+
+export function createWriteFunction (
+ write: (text: string, next: Function) => boolean,
+ onError: Function
+): Function {
+ let stackDepth = 0
+ const cachedWrite = (text, next) => {
+ if (text && cachedWrite.caching) {
+ cachedWrite.cacheBuffer[cachedWrite.cacheBuffer.length - 1] += text
+ }
+ const waitForNext = write(text, next)
+ if (waitForNext !== true) {
+ if (stackDepth >= MAX_STACK_DEPTH) {
+ defer(() => {
+ try { next() } catch (e) {
+ onError(e)
+ }
+ })
+ } else {
+ stackDepth++
+ next()
+ stackDepth--
+ }
+ }
+ }
+ cachedWrite.caching = false
+ cachedWrite.cacheBuffer = []
+ cachedWrite.componentBuffer = []
+ return cachedWrite
+}
diff --git a/LaundrYours/node_modules/vue/src/sfc/parser.js b/LaundrYours/node_modules/vue/src/sfc/parser.js
new file mode 100644
index 0000000..59c5fc3
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/sfc/parser.js
@@ -0,0 +1,134 @@
+/* @flow */
+
+import deindent from 'de-indent'
+import { parseHTML } from 'compiler/parser/html-parser'
+import { makeMap } from 'shared/util'
+
+const splitRE = /\r?\n/g
+const replaceRE = /./g
+const isSpecialTag = makeMap('script,style,template', true)
+
+/**
+ * Parse a single-file component (*.vue) file into an SFC Descriptor Object.
+ */
+export function parseComponent (
+ content: string,
+ options?: Object = {}
+): SFCDescriptor {
+ const sfc: SFCDescriptor = {
+ template: null,
+ script: null,
+ styles: [],
+ customBlocks: [],
+ errors: []
+ }
+ let depth = 0
+ let currentBlock: ?SFCBlock = null
+
+ let warn = msg => {
+ sfc.errors.push(msg)
+ }
+
+ if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
+ warn = (msg, range) => {
+ const data: WarningMessage = { msg }
+ if (range.start != null) {
+ data.start = range.start
+ }
+ if (range.end != null) {
+ data.end = range.end
+ }
+ sfc.errors.push(data)
+ }
+ }
+
+ function start (
+ tag: string,
+ attrs: Array,
+ unary: boolean,
+ start: number,
+ end: number
+ ) {
+ if (depth === 0) {
+ currentBlock = {
+ type: tag,
+ content: '',
+ start: end,
+ attrs: attrs.reduce((cumulated, { name, value }) => {
+ cumulated[name] = value || true
+ return cumulated
+ }, {})
+ }
+ if (isSpecialTag(tag)) {
+ checkAttrs(currentBlock, attrs)
+ if (tag === 'style') {
+ sfc.styles.push(currentBlock)
+ } else {
+ sfc[tag] = currentBlock
+ }
+ } else { // custom blocks
+ sfc.customBlocks.push(currentBlock)
+ }
+ }
+ if (!unary) {
+ depth++
+ }
+ }
+
+ function checkAttrs (block: SFCBlock, attrs: Array) {
+ for (let i = 0; i < attrs.length; i++) {
+ const attr = attrs[i]
+ if (attr.name === 'lang') {
+ block.lang = attr.value
+ }
+ if (attr.name === 'scoped') {
+ block.scoped = true
+ }
+ if (attr.name === 'module') {
+ block.module = attr.value || true
+ }
+ if (attr.name === 'src') {
+ block.src = attr.value
+ }
+ }
+ }
+
+ function end (tag: string, start: number) {
+ if (depth === 1 && currentBlock) {
+ currentBlock.end = start
+ let text = content.slice(currentBlock.start, currentBlock.end)
+ if (options.deindent !== false) {
+ text = deindent(text)
+ }
+ // pad content so that linters and pre-processors can output correct
+ // line numbers in errors and warnings
+ if (currentBlock.type !== 'template' && options.pad) {
+ text = padContent(currentBlock, options.pad) + text
+ }
+ currentBlock.content = text
+ currentBlock = null
+ }
+ depth--
+ }
+
+ function padContent (block: SFCBlock, pad: true | "line" | "space") {
+ if (pad === 'space') {
+ return content.slice(0, block.start).replace(replaceRE, ' ')
+ } else {
+ const offset = content.slice(0, block.start).split(splitRE).length
+ const padChar = block.type === 'script' && !block.lang
+ ? '//\n'
+ : '\n'
+ return Array(offset).join(padChar)
+ }
+ }
+
+ parseHTML(content, {
+ warn,
+ start,
+ end,
+ outputSourceRange: options.outputSourceRange
+ })
+
+ return sfc
+}
diff --git a/LaundrYours/node_modules/vue/src/shared/constants.js b/LaundrYours/node_modules/vue/src/shared/constants.js
new file mode 100644
index 0000000..a8b15e0
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/shared/constants.js
@@ -0,0 +1,22 @@
+export const SSR_ATTR = 'data-server-rendered'
+
+export const ASSET_TYPES = [
+ 'component',
+ 'directive',
+ 'filter'
+]
+
+export const LIFECYCLE_HOOKS = [
+ 'beforeCreate',
+ 'created',
+ 'beforeMount',
+ 'mounted',
+ 'beforeUpdate',
+ 'updated',
+ 'beforeDestroy',
+ 'destroyed',
+ 'activated',
+ 'deactivated',
+ 'errorCaptured',
+ 'serverPrefetch'
+]
diff --git a/LaundrYours/node_modules/vue/src/shared/util.js b/LaundrYours/node_modules/vue/src/shared/util.js
new file mode 100644
index 0000000..9f240c7
--- /dev/null
+++ b/LaundrYours/node_modules/vue/src/shared/util.js
@@ -0,0 +1,343 @@
+/* @flow */
+
+export const emptyObject = Object.freeze({})
+
+// These helpers produce better VM code in JS engines due to their
+// explicitness and function inlining.
+export function isUndef (v: any): boolean %checks {
+ return v === undefined || v === null
+}
+
+export function isDef (v: any): boolean %checks {
+ return v !== undefined && v !== null
+}
+
+export function isTrue (v: any): boolean %checks {
+ return v === true
+}
+
+export function isFalse (v: any): boolean %checks {
+ return v === false
+}
+
+/**
+ * Check if value is primitive.
+ */
+export function isPrimitive (value: any): boolean %checks {
+ return (
+ typeof value === 'string' ||
+ typeof value === 'number' ||
+ // $flow-disable-line
+ typeof value === 'symbol' ||
+ typeof value === 'boolean'
+ )
+}
+
+/**
+ * Quick object check - this is primarily used to tell
+ * Objects from primitive values when we know the value
+ * is a JSON-compliant type.
+ */
+export function isObject (obj: mixed): boolean %checks {
+ return obj !== null && typeof obj === 'object'
+}
+
+/**
+ * Get the raw type string of a value, e.g., [object Object].
+ */
+const _toString = Object.prototype.toString
+
+export function toRawType (value: any): string {
+ return _toString.call(value).slice(8, -1)
+}
+
+/**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ */
+export function isPlainObject (obj: any): boolean {
+ return _toString.call(obj) === '[object Object]'
+}
+
+export function isRegExp (v: any): boolean {
+ return _toString.call(v) === '[object RegExp]'
+}
+
+/**
+ * Check if val is a valid array index.
+ */
+export function isValidArrayIndex (val: any): boolean {
+ const n = parseFloat(String(val))
+ return n >= 0 && Math.floor(n) === n && isFinite(val)
+}
+
+export function isPromise (val: any): boolean {
+ return (
+ isDef(val) &&
+ typeof val.then === 'function' &&
+ typeof val.catch === 'function'
+ )
+}
+
+/**
+ * Convert a value to a string that is actually rendered.
+ */
+export function toString (val: any): string {
+ return val == null
+ ? ''
+ : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
+ ? JSON.stringify(val, null, 2)
+ : String(val)
+}
+
+/**
+ * Convert an input value to a number for persistence.
+ * If the conversion fails, return original string.
+ */
+export function toNumber (val: string): number | string {
+ const n = parseFloat(val)
+ return isNaN(n) ? val : n
+}
+
+/**
+ * Make a map and return a function for checking if a key
+ * is in that map.
+ */
+export function makeMap (
+ str: string,
+ expectsLowerCase?: boolean
+): (key: string) => true | void {
+ const map = Object.create(null)
+ const list: Array = str.split(',')
+ for (let i = 0; i < list.length; i++) {
+ map[list[i]] = true
+ }
+ return expectsLowerCase
+ ? val => map[val.toLowerCase()]
+ : val => map[val]
+}
+
+/**
+ * Check if a tag is a built-in tag.
+ */
+export const isBuiltInTag = makeMap('slot,component', true)
+
+/**
+ * Check if an attribute is a reserved attribute.
+ */
+export const isReservedAttribute = makeMap('key,ref,slot,slot-scope,is')
+
+/**
+ * Remove an item from an array.
+ */
+export function remove (arr: Array, item: any): Array | void {
+ if (arr.length) {
+ const index = arr.indexOf(item)
+ if (index > -1) {
+ return arr.splice(index, 1)
+ }
+ }
+}
+
+/**
+ * Check whether an object has the property.
+ */
+const hasOwnProperty = Object.prototype.hasOwnProperty
+export function hasOwn (obj: Object | Array<*>, key: string): boolean {
+ return hasOwnProperty.call(obj, key)
+}
+
+/**
+ * Create a cached version of a pure function.
+ */
+export function cached (fn: F): F {
+ const cache = Object.create(null)
+ return (function cachedFn (str: string) {
+ const hit = cache[str]
+ return hit || (cache[str] = fn(str))
+ }: any)
+}
+
+/**
+ * Camelize a hyphen-delimited string.
+ */
+const camelizeRE = /-(\w)/g
+export const camelize = cached((str: string): string => {
+ return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
+})
+
+/**
+ * Capitalize a string.
+ */
+export const capitalize = cached((str: string): string => {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+})
+
+/**
+ * Hyphenate a camelCase string.
+ */
+const hyphenateRE = /\B([A-Z])/g
+export const hyphenate = cached((str: string): string => {
+ return str.replace(hyphenateRE, '-$1').toLowerCase()
+})
+
+/**
+ * Simple bind polyfill for environments that do not support it,
+ * e.g., PhantomJS 1.x. Technically, we don't need this anymore
+ * since native bind is now performant enough in most browsers.
+ * But removing it would mean breaking code that was able to run in
+ * PhantomJS 1.x, so this must be kept for backward compatibility.
+ */
+
+/* istanbul ignore next */
+function polyfillBind (fn: Function, ctx: Object): Function {
+ function boundFn (a) {
+ const l = arguments.length
+ return l
+ ? l > 1
+ ? fn.apply(ctx, arguments)
+ : fn.call(ctx, a)
+ : fn.call(ctx)
+ }
+
+ boundFn._length = fn.length
+ return boundFn
+}
+
+function nativeBind (fn: Function, ctx: Object): Function {
+ return fn.bind(ctx)
+}
+
+export const bind = Function.prototype.bind
+ ? nativeBind
+ : polyfillBind
+
+/**
+ * Convert an Array-like object to a real Array.
+ */
+export function toArray (list: any, start?: number): Array {
+ start = start || 0
+ let i = list.length - start
+ const ret: Array = new Array(i)
+ while (i--) {
+ ret[i] = list[i + start]
+ }
+ return ret
+}
+
+/**
+ * Mix properties into target object.
+ */
+export function extend (to: Object, _from: ?Object): Object {
+ for (const key in _from) {
+ to[key] = _from[key]
+ }
+ return to
+}
+
+/**
+ * Merge an Array of Objects into a single Object.
+ */
+export function toObject (arr: Array): Object {
+ const res = {}
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i]) {
+ extend(res, arr[i])
+ }
+ }
+ return res
+}
+
+/* eslint-disable no-unused-vars */
+
+/**
+ * Perform no operation.
+ * Stubbing args to make Flow happy without leaving useless transpiled code
+ * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
+ */
+export function noop (a?: any, b?: any, c?: any) {}
+
+/**
+ * Always return false.
+ */
+export const no = (a?: any, b?: any, c?: any) => false
+
+/* eslint-enable no-unused-vars */
+
+/**
+ * Return the same value.
+ */
+export const identity = (_: any) => _
+
+/**
+ * Generate a string containing static keys from compiler modules.
+ */
+export function genStaticKeys (modules: Array): string {
+ return modules.reduce((keys, m) => {
+ return keys.concat(m.staticKeys || [])
+ }, []).join(',')
+}
+
+/**
+ * Check if two values are loosely equal - that is,
+ * if they are plain objects, do they have the same shape?
+ */
+export function looseEqual (a: any, b: any): boolean {
+ if (a === b) return true
+ const isObjectA = isObject(a)
+ const isObjectB = isObject(b)
+ if (isObjectA && isObjectB) {
+ try {
+ const isArrayA = Array.isArray(a)
+ const isArrayB = Array.isArray(b)
+ if (isArrayA && isArrayB) {
+ return a.length === b.length && a.every((e, i) => {
+ return looseEqual(e, b[i])
+ })
+ } else if (a instanceof Date && b instanceof Date) {
+ return a.getTime() === b.getTime()
+ } else if (!isArrayA && !isArrayB) {
+ const keysA = Object.keys(a)
+ const keysB = Object.keys(b)
+ return keysA.length === keysB.length && keysA.every(key => {
+ return looseEqual(a[key], b[key])
+ })
+ } else {
+ /* istanbul ignore next */
+ return false
+ }
+ } catch (e) {
+ /* istanbul ignore next */
+ return false
+ }
+ } else if (!isObjectA && !isObjectB) {
+ return String(a) === String(b)
+ } else {
+ return false
+ }
+}
+
+/**
+ * Return the first index at which a loosely equal value can be
+ * found in the array (if value is a plain object, the array must
+ * contain an object of the same shape), or -1 if it is not present.
+ */
+export function looseIndexOf (arr: Array, val: mixed): number {
+ for (let i = 0; i < arr.length; i++) {
+ if (looseEqual(arr[i], val)) return i
+ }
+ return -1
+}
+
+/**
+ * Ensure a function is called only once.
+ */
+export function once (fn: Function): Function {
+ let called = false
+ return function () {
+ if (!called) {
+ called = true
+ fn.apply(this, arguments)
+ }
+ }
+}
diff --git a/LaundrYours/node_modules/vue/types/index.d.ts b/LaundrYours/node_modules/vue/types/index.d.ts
new file mode 100644
index 0000000..58ceb20
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/index.d.ts
@@ -0,0 +1,39 @@
+import { Vue } from "./vue";
+import "./umd";
+
+export default Vue;
+
+export {
+ CreateElement,
+ VueConstructor
+} from "./vue";
+
+export {
+ Component,
+ AsyncComponent,
+ ComponentOptions,
+ FunctionalComponentOptions,
+ RenderContext,
+ PropType,
+ PropOptions,
+ ComputedOptions,
+ WatchHandler,
+ WatchOptions,
+ WatchOptionsWithHandler,
+ DirectiveFunction,
+ DirectiveOptions
+} from "./options";
+
+export {
+ PluginFunction,
+ PluginObject
+} from "./plugin";
+
+export {
+ VNodeChildren,
+ VNodeChildrenArrayContents,
+ VNode,
+ VNodeComponentOptions,
+ VNodeData,
+ VNodeDirective
+} from "./vnode";
diff --git a/LaundrYours/node_modules/vue/types/options.d.ts b/LaundrYours/node_modules/vue/types/options.d.ts
new file mode 100644
index 0000000..ff26605
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/options.d.ts
@@ -0,0 +1,207 @@
+import { Vue, CreateElement, CombinedVueInstance } from "./vue";
+import { VNode, VNodeData, VNodeDirective, NormalizedScopedSlot } from "./vnode";
+
+type Constructor = {
+ new (...args: any[]): any;
+}
+
+// we don't support infer props in async component
+// N.B. ComponentOptions is contravariant, the default generic should be bottom type
+export type Component, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps> =
+ | typeof Vue
+ | FunctionalComponentOptions
+ | ComponentOptions
+
+type EsModule = T | { default: T }
+
+type ImportedComponent, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps>
+ = EsModule>
+
+export type AsyncComponent, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps>
+ = AsyncComponentPromise
+ | AsyncComponentFactory
+
+export type AsyncComponentPromise, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps> = (
+ resolve: (component: Component) => void,
+ reject: (reason?: any) => void
+) => Promise> | void;
+
+export type AsyncComponentFactory, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps> = () => {
+ component: Promise>;
+ loading?: ImportedComponent;
+ error?: ImportedComponent;
+ delay?: number;
+ timeout?: number;
+}
+
+/**
+ * When the `Computed` type parameter on `ComponentOptions` is inferred,
+ * it should have a property with the return type of every get-accessor.
+ * Since there isn't a way to query for the return type of a function, we allow TypeScript
+ * to infer from the shape of `Accessors` and work backwards.
+ */
+export type Accessors = {
+ [K in keyof T]: (() => T[K]) | ComputedOptions
+}
+
+type DataDef = Data | ((this: Readonly & V) => Data)
+/**
+ * This type should be used when an array of strings is used for a component's `props` value.
+ */
+export type ThisTypedComponentOptionsWithArrayProps =
+ object &
+ ComponentOptions, V>, Methods, Computed, PropNames[], Record> &
+ ThisType>>>;
+
+/**
+ * This type should be used when an object mapped to `PropOptions` is used for a component's `props` value.
+ */
+export type ThisTypedComponentOptionsWithRecordProps =
+ object &
+ ComponentOptions, Methods, Computed, RecordPropsDefinition, Props> &
+ ThisType>>;
+
+type DefaultData = object | ((this: V) => object);
+type DefaultProps = Record;
+type DefaultMethods = { [key: string]: (this: V, ...args: any[]) => any };
+type DefaultComputed = { [key: string]: any };
+export interface ComponentOptions<
+ V extends Vue,
+ Data=DefaultData,
+ Methods=DefaultMethods,
+ Computed=DefaultComputed,
+ PropsDef=PropsDefinition,
+ Props=DefaultProps> {
+ data?: Data;
+ props?: PropsDef;
+ propsData?: object;
+ computed?: Accessors;
+ methods?: Methods;
+ watch?: Record | WatchHandler>;
+
+ el?: Element | string;
+ template?: string;
+ // hack is for functional component type inference, should not be used in user code
+ render?(createElement: CreateElement, hack: RenderContext): VNode;
+ renderError?(createElement: CreateElement, err: Error): VNode;
+ staticRenderFns?: ((createElement: CreateElement) => VNode)[];
+
+ beforeCreate?(this: V): void;
+ created?(): void;
+ beforeDestroy?(): void;
+ destroyed?(): void;
+ beforeMount?(): void;
+ mounted?(): void;
+ beforeUpdate?(): void;
+ updated?(): void;
+ activated?(): void;
+ deactivated?(): void;
+ errorCaptured?(err: Error, vm: Vue, info: string): boolean | void;
+ serverPrefetch?(this: V): Promise;
+
+ directives?: { [key: string]: DirectiveFunction | DirectiveOptions };
+ components?: { [key: string]: Component | AsyncComponent };
+ transitions?: { [key: string]: object };
+ filters?: { [key: string]: Function };
+
+ provide?: object | (() => object);
+ inject?: InjectOptions;
+
+ model?: {
+ prop?: string;
+ event?: string;
+ };
+
+ parent?: Vue;
+ mixins?: (ComponentOptions | typeof Vue)[];
+ name?: string;
+ // TODO: support properly inferred 'extends'
+ extends?: ComponentOptions | typeof Vue;
+ delimiters?: [string, string];
+ comments?: boolean;
+ inheritAttrs?: boolean;
+}
+
+export interface FunctionalComponentOptions> {
+ name?: string;
+ props?: PropDefs;
+ model?: {
+ prop?: string;
+ event?: string;
+ };
+ inject?: InjectOptions;
+ functional: boolean;
+ render?(this: undefined, createElement: CreateElement, context: RenderContext): VNode | VNode[];
+}
+
+export interface RenderContext {
+ props: Props;
+ children: VNode[];
+ slots(): any;
+ data: VNodeData;
+ parent: Vue;
+ listeners: { [key: string]: Function | Function[] };
+ scopedSlots: { [key: string]: NormalizedScopedSlot };
+ injections: any
+}
+
+export type Prop = { (): T } | { new(...args: never[]): T & object } | { new(...args: string[]): Function }
+
+export type PropType = Prop | Prop[];
+
+export type PropValidator = PropOptions | PropType;
+
+export interface PropOptions {
+ type?: PropType;
+ required?: boolean;
+ default?: T | null | undefined | (() => T | null | undefined);
+ validator?(value: T): boolean;
+}
+
+export type RecordPropsDefinition = {
+ [K in keyof T]: PropValidator
+}
+export type ArrayPropsDefinition = (keyof T)[];
+export type PropsDefinition = ArrayPropsDefinition | RecordPropsDefinition;
+
+export interface ComputedOptions {
+ get?(): T;
+ set?(value: T): void;
+ cache?: boolean;
+}
+
+export type WatchHandler = string | ((val: T, oldVal: T) => void);
+
+export interface WatchOptions {
+ deep?: boolean;
+ immediate?: boolean;
+}
+
+export interface WatchOptionsWithHandler extends WatchOptions {
+ handler: WatchHandler;
+}
+
+export interface DirectiveBinding extends Readonly {
+ readonly modifiers: { [key: string]: boolean };
+}
+
+export type DirectiveFunction = (
+ el: HTMLElement,
+ binding: DirectiveBinding,
+ vnode: VNode,
+ oldVnode: VNode
+) => void;
+
+export interface DirectiveOptions {
+ bind?: DirectiveFunction;
+ inserted?: DirectiveFunction;
+ update?: DirectiveFunction;
+ componentUpdated?: DirectiveFunction;
+ unbind?: DirectiveFunction;
+}
+
+export type InjectKey = string | symbol;
+
+export type InjectOptions = {
+ [key: string]: InjectKey | { from?: InjectKey, default?: any }
+} | string[];
diff --git a/LaundrYours/node_modules/vue/types/plugin.d.ts b/LaundrYours/node_modules/vue/types/plugin.d.ts
new file mode 100644
index 0000000..5741f86
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/plugin.d.ts
@@ -0,0 +1,8 @@
+import { Vue as _Vue } from "./vue";
+
+export type PluginFunction = (Vue: typeof _Vue, options?: T) => void;
+
+export interface PluginObject {
+ install: PluginFunction;
+ [key: string]: any;
+}
diff --git a/LaundrYours/node_modules/vue/types/umd.d.ts b/LaundrYours/node_modules/vue/types/umd.d.ts
new file mode 100644
index 0000000..d1dc8d1
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/umd.d.ts
@@ -0,0 +1,48 @@
+import * as V from "./index";
+import {
+ DefaultData,
+ DefaultProps,
+ DefaultMethods,
+ DefaultComputed,
+ PropsDefinition
+} from "./options";
+
+// Expose some types for backward compatibility...
+declare namespace Vue {
+ // vue.d.ts
+ export type CreateElement = V.CreateElement;
+ export type VueConstructor = V.VueConstructor;
+
+ // options.d.ts
+ export type Component, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps> = V.Component;
+ export type AsyncComponent, Methods=DefaultMethods, Computed=DefaultComputed, Props=DefaultProps> = V.AsyncComponent;
+ export type ComponentOptions, Methods=DefaultMethods, Computed=DefaultComputed, PropsDef=PropsDefinition, Props=DefaultProps> = V.ComponentOptions;
+ export type FunctionalComponentOptions> = V.FunctionalComponentOptions;
+ export type RenderContext = V.RenderContext;
+ export type PropType = V.PropType;
+ export type PropOptions = V.PropOptions;
+ export type ComputedOptions = V.ComputedOptions;
+ export type WatchHandler = V.WatchHandler;
+ export type WatchOptions = V.WatchOptions;
+ export type WatchOptionsWithHandler = V.WatchOptionsWithHandler;
+ export type DirectiveFunction = V.DirectiveFunction;
+ export type DirectiveOptions = V.DirectiveOptions;
+
+ // plugin.d.ts
+ export type PluginFunction = V.PluginFunction;
+ export type PluginObject = V.PluginObject;
+
+ // vnode.d.ts
+ export type VNodeChildren = V.VNodeChildren;
+ export type VNodeChildrenArrayContents = V.VNodeChildrenArrayContents;
+ export type VNode = V.VNode;
+ export type VNodeComponentOptions = V.VNodeComponentOptions;
+ export type VNodeData = V.VNodeData;
+ export type VNodeDirective = V.VNodeDirective;
+}
+
+declare class Vue extends V.default {}
+
+export = Vue;
+
+export as namespace Vue;
diff --git a/LaundrYours/node_modules/vue/types/vnode.d.ts b/LaundrYours/node_modules/vue/types/vnode.d.ts
new file mode 100644
index 0000000..997980c
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/vnode.d.ts
@@ -0,0 +1,76 @@
+import { Vue } from "./vue";
+
+export type ScopedSlot = (props: any) => ScopedSlotReturnValue;
+type ScopedSlotReturnValue = VNode | string | boolean | null | undefined | ScopedSlotReturnArray;
+interface ScopedSlotReturnArray extends Array {}
+
+// Scoped slots are guaranteed to return Array of VNodes starting in 2.6
+export type NormalizedScopedSlot = (props: any) => ScopedSlotChildren;
+export type ScopedSlotChildren = VNode[] | undefined;
+
+// Relaxed type compatible with $createElement
+export type VNodeChildren = VNodeChildrenArrayContents | [ScopedSlot] | string | boolean | null | undefined;
+export interface VNodeChildrenArrayContents extends Array {}
+
+export interface VNode {
+ tag?: string;
+ data?: VNodeData;
+ children?: VNode[];
+ text?: string;
+ elm?: Node;
+ ns?: string;
+ context?: Vue;
+ key?: string | number | symbol | boolean;
+ componentOptions?: VNodeComponentOptions;
+ componentInstance?: Vue;
+ parent?: VNode;
+ raw?: boolean;
+ isStatic?: boolean;
+ isRootInsert: boolean;
+ isComment: boolean;
+}
+
+export interface VNodeComponentOptions {
+ Ctor: typeof Vue;
+ propsData?: object;
+ listeners?: object;
+ children?: VNode[];
+ tag?: string;
+}
+
+export interface VNodeData {
+ key?: string | number;
+ slot?: string;
+ scopedSlots?: { [key: string]: ScopedSlot | undefined };
+ ref?: string;
+ refInFor?: boolean;
+ tag?: string;
+ staticClass?: string;
+ class?: any;
+ staticStyle?: { [key: string]: any };
+ style?: string | object[] | object;
+ props?: { [key: string]: any };
+ attrs?: { [key: string]: any };
+ domProps?: { [key: string]: any };
+ hook?: { [key: string]: Function };
+ on?: { [key: string]: Function | Function[] };
+ nativeOn?: { [key: string]: Function | Function[] };
+ transition?: object;
+ show?: boolean;
+ inlineTemplate?: {
+ render: Function;
+ staticRenderFns: Function[];
+ };
+ directives?: VNodeDirective[];
+ keepAlive?: boolean;
+}
+
+export interface VNodeDirective {
+ name: string;
+ value?: any;
+ oldValue?: any;
+ expression?: string;
+ arg?: string;
+ oldArg?: string;
+ modifiers?: { [key: string]: boolean };
+}
diff --git a/LaundrYours/node_modules/vue/types/vue.d.ts b/LaundrYours/node_modules/vue/types/vue.d.ts
new file mode 100644
index 0000000..7adb5a5
--- /dev/null
+++ b/LaundrYours/node_modules/vue/types/vue.d.ts
@@ -0,0 +1,132 @@
+import {
+ Component,
+ AsyncComponent,
+ ComponentOptions,
+ FunctionalComponentOptions,
+ WatchOptionsWithHandler,
+ WatchHandler,
+ DirectiveOptions,
+ DirectiveFunction,
+ RecordPropsDefinition,
+ ThisTypedComponentOptionsWithArrayProps,
+ ThisTypedComponentOptionsWithRecordProps,
+ WatchOptions,
+} from "./options";
+import { VNode, VNodeData, VNodeChildren, NormalizedScopedSlot } from "./vnode";
+import { PluginFunction, PluginObject } from "./plugin";
+
+export interface CreateElement {
+ (tag?: string | Component | AsyncComponent | (() => Component), children?: VNodeChildren): VNode;
+ (tag?: string | Component | AsyncComponent | (() => Component), data?: VNodeData, children?: VNodeChildren): VNode;
+}
+
+export interface Vue {
+ readonly $el: Element;
+ readonly $options: ComponentOptions;
+ readonly $parent: Vue;
+ readonly $root: Vue;
+ readonly $children: Vue[];
+ readonly $refs: { [key: string]: Vue | Element | (Vue | Element)[] | undefined };
+ readonly $slots: { [key: string]: VNode[] | undefined };
+ readonly $scopedSlots: { [key: string]: NormalizedScopedSlot | undefined };
+ readonly $isServer: boolean;
+ readonly $data: Record;
+ readonly $props: Record;
+ readonly $ssrContext: any;
+ readonly $vnode: VNode;
+ readonly $attrs: Record;
+ readonly $listeners: Record;
+
+ $mount(elementOrSelector?: Element | string, hydrating?: boolean): this;
+ $forceUpdate(): void;
+ $destroy(): void;
+ $set: typeof Vue.set;
+ $delete: typeof Vue.delete;
+ $watch(
+ expOrFn: string,
+ callback: (this: this, n: any, o: any) => void,
+ options?: WatchOptions
+ ): (() => void);
+ $watch(
+ expOrFn: (this: this) => T,
+ callback: (this: this, n: T, o: T) => void,
+ options?: WatchOptions
+ ): (() => void);
+ $on(event: string | string[], callback: Function): this;
+ $once(event: string | string[], callback: Function): this;
+ $off(event?: string | string[], callback?: Function): this;
+ $emit(event: string, ...args: any[]): this;
+ $nextTick(callback: (this: this) => void): void;
+ $nextTick(): Promise;
+ $createElement: CreateElement;
+}
+
+export type CombinedVueInstance = Data & Methods & Computed & Props & Instance;
+export type ExtendedVue = VueConstructor & Vue>;
+
+export interface VueConfiguration {
+ silent: boolean;
+ optionMergeStrategies: any;
+ devtools: boolean;
+ productionTip: boolean;
+ performance: boolean;
+ errorHandler(err: Error, vm: Vue, info: string): void;
+ warnHandler(msg: string, vm: Vue, trace: string): void;
+ ignoredElements: (string | RegExp)[];
+ keyCodes: { [key: string]: number | number[] };
+ async: boolean;
+}
+
+export interface VueConstructor {
+ new (options?: ThisTypedComponentOptionsWithArrayProps): CombinedVueInstance>;
+ // ideally, the return type should just contain Props, not Record. But TS requires to have Base constructors with the same return type.
+ new (options?: ThisTypedComponentOptionsWithRecordProps): CombinedVueInstance>;
+ new (options?: ComponentOptions): CombinedVueInstance>;
+
+ extend(options?: ThisTypedComponentOptionsWithArrayProps): ExtendedVue>;
+ extend(options?: ThisTypedComponentOptionsWithRecordProps): ExtendedVue;
+ extend(definition: FunctionalComponentOptions, PropNames[]>): ExtendedVue>;
+ extend(definition: FunctionalComponentOptions>): ExtendedVue;
+ extend(options?: ComponentOptions): ExtendedVue;
+
+ nextTick(callback: (this: T) => void, context?: T): void;
+ nextTick(): Promise
+ set(object: object, key: string | number, value: T): T;
+ set(array: T[], key: number, value: T): T;
+ delete(object: object, key: string | number): void;
+ delete(array: T[], key: number): void;
+
+ directive(
+ id: string,
+ definition?: DirectiveOptions | DirectiveFunction
+ ): DirectiveOptions;
+ filter(id: string, definition?: Function): Function;
+
+ component(id: string): VueConstructor;
+ component(id: string, constructor: VC): VC;
+ component(id: string, definition: AsyncComponent): ExtendedVue;
+ component(id: string, definition?: ThisTypedComponentOptionsWithArrayProps): ExtendedVue>;
+ component(id: string, definition?: ThisTypedComponentOptionsWithRecordProps): ExtendedVue;
+ component(id: string, definition: FunctionalComponentOptions, PropNames[]>): ExtendedVue>;
+ component(id: string, definition: FunctionalComponentOptions>): ExtendedVue;
+ component(id: string, definition?: ComponentOptions): ExtendedVue;
+
+ use(plugin: PluginObject | PluginFunction, options?: T): VueConstructor;
+ use(plugin: PluginObject | PluginFunction, ...options: any[]): VueConstructor;
+ mixin(mixin: VueConstructor | ComponentOptions): VueConstructor;
+ compile(template: string): {
+ render(createElement: typeof Vue.prototype.$createElement): VNode;
+ staticRenderFns: (() => VNode)[];
+ };
+
+ observable(obj: T): T;
+
+ util: {
+ warn(msg: string, vm?: InstanceType): void;
+ };
+
+ config: VueConfiguration;
+ version: string;
+}
+
+export const Vue: VueConstructor;
diff --git a/LaundrYours/package-lock.json b/LaundrYours/package-lock.json
new file mode 100644
index 0000000..a0e3651
--- /dev/null
+++ b/LaundrYours/package-lock.json
@@ -0,0 +1,11 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "vue": {
+ "version": "2.6.14",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
+ "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
+ }
+ }
+}
diff --git a/LaundrYours/search/__pycache__/__init__.cpython-38.pyc b/LaundrYours/search/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..9383b65
Binary files /dev/null and b/LaundrYours/search/__pycache__/__init__.cpython-38.pyc differ
diff --git a/LaundrYours/search/__pycache__/__init__.cpython-39.pyc b/LaundrYours/search/__pycache__/__init__.cpython-39.pyc
index b94496e..b2c51e4 100644
Binary files a/LaundrYours/search/__pycache__/__init__.cpython-39.pyc and b/LaundrYours/search/__pycache__/__init__.cpython-39.pyc differ
diff --git a/LaundrYours/search/__pycache__/admin.cpython-38.pyc b/LaundrYours/search/__pycache__/admin.cpython-38.pyc
new file mode 100644
index 0000000..5d3b1f8
Binary files /dev/null and b/LaundrYours/search/__pycache__/admin.cpython-38.pyc differ
diff --git a/LaundrYours/search/__pycache__/admin.cpython-39.pyc b/LaundrYours/search/__pycache__/admin.cpython-39.pyc
index 48c46a6..0306d00 100644
Binary files a/LaundrYours/search/__pycache__/admin.cpython-39.pyc and b/LaundrYours/search/__pycache__/admin.cpython-39.pyc differ
diff --git a/LaundrYours/search/__pycache__/apps.cpython-38.pyc b/LaundrYours/search/__pycache__/apps.cpython-38.pyc
new file mode 100644
index 0000000..b2bbcf5
Binary files /dev/null and b/LaundrYours/search/__pycache__/apps.cpython-38.pyc differ
diff --git a/LaundrYours/search/__pycache__/apps.cpython-39.pyc b/LaundrYours/search/__pycache__/apps.cpython-39.pyc
index 6b58f18..bce0639 100644
Binary files a/LaundrYours/search/__pycache__/apps.cpython-39.pyc and b/LaundrYours/search/__pycache__/apps.cpython-39.pyc differ
diff --git a/LaundrYours/search/__pycache__/models.cpython-38.pyc b/LaundrYours/search/__pycache__/models.cpython-38.pyc
new file mode 100644
index 0000000..1d93081
Binary files /dev/null and b/LaundrYours/search/__pycache__/models.cpython-38.pyc differ
diff --git a/LaundrYours/search/__pycache__/models.cpython-39.pyc b/LaundrYours/search/__pycache__/models.cpython-39.pyc
index b73b949..912d5b3 100644
Binary files a/LaundrYours/search/__pycache__/models.cpython-39.pyc and b/LaundrYours/search/__pycache__/models.cpython-39.pyc differ
diff --git a/LaundrYours/search/__pycache__/views.cpython-38.pyc b/LaundrYours/search/__pycache__/views.cpython-38.pyc
new file mode 100644
index 0000000..41d0236
Binary files /dev/null and b/LaundrYours/search/__pycache__/views.cpython-38.pyc differ
diff --git a/LaundrYours/search/__pycache__/views.cpython-39.pyc b/LaundrYours/search/__pycache__/views.cpython-39.pyc
index 4519d8a..22f0e2d 100644
Binary files a/LaundrYours/search/__pycache__/views.cpython-39.pyc and b/LaundrYours/search/__pycache__/views.cpython-39.pyc differ
diff --git a/LaundrYours/search/admin.py b/LaundrYours/search/admin.py
index 8c38f3f..314c276 100644
--- a/LaundrYours/search/admin.py
+++ b/LaundrYours/search/admin.py
@@ -1,3 +1,4 @@
from django.contrib import admin
-
+from .models import Fiber
# Register your models here.
+admin.site.register(Fiber)
\ No newline at end of file
diff --git a/LaundrYours/search/migrations/0001_initial.py b/LaundrYours/search/migrations/0001_initial.py
new file mode 100644
index 0000000..cb11302
--- /dev/null
+++ b/LaundrYours/search/migrations/0001_initial.py
@@ -0,0 +1,26 @@
+# Generated by Django 3.2.9 on 2021-11-12 18:04
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Fiber',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(default='', max_length=15)),
+ ('image', models.ImageField(default='', upload_to='images/')),
+ ('cleaning', models.TextField(default='', max_length=200)),
+ ('save', models.TextField(blank=True, default='', max_length=200)),
+ ('feature', models.TextField(blank=True, default='', max_length=200)),
+ ('caution', models.TextField(blank=True, default='', max_length=200)),
+ ],
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/0002_auto_20211113_0412.py b/LaundrYours/search/migrations/0002_auto_20211113_0412.py
new file mode 100644
index 0000000..a1ca080
--- /dev/null
+++ b/LaundrYours/search/migrations/0002_auto_20211113_0412.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.9 on 2021-11-12 19:12
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('search', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='fiber',
+ old_name='save',
+ new_name='saving',
+ ),
+ migrations.AlterField(
+ model_name='fiber',
+ name='name',
+ field=models.CharField(default='', max_length=20),
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/0002_remove_fiber_image.py b/LaundrYours/search/migrations/0002_remove_fiber_image.py
new file mode 100644
index 0000000..7fa464f
--- /dev/null
+++ b/LaundrYours/search/migrations/0002_remove_fiber_image.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.9 on 2021-11-12 19:07
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('search', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='fiber',
+ name='image',
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/0003_auto_20211112_1909.py b/LaundrYours/search/migrations/0003_auto_20211112_1909.py
new file mode 100644
index 0000000..9f32cd4
--- /dev/null
+++ b/LaundrYours/search/migrations/0003_auto_20211112_1909.py
@@ -0,0 +1,29 @@
+# Generated by Django 3.2.9 on 2021-11-12 19:09
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('search', '0002_remove_fiber_image'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='fiber',
+ name='caution',
+ ),
+ migrations.RemoveField(
+ model_name='fiber',
+ name='cleaning',
+ ),
+ migrations.RemoveField(
+ model_name='fiber',
+ name='feature',
+ ),
+ migrations.RemoveField(
+ model_name='fiber',
+ name='save',
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/0004_auto_20211112_1909.py b/LaundrYours/search/migrations/0004_auto_20211112_1909.py
new file mode 100644
index 0000000..b6c7f8d
--- /dev/null
+++ b/LaundrYours/search/migrations/0004_auto_20211112_1909.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.9 on 2021-11-12 19:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('search', '0003_auto_20211112_1909'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='fiber',
+ name='cleaning',
+ field=models.TextField(default='', max_length=200),
+ ),
+ migrations.AddField(
+ model_name='fiber',
+ name='image',
+ field=models.ImageField(default='', upload_to='images/'),
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/0005_fiber_save.py b/LaundrYours/search/migrations/0005_fiber_save.py
new file mode 100644
index 0000000..da83a57
--- /dev/null
+++ b/LaundrYours/search/migrations/0005_fiber_save.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.9 on 2021-11-12 19:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('search', '0004_auto_20211112_1909'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='fiber',
+ name='save',
+ field=models.TextField(blank=True, default='', max_length=200),
+ ),
+ ]
diff --git a/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-38.pyc
new file mode 100644
index 0000000..10a73de
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-39.pyc b/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-39.pyc
new file mode 100644
index 0000000..b6772a7
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0001_initial.cpython-39.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0002_auto_20211113_0412.cpython-39.pyc b/LaundrYours/search/migrations/__pycache__/0002_auto_20211113_0412.cpython-39.pyc
new file mode 100644
index 0000000..d0d9b0f
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0002_auto_20211113_0412.cpython-39.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0002_remove_fiber_image.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/0002_remove_fiber_image.cpython-38.pyc
new file mode 100644
index 0000000..712d690
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0002_remove_fiber_image.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0003_auto_20211112_1909.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/0003_auto_20211112_1909.cpython-38.pyc
new file mode 100644
index 0000000..27d2d29
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0003_auto_20211112_1909.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0004_auto_20211112_1909.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/0004_auto_20211112_1909.cpython-38.pyc
new file mode 100644
index 0000000..03bb63f
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0004_auto_20211112_1909.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/0005_fiber_save.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/0005_fiber_save.cpython-38.pyc
new file mode 100644
index 0000000..0e3d544
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/0005_fiber_save.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/__init__.cpython-38.pyc b/LaundrYours/search/migrations/__pycache__/__init__.cpython-38.pyc
new file mode 100644
index 0000000..339bfeb
Binary files /dev/null and b/LaundrYours/search/migrations/__pycache__/__init__.cpython-38.pyc differ
diff --git a/LaundrYours/search/migrations/__pycache__/__init__.cpython-39.pyc b/LaundrYours/search/migrations/__pycache__/__init__.cpython-39.pyc
index 8e020c4..6cec693 100644
Binary files a/LaundrYours/search/migrations/__pycache__/__init__.cpython-39.pyc and b/LaundrYours/search/migrations/__pycache__/__init__.cpython-39.pyc differ
diff --git a/LaundrYours/search/models.py b/LaundrYours/search/models.py
index 71a8362..2eeeed1 100644
--- a/LaundrYours/search/models.py
+++ b/LaundrYours/search/models.py
@@ -1,3 +1,13 @@
from django.db import models
# Create your models here.
+class Fiber(models.Model):
+ name = models.CharField(max_length=20, default='')
+ image = models.ImageField(upload_to='images/', default='')
+ cleaning = models.TextField(max_length=200, default='') #세탁 방법
+ saving = models.TextField(max_length=200, default='', blank=True) #보관 방법
+ feature = models.TextField(max_length=200, default='', blank=True) #특징
+ caution = models.TextField(max_length=200, default='', blank=True) #주의 사항
+
+ def __str__(self):
+ return self.name
\ No newline at end of file
diff --git a/LaundrYours/search/templates/home.html b/LaundrYours/search/templates/home.html
index b5fa231..d2b94fa 100644
--- a/LaundrYours/search/templates/home.html
+++ b/LaundrYours/search/templates/home.html
@@ -1,8 +1,16 @@
홈
{% if user.is_authenticated %}
{{user.username}}님 환영합니다.
-
+
{% else %}
login
signup
-{% endif %}
\ No newline at end of file
+{% endif %}
+
+
\ No newline at end of file
diff --git a/LaundrYours/search/templates/result.html b/LaundrYours/search/templates/result.html
new file mode 100644
index 0000000..da8a589
--- /dev/null
+++ b/LaundrYours/search/templates/result.html
@@ -0,0 +1,3 @@
+검색 결과
+소재: {{fiber.name}}
+세탁 방법: {{fiber.cleaning}}
\ No newline at end of file
diff --git a/LaundrYours/search/views.py b/LaundrYours/search/views.py
index 35fb3dc..9613d2f 100644
--- a/LaundrYours/search/views.py
+++ b/LaundrYours/search/views.py
@@ -1,5 +1,13 @@
from django.shortcuts import render
+from .models import Fiber
# Create your views here.
def home(request):
- return render(request, 'home.html')
\ No newline at end of file
+ return render(request, 'home.html')
+
+def fiberResult(request):
+ fiber_object = Fiber.objects.all()
+ fibersearch = request.GET.get('query','')
+ if fibersearch :
+ fiber_object = fiber_object.filter(name__icontains= fibersearch)
+ return render(request, 'result.html', {'fiber':fiber_object, 'fibersearch': fibersearch})
diff --git a/LaundrYours/vueTest/__init__.py b/LaundrYours/vueTest/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/LaundrYours/vueTest/__pycache__/__init__.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..afaf3b0
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/__init__.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/__pycache__/admin.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/admin.cpython-37.pyc
new file mode 100644
index 0000000..daa3d2d
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/admin.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/__pycache__/apps.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/apps.cpython-37.pyc
new file mode 100644
index 0000000..79899be
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/apps.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/__pycache__/models.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/models.cpython-37.pyc
new file mode 100644
index 0000000..0664aea
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/models.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/__pycache__/urls.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/urls.cpython-37.pyc
new file mode 100644
index 0000000..80266ff
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/urls.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/__pycache__/views.cpython-37.pyc b/LaundrYours/vueTest/__pycache__/views.cpython-37.pyc
new file mode 100644
index 0000000..d150147
Binary files /dev/null and b/LaundrYours/vueTest/__pycache__/views.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/admin.py b/LaundrYours/vueTest/admin.py
new file mode 100644
index 0000000..694323f
--- /dev/null
+++ b/LaundrYours/vueTest/admin.py
@@ -0,0 +1 @@
+from django.contrib import admin
diff --git a/LaundrYours/vueTest/apps.py b/LaundrYours/vueTest/apps.py
new file mode 100644
index 0000000..08966a3
--- /dev/null
+++ b/LaundrYours/vueTest/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class VuetestConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'vueTest'
diff --git a/LaundrYours/vueTest/migrations/0001_initial.py b/LaundrYours/vueTest/migrations/0001_initial.py
new file mode 100644
index 0000000..164bec1
--- /dev/null
+++ b/LaundrYours/vueTest/migrations/0001_initial.py
@@ -0,0 +1,22 @@
+# Generated by Django 3.2.9 on 2021-11-12 13:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Todo',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=100)),
+ ('completed', models.BooleanField()),
+ ],
+ ),
+ ]
diff --git a/LaundrYours/vueTest/migrations/0002_rename_todo_vuetest.py b/LaundrYours/vueTest/migrations/0002_rename_todo_vuetest.py
new file mode 100644
index 0000000..74e4d00
--- /dev/null
+++ b/LaundrYours/vueTest/migrations/0002_rename_todo_vuetest.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.9 on 2021-11-12 13:52
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('vueTest', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RenameModel(
+ old_name='Todo',
+ new_name='VueTest',
+ ),
+ ]
diff --git a/LaundrYours/vueTest/migrations/__init__.py b/LaundrYours/vueTest/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/LaundrYours/vueTest/migrations/__pycache__/0001_initial.cpython-37.pyc b/LaundrYours/vueTest/migrations/__pycache__/0001_initial.cpython-37.pyc
new file mode 100644
index 0000000..90ddb2a
Binary files /dev/null and b/LaundrYours/vueTest/migrations/__pycache__/0001_initial.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/migrations/__pycache__/0002_rename_todo_vuetest.cpython-37.pyc b/LaundrYours/vueTest/migrations/__pycache__/0002_rename_todo_vuetest.cpython-37.pyc
new file mode 100644
index 0000000..db0075e
Binary files /dev/null and b/LaundrYours/vueTest/migrations/__pycache__/0002_rename_todo_vuetest.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/migrations/__pycache__/__init__.cpython-37.pyc b/LaundrYours/vueTest/migrations/__pycache__/__init__.cpython-37.pyc
new file mode 100644
index 0000000..45fddd0
Binary files /dev/null and b/LaundrYours/vueTest/migrations/__pycache__/__init__.cpython-37.pyc differ
diff --git a/LaundrYours/vueTest/models.py b/LaundrYours/vueTest/models.py
new file mode 100644
index 0000000..beeb308
--- /dev/null
+++ b/LaundrYours/vueTest/models.py
@@ -0,0 +1,2 @@
+from django.db import models
+
diff --git a/LaundrYours/vueTest/templates/vueTest/base.html b/LaundrYours/vueTest/templates/vueTest/base.html
new file mode 100644
index 0000000..b22c376
--- /dev/null
+++ b/LaundrYours/vueTest/templates/vueTest/base.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+ {% block extra_script_footer %}
+ {% endblock %}
+
+
+
\ No newline at end of file
diff --git a/LaundrYours/vueTest/templates/vueTest/index.html b/LaundrYours/vueTest/templates/vueTest/index.html
new file mode 100644
index 0000000..d69042a
--- /dev/null
+++ b/LaundrYours/vueTest/templates/vueTest/index.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+ schedule
+
+
+
+
[[ title ]]
+
+ -
+
Day [[ day ]] to do list
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LaundrYours/vueTest/tests.py b/LaundrYours/vueTest/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/LaundrYours/vueTest/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/LaundrYours/vueTest/urls.py b/LaundrYours/vueTest/urls.py
new file mode 100644
index 0000000..66bba57
--- /dev/null
+++ b/LaundrYours/vueTest/urls.py
@@ -0,0 +1,6 @@
+from django.urls import path
+from .views import *
+
+urlpatterns = [
+ path('', index, name='index'),
+]
\ No newline at end of file
diff --git a/LaundrYours/vueTest/views.py b/LaundrYours/vueTest/views.py
new file mode 100644
index 0000000..9a733ac
--- /dev/null
+++ b/LaundrYours/vueTest/views.py
@@ -0,0 +1,16 @@
+from django.shortcuts import render
+from django.http import JsonResponse
+
+import json
+
+def index(request):
+ return render(request, 'vueTest/index.html', {})
+
+# def list(request):
+# vueTests = VueTest.objects.all()
+# vueTest_list = []
+
+# for index, vueTest in enumerate(vueTests, start=1):
+# vueTest_list.append({'id':index,'title':vueTest.title,'completed':vueTest.completed})
+
+# return JsonResponse(vueTest_list, safe=False)
\ No newline at end of file