@gudhub/ssg-web-components-library 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +3 -0
- package/package.json +20 -0
- package/src/components/about-us-banner/about-us-banner-data.json +9 -0
- package/src/components/about-us-banner/about-us-banner.html +19 -0
- package/src/components/about-us-banner/about-us-banner.js +23 -0
- package/src/components/about-us-banner/about-us-banner.scss +59 -0
- package/src/components/about-us-banner/config.js +5 -0
- package/src/components/about-us-image-counter/about-us-image-counter-data.json +35 -0
- package/src/components/about-us-image-counter/about-us-image-counter.html +22 -0
- package/src/components/about-us-image-counter/about-us-image-counter.js +23 -0
- package/src/components/about-us-image-counter/about-us-image-counter.scss +44 -0
- package/src/components/about-us-image-counter/config.js +5 -0
- package/src/components/about-us-team-members/about-us-team-members-data.json +99 -0
- package/src/components/about-us-team-members/about-us-team-members.html +25 -0
- package/src/components/about-us-team-members/about-us-team-members.js +22 -0
- package/src/components/about-us-team-members/about-us-team-members.scss +71 -0
- package/src/components/about-us-team-members/config.js +5 -0
- package/src/components/animation-block/animation-block-data.json +40 -0
- package/src/components/animation-block/animation-block.html +37 -0
- package/src/components/animation-block/animation-block.js +23 -0
- package/src/components/animation-block/animation-block.scss +337 -0
- package/src/components/animation-block/config.js +5 -0
- package/src/components/banner-and-text/banner-and-text-data.json +24 -0
- package/src/components/banner-and-text/banner-and-text.html +30 -0
- package/src/components/banner-and-text/banner-and-text.js +25 -0
- package/src/components/banner-and-text/banner-and-text.scss +85 -0
- package/src/components/banner-and-text/config.js +5 -0
- package/src/components/blog/article/allArticles.json +96 -0
- package/src/components/blog/article/article-component.html +189 -0
- package/src/components/blog/article/article-component.js +340 -0
- package/src/components/blog/article/article-component.scss +776 -0
- package/src/components/blog/article/authors-object.json +125 -0
- package/src/components/blog/article/categories-object.json +47 -0
- package/src/components/blog/author-page/author-page.html +37 -0
- package/src/components/blog/author-page/author-page.js +113 -0
- package/src/components/blog/author-page/author-page.json +111 -0
- package/src/components/blog/author-page/author-page.scss +107 -0
- package/src/components/blog/authors-list/authors-list.html +40 -0
- package/src/components/blog/authors-list/authors-list.js +60 -0
- package/src/components/blog/authors-list/authors-list.json +132 -0
- package/src/components/blog/authors-list/authors-list.scss +171 -0
- package/src/components/blog/categories-list/categories-list.html +21 -0
- package/src/components/blog/categories-list/categories-list.js +26 -0
- package/src/components/blog/categories-list/categories-list.json +53 -0
- package/src/components/blog/categories-list/categories-list.scss +125 -0
- package/src/components/blog/comments/comments.html +89 -0
- package/src/components/blog/comments/comments.js +181 -0
- package/src/components/blog/comments/comments.json +130 -0
- package/src/components/blog/comments/comments.scss +324 -0
- package/src/components/blog/contents/contents.html +14 -0
- package/src/components/blog/contents/contents.js +63 -0
- package/src/components/blog/contents/contents.scss +157 -0
- package/src/components/blog/posts-template/articles.json +139 -0
- package/src/components/blog/posts-template/authors-object.json +61 -0
- package/src/components/blog/posts-template/categories.json +61 -0
- package/src/components/blog/posts-template/posts-template.html +239 -0
- package/src/components/blog/posts-template/posts-template.js +532 -0
- package/src/components/blog/posts-template/posts-template.scss +566 -0
- package/src/components/breadcrumbs/breadcrumbs-component.js +65 -0
- package/src/components/breadcrumbs/breadcrumbs.html +21 -0
- package/src/components/breadcrumbs/breadcrumbs.scss +118 -0
- package/src/components/breadcrumbs/config.js +5 -0
- package/src/components/button-component/button-component.html +3 -0
- package/src/components/button-component/button-component.js +39 -0
- package/src/components/button-component/button-component.readme.md +11 -0
- package/src/components/button-component/button-component.scss +34 -0
- package/src/components/button-component/config.js +5 -0
- package/src/components/category-banner/category-banner.html +7 -0
- package/src/components/category-banner/category-banner.js +44 -0
- package/src/components/category-banner/category-banner.scss +22 -0
- package/src/components/category-banner/config.js +5 -0
- package/src/components/contact-us-block/config.js +5 -0
- package/src/components/contact-us-block/contact-us-block.html +41 -0
- package/src/components/contact-us-block/contact-us-block.js +22 -0
- package/src/components/contact-us-block/contact-us-block.scss +59 -0
- package/src/components/cookies-popup/config.js +5 -0
- package/src/components/cookies-popup/cookies-popup.html +8 -0
- package/src/components/cookies-popup/cookies-popup.js +27 -0
- package/src/components/cookies-popup/cookies-popup.scss +68 -0
- package/src/components/counter-section/config.js +5 -0
- package/src/components/counter-section/counter-section-data.json +21 -0
- package/src/components/counter-section/counter-section.html +38 -0
- package/src/components/counter-section/counter-section.js +23 -0
- package/src/components/counter-section/counter-section.readme.md +19 -0
- package/src/components/counter-section/counter-section.scss +204 -0
- package/src/components/counter-section-with-text/config.js +5 -0
- package/src/components/counter-section-with-text/counter-section-with-text-data.json +21 -0
- package/src/components/counter-section-with-text/counter-section-with-text.html +46 -0
- package/src/components/counter-section-with-text/counter-section-with-text.js +23 -0
- package/src/components/counter-section-with-text/counter-section-with-text.readme.md +19 -0
- package/src/components/counter-section-with-text/counter-section-with-text.scss +164 -0
- package/src/components/crm-services-banner/config.js +5 -0
- package/src/components/crm-services-banner/crm-services-banner-data.json +20 -0
- package/src/components/crm-services-banner/crm-services-banner.html +28 -0
- package/src/components/crm-services-banner/crm-services-banner.js +25 -0
- package/src/components/crm-services-banner/crm-services-banner.scss +57 -0
- package/src/components/edit-mode/config.js +5 -0
- package/src/components/edit-mode/edit-mode.html +4 -0
- package/src/components/edit-mode/edit-mode.js +23 -0
- package/src/components/edit-mode/edit-mode.scss +69 -0
- package/src/components/faq/config.js +5 -0
- package/src/components/faq/faq.html +20 -0
- package/src/components/faq/faq.js +40 -0
- package/src/components/faq/faq.scss +80 -0
- package/src/components/footer/config.js +5 -0
- package/src/components/footer/footer.html +74 -0
- package/src/components/footer/footer.js +21 -0
- package/src/components/footer/footer.scss +356 -0
- package/src/components/footer/pages-object.json +58 -0
- package/src/components/fullscreen-image-and-text/config.js +5 -0
- package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.html +42 -0
- package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.js +29 -0
- package/src/components/fullscreen-image-and-text/fullscreen-image-and-text.scss +192 -0
- package/src/components/get-in-touch-block/config.js +5 -0
- package/src/components/get-in-touch-block/get-in-touch-block-data.json +4 -0
- package/src/components/get-in-touch-block/get-in-touch-block.html +11 -0
- package/src/components/get-in-touch-block/get-in-touch-block.js +22 -0
- package/src/components/get-in-touch-block/get-in-touch-block.scss +12 -0
- package/src/components/get-in-touch-form/config.js +5 -0
- package/src/components/get-in-touch-form/get-in-touch-form-data.json +114 -0
- package/src/components/get-in-touch-form/get-in-touch-form.html +35 -0
- package/src/components/get-in-touch-form/get-in-touch-form.js +115 -0
- package/src/components/get-in-touch-form/get-in-touch-form.readme.md +45 -0
- package/src/components/get-in-touch-form/get-in-touch-form.scss +334 -0
- package/src/components/get-in-touch-form/sendEmail.js +161 -0
- package/src/components/grid/config.js +5 -0
- package/src/components/grid/grid.html +51 -0
- package/src/components/grid/grid.js +115 -0
- package/src/components/grid/grid.scss +566 -0
- package/src/components/grid-component/config.js +5 -0
- package/src/components/grid-component/grid-component-data.json +115 -0
- package/src/components/grid-component/grid-component.html +52 -0
- package/src/components/grid-component/grid-component.js +40 -0
- package/src/components/grid-component/grid-component.readme.md +32 -0
- package/src/components/grid-component/grid-component.scss +199 -0
- package/src/components/header/config.js +5 -0
- package/src/components/header/header.html +60 -0
- package/src/components/header/header.js +55 -0
- package/src/components/header/header.scss +556 -0
- package/src/components/homepage-banner/config.js +5 -0
- package/src/components/homepage-banner/homepage-banner.html +1443 -0
- package/src/components/homepage-banner/homepage-banner.js +23 -0
- package/src/components/homepage-banner/homepage-banner.scss +147 -0
- package/src/components/image-component/config.js +5 -0
- package/src/components/image-component/image-component.html +25 -0
- package/src/components/image-component/image-component.js +107 -0
- package/src/components/list-text-and-media/config.js +5 -0
- package/src/components/list-text-and-media/list-text-and-media-data.json +70 -0
- package/src/components/list-text-and-media/list-text-and-media.html +38 -0
- package/src/components/list-text-and-media/list-text-and-media.js +22 -0
- package/src/components/list-text-and-media/list-text-and-media.readme.md +30 -0
- package/src/components/list-text-and-media/list-text-and-media.scss +156 -0
- package/src/components/media-and-accordion/config.js +5 -0
- package/src/components/media-and-accordion/media-and-accordion-data.json +84 -0
- package/src/components/media-and-accordion/media-and-accordion.html +37 -0
- package/src/components/media-and-accordion/media-and-accordion.js +55 -0
- package/src/components/media-and-accordion/media-and-accordion.scss +170 -0
- package/src/components/media-and-list-of-text/config.js +5 -0
- package/src/components/media-and-list-of-text/media-and-list-of-text-data.json +16 -0
- package/src/components/media-and-list-of-text/media-and-list-of-text.html +32 -0
- package/src/components/media-and-list-of-text/media-and-list-of-text.js +24 -0
- package/src/components/media-and-list-of-text/media-and-list-of-text.readme.md +26 -0
- package/src/components/media-and-list-of-text/media-and-list-of-text.scss +102 -0
- package/src/components/media-and-text/config.js +5 -0
- package/src/components/media-and-text/media-and-text-data.json +20 -0
- package/src/components/media-and-text/media-and-text.html +26 -0
- package/src/components/media-and-text/media-and-text.js +26 -0
- package/src/components/media-and-text/media-and-text.scss +51 -0
- package/src/components/meta/articles.json +95 -0
- package/src/components/meta/author-schema.js +71 -0
- package/src/components/meta/authors.json +108 -0
- package/src/components/meta/blog-schema.js +93 -0
- package/src/components/meta/canonical.js +74 -0
- package/src/components/meta/config.js +40 -0
- package/src/components/meta/meta-index.js +14 -0
- package/src/components/meta/meta-tag.js +168 -0
- package/src/components/meta/organization-schema.js +50 -0
- package/src/components/meta/service-schema.js +76 -0
- package/src/components/meta/title-tag.js +64 -0
- package/src/components/overflow-cards/config.js +5 -0
- package/src/components/overflow-cards/overflow-cards-data.json +33 -0
- package/src/components/overflow-cards/overflow-cards.html +33 -0
- package/src/components/overflow-cards/overflow-cards.js +28 -0
- package/src/components/overflow-cards/overflow-cards.scss +112 -0
- package/src/components/popup/config.js +5 -0
- package/src/components/popup/popup.html +10 -0
- package/src/components/popup/popup.js +66 -0
- package/src/components/popup/popup.readme.md +13 -0
- package/src/components/popup/popup.scss +76 -0
- package/src/components/prices-cards/config.js +5 -0
- package/src/components/prices-cards/prices-cards-data.json +90 -0
- package/src/components/prices-cards/prices-cards.html +35 -0
- package/src/components/prices-cards/prices-cards.js +23 -0
- package/src/components/prices-cards/prices-cards.readme.md +48 -0
- package/src/components/prices-cards/prices-cards.scss +206 -0
- package/src/components/recent-posts/author-object.json +53 -0
- package/src/components/recent-posts/config.js +5 -0
- package/src/components/recent-posts/recent-posts.html +85 -0
- package/src/components/recent-posts/recent-posts.js +89 -0
- package/src/components/recent-posts/recent-posts.json +258 -0
- package/src/components/recent-posts/recent-posts.scss +274 -0
- package/src/components/reviews-slider/config.js +5 -0
- package/src/components/reviews-slider/reviews-slider-data.json +30 -0
- package/src/components/reviews-slider/reviews-slider.html +48 -0
- package/src/components/reviews-slider/reviews-slider.js +86 -0
- package/src/components/reviews-slider/reviews-slider.scss +92 -0
- package/src/components/service-counter/config.js +5 -0
- package/src/components/service-counter/service-counter-data.json +24 -0
- package/src/components/service-counter/service-counter.html +19 -0
- package/src/components/service-counter/service-counter.js +23 -0
- package/src/components/service-counter/service-counter.scss +171 -0
- package/src/components/service-image-counter/config.js +5 -0
- package/src/components/service-image-counter/service-image-counter-data.json +52 -0
- package/src/components/service-image-counter/service-image-counter.html +30 -0
- package/src/components/service-image-counter/service-image-counter.js +23 -0
- package/src/components/service-image-counter/service-image-counter.scss +114 -0
- package/src/components/tabs/config.js +5 -0
- package/src/components/tabs/tabs-component.js +45 -0
- package/src/components/tabs/tabs.html +28 -0
- package/src/components/tabs/tabs.scss +399 -0
- package/src/components/text-only/config.js +5 -0
- package/src/components/text-only/text-only-data.json +4 -0
- package/src/components/text-only/text-only.html +8 -0
- package/src/components/text-only/text-only.js +20 -0
- package/src/components/text-only/text-only.scss +21 -0
- package/src/components/top-banner/config.js +5 -0
- package/src/components/top-banner/top-banner.html +22 -0
- package/src/components/top-banner/top-banner.js +50 -0
- package/src/components/top-banner/top-banner.scss +132 -0
- package/src/config.js +38 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
breadcrumbs-component {
|
|
2
|
+
.breadcrumbs_list {
|
|
3
|
+
list-style: none;
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
margin-bottom: 30px;
|
|
7
|
+
height: 16px;
|
|
8
|
+
li {
|
|
9
|
+
margin-right: 31px;
|
|
10
|
+
position: relative;
|
|
11
|
+
font-size: 16px;
|
|
12
|
+
line-height: 100%;
|
|
13
|
+
font-weight: 300;
|
|
14
|
+
height: 100%;
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
a {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
color: var(--breadcrumbsColor);
|
|
20
|
+
position: relative;
|
|
21
|
+
&::after {
|
|
22
|
+
content: '';
|
|
23
|
+
position: absolute;
|
|
24
|
+
bottom: -2px;
|
|
25
|
+
left: 0;
|
|
26
|
+
transition: all .2s ease;
|
|
27
|
+
height: 1px;
|
|
28
|
+
width: 0;
|
|
29
|
+
background: var(--breadcrumbsColor);
|
|
30
|
+
}
|
|
31
|
+
&:hover::after {
|
|
32
|
+
width: 100%;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
&:last-child {
|
|
36
|
+
color: var(--breadcrumbsLastColor);
|
|
37
|
+
margin-right: 0;
|
|
38
|
+
max-width: 80%;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
font-weight: 500;
|
|
41
|
+
text-overflow: ellipsis;
|
|
42
|
+
&::after {
|
|
43
|
+
content: none;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
&::after {
|
|
47
|
+
content: '';
|
|
48
|
+
position: absolute;
|
|
49
|
+
top: calc(50% - 5px);
|
|
50
|
+
right: -17px;
|
|
51
|
+
width: 6px;
|
|
52
|
+
height: 6px;
|
|
53
|
+
background-repeat: no-repeat;
|
|
54
|
+
border-right: 1px solid;
|
|
55
|
+
border-bottom: 1px solid;
|
|
56
|
+
border-color: var(--breadcrumbsColor);
|
|
57
|
+
transform: rotate(-45deg);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
article breadcrumbs-component .breadcrumbs_list {
|
|
63
|
+
li {
|
|
64
|
+
&:last-child {
|
|
65
|
+
overflow: hidden;
|
|
66
|
+
text-overflow: ellipsis;
|
|
67
|
+
max-width: 400px;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@media screen and (max-width: 1300px) {
|
|
73
|
+
breadcrumbs-component {
|
|
74
|
+
padding-top: 30px;
|
|
75
|
+
display: block;
|
|
76
|
+
}
|
|
77
|
+
.service_banner_left breadcrumbs-component + h1 {
|
|
78
|
+
margin-top: 0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
@media screen and (max-width: 1080px) {
|
|
82
|
+
article breadcrumbs-component .breadcrumbs_list li:last-child {
|
|
83
|
+
max-width: 280px;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
@media screen and (max-width: 990px) {
|
|
87
|
+
article breadcrumbs-component .breadcrumbs_list li:last-child {
|
|
88
|
+
max-width: 100%;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
@media screen and (max-width: 640px) {
|
|
92
|
+
breadcrumbs-component {
|
|
93
|
+
padding-top: 15px;
|
|
94
|
+
.breadcrumbs_list {
|
|
95
|
+
margin-bottom: 15px;
|
|
96
|
+
li {
|
|
97
|
+
margin-right: 21px;
|
|
98
|
+
font-size: 14px;
|
|
99
|
+
&::after {
|
|
100
|
+
right: -11px;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
@media screen and (max-width: 420px) {
|
|
107
|
+
breadcrumbs-component {
|
|
108
|
+
.breadcrumbs_list {
|
|
109
|
+
li {
|
|
110
|
+
font-size: 12px;
|
|
111
|
+
&::after {
|
|
112
|
+
top: calc(50% - 6px);
|
|
113
|
+
right: -13px;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import html from './button-component.html';
|
|
2
|
+
import './button-component.scss';
|
|
3
|
+
|
|
4
|
+
class ButtonComponent extends GHComponent {
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
this.popupId = this.hasAttribute('data-popup-id') ? this.getAttribute('data-popup-id') : null;
|
|
9
|
+
this.placement = this.hasAttribute('data-placement') ? this.getAttribute('data-placement') : 'no-placement-attribute';
|
|
10
|
+
this.href = this.hasAttribute('href') ? this.getAttribute('href') : null;
|
|
11
|
+
this.tag = !this.popupId && this.href ? `a href="${this.href}"` : 'div onclick="openPopup()"';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async onServerRender() {
|
|
15
|
+
this.text = this.textContent != '' ? this.textContent : 'Замовити консультацію';
|
|
16
|
+
if (this.href) {
|
|
17
|
+
this.removeHref();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
this.className = this.hasAttribute('class') ? this.getAttribute('class') : 'btn';
|
|
21
|
+
|
|
22
|
+
super.render(html);
|
|
23
|
+
this.removeAttribute('class');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
openPopup () {
|
|
27
|
+
window.dispatchEvent( new CustomEvent('open-popup', {
|
|
28
|
+
detail: {
|
|
29
|
+
popupId: this.popupId,
|
|
30
|
+
placement: this.placement
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
removeHref() {
|
|
36
|
+
this.removeAttribute('href');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
window.customElements.define('button-component', ButtonComponent);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Button text
|
|
2
|
+
Button text defines in component innerText: <button-component>button text</button-component>
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
# Data-attributes
|
|
7
|
+
data-popup-id="popup-id": button will open popup, and "popup-id" determines which popup will be opened
|
|
8
|
+
|
|
9
|
+
href: button will be with tag <a> and open link from href attribute of component
|
|
10
|
+
|
|
11
|
+
data-placement: value of this attribute will be in event details (for example it used in form to track which button user clicked)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
button-component {
|
|
2
|
+
.btn {
|
|
3
|
+
color: var(--button-primary-normal-font-color);
|
|
4
|
+
border-radius: var(--button-primary-border-radius);
|
|
5
|
+
border: 1px solid;
|
|
6
|
+
background-color: var(--button-primary-normal-fill-color);
|
|
7
|
+
border-color: var(--button-primary-normal-border-color);
|
|
8
|
+
padding: 20px 25px;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
font-weight: var(--button-primary-font-weight);
|
|
11
|
+
transition: all .2s ease;
|
|
12
|
+
&:hover {
|
|
13
|
+
color: var(--button-primary-hover-font-color);
|
|
14
|
+
background-color: var(--button-primary-hover-fill-color);
|
|
15
|
+
border-color: var(--button-primary-hover-border-color);
|
|
16
|
+
}
|
|
17
|
+
&.empty {
|
|
18
|
+
color: var(--button-secondary-normal-font-color);
|
|
19
|
+
border-radius: var(--button-secondary-border-radius);
|
|
20
|
+
background-color: var(--button-secondary-normal-fill-color);
|
|
21
|
+
border-color: var(--button-secondary-normal-border-color);
|
|
22
|
+
font-weight: var(--button-secondary-font-weight);
|
|
23
|
+
&:hover {
|
|
24
|
+
color: var(--button-secondary-hover-font-color);
|
|
25
|
+
background-color: var(--button-secondary-hover-fill-color);
|
|
26
|
+
border-color: var(--button-secondary-hover-border-color);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
a {
|
|
32
|
+
display: block;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import html from './category-banner.html';
|
|
2
|
+
import './category-banner.scss';
|
|
3
|
+
|
|
4
|
+
class CategoryBanner extends GHComponent {
|
|
5
|
+
/**
|
|
6
|
+
* data-chapter - blog, default - page
|
|
7
|
+
*/
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async onServerRender() {
|
|
13
|
+
let chapter = this.getAttribute('data-chapter')
|
|
14
|
+
let url = new URL(window.location.href);
|
|
15
|
+
let route = url.searchParams.get('path');
|
|
16
|
+
let slug;
|
|
17
|
+
if (route.includes('/page/')) {
|
|
18
|
+
route = route.slice(1, route.length - 1);
|
|
19
|
+
route = route.split('/');
|
|
20
|
+
slug = `/${route[0]}/${route[1]}/`;
|
|
21
|
+
} else {
|
|
22
|
+
slug = false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// This algorithm with findIds we use because pagination pages is not exist in gudhub application and can't get data from their items
|
|
26
|
+
let ids = await super.findIds(chapter, slug);
|
|
27
|
+
const items = await gudhub.getItems(ids.appId);
|
|
28
|
+
const item = items.find(item => item.item_id == ids.itemId);
|
|
29
|
+
|
|
30
|
+
let description = await fetch(`https://gudhub.com/userdata/${ids.appId}/${item.fields.find(field => field.field_id == window.constants.chapters.blog.description_field_id).field_value}.html?t=${new Date().getTime()}`);
|
|
31
|
+
description = await description.text();
|
|
32
|
+
|
|
33
|
+
let div = document.createElement('div');
|
|
34
|
+
div.innerHTML = description;
|
|
35
|
+
this.description = div.querySelector('div').innerText;
|
|
36
|
+
this.title = item.fields.find(field => field.field_id == window.constants.chapters.blog.heading_field_id).field_value;
|
|
37
|
+
|
|
38
|
+
this.breadcrumbs = JSON.stringify([{"title": "Blog", "slug": "/blog/"},{"title": this.title}]);
|
|
39
|
+
|
|
40
|
+
super.render(html);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
window.customElements.define('category-banner', CategoryBanner);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
category-banner {
|
|
2
|
+
section {
|
|
3
|
+
padding-top: 70px;
|
|
4
|
+
}
|
|
5
|
+
text-align: center;
|
|
6
|
+
h1 {
|
|
7
|
+
text-align: center;
|
|
8
|
+
}
|
|
9
|
+
p {
|
|
10
|
+
width: 100%;
|
|
11
|
+
max-width: 950px;
|
|
12
|
+
margin: 0 auto
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@media screen and (max-width: 600px) {
|
|
17
|
+
category-banner {
|
|
18
|
+
section {
|
|
19
|
+
padding-top: 60px;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<section class="contact_us_block">
|
|
2
|
+
<div class="contact_us_block_container">
|
|
3
|
+
<h1 class="title" gh-id="${ghId}.title"></h1>
|
|
4
|
+
<div class="subtitle" gh-id="${ghId}.subtitle"></div>
|
|
5
|
+
<ul class="contact_info_list">
|
|
6
|
+
<li class="tel">
|
|
7
|
+
<a href="tel:${hrefPhone}">
|
|
8
|
+
<div class="icon-wrapper">
|
|
9
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" viewBox="0 0 26 26" fill="none"><g clip-path="url(#clip0_1428_29328)"><path d="M22.3204 17.1261C21.6107 16.4098 20.6649 16.0155 19.6566 16.0155C19.6556 16.0155 19.6545 16.0155 19.6535 16.0155C18.6442 16.0163 17.6978 16.4122 16.9885 17.1304L15.4698 18.668C11.8226 17.1394 8.90841 14.2224 7.38191 10.5773L8.93201 9.00779C10.3827 7.53899 10.3699 5.1619 8.90336 3.70885L5.36176 0.199707H5.05312C2.37882 0.199707 0.203125 2.3754 0.203125 5.0497C0.203125 7.85059 0.751874 10.5681 1.83402 13.1267C2.87917 15.5977 4.37522 17.8167 6.28061 19.7221C8.18601 21.6275 10.4051 23.1236 12.876 24.1687C15.4346 25.2509 18.1522 25.7997 20.9531 25.7997C23.6274 25.7997 25.8031 23.624 25.8031 20.9497V20.6411L22.3204 17.1261ZM20.9531 24.2997C10.3386 24.2997 1.70312 15.6642 1.70312 5.0497C1.70312 3.30205 3.04817 1.8627 4.75752 1.71265L7.84756 4.7743C8.72746 5.64615 8.73521 7.07239 7.86476 7.95369L5.63031 10.2161L5.80246 10.6671C7.46651 15.0268 10.9135 18.5018 15.2596 20.2011L15.8398 20.4279L18.0557 18.1844C18.4813 17.7535 19.0491 17.516 19.6547 17.5155C19.6554 17.5155 19.656 17.5155 19.6566 17.5155C20.2615 17.5155 20.829 17.7521 21.2548 18.1818L24.2902 21.2453C24.1401 22.9546 22.7007 24.2997 20.9531 24.2997Z" fill="white"/><path d="M22.0529 3.9488C19.6353 1.5312 16.4209 0.199707 13.002 0.199707V1.6997C19.2328 1.6997 24.3019 6.76884 24.3019 12.9997H25.8019C25.8019 9.58069 24.4705 6.36635 22.0529 3.9488Z" fill="white"/><path d="M13.002 4.69971V6.1997C16.7515 6.1997 19.8019 9.25015 19.8019 12.9997H21.3019C21.3019 8.42305 17.5786 4.69971 13.002 4.69971Z" fill="white"/></g><defs><clipPath id="clip0_1428_29328"><rect width="25.6" height="25.6" fill="white" transform="translate(0.199219 0.200195)"/></clipPath></defs></svg>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="flex-wrapper">
|
|
12
|
+
<h3>Phone:</h3>
|
|
13
|
+
<span>${info.phone}</span>
|
|
14
|
+
</div>
|
|
15
|
+
</a>
|
|
16
|
+
</li>
|
|
17
|
+
<li class="mail">
|
|
18
|
+
<a href="mailto:${info.email}">
|
|
19
|
+
<div class="icon-wrapper">
|
|
20
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" fill="none"><g clip-path="url(#clip0_1428_29305)"><mask id="mask0_1428_29305" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="30" height="30"><path d="M0.902344 0.919592H29.0623V29.0796H0.902344V0.919592Z" fill="white"/></mask><g mask="url(#mask0_1428_29305)"><path d="M1.72656 5.15522H28.2366V24.8452H1.72656V5.15522Z" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M1.7207 5.155L14.9757 17.75L28.2307 5.155" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M1.7207 24.8452L11.6517 14.5917" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/><path d="M28.2278 24.8452L18.2969 14.5917" stroke="white" stroke-width="1.5" stroke-miterlimit="10"/></g></g><defs><clipPath id="clip0_1428_29305"><rect width="28.16" height="28.16" fill="white" transform="translate(0.919922 0.919922)"/></clipPath></defs></svg>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="flex-wrapper">
|
|
23
|
+
<h3>Email:</h3>
|
|
24
|
+
<span>${info.email}</span>
|
|
25
|
+
</div>
|
|
26
|
+
</a>
|
|
27
|
+
</li>
|
|
28
|
+
<li class="address">
|
|
29
|
+
<a href="${info.googleMaps}" target="_blank" rel="noreferrer noopener nofollow">
|
|
30
|
+
<div class="icon-wrapper">
|
|
31
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="29" viewBox="0 0 24 29" fill="none"><g clip-path="url(#clip0_1428_29403)"><path d="M12.0535 14.2955C10.984 14.2955 9.91434 13.8884 9.10029 13.0741C7.47178 11.4458 7.47178 8.79617 9.10029 7.16766C9.88898 6.37875 10.9379 5.94434 12.0535 5.94434C13.1692 5.94434 14.2179 6.37896 15.0068 7.16766C16.6353 8.79617 16.6353 11.4458 15.0068 13.0741C14.1925 13.8884 13.123 14.2955 12.0535 14.2955ZM12.0535 7.59756C11.4071 7.59756 10.7606 7.84355 10.2684 8.33576C9.28398 9.32018 9.28398 10.9218 10.2684 11.9062C10.7451 12.383 11.3791 12.6455 12.0535 12.6455C12.7279 12.6455 13.3619 12.383 13.8387 11.9062C14.8231 10.9218 14.8231 9.32018 13.8387 8.33576C13.3465 7.84355 12.7 7.59756 12.0535 7.59756Z" fill="white"/><path d="M12.0675 28.5799L11.4288 27.8297C11.0549 27.3903 2.26953 16.9919 2.26953 10.2082C2.26953 4.8109 6.66051 0.419922 12.0578 0.419922C17.4551 0.419922 21.8461 4.8109 21.8461 10.2082C21.8461 16.6582 13.0684 27.3673 12.6948 27.82L12.0675 28.5799ZM12.0578 2.07186C7.57145 2.07186 3.92146 5.72184 3.92146 10.2082C3.92146 12.7296 5.42494 16.3785 8.26947 20.7607C9.74566 23.0348 11.2322 24.9607 12.0488 25.9799C12.8667 24.9327 14.3674 22.9435 15.8528 20.6262C18.693 16.1959 20.1942 12.5932 20.1942 10.2082C20.1942 5.72184 16.5442 2.07186 12.0578 2.07186Z" fill="white"/></g><defs><clipPath id="clip0_1428_29403"><rect width="28.16" height="28.16" fill="white" transform="translate(-2.08008 0.419922)"/></clipPath></defs></svg>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="flex-wrapper">
|
|
34
|
+
<h3>Adress:</h3>
|
|
35
|
+
<span>${info.fullAddress}</span>
|
|
36
|
+
</div>
|
|
37
|
+
</a>
|
|
38
|
+
</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</div>
|
|
41
|
+
</section>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import html from './contact-us-block.html';
|
|
2
|
+
import './contact-us-block.scss';
|
|
3
|
+
|
|
4
|
+
import generalInfo from '../../../../general-info.json';
|
|
5
|
+
|
|
6
|
+
class ContactUsBlock extends GHComponent {
|
|
7
|
+
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async onServerRender() {
|
|
13
|
+
this.ghId = this.getAttribute('data-gh-id') || null;
|
|
14
|
+
|
|
15
|
+
this.info = generalInfo;
|
|
16
|
+
|
|
17
|
+
this.hrefPhone = this.info.phone.replace(/[ ()+-]/g, '');
|
|
18
|
+
|
|
19
|
+
super.render(html);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
window.customElements.define('contact-us-block', ContactUsBlock);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
contact-us-block {
|
|
2
|
+
background-color: var(--primary-bg-color);
|
|
3
|
+
.contact_us_block {
|
|
4
|
+
.title, .subtitle {
|
|
5
|
+
text-align: left;
|
|
6
|
+
}
|
|
7
|
+
.contact_info_list {
|
|
8
|
+
padding-top: 30px;
|
|
9
|
+
list-style: none;
|
|
10
|
+
li {
|
|
11
|
+
&:not(:last-child) {
|
|
12
|
+
margin-bottom: 30px;
|
|
13
|
+
}
|
|
14
|
+
span {
|
|
15
|
+
color: var(--text-color);
|
|
16
|
+
transition: color .3s ease;
|
|
17
|
+
}
|
|
18
|
+
&:hover {
|
|
19
|
+
span {
|
|
20
|
+
color: var(--primary-color);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
a {
|
|
25
|
+
display: flex;
|
|
26
|
+
gap: 10px;
|
|
27
|
+
}
|
|
28
|
+
h3 {
|
|
29
|
+
font-size: 28px;
|
|
30
|
+
margin-bottom: 0;
|
|
31
|
+
}
|
|
32
|
+
.icon-wrapper {
|
|
33
|
+
position: relative;
|
|
34
|
+
min-width: 64px;
|
|
35
|
+
height: 64px;
|
|
36
|
+
background-color: var(--primary-color);
|
|
37
|
+
border-radius: 50%;
|
|
38
|
+
svg {
|
|
39
|
+
width: 28px;
|
|
40
|
+
height: 28px;
|
|
41
|
+
position: absolute;
|
|
42
|
+
top: 50%;
|
|
43
|
+
left: 50%;
|
|
44
|
+
transform: translate(-50%, -50%);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
.flex-wrapper {
|
|
48
|
+
max-width: 300px;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
@media screen and (max-width: 900px) {
|
|
55
|
+
.contact_us_block .contact_info_list {
|
|
56
|
+
padding-top: 0;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<div class="cookies_popup">
|
|
2
|
+
<div class="container">
|
|
3
|
+
<div class="flex_wrap">
|
|
4
|
+
<div class="text">By continuing to use this site, you agree to our <a href="/privacy-policy/">cookie policy</a>.</div>
|
|
5
|
+
<div class="popup_btn" onclick="gotIt()">GOT IT</div>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import html from './cookies-popup.html';
|
|
2
|
+
import './cookies-popup.scss';
|
|
3
|
+
|
|
4
|
+
class CookiesPopup extends GHComponent {
|
|
5
|
+
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async onServerRender() {
|
|
11
|
+
super.render(html);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
onClientReady () {
|
|
15
|
+
if ( localStorage.getItem('agreeWithCookies') == null ) {
|
|
16
|
+
this.classList.add('show');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
gotIt() {
|
|
21
|
+
this.classList.add('hide');
|
|
22
|
+
localStorage.setItem('agreeWithCookies', true);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
window.customElements.define('cookies-popup', CookiesPopup);
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
cookies-popup {
|
|
2
|
+
display: none;
|
|
3
|
+
&.show {
|
|
4
|
+
display: block;
|
|
5
|
+
background-color: #4D555B;
|
|
6
|
+
padding: 15px 0;
|
|
7
|
+
position: fixed;
|
|
8
|
+
bottom: 0;
|
|
9
|
+
left: 0;
|
|
10
|
+
width: 100%;
|
|
11
|
+
z-index: 10;
|
|
12
|
+
transition: all 1s ease;
|
|
13
|
+
&.hide {
|
|
14
|
+
bottom: -100%;
|
|
15
|
+
}
|
|
16
|
+
.flex_wrap {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
}
|
|
21
|
+
.text {
|
|
22
|
+
color: #fff;
|
|
23
|
+
font-size: 16px;
|
|
24
|
+
line-height: 25px;
|
|
25
|
+
margin-right: 60px;
|
|
26
|
+
a {
|
|
27
|
+
color: #fff;
|
|
28
|
+
font-size: 14px;
|
|
29
|
+
line-height: 22px;
|
|
30
|
+
text-decoration: underline;
|
|
31
|
+
transition: all .2s ease;
|
|
32
|
+
&:hover {
|
|
33
|
+
color: #00BFD6;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
.popup_btn {
|
|
38
|
+
padding: 8px 40px;
|
|
39
|
+
background-color: #00BFD6;
|
|
40
|
+
border: 1px solid #00BFD6;
|
|
41
|
+
color: #fff;
|
|
42
|
+
font-size: 14px;
|
|
43
|
+
line-height: 22px;
|
|
44
|
+
border-radius: 50px;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
transition: all .2s ease;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
&:hover {
|
|
49
|
+
background-color: #fff;
|
|
50
|
+
color: #00BFD6;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@media screen and (max-width: 450px) {
|
|
57
|
+
cookies-popup.show {
|
|
58
|
+
.text {
|
|
59
|
+
color: #fff;
|
|
60
|
+
font-size: 14px;
|
|
61
|
+
line-height: 18px;
|
|
62
|
+
margin-right: 15px;
|
|
63
|
+
}
|
|
64
|
+
.popup_btn {
|
|
65
|
+
padding: 8px 20px;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Title",
|
|
3
|
+
"subtitle": "Subtitle",
|
|
4
|
+
"button_text": "button_text",
|
|
5
|
+
"items": [
|
|
6
|
+
{
|
|
7
|
+
"number": "98",
|
|
8
|
+
"symbol": "%",
|
|
9
|
+
"text": "Sed rhoncus venenatis velit"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"number": "10/7",
|
|
13
|
+
"text": "Duis efficitur condimentum lacus"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"number": "На",
|
|
17
|
+
"symbol": " %",
|
|
18
|
+
"text": "Quisque vel justo lorem"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<section class="service_counter">
|
|
2
|
+
<div class="container">
|
|
3
|
+
<div class="top_part">
|
|
4
|
+
${json.title ? `
|
|
5
|
+
<h2 class="h2" gh-id="${ghId}.title"> TITLE </h2>
|
|
6
|
+
` : ''}
|
|
7
|
+
${json.subtitle ? `
|
|
8
|
+
<p gh-id="${ghId}.subtitle" class="subtitle"> SUBTITLE </p>
|
|
9
|
+
` : ''}
|
|
10
|
+
</div>
|
|
11
|
+
<div class="counters">
|
|
12
|
+
${
|
|
13
|
+
items.reduce((acc, item, index) => {
|
|
14
|
+
return acc + `
|
|
15
|
+
<div class="counter_item">
|
|
16
|
+
<div class="counter_top">
|
|
17
|
+
${item.number ? `
|
|
18
|
+
<span class="counter_num" gh-id="${ghId}.items.${index}.number"></span>
|
|
19
|
+
` : ''}
|
|
20
|
+
${item.symbol ? `
|
|
21
|
+
<span class="counter_symbol" gh-id="${ghId}.items.${index}.symbol"></span>
|
|
22
|
+
` : ''}
|
|
23
|
+
</div>
|
|
24
|
+
${item.text ? `
|
|
25
|
+
<div class="counter_bottom" gh-id="${ghId}.items.${index}.text"></div>
|
|
26
|
+
` : ""}
|
|
27
|
+
</div>
|
|
28
|
+
`
|
|
29
|
+
}, '')
|
|
30
|
+
}
|
|
31
|
+
</div>
|
|
32
|
+
${json.button ? `
|
|
33
|
+
<div class="bottom_button">
|
|
34
|
+
<button-component data-popup-id="${json.button.popupId}" data-placement="${json.button.placement}">${json.button.text}</button-component>
|
|
35
|
+
</div>
|
|
36
|
+
`: ''}
|
|
37
|
+
</div>
|
|
38
|
+
</section>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import html from './counter-section.html';
|
|
2
|
+
import './counter-section.scss';
|
|
3
|
+
import jsonTemplate from './counter-section-data.json';
|
|
4
|
+
|
|
5
|
+
class CounterSection extends GHComponent {
|
|
6
|
+
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
super.setDefaultData(jsonTemplate);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async onServerRender() {
|
|
13
|
+
this.ghId = this.getAttribute('data-gh-id') || null;
|
|
14
|
+
|
|
15
|
+
this.json = await super.getGhData(this.ghId);
|
|
16
|
+
this.items = this.json.items;
|
|
17
|
+
|
|
18
|
+
super.render(html);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
window.customElements.define('counter-section', CounterSection);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Attributes:
|
|
2
|
+
|
|
3
|
+
none
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Component data-object:
|
|
7
|
+
("?" means "unnecessary")
|
|
8
|
+
```json
|
|
9
|
+
{
|
|
10
|
+
"title?": "string",
|
|
11
|
+
"subtitle?": "string",
|
|
12
|
+
"button_text?": "string",
|
|
13
|
+
"items": [ {
|
|
14
|
+
"number?": "string",
|
|
15
|
+
"symbol?": "string",
|
|
16
|
+
"text?": "string"
|
|
17
|
+
} ]
|
|
18
|
+
}
|
|
19
|
+
```
|