commit 9c3e8b73df74accb5436e00466ee00264e1d194b Author: relaxed <> Date: Sun Aug 25 09:45:41 2024 +0500 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6b30cf2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:alpine AS build +WORKDIR /app +COPY . /app +RUN npm install +RUN npm run build + +FROM nginx:mainline-alpine +EXPOSE 80 +COPY --from=build /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/nginx.conf diff --git a/README.md b/README.md new file mode 100644 index 0000000..8b3c95a --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Rasp + +> Better way to veiw schedule diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000..fa10101 Binary files /dev/null and b/bun.lockb differ diff --git a/docker_dev/Dockerfile b/docker_dev/Dockerfile new file mode 100644 index 0000000..7d0fb4a --- /dev/null +++ b/docker_dev/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:mainline-alpine +EXPOSE 80 +COPY nginx.conf /etc/nginx/nginx.conf diff --git a/docker_dev/nginx.conf b/docker_dev/nginx.conf new file mode 100644 index 0000000..3e1c64c --- /dev/null +++ b/docker_dev/nginx.conf @@ -0,0 +1,33 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + gzip on; + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + server { + listen 0.0.0.0:80; + resolver $host; + server_name localhost; + + location /schedule { + proxy_pass https://www.usue.ru/$request_uri; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + } + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..4edb3c2 --- /dev/null +++ b/index.html @@ -0,0 +1,41 @@ + + + + + + + Rasp + + + + + + + + + + + + + + + + + + + +
+ + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..5696a2d --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/makefile b/makefile new file mode 100644 index 0000000..c84fea4 --- /dev/null +++ b/makefile @@ -0,0 +1,40 @@ +author = "relaxed" +app_name = "rw" +container_name = "rw" + +all: container + +# for dev +dev_image: + cd ./docker_dev + sudo docker build --no-cache -t rasp_web/dev_mode . + cd .. + +dev_amd_image: + cd ./docker_dev + sudo docker build --platform linux/amd64 --no-cache -t rasp_web/dev_mode . + cd .. + +dev_container: + sudo docker run -d -p 80:80 --name rasp_web_dev_mode rasp_web/dev_mode + +dev_stop: + - sudo docker stop rasp_web_dev_mode + - sudo docker rm rasp_web_dev_mode + +# for app +image: + sudo docker build --no-cache -t $(author)/$(app_name) . + +amd_image: + sudo docker build --platform linux/amd64 --no-cache -t $(author)/$(app_name) . + +container: + sudo docker run -d -p 80:80 --name $(container_name) $(author)/$(app_name) + +stop: + - sudo docker stop $(container_name) + - sudo docker rm $(container_name) + +export: + sudo docker save $(author)/$(app_name) > $(author).$(app_name).tar diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..e9dbf18 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,38 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + gzip on; + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + server { + listen 0.0.0.0:80; + resolver $host; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + location /schedule { + proxy_pass https://www.usue.ru/$request_uri; + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..16da23a --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "rasp_web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.1.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.41", + "svelte": "^4.2.18", + "tailwindcss": "^3.4.10", + "vite": "^5.4.1", + "vite-plugin-pwa": "^0.20.1" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/check.svg b/public/check.svg new file mode 100644 index 0000000..cf7b872 --- /dev/null +++ b/public/check.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/public/favicon.webp b/public/favicon.webp new file mode 100644 index 0000000..100d4b0 Binary files /dev/null and b/public/favicon.webp differ diff --git a/public/jbmv.ttf b/public/jbmv.ttf new file mode 100644 index 0000000..02bc07e Binary files /dev/null and b/public/jbmv.ttf differ diff --git a/public/x.svg b/public/x.svg new file mode 100644 index 0000000..707f963 --- /dev/null +++ b/public/x.svg @@ -0,0 +1,12 @@ + + + + cancel + + + + + + + + diff --git a/src/App.svelte b/src/App.svelte new file mode 100644 index 0000000..82e6573 --- /dev/null +++ b/src/App.svelte @@ -0,0 +1,550 @@ + + + +

Сохраненные

+ +
+ {#each data.saved as info, i} +
+

{info.name}

+ +
+ {/each} +
+ +

Добавить

+ + + { + const saved = search_value; + setTimeout(() => { + if (saved === search_value) { + search_group(); + } + }, 1000); + }} + /> + +
+ {#each search_data as item, i} +
+ {#if search_type === "teacher-list"} +

{item.label}

+ {:else} +

{item}

+ {/if} + +
+ {/each} +
+ + + + + +
+
 - Загрузка
+ +
+ +

- Показывает последние сохраненные данные

+
+ +
+ +

- Данные не загрузились

+
+ +
+ +

- Покавзывает актуальные данные

+
+
+ +
+ + Made by OGkod + +
+
+ +
+
+
+
+ +
+ {#if is_rasp_data_loading} + + {:else if !is_rasp_cache_loaded && !is_rasp_data_loaded} + + {:else if is_rasp_cache_loaded} + + {:else if is_rasp_data_loaded} + + {/if} + +
+
+ +
+ { + start_date = new Date(event.target.value); + get_rasp(); + }} + /> + + +
+ +
+ {#if rasp_data.length === 0 && data.saved.length === 0} +

+ У вас нету сохраненных расписаний, добавтье их в +

+ {:else} + {#each rasp_data as day, i} +
+
+

+
{day.date} - {day.weekDay}
+

+
+
+
+ {#if day.pairs.every((p) => p.schedulePairs.length === 0)} +
+ {#if !is_rasp_data_loading && !is_rasp_cache_loaded && !is_rasp_data_loaded} + Ошибка получения данных + попробуйте позже + {:else if is_rasp_data_loading} + Загрузка .... + {:else if is_rasp_data_loaded || is_rasp_cache_loaded} + have a good day + {/if} +
+ {:else} + {#each day.pairs as pairs} + + {/each} + {/if} +
+
+
+ {/each} + {/if} +
+
+
+
+ + + + + diff --git a/src/example.json b/src/example.json new file mode 100644 index 0000000..3b0130a --- /dev/null +++ b/src/example.json @@ -0,0 +1,1080 @@ +[ + { + "date": "22.04.2024", + "weekDay": "Понедельник", + "isCurrentDate": 1, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "156TV web", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "156TV web", + "comm": "" + } + ] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 1, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "156TV web", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "156TV web", + "comm": "" + } + ] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "156TV web", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "156TV web", + "comm": "" + } + ] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "755", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "755", + "comm": "" + } + ] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "755", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "755", + "comm": "" + } + ] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "23.04.2024", + "weekDay": "Вторник", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "452", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "555", + "comm": "" + } + ] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "452", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "555", + "comm": "" + } + ] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "24.04.2024", + "weekDay": "Среда", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 1, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "708 TV", + "comm": "" + } + ] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "708 TV", + "comm": "" + } + ] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "478м/м web", + "comm": "" + } + ] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "25.04.2024", + "weekDay": "Четверг", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "708 TV", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "708 TV", + "comm": "" + } + ] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "708 TV", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "708 TV", + "comm": "" + } + ] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "550", + "comm": "" + } + ] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "550", + "comm": "" + } + ] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "550", + "comm": "" + } + ] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "26.04.2024", + "weekDay": "Пятница", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [ + { + "subject": "Учебная практика (Практика)", + "teacher": "Посягин А.Е.", + "group": "21-03 ИСиП (2 п/гр.)", + "aud": "551", + "comm": "" + }, + { + "subject": "Учебная практика (Практика)", + "teacher": "Шаидова Н.А.", + "group": "21-03 ИСиП (1 п/гр.)", + "aud": "551", + "comm": "" + } + ] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "27.04.2024", + "weekDay": "Суббота", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + }, + { + "date": "28.04.2024", + "weekDay": "Воскресенье", + "isCurrentDate": 0, + "pairs": [ + { + "N": 1, + "time": "8:30-10:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 2, + "time": "10:10-11:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 3, + "time": "11:50-13:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 4, + "time": "13:50-15:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 5, + "time": "15:30-17:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 6, + "time": "17:10-18:40", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 7, + "time": "18:50-20:20", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 8, + "time": "20:30-22:00", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 9, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 10, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 11, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 12, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 13, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 14, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 15, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 16, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 17, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + }, + { + "N": 18, + "time": "-", + "isCurrentPair": 0, + "schedulePairs": [] + } + ] + } +] diff --git a/src/global.css b/src/global.css new file mode 100644 index 0000000..131a379 --- /dev/null +++ b/src/global.css @@ -0,0 +1,52 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + font-family: JetBrainsMono; + src: url(/jbmv.ttf); +} + + +* { + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none !important; + + font-family: JetBrainsMono; + + /* white theme */ + --w-bg: #ddd; + --w-text: #000; + --w-border: #000; + + --w-red: #fcc; + --w-green: #0f0; + --w-blue: #ccf; + --w-orange: #f80; + + /* dark theme */ + --b-bg: black; + --b-text: white; + --b-border: white; + + --b-red: #800; + --b-green: #080; + --b-blue: #000066; + --b-orange: #f80; + +} + +*::-webkit-scrollbar, +*::-webkit-scrollbar-thumb { + width: 0px; + border-radius: 0px; + background-clip: padding-box; + border: 0px solid transparent; + position: absolute; +} diff --git a/src/lib/Cache.svelte b/src/lib/Cache.svelte new file mode 100644 index 0000000..b0beeb2 --- /dev/null +++ b/src/lib/Cache.svelte @@ -0,0 +1,9 @@ +
+ C +
diff --git a/src/lib/Checked.svelte b/src/lib/Checked.svelte new file mode 100644 index 0000000..8d898ac --- /dev/null +++ b/src/lib/Checked.svelte @@ -0,0 +1,7 @@ +
+ data loaded +
diff --git a/src/lib/Dialog.svelte b/src/lib/Dialog.svelte new file mode 100644 index 0000000..0d24480 --- /dev/null +++ b/src/lib/Dialog.svelte @@ -0,0 +1,50 @@ + + +
+
+
+ {#if name_editable} + + {:else} +

+ {name} +

+ {/if} + +
+ +
+
diff --git a/src/lib/Pair.svelte b/src/lib/Pair.svelte new file mode 100644 index 0000000..312b940 --- /dev/null +++ b/src/lib/Pair.svelte @@ -0,0 +1,76 @@ + + +{#if pairs.schedulePairs.length === 1} +
+
+

+ {pairs.N}) {pairs.time.replace("-", " - ")} +

+
+
+

+ {pairs.schedulePairs[0].subject} +

+

+ aud: {pairs.schedulePairs[0].aud} +

+ + {pairs.schedulePairs[0].teacher} + +

+ {pairs.schedulePairs[0].group} +

+
+
+{:else if pairs.schedulePairs.length > 1} + {@const end_index = pairs.schedulePairs.length - 1} +
+
+

+ {pairs.N}) {pairs.time.replace("-", " - ")} +

+
+ {#each pairs.schedulePairs as pair, i} +
+

+ {pair.subject} +

+

+ aud: {pair.aud} +

+ + {pair.teacher} + +

+ {pair.group} +

+
+ {/each} +
+{/if} diff --git a/src/lib/Spinner.svelte b/src/lib/Spinner.svelte new file mode 100644 index 0000000..c881bc4 --- /dev/null +++ b/src/lib/Spinner.svelte @@ -0,0 +1,6 @@ + diff --git a/src/lib/ThemeSwitch.svelte b/src/lib/ThemeSwitch.svelte new file mode 100755 index 0000000..a398556 --- /dev/null +++ b/src/lib/ThemeSwitch.svelte @@ -0,0 +1,58 @@ + + +
+ + +
+
+
+
diff --git a/src/lib/X.svelte b/src/lib/X.svelte new file mode 100644 index 0000000..1522607 --- /dev/null +++ b/src/lib/X.svelte @@ -0,0 +1,7 @@ +
+ data not loaded +
diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..73c4fab --- /dev/null +++ b/src/main.js @@ -0,0 +1,8 @@ +import './global.css' +import App from './App.svelte' + +const app = new App({ + target: document.getElementById('app'), +}) + +export default app diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..4078e74 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..b0683fd --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..8cd39e8 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,svelte}", + ], + darkMode: 'selector', + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..e0ea8eb --- /dev/null +++ b/vite.config.js @@ -0,0 +1,23 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' +import { VitePWA } from 'vite-plugin-pwa' + +export default defineConfig({ + plugins: [ + svelte(), + VitePWA({ + registerType: 'autoUpdate', + includeAssets: ["**/*"], + manifest: { + theme_color: "#000", + background_color: "#000" + } + }) + ], + server: { + host: true + }, + preview: { + host: true + } +})