Приведение к прошлой версии

main
EVOgeek 2025-01-24 14:48:35 +03:00
parent 44a6d1747f
commit 7bbd5fdde4
40 changed files with 28745 additions and 60 deletions

View File

@ -1,17 +1,18 @@
Moodle App ВМедА Онлайн
================= =================
This is the primary repository of source code for the official mobile app for Moodle. Для запуска приложения необходимы следующие шаги:
-------------------------------------------------
1. ```npm install```
* [User documentation](https://docs.moodle.org/en/Moodle_app)
* [Developer documentation](https://moodledev.io/general/app)
* [Development environment setup](https://moodledev.io/general/app/development/setup)
* [Bug Tracker](https://tracker.moodle.org/browse/MOBILE)
* [Release Notes](https://moodledev.io/general/app_releases)
This project is tested with BrowserStack. 2. ```npm start```
3. ```chromium-browser --allow-file-access-from-files --disable-web-security --disable-site-isolation-trials --allow-running-insecure-content --no-referrers --unlimited-storage --auto-open-devtools-for-tabs --ignore-certificate-errors --disable-infobars --user-data-dir=~/.chromium-dev-data```
(Перед этим необходимо установить браузер Chromium)
License License
------- -------
[Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1836"
inkscape:export-filename="book-medical.svg"
inkscape:export-xdpi="3.8699999"
inkscape:export-ydpi="3.8699999"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1838"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false" />
<defs
id="defs1833" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g232"
transform="matrix(1.8296707,0,0,-1.8296707,192.88724,65.061799)">
<path
d="m 0,0 c -0.012,-0.256 -0.029,-0.468 -0.02,-0.622 l 0.003,-92.31 h -4.534 v 92.181 c -0.012,0.138 0,0.513 0.021,0.969 0.07,1.452 0.176,3.647 -1.211,5.101 -1.198,1.258 -3.402,1.896 -6.55,1.896 H -76.355 V 1.807 h 61.04 c 1.652,0 3.699,0 3.961,-2.99 v -103.645 c -0.262,-2.99 -2.309,-2.99 -3.961,-2.99 h -75.537 c -1.689,0 -3.791,0 -3.974,3.194 L -94.827,-1.32 c 0,0 0,0 0,0 v 9.962 c 0.193,3.127 2.281,3.127 3.961,3.127 h 10.551 c 0.277,0 0.565,-0.006 0.854,-0.02 h 67.17 c 4.437,0 7.745,-1.11 9.833,-3.301 C 0.269,5.587 0.087,1.814 0,0 M -5.351,20.85 H -90.829 C -103.86,20.85 -103.86,8.802 -103.86,8.802 V 0.974 c -0.033,-0.391 -0.037,-0.633 -0.037,-0.633 V -104.84 c 0,0 0,-0.105 0.015,-0.302 0.106,-1.844 1.21,-11.745 13.031,-11.745 h 75.536 c 8.477,0 11.432,5.082 12.47,8.643 9.458,1.301 10.427,9.86 10.525,11.564 V 9.104 C 7.574,10.949 6.47,20.85 -5.351,20.85"
style="fill:#00ab97;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path234" />
</g>
<g
id="g236"
transform="matrix(1.8296707,0,0,-1.8296707,170.39784,43.564822)">
<path
d="m 0,0 h -67.169 c -0.289,0.014 -0.578,0.02 -0.855,0.02 h -10.551 c -1.68,0 -3.768,0 -3.961,-3.127 v -9.962 c 0,0 0,0 0,0 l 0.001,-103.304 c 0.183,-3.194 2.285,-3.194 3.975,-3.194 h 75.537 c 1.652,0 3.699,0 3.961,2.99 v 103.644 c -0.262,2.991 -2.309,2.991 -3.961,2.991 h -61.04 v 5.408 H 0 c 3.148,0 5.352,-0.638 6.551,-1.896 1.386,-1.455 1.281,-3.649 1.211,-5.101 C 7.74,-11.987 7.728,-12.362 7.74,-12.5 v -92.181 h 4.534 l -0.003,92.31 c -0.008,0.153 0.008,0.366 0.02,0.622 0.087,1.813 0.269,5.587 -2.457,8.448 C 7.745,-1.11 4.437,0 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path238" />
</g>
<path
d="M 101.01124,168.81238 H 85.056524 v -51.85467 h 15.954716 z"
style="fill:#727270;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.82967"
id="path240" />
<path
d="M 118.96213,150.86331 H 67.107454 v -15.95472 h 51.854676 z"
style="fill:#727270;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.82967"
id="path242" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg2719"
inkscape:export-filename="download.svg"
inkscape:export-xdpi="3.870476"
inkscape:export-ydpi="3.870476"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview2721"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false" />
<defs
id="defs2716" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g92"
transform="matrix(1.7498577,0,0,-1.7498577,163.44533,113.88214)">
<path
d="M 0,0 C -3.559,15.35 -17.164,26.27 -33.154,26.27 -49.152,26.27 -62.762,15.349 -66.32,0 c -16.759,-3.905 -25.25,-12.998 -25.25,-27.052 0,-17.378 13.044,-28.173 34.042,-28.173 h 9.543 v 6.469 h -9.543 c -6.468,0 -27.573,1.566 -27.573,21.704 0,11.428 7.045,18.153 22.171,21.166 l 2.195,0.437 0.365,2.208 c 2.203,13.351 13.648,23.042 27.216,23.042 13.56,0 25,-9.691 27.204,-23.042 l 0.365,-2.209 2.196,-0.436 c 15.124,-3.011 22.169,-9.736 22.169,-21.166 0,-20.138 -21.114,-21.704 -27.584,-21.704 h -9.186 v -6.469 h 9.186 c 21.005,0 34.054,10.795 34.054,28.173 C 25.25,-12.995 16.759,-3.902 0,0"
style="fill:#238ef8;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path94" />
</g>
<g
id="g96"
transform="matrix(1.7498577,0,0,-1.7498577,117.71645,176.38215)">
<path
d="m 0,0 c 0,3.812 -3.119,6.931 -6.933,6.931 -3.813,0 -6.931,-3.118 -6.931,-6.931 v -27.929 h -7.988 -1.399 c -4.117,0 -4.822,-3.252 -2.109,-5.944 l 3.508,-3.482 7.611,-7.553 2.358,-2.34 c 3.283,-3.256 6.476,-3.357 9.93,0.062 l 1.745,1.727 8.351,8.267 3.353,3.319 c 2.341,2.317 2.049,5.944 -2.77,5.944 H 8.143 0 Z"
style="fill:#727270;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path98" />
</g>
<g
id="g100"
transform="matrix(1.7498577,0,0,-1.7498577,105.42388,104.30762)">
<path
d="m 0,0 c 5.128,0 9.456,-3.664 10.29,-8.713 l 6.383,1.054 C 15.321,0.528 8.309,6.469 0,6.469 c -8.312,0 -15.326,-5.941 -16.678,-14.128 l 6.383,-1.054 C -9.461,-3.664 -5.132,0 0,0"
style="fill:#238ef8;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path102" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <svg
version="1.1" version="1.1"
width="1024" width="42"
height="1024" height="42"
viewBox="-11 -15 512 512" viewBox="0 0 42 42"
style="clip-rule:evenodd;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" style="clip-rule:evenodd;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision"
id="svg12594" id="svg12594"
sodipodi:docname="logo.svg" sodipodi:docname="logo.svg"

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

View File

@ -26,7 +26,7 @@
<core-loading [hideUntil]="categoriesLoaded"> <core-loading [hideUntil]="categoriesLoaded">
<ion-list class="list-item-limited-width"> <ion-list class="list-item-limited-width">
<ion-item *ngIf="currentCategory" class="ion-text-wrap"> <ion-item *ngIf="currentCategory" class="ion-text-wrap">
<ion-icon name="fas-folder" slot="start" [attr.aria-label]="'core.category' | translate" /> <ion-icon name="fas-logo" slot="start" [attr.aria-label]="'core.category' | translate" />
<ion-label> <ion-label>
<p class="item-heading"> <p class="item-heading">
<core-format-text [text]="currentCategory.name" contextLevel="coursecat" [contextInstanceId]="currentCategory.id" /> <core-format-text [text]="currentCategory.name" contextLevel="coursecat" [contextInstanceId]="currentCategory.id" />
@ -47,7 +47,7 @@
<ion-card *ngFor="let category of categories" [attr.data-category-id]="category.id"> <ion-card *ngFor="let category of categories" [attr.data-category-id]="category.id">
<ion-item button class="ion-text-wrap" (click)="openCategory(category.id)" [attr.aria-label]="category.name" <ion-item button class="ion-text-wrap" (click)="openCategory(category.id)" [attr.aria-label]="category.name"
[detail]="true"> [detail]="true">
<ion-icon name="fas-logo-color" slot="start" [attr.aria-label]="'core.category' | translate" /> <ion-icon name="fas-logo" slot="start" [attr.aria-label]="'core.category' | translate" />
<ion-label> <ion-label>
<p class="item-heading"> <p class="item-heading">
<core-format-text [text]="category.name" contextLevel="coursecat" [contextInstanceId]="category.id" /> <core-format-text [text]="category.name" contextLevel="coursecat" [contextInstanceId]="category.id" />

View File

@ -0,0 +1,7 @@
ion-icon{
--webkit-margin-end: 16px !important;
margin-inline-end: 16px !important;
margin-block: 0 !important;
font-size: 2em;
}

View File

@ -34,6 +34,7 @@ import { CoreAlerts } from '@services/overlays/alerts';
@Component({ @Component({
selector: 'page-core-courses-categories', selector: 'page-core-courses-categories',
templateUrl: 'categories.html', templateUrl: 'categories.html',
styleUrl:'categories.scss',
}) })
export class CoreCoursesCategoriesPage implements OnInit, OnDestroy { export class CoreCoursesCategoriesPage implements OnInit, OnDestroy {

View File

@ -21,6 +21,7 @@ import { CoreMainMenuPage } from './pages/menu/menu';
import { CoreMainMenuHomeHandlerService } from './services/handlers/mainmenu'; import { CoreMainMenuHomeHandlerService } from './services/handlers/mainmenu';
import { CoreMainMenuComponentsModule } from './components/components.module'; import { CoreMainMenuComponentsModule } from './components/components.module';
import { MAIN_MENU_MORE_PAGE_NAME } from './constants'; import { MAIN_MENU_MORE_PAGE_NAME } from './constants';
import { CoreSiteHomeMaterialPage } from '@features/mainmenu/pages/materials/materials';
/** /**
* Build module routes. * Build module routes.
@ -47,6 +48,10 @@ function buildRoutes(injector: Injector): Routes {
...mainMenuRoutes.children, ...mainMenuRoutes.children,
], ],
}, },
{
path: 'home/materials',
component: CoreSiteHomeMaterialPage,
},
...mainMenuRoutes.siblings, ...mainMenuRoutes.siblings,
]; ];
} }
@ -58,6 +63,7 @@ function buildRoutes(injector: Injector): Routes {
], ],
declarations: [ declarations: [
CoreMainMenuPage, CoreMainMenuPage,
CoreSiteHomeMaterialPage,
], ],
providers: [ providers: [
{ provide: ROUTES, multi: true, useFactory: buildRoutes, deps: [Injector] }, { provide: ROUTES, multi: true, useFactory: buildRoutes, deps: [Injector] },

View File

@ -0,0 +1,111 @@
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-back-button [text]="'core.back' | translate" />
</ion-buttons>
<ion-title>
<h1>
<core-format-text [text]="title" />
</h1>
</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-card class="book-cell" style="background-color: rgb(111, 131, 243);">
<ion-item style="background: none" class="book-img">
<img src="assets/img/download/fdsf.jpg" alt="" class="book-photo">
</ion-item>
<ion-list class="book-content" style="background: none">
<ion-item class="book-title">Первая помощь</ion-item>
<ion-button class="book-see"
href="https://www.vmeda.org/wp-content/uploads/2022/10/first-aid-memo-basic-course-2022.pdf">
Скачать
</ion-button>
<!--
style="--swiper-theme-color: #007aff; --swiper-navigation-size: 22px;
font-family: 'Open Sans',sans-serif; line-height: 1.642; -webkit-font-smoothing: antialiased;
-webkit-tap-highlight-color: transparent; user-select: none; cursor: grab; box-sizing: border-box;
margin-top: 12px; text-align: center; background-color: #fff; font-weight: 600; padding: 4px;
font-size: 14px; width: 160px; border-radius: 20px; color: #a4e0eb;">
<a href="https://www.vmeda.org/wp-content/uploads/2022/10/first-aid-memo-basic-course-2022.pdf"
target="_blank">Скачать</a>
</ion-button>-->
</ion-list>
</ion-card>
<ion-card class="book-cell" style="background-color: rgb(84, 179, 96);">
<ion-item class="book-img">
<img src="assets/img/download/dew.jpg" alt="" class="book-photo">
</ion-item>
<ion-list class="book-content">
<ion-item class="book-title">Справочник тактической медицины</ion-item>
<ion-button class="book-see"
href="https://www.vmeda.org/wp-content/uploads/2022/10/handbook-tactical-medicine-2022.pdf">
Скачать
</ion-button>
</ion-list>
</ion-card>
<ion-card class="book-cell" style="background-color: rgb(66, 146, 193);">
<ion-item class="book-img">
<img src="assets/img/download/bdtt.jpg" alt="" class="book-photo">
</ion-item>
<ion-list class="book-content">
<ion-item class="book-title">
Методические рекомендации по этапному лечению пораженных с боевой терапевтической патологией
</ion-item>
<ion-button class="book-see"
href="https://www.vmeda.org/wp-content/uploads/2023/04/bttbook.pdf">
Скачать
</ion-button>
</ion-list>
</ion-card>
<ion-card class="book-cell" style="background-color: rgb(102, 179, 165);">
<ion-item class="book-img">
<img src="assets/img/download/polevter.jpg" alt="" class="book-photo">
</ion-item>
<ion-list class="book-content">
<ion-item class="book-title">Указания по военно-полевой терапии</ion-item>
<ion-button class="book-see book-blue"
href="https://www.vmeda.org/wp-content/uploads/2023/04/vptbook.pdf">
Скачать
</ion-button>
</ion-list>
</ion-card>
<ion-card class="book-cell" style="background-color: rgb(66, 146, 193);">
<ion-item class="book-img">
<img src="assets/img/download/metodugaz_travma-1.jpg" alt="" class="book-photo">
</ion-item>
<ion-list class="book-content">
<ion-item class="book-title">Методические рекомендации по лечению боевой хирургической травмы</ion-item>
<ion-button class="book-see" href="https://www.vmeda.org/wp-content/uploads/2023/04/metodugaz_travma.pdf">
Скачать
</ion-button>
</ion-list>
</ion-card>
<!--
<ion-modal>
<ng-template>
<ion-header>
<ion-toolbar>
<ion-buttons slot="start">
<ion-button style="--background: #0000" (click)="cancel()">
<ion-icon name="fas-arrow-left"/>
</ion-button>
</ion-buttons>
<ion-title>{{name}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<embed id="file" width=100% height=100% />
</ion-content>
</ng-template>
</ion-modal>
<script src="runtime.4cb0b06cb476cfb61ea2.js" defer></script><script src="polyfills.1efaf77c2721c4983f5b.js" defer></script>
<script src="cordova.32a3a29a8b6123a48c19.js" defer></script><script src="main.e2799415ee4149e46723.js" defer></script>
-->
</ion-content>

View File

@ -0,0 +1,40 @@
.book-cell{
display: flex;
justify-content: space-around;
padding: 0.5em;
}
.book-img img{
max-height: 12vh;
border-radius: 10px;
}
.book-img{
display: flex;
min-width: fit-content;
}
.book-title{
color: white;
}
.book-see{
--background: white;
--color: #0031f3;
--border-radius: 50px !important;
margin: 0;
width: 100%;
min-height: 0;
padding: 5px;
}
.book-content{
width: -webkit-fill-available;
max-width: 400px;
}
ion-list, ion-item{
background: none;
--background: none;
}

View File

@ -0,0 +1,21 @@
import { Component, OnInit} from '@angular/core';
import {CoreViewer} from "@features/viewer/services/viewer";
@Component({
selector: 'app-materials',
templateUrl: './materials.html',
styleUrls: ['./materials.scss'],
})
export class CoreSiteHomeMaterialPage implements OnInit {
title: string | undefined;
constructor() {
}
ngOnInit() {
this.title = "Материалы для скачивания";
}
}

View File

@ -17,14 +17,15 @@
</span> </span>
</ion-tab-button> </ion-tab-button>
<ion-tab-button (keydown)="tabAction.keyDown(morePageName, $event)" (keyup)="tabAction.keyUp(morePageName, $event)" <ion-tab-button (keydown)="tabAction.keyDown('more/settings', $event)" (keyup)="tabAction.keyUp('more/settings', $event)"
[hidden]="!loaded" [tab]="morePageName" layout="label-hide" [tabindex]="selectedTab === morePageName ? 0 : -1" [hidden]="!loaded" [tab]="'more/settings'" layout="label-hide" [tabindex]="selectedTab === 'more/settings' ? 0 : -1"
[attr.aria-controls]="morePageName"> [attr.aria-controls]="'more/settings'">
<ion-icon class="core-tab-icon" name="ellipsis-horizontal" aria-hidden="true" /> <ion-icon class="core-tab-icon" name="fas-gears" aria-hidden="true" />
<ion-label aria-hidden="true">{{ 'core.more' | translate }}</ion-label> <ion-label aria-hidden="true">{{ 'core.settings' | translate }}</ion-label>
<span class="sr-only">{{ 'core.more' | translate }}</span> <span class="sr-only">{{ 'core.settings' | translate }}</span>
<ion-icon *ngIf="moreBadge" class="core-tab-badge" name="fas-circle" aria-hidden="true" /> <ion-icon *ngIf="moreBadge" class="core-tab-badge" name="fas-gear" aria-hidden="true" />
</ion-tab-button> </ion-tab-button>
</ion-tab-bar> </ion-tab-bar>
</ion-tabs> </ion-tabs>
<div class="core-network-message" [hidden]="!showTabs"> <div class="core-network-message" [hidden]="!showTabs">

View File

@ -385,6 +385,7 @@ class CoreMainMenuRoleTab extends CoreAriaRoleTab<CoreMainMenuPage> {
id: tab.id || tab.page, id: tab.id || tab.page,
findIndex: tab.page, findIndex: tab.page,
})); }));
console.log(allTabs);
allTabs.push({ allTabs.push({
id: this.componentInstance.morePageName, id: this.componentInstance.morePageName,

View File

@ -42,7 +42,7 @@ export class CoreMainMenuHomeHandlerService implements CoreMainMenuHandler {
*/ */
getDisplayData(): CoreMainMenuHandlerData { getDisplayData(): CoreMainMenuHandlerData {
return { return {
icon: 'fas-gauge-high', icon: 'fas-home',
title: 'core.mainmenu.home', title: 'core.mainmenu.home',
page: CoreMainMenuHomeHandlerService.PAGE_NAME, page: CoreMainMenuHomeHandlerService.PAGE_NAME,
class: 'core-home-handler', class: 'core-home-handler',

View File

@ -54,11 +54,11 @@ export class CoreSettingsSectionsSource extends CoreRoutedItemsManagerSource<Cor
}); });
} }
sections.push({ // sections.push({
name: 'core.settings.about', // name: 'core.settings.about',
path: 'about', // path: 'about',
icon: 'fas-id-card', // icon: 'fas-id-card',
}); // });
return { items: sections }; return { items: sections };
} }

View File

@ -33,7 +33,7 @@
</ion-segment-button> </ion-segment-button>
</ion-segment> </ion-segment>
</ion-item> </ion-item>
<ion-item class="ion-text-wrap core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0"> <!--<ion-item class="ion-text-wrap core-settings-general-color-scheme" *ngIf="colorSchemes.length > 0">
<ion-select [(ngModel)]="selectedScheme" (ionChange)="colorSchemeChanged($event)" interface="action-sheet" <ion-select [(ngModel)]="selectedScheme" (ionChange)="colorSchemeChanged($event)" interface="action-sheet"
[cancelText]="'core.cancel' | translate" [disabled]="colorSchemeDisabled" [cancelText]="'core.cancel' | translate" [disabled]="colorSchemeDisabled"
[interfaceOptions]="{header: 'core.settings.colorscheme' | translate}"> [interfaceOptions]="{header: 'core.settings.colorscheme' | translate}">
@ -49,7 +49,7 @@
<ion-label class="ion-text-wrap"> <ion-label class="ion-text-wrap">
<p class="ion-text-wrap">{{ 'core.settings.colorscheme-system-notice' | translate }}</p> <p class="ion-text-wrap">{{ 'core.settings.colorscheme-system-notice' | translate }}</p>
</ion-label> </ion-label>
</ion-item> </ion-item>-->
<ion-item> <ion-item>
<ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)"> <ion-toggle [(ngModel)]="richTextEditor" (ionChange)="richTextEditorChanged($event)">
<p class="item-heading ion-text-wrap">{{ 'core.settings.enablerichtexteditor' | translate }}</p> <p class="item-heading ion-text-wrap">{{ 'core.settings.enablerichtexteditor' | translate }}</p>
@ -65,12 +65,12 @@
</ion-button> </ion-button>
</ion-label> </ion-label>
</ion-item> </ion-item>
<ion-item> <!--<ion-item>
<ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)"> <ion-toggle [(ngModel)]="debugDisplay" (ionChange)="debugDisplayChanged($event)">
<p class="item-heading ion-text-wrap">{{ 'core.settings.debugdisplay' | translate }}</p> <p class="item-heading ion-text-wrap">{{ 'core.settings.debugdisplay' | translate }}</p>
<p class="ion-text-wrap">{{ 'core.settings.debugdisplaydescription' | translate }}</p> <p class="ion-text-wrap">{{ 'core.settings.debugdisplaydescription' | translate }}</p>
</ion-toggle> </ion-toggle>
</ion-item> </ion-item> -->
<ion-item *ngIf="analyticsAvailable"> <ion-item *ngIf="analyticsAvailable">
<ion-label> <ion-label>
<p class="item-heading ion-text-wrap">{{ 'core.settings.enableanalytics' | translate }}</p> <p class="item-heading ion-text-wrap">{{ 'core.settings.enableanalytics' | translate }}</p>

View File

@ -50,7 +50,43 @@
</ng-container> </ng-container>
</section> </section>
<!-- Site home items: news, categories, courses, etc. --> <ion-card>
<ion-item button (click)="openItem('Подача заявки на обучение по программам ДПО онлайн',
'https://lms.vmeda.org/auth_abitur_dpo/register')"
[attr.aria-label]="'Подача заявки на обучение по программам ДПО онлайн'"
class="core-application-dpo">
<img src="assets/img/application_dpo.jpg" alt="Заявка ДПО"/>
<ion-label>
<p class="item-heading">Подача заявки на обучение по программам ДПО онлайн</p>
</ion-label>
</ion-item>
</ion-card>
<ion-card>
<ion-item button (click)="openItem('Перечень программ и прейскурант стоимости обучения ДПО',
'https://www.vmeda.org/s-02-01/fakultet-gr/dopolnitelnoe-professionalnoe-obrazovanie/')"
[attr.aria-label]="'Перечень программ и прейскурант стоимости обучения ДПО'"
class="core-application-dpo">
<img src="assets/img/dpo_cost.jpg" alt="Прейскурант ДПО"/>
<ion-label>
<p class="item-heading">Перечень программ и прейскурант стоимости обучения ДПО</p>
</ion-label>
</ion-item>
</ion-card>
<ion-card>
<ion-item button (click)="openItem('Обратная связь',
'https://lms.vmeda.org/contacts_mess/vmeda_online')"
[attr.aria-label]="'Обратная связь'"
class="core-application-dpo">
<img src="assets/img/feedback.jpg" alt="Обратная связь"/>
<ion-label>
<p class="item-heading">Обратная связь</p>
</ion-label>
</ion-item>
</ion-card>
<!-- Site home items: news, categories, courses, etc.
<ng-container *ngIf="items.length > 0"> <ng-container *ngIf="items.length > 0">
<ng-container *ngFor="let item of items"> <ng-container *ngFor="let item of items">
<ng-container [ngSwitch]="item"> <ng-container [ngSwitch]="item">
@ -69,10 +105,26 @@
<ng-container *ngSwitchCase="'NEWS_ITEMS'"> <ng-container *ngSwitchCase="'NEWS_ITEMS'">
<ng-template *ngTemplateOutlet="news" /> <ng-template *ngTemplateOutlet="news" />
</ng-container> </ng-container>
<ng-container>
<ng-template *ngTemplateOutlet="setting"/>
</ng-container>
</ng-container> </ng-container>
</ng-container> </ng-container>
</ng-container> </ng-container>-->
</ion-list> </ion-list>
<ion-card>
<ion-item button class="ion-text-wrap" (click)="openMaterialsDownload()">
<ion-icon name="far-download" slot="start" aria-hidden="true" />
<ion-label>
<p class="item-heading">Скачать материалы</p>
</ion-label>
</ion-item>
</ion-card>
<ng-template *ngTemplateOutlet="categories" />
<core-block-side-blocks-button slot="fixed" *ngIf="hasBlocks" contextLevel="course" [instanceId]="siteHomeId" /> <core-block-side-blocks-button slot="fixed" *ngIf="hasBlocks" contextLevel="course" [instanceId]="siteHomeId" />
<core-empty-box *ngIf="!hasContent" icon="fas-box-open" [message]="'core.course.nocontentavailable' | translate" /> <core-empty-box *ngIf="!hasContent" icon="fas-box-open" [message]="'core.course.nocontentavailable' | translate" />
@ -94,10 +146,12 @@
<core-course-module class="core-sitehome-news" *ngIf="newsForumModule" [module]="newsForumModule" /> <core-course-module class="core-sitehome-news" *ngIf="newsForumModule" [module]="newsForumModule" />
</ng-template> </ng-template>
<ng-template #categories> <ng-template #categories>
<ion-card> <ion-card>
<ion-item button class="ion-text-wrap" (click)="openCourseCategories()"> <ion-item button class="ion-text-wrap" (click)="openCourseCategories()">
<ion-icon name="far-folder" slot="start" aria-hidden="true" /> <ion-icon name="far-book-medical" slot="start" aria-hidden="true" />
<ion-label> <ion-label>
<p class="item-heading">{{ 'core.courses.categories' | translate}}</p> <p class="item-heading">{{ 'core.courses.categories' | translate}}</p>
</ion-label> </ion-label>

View File

@ -1,12 +1,36 @@
@use "theme/globals" as *; @use "theme/globals" as *;
ion-item img{
max-width: 5em;
display: inline-block;
border-radius: 10px;
margin-block: 0.8em;
color: var(--text-color);
line-height: var(--size);
--margin-end: 8px;
@include margin-horizontal(null, var(--margin-end));
}
core-loading{
display: flex;
flex-direction: column;
justify-content: space-around;
justify-items: self-end;
height: 100%;
}
.list-item-limited-width{
margin: 0 !important;
}
ion-item ion-icon { ion-item ion-icon {
display: inline-block; display: inline-block;
font-size: 3em;
border-radius: var(--mdl-shape-borderRadius-xs); border-radius: var(--mdl-shape-borderRadius-xs);
padding: 4px; padding: 4px;
color: var(--text-color); color: var(--text-color);
line-height: var(--size); line-height: var(--size);
--margin-end: 8px; --margin-inline: 0.32em;
@include margin-horizontal(null, var(--margin-end)); @include margin-horizontal(null, var(--margin-end));
} }

View File

@ -33,6 +33,8 @@ import { ContextLevel } from '@/core/constants';
import { CoreModals } from '@services/overlays/modals'; import { CoreModals } from '@services/overlays/modals';
import { CoreAlerts } from '@services/overlays/alerts'; import { CoreAlerts } from '@services/overlays/alerts';
import { Translate } from '@singletons'; import { Translate } from '@singletons';
import {CoreMainMenuCustomItem} from "@features/mainmenu/services/mainmenu";
import {CoreViewer} from "@features/viewer/services/viewer";
/** /**
* Page that displays site home index. * Page that displays site home index.
@ -222,6 +224,14 @@ export class CoreSiteHomeIndexPage implements OnInit, OnDestroy {
CoreNavigator.navigateToSitePath('courses/categories'); CoreNavigator.navigateToSitePath('courses/categories');
} }
openMaterialsDownload(): void {
CoreNavigator.navigateToSitePath('materials');
}
openItem(label: string, url: string): void {
CoreViewer.openIframeViewer(label, url);
}
/** /**
* @inheritdoc * @inheritdoc
*/ */

View File

@ -33,9 +33,9 @@ body:not(.core-iframe-fullscreen) .collapsible-header-page {
&:not(.collapsible-header-page-is-collapsed) .collapsible-header-collapsed { &:not(.collapsible-header-page-is-collapsed) .collapsible-header-collapsed {
--core-header-toolbar-border-width: 0; --core-header-toolbar-border-width: 0;
--core-header-buttons-color: var(--text-color); --core-header-buttons-color: var(--core-header-toolbar-color);
ion-toolbar { ion-toolbar {
--background: transparent; --background: -webkit-linear-gradient(135deg,#039615 0%,#3452ff 100%);
} }
h1 { h1 {

View File

@ -125,7 +125,7 @@ ion-header.header-md {
--core-header-toolbar-border-width: 0; --core-header-toolbar-border-width: 0;
--core-header-toolbar-background: transparent; --core-header-toolbar-background: transparent;
--core-header-shadow: none !important; --core-header-shadow: none !important;
--core-header-buttons-color: var(--text-color); --core-header-buttons-color: var(--core-header-toolbar-color);
--core-header-buttons-background: var(--background); --core-header-buttons-background: var(--background);
} }
} }

View File

@ -9,7 +9,7 @@
"downlevelIteration": true, "downlevelIteration": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"strictNullChecks": true, "strictNullChecks": true,
"strictPropertyInitialization": true, "strictPropertyInitialization": false,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"useDefineForClassFields": false, "useDefineForClassFields": false,
"module": "esnext", "module": "esnext",