iceholidays-frontend 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/iceholidays/frontend/_slick-theme.scss +194 -0
- data/app/assets/stylesheets/iceholidays/frontend/_slick.scss +100 -0
- data/app/assets/stylesheets/iceholidays/frontend/application.sass.scss +56 -3
- data/app/assets/stylesheets/iceholidays/frontend/common.scss +14 -0
- data/app/assets/stylesheets/iceholidays/frontend/layout.scss +1 -1
- data/app/assets/stylesheets/iceholidays/frontend/utils/_slick_overrides.scss +3 -0
- data/app/javascript/api-services/brochure-api.service.ts +17 -0
- data/app/javascript/api-services/posts-api.service.ts +47 -0
- data/app/javascript/interfaces/blog.interface.ts +8 -0
- data/app/javascript/react/App.tsx +1 -1
- data/app/javascript/react/components/Destinations.tsx +21 -10
- data/app/javascript/react/components/Testimonials.tsx +4 -1
- data/app/javascript/react/components/shared/LocationDropdown.tsx +3 -1
- data/app/javascript/react/layouts/MainHeader.tsx +80 -32
- data/app/javascript/react/pages/BlogPage.tsx +82 -66
- data/app/javascript/react/pages/BlogShowPage.tsx +50 -35
- data/app/javascript/react/pages/ListingPage.tsx +42 -18
- data/app/javascript/react/pages/ShowPage.tsx +84 -52
- data/app/javascript/react/widgets/FilterPills.tsx +21 -18
- data/config/routes.rb +1 -1
- data/lib/iceholidays/frontend/version.rb +1 -1
- data/public/iceholidays-assets/application.css +296 -8
- data/public/iceholidays-assets/application.js +161 -121
- data/public/iceholidays-assets/application.js.map +4 -4
- data/public/iceholidays-assets/images/TST Ribbon@2x.png +0 -0
- data/public/iceholidays-assets/images/TST Ribbon@3x.png +0 -0
- metadata +10 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import { Button,
|
|
3
|
-
import SlickButtonFix from "../components/shared/SlickButtonFix";
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Button, Col, Flex, Layout, Modal, notification, Row, Skeleton, Space } from "antd";
|
|
4
3
|
import { mdiAccountCash, mdiAccountGroup, mdiAirplane, mdiBagChecked, mdiBedKing, mdiClose, mdiEmailOutline, mdiFileDownload, mdiFlagTriangle, mdiMapMarker, mdiMapMarkerOutline, mdiMenuDown, mdiMenuLeft, mdiMenuRight, mdiMenuUp, mdiPhoneInTalkOutline, mdiReceiptText, mdiShieldAccount, mdiShieldAirplane, mdiSilverwareForkKnife, mdiWhatsapp } from "@mdi/js";
|
|
5
4
|
import Icon from "@mdi/react";
|
|
6
5
|
import Headline from "../components/shared/Headline";
|
|
@@ -13,11 +12,48 @@ import AgentsApi from "../../api-services/agents-api.service";
|
|
|
13
12
|
import { Agent } from "../../interfaces/agent.interface";
|
|
14
13
|
import PriceDetails from "../components/PriceDetails";
|
|
15
14
|
import ContactAgentsForm from "../components/shared/ContactAgentsForm";
|
|
15
|
+
import Markdown from "react-markdown";
|
|
16
|
+
import rehypeRaw from "rehype-raw";
|
|
17
|
+
import remarkGfm from "remark-gfm";
|
|
18
|
+
import Slider from "react-slick";
|
|
16
19
|
|
|
17
20
|
const breadcrumbs = [
|
|
18
21
|
{ title: 'Home' },
|
|
19
22
|
]
|
|
20
23
|
|
|
24
|
+
|
|
25
|
+
const settings = {
|
|
26
|
+
dots: false,
|
|
27
|
+
arrows: true,
|
|
28
|
+
slidesToShow: 7.5,
|
|
29
|
+
pauseOnHover:false,
|
|
30
|
+
speed: 500,
|
|
31
|
+
infinite: false,
|
|
32
|
+
slidesToScroll: 1,
|
|
33
|
+
prevArrow: <Icon path={mdiMenuLeft} size={2} />,
|
|
34
|
+
nextArrow: <Icon path={mdiMenuRight} size={2} />,
|
|
35
|
+
responsive: [
|
|
36
|
+
{
|
|
37
|
+
breakpoint: 1024,
|
|
38
|
+
settings: {
|
|
39
|
+
slidesToShow: 5.5,
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
breakpoint: 768,
|
|
44
|
+
settings: {
|
|
45
|
+
slidesToShow: 3.5,
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
breakpoint: 480,
|
|
50
|
+
settings: {
|
|
51
|
+
slidesToShow: 2.5,
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
]
|
|
55
|
+
};
|
|
56
|
+
|
|
21
57
|
const thingsToKnow = (inclusionsData) => {
|
|
22
58
|
return [
|
|
23
59
|
{icon: <Icon path={mdiShieldAccount} size={1} />, label: "Free Travel Insurance", visible: inclusionsData.acf},
|
|
@@ -171,6 +207,7 @@ class ShowPage extends React.Component <{params;}> {
|
|
|
171
207
|
const dates = itinerary.tours.length == 0 ? [] : itinerary.tours.map((tour:any) => {
|
|
172
208
|
return {id: tour.id, date: tour.departure_date, price: `${itinerary.priceCurrency} ${tour.price}`}
|
|
173
209
|
});
|
|
210
|
+
const tourInclusives = thingsToKnow(itinerary.includings);
|
|
174
211
|
|
|
175
212
|
return (
|
|
176
213
|
<div id="show-page">
|
|
@@ -191,31 +228,21 @@ class ShowPage extends React.Component <{params;}> {
|
|
|
191
228
|
</Headline>
|
|
192
229
|
|
|
193
230
|
<div id="date-selector">
|
|
194
|
-
<
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
<
|
|
198
|
-
|
|
231
|
+
<Slider {...settings}>
|
|
232
|
+
{
|
|
233
|
+
dates.map((tour, index) => {
|
|
234
|
+
return <div key={index} className={`date-box ${selectedTour?.id == tour.id && "selected"}`} onClick={()=>this.selectTour(tour.id)}>
|
|
235
|
+
<Flex justify="space-between" align="center" vertical gap={8}>
|
|
236
|
+
<div className="date-box_date"> {tour.date} </div>
|
|
237
|
+
<div>
|
|
238
|
+
<span>From</span>
|
|
239
|
+
<div className="date-box_price"> {tour.price} </div>
|
|
240
|
+
</div>
|
|
241
|
+
</Flex>
|
|
242
|
+
</div>
|
|
243
|
+
})
|
|
199
244
|
}
|
|
200
|
-
|
|
201
|
-
<SlickButtonFix>
|
|
202
|
-
<Icon path={mdiMenuRight} size={2} />
|
|
203
|
-
</SlickButtonFix>
|
|
204
|
-
}>
|
|
205
|
-
{
|
|
206
|
-
dates.map((tour, index) => {
|
|
207
|
-
return <div key={index} className={`date-box ${selectedTour?.id == tour.id && "selected"}`} onClick={()=>this.selectTour(tour.id)}>
|
|
208
|
-
<Flex justify="space-between" align="center" vertical gap={8}>
|
|
209
|
-
<div className="date-box_date"> {tour.date} </div>
|
|
210
|
-
<div>
|
|
211
|
-
<span>From</span>
|
|
212
|
-
<div className="date-box_price"> {tour.price} </div>
|
|
213
|
-
</div>
|
|
214
|
-
</Flex>
|
|
215
|
-
</div>
|
|
216
|
-
})
|
|
217
|
-
}
|
|
218
|
-
</Carousel>
|
|
245
|
+
</Slider>
|
|
219
246
|
</div>
|
|
220
247
|
</>
|
|
221
248
|
|
|
@@ -231,36 +258,41 @@ class ShowPage extends React.Component <{params;}> {
|
|
|
231
258
|
) : (
|
|
232
259
|
<div className="details">
|
|
233
260
|
<Flex gap={10} vertical>
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
261
|
+
{
|
|
262
|
+
(tourInclusives.every(x => x.visible) || selectedTour?.guaranteed_departure) && (
|
|
263
|
+
<div className="details-container">
|
|
264
|
+
<div className="details-container_header"> Tour Inclusive </div>
|
|
265
|
+
<div className="details-container_content">
|
|
266
|
+
<div id="things-to-know">
|
|
267
|
+
{
|
|
268
|
+
tourInclusives.filter(item => item.visible)
|
|
269
|
+
.map(item => (
|
|
270
|
+
<div className="item">
|
|
271
|
+
<div className="icon"> {item.icon} </div>
|
|
272
|
+
<label>{item.label}</label>
|
|
273
|
+
</div>
|
|
274
|
+
))
|
|
275
|
+
}
|
|
276
|
+
{
|
|
277
|
+
selectedTour?.guaranteed_departure && (
|
|
278
|
+
<div className="item guaranteed">
|
|
279
|
+
<div className="icon"> <Icon path={mdiShieldAirplane} size={1} /></div>
|
|
280
|
+
<label>Guaranteed Departure</label>
|
|
281
|
+
</div>
|
|
282
|
+
)
|
|
283
|
+
}
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
256
286
|
</div>
|
|
257
|
-
|
|
258
|
-
|
|
287
|
+
)
|
|
288
|
+
}
|
|
259
289
|
|
|
260
290
|
<div className="details-container">
|
|
261
291
|
<div className="details-container_header"> Description </div>
|
|
262
292
|
<div className="details-container_content">
|
|
263
|
-
<div id="description" className={
|
|
293
|
+
<div id="description" className={`${isCollapsed && 'collapsed'}`}>
|
|
294
|
+
<Markdown remarkPlugins={[remarkGfm]} rehypePlugins={[rehypeRaw]}>{itinerary?.description}</Markdown>
|
|
295
|
+
</div>
|
|
264
296
|
<Button className="toggle-description" color="default" variant="filled" block onClick={this.toggleDescription}>{ isCollapsed ? 'Expand' : 'Collapse'}
|
|
265
297
|
<Icon path={isCollapsed ? mdiMenuDown : mdiMenuUp} size="19px" />
|
|
266
298
|
</Button>
|
|
@@ -19,10 +19,10 @@ function FilterPills(
|
|
|
19
19
|
props: {
|
|
20
20
|
items:any[];
|
|
21
21
|
title?:string;
|
|
22
|
-
initialValue:{keyword?:string, year?:
|
|
23
|
-
bindLabel
|
|
24
|
-
bindValue
|
|
25
|
-
allOption
|
|
22
|
+
initialValue:{keyword?:string, year?:any, month?: string, location_id?:any, type?: any}
|
|
23
|
+
bindLabel:string;
|
|
24
|
+
bindValue:string;
|
|
25
|
+
allOption:boolean;
|
|
26
26
|
selectFilter;
|
|
27
27
|
}){
|
|
28
28
|
|
|
@@ -32,7 +32,7 @@ function FilterPills(
|
|
|
32
32
|
|
|
33
33
|
const allHasValues = () => {
|
|
34
34
|
const {keyword, ...noKeyword} = selected;
|
|
35
|
-
return Object.entries(noKeyword).every(o => o[1] != "");
|
|
35
|
+
return Object.entries(noKeyword).every(o => o[1] != "" && o[1] != null);
|
|
36
36
|
}
|
|
37
37
|
const [collapseFilters, setcollapseFilters] = useState(allHasValues);
|
|
38
38
|
|
|
@@ -57,16 +57,15 @@ function FilterPills(
|
|
|
57
57
|
{ title && <div className="filter-title"> {title} </div> }
|
|
58
58
|
<Space size={10} wrap>
|
|
59
59
|
{
|
|
60
|
-
allOption && <div className=
|
|
60
|
+
allOption && <div onClick={()=>selectFilter(bindValue, null)} className={`filter-pill ${(selected[bindValue] == null || selected[bindValue] == '') && 'selected'}`}> <span> All </span></div>
|
|
61
61
|
}
|
|
62
62
|
{
|
|
63
63
|
items.map((item, index) => {
|
|
64
64
|
//special case for location id
|
|
65
65
|
const id:any = bindValue == "location_id" ? "id" : bindValue;
|
|
66
|
-
const label = bindLabel ? item[bindLabel] : item;
|
|
67
66
|
const value = bindValue ? item[id] : item;
|
|
68
67
|
const selectedItem = selected && bindValue ? selected[bindValue]: item ;
|
|
69
|
-
return <div key={index} onClick={()=>selectFilter(bindValue, value)} className={`filter-pill ${selectedItem == value && 'selected'}`}> <span>{
|
|
68
|
+
return <div key={index} onClick={()=>selectFilter(bindValue, value)} className={`filter-pill ${selectedItem == value && 'selected'}`}> <span>{ item[bindLabel] } </span></div>
|
|
70
69
|
})
|
|
71
70
|
}
|
|
72
71
|
</Space>
|
|
@@ -77,26 +76,24 @@ function FilterPills(
|
|
|
77
76
|
<div className="filter-title"> Year </div>
|
|
78
77
|
<Space size={10} wrap>
|
|
79
78
|
{
|
|
80
|
-
allOption && <div className=
|
|
79
|
+
allOption && <div onClick={()=>selectFilter("year", "")} className={`filter-pill ${selected.year == '' && 'selected'}`}> <span> All </span></div>
|
|
81
80
|
}
|
|
82
81
|
{
|
|
83
|
-
years().map((year, index) =>
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
})
|
|
82
|
+
years().map((year, index) => (
|
|
83
|
+
<div key={index} onClick={()=>selectFilter("year", year)} className={`filter-pill default-filter ${selected.year == year && 'selected'}`}> <span>{year} </span></div>
|
|
84
|
+
))
|
|
87
85
|
}
|
|
88
86
|
</Space>
|
|
89
87
|
|
|
90
88
|
<div className="filter-title"> Month </div>
|
|
91
89
|
<Row gutter={[10, 10]} justify="space-between">
|
|
92
90
|
{
|
|
93
|
-
allOption && <
|
|
91
|
+
allOption && <div onClick={()=>selectFilter("month", "")} className={`filter-pill ${selected.month == '' && 'selected'}`}> <span> All </span></div>
|
|
94
92
|
}
|
|
95
93
|
{
|
|
96
|
-
months.map((month, index) =>
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
})
|
|
94
|
+
months.map((month, index) => (
|
|
95
|
+
<Col key={index} xs={8} md={6} lg={4}> <div onClick={()=>selectFilter("month", month.shortMonth)} className={`filter-pill default-filter ${selected.month == month.shortMonth && 'selected'}`}> <span>{month.name} </span></div> </Col>
|
|
96
|
+
))
|
|
100
97
|
}
|
|
101
98
|
</Row>
|
|
102
99
|
</Space>
|
|
@@ -108,4 +105,10 @@ function FilterPills(
|
|
|
108
105
|
|
|
109
106
|
}
|
|
110
107
|
|
|
108
|
+
FilterPills.defaultProps = {
|
|
109
|
+
allOption: false,
|
|
110
|
+
bindLabel: "label",
|
|
111
|
+
bindValue: "id"
|
|
112
|
+
}
|
|
113
|
+
|
|
111
114
|
export default FilterPills;
|
data/config/routes.rb
CHANGED
|
@@ -6,7 +6,7 @@ Iceholidays::Frontend::Engine.routes.draw do
|
|
|
6
6
|
get '/about-us' => 'site#about_us', as: :about_us
|
|
7
7
|
get '/countries' => 'site#countries', as: :countries
|
|
8
8
|
get '/blog' => 'site#blog', as: :blog
|
|
9
|
-
get '/blog
|
|
9
|
+
get '/blog/:id' => 'site#show_blog', as: :show_blog
|
|
10
10
|
get '/contact-agents' => 'site#contact_agents', as: :contact_agents
|
|
11
11
|
get '/contact-us' => 'site#contact_us', as: :contact_us
|
|
12
12
|
resources :posts, only:[:index, :show]
|
|
@@ -15,6 +15,240 @@
|
|
|
15
15
|
*= require_self
|
|
16
16
|
*/
|
|
17
17
|
@import url("//fonts.googleapis.com/css?family=Poppins:ital,wght@0,100;0,200;0,200;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,200;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
|
|
18
|
+
/* Slider */
|
|
19
|
+
.slick-slider {
|
|
20
|
+
position: relative;
|
|
21
|
+
display: block;
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
-webkit-touch-callout: none;
|
|
24
|
+
-webkit-user-select: none;
|
|
25
|
+
-khtml-user-select: none;
|
|
26
|
+
-moz-user-select: none;
|
|
27
|
+
-ms-user-select: none;
|
|
28
|
+
user-select: none;
|
|
29
|
+
-ms-touch-action: pan-y;
|
|
30
|
+
touch-action: pan-y;
|
|
31
|
+
-webkit-tap-highlight-color: transparent;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.slick-list {
|
|
35
|
+
position: relative;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
display: block;
|
|
38
|
+
margin: 0;
|
|
39
|
+
padding: 0;
|
|
40
|
+
}
|
|
41
|
+
.slick-list:focus {
|
|
42
|
+
outline: none;
|
|
43
|
+
}
|
|
44
|
+
.slick-list.dragging {
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
cursor: hand;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.slick-slider .slick-track,
|
|
50
|
+
.slick-slider .slick-list {
|
|
51
|
+
-webkit-transform: translate3d(0, 0, 0);
|
|
52
|
+
-moz-transform: translate3d(0, 0, 0);
|
|
53
|
+
-ms-transform: translate3d(0, 0, 0);
|
|
54
|
+
-o-transform: translate3d(0, 0, 0);
|
|
55
|
+
transform: translate3d(0, 0, 0);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.slick-track {
|
|
59
|
+
position: relative;
|
|
60
|
+
left: 0;
|
|
61
|
+
top: 0;
|
|
62
|
+
display: block;
|
|
63
|
+
margin-left: auto;
|
|
64
|
+
margin-right: auto;
|
|
65
|
+
}
|
|
66
|
+
.slick-track:before, .slick-track:after {
|
|
67
|
+
content: "";
|
|
68
|
+
display: table;
|
|
69
|
+
}
|
|
70
|
+
.slick-track:after {
|
|
71
|
+
clear: both;
|
|
72
|
+
}
|
|
73
|
+
.slick-loading .slick-track {
|
|
74
|
+
visibility: hidden;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.slick-slide {
|
|
78
|
+
float: left;
|
|
79
|
+
height: 100%;
|
|
80
|
+
min-height: 1px;
|
|
81
|
+
display: none;
|
|
82
|
+
}
|
|
83
|
+
[dir=rtl] .slick-slide {
|
|
84
|
+
float: right;
|
|
85
|
+
}
|
|
86
|
+
.slick-slide img {
|
|
87
|
+
display: block;
|
|
88
|
+
}
|
|
89
|
+
.slick-slide.slick-loading img {
|
|
90
|
+
display: none;
|
|
91
|
+
}
|
|
92
|
+
.slick-slide.dragging img {
|
|
93
|
+
pointer-events: none;
|
|
94
|
+
}
|
|
95
|
+
.slick-initialized .slick-slide {
|
|
96
|
+
display: block;
|
|
97
|
+
}
|
|
98
|
+
.slick-loading .slick-slide {
|
|
99
|
+
visibility: hidden;
|
|
100
|
+
}
|
|
101
|
+
.slick-vertical .slick-slide {
|
|
102
|
+
display: block;
|
|
103
|
+
height: auto;
|
|
104
|
+
border: 1px solid transparent;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.slick-arrow.slick-hidden {
|
|
108
|
+
display: none;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* Slider */
|
|
112
|
+
/* Icons */
|
|
113
|
+
/* Arrows */
|
|
114
|
+
.slick-prev,
|
|
115
|
+
.slick-next {
|
|
116
|
+
position: absolute;
|
|
117
|
+
display: block;
|
|
118
|
+
height: 20px;
|
|
119
|
+
width: 20px;
|
|
120
|
+
line-height: 0px;
|
|
121
|
+
font-size: 0px;
|
|
122
|
+
cursor: pointer;
|
|
123
|
+
background: transparent;
|
|
124
|
+
color: transparent;
|
|
125
|
+
top: 50%;
|
|
126
|
+
-webkit-transform: translate(0, -50%);
|
|
127
|
+
-ms-transform: translate(0, -50%);
|
|
128
|
+
transform: translate(0, -50%);
|
|
129
|
+
padding: 0;
|
|
130
|
+
border: none;
|
|
131
|
+
outline: none;
|
|
132
|
+
}
|
|
133
|
+
.slick-prev:hover, .slick-prev:focus,
|
|
134
|
+
.slick-next:hover,
|
|
135
|
+
.slick-next:focus {
|
|
136
|
+
outline: none;
|
|
137
|
+
background: transparent;
|
|
138
|
+
color: transparent;
|
|
139
|
+
}
|
|
140
|
+
.slick-prev:hover:before, .slick-prev:focus:before,
|
|
141
|
+
.slick-next:hover:before,
|
|
142
|
+
.slick-next:focus:before {
|
|
143
|
+
opacity: 1;
|
|
144
|
+
}
|
|
145
|
+
.slick-prev.slick-disabled:before,
|
|
146
|
+
.slick-next.slick-disabled:before {
|
|
147
|
+
opacity: 0.25;
|
|
148
|
+
}
|
|
149
|
+
.slick-prev:before,
|
|
150
|
+
.slick-next:before {
|
|
151
|
+
font-family: "slick";
|
|
152
|
+
font-size: 20px;
|
|
153
|
+
line-height: 1;
|
|
154
|
+
color: white;
|
|
155
|
+
opacity: 0.75;
|
|
156
|
+
-webkit-font-smoothing: antialiased;
|
|
157
|
+
-moz-osx-font-smoothing: grayscale;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.slick-prev {
|
|
161
|
+
left: -25px;
|
|
162
|
+
}
|
|
163
|
+
[dir=rtl] .slick-prev {
|
|
164
|
+
left: auto;
|
|
165
|
+
right: -25px;
|
|
166
|
+
}
|
|
167
|
+
.slick-prev:before {
|
|
168
|
+
content: "←";
|
|
169
|
+
}
|
|
170
|
+
[dir=rtl] .slick-prev:before {
|
|
171
|
+
content: "→";
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.slick-next {
|
|
175
|
+
right: -25px;
|
|
176
|
+
}
|
|
177
|
+
[dir=rtl] .slick-next {
|
|
178
|
+
left: -25px;
|
|
179
|
+
right: auto;
|
|
180
|
+
}
|
|
181
|
+
.slick-next:before {
|
|
182
|
+
content: "→";
|
|
183
|
+
}
|
|
184
|
+
[dir=rtl] .slick-next:before {
|
|
185
|
+
content: "←";
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Dots */
|
|
189
|
+
.slick-dotted.slick-slider {
|
|
190
|
+
margin-bottom: 30px;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.slick-dots {
|
|
194
|
+
position: absolute;
|
|
195
|
+
bottom: -25px;
|
|
196
|
+
list-style: none;
|
|
197
|
+
display: block;
|
|
198
|
+
text-align: center;
|
|
199
|
+
padding: 0;
|
|
200
|
+
margin: 0;
|
|
201
|
+
width: 100%;
|
|
202
|
+
}
|
|
203
|
+
.slick-dots li {
|
|
204
|
+
position: relative;
|
|
205
|
+
display: inline-block;
|
|
206
|
+
height: 20px;
|
|
207
|
+
width: 20px;
|
|
208
|
+
margin: 0 5px;
|
|
209
|
+
padding: 0;
|
|
210
|
+
cursor: pointer;
|
|
211
|
+
}
|
|
212
|
+
.slick-dots li button {
|
|
213
|
+
border: 0;
|
|
214
|
+
background: transparent;
|
|
215
|
+
display: block;
|
|
216
|
+
height: 20px;
|
|
217
|
+
width: 20px;
|
|
218
|
+
outline: none;
|
|
219
|
+
line-height: 0px;
|
|
220
|
+
font-size: 0px;
|
|
221
|
+
color: transparent;
|
|
222
|
+
padding: 5px;
|
|
223
|
+
cursor: pointer;
|
|
224
|
+
}
|
|
225
|
+
.slick-dots li button:hover, .slick-dots li button:focus {
|
|
226
|
+
outline: none;
|
|
227
|
+
}
|
|
228
|
+
.slick-dots li button:hover:before, .slick-dots li button:focus:before {
|
|
229
|
+
opacity: 1;
|
|
230
|
+
}
|
|
231
|
+
.slick-dots li button:before {
|
|
232
|
+
position: absolute;
|
|
233
|
+
top: 0;
|
|
234
|
+
left: 0;
|
|
235
|
+
content: "•";
|
|
236
|
+
width: 20px;
|
|
237
|
+
height: 20px;
|
|
238
|
+
font-family: "slick";
|
|
239
|
+
font-size: 6px;
|
|
240
|
+
line-height: 20px;
|
|
241
|
+
text-align: center;
|
|
242
|
+
color: black;
|
|
243
|
+
opacity: 0.25;
|
|
244
|
+
-webkit-font-smoothing: antialiased;
|
|
245
|
+
-moz-osx-font-smoothing: grayscale;
|
|
246
|
+
}
|
|
247
|
+
.slick-dots li.slick-active button:before {
|
|
248
|
+
color: black;
|
|
249
|
+
opacity: 0.75;
|
|
250
|
+
}
|
|
251
|
+
|
|
18
252
|
.ant-layout-content {
|
|
19
253
|
position: relative;
|
|
20
254
|
}
|
|
@@ -112,6 +346,10 @@ a {
|
|
|
112
346
|
background-color: transparent;
|
|
113
347
|
}
|
|
114
348
|
|
|
349
|
+
.slick-track {
|
|
350
|
+
margin: unset;
|
|
351
|
+
}
|
|
352
|
+
|
|
115
353
|
#main-header {
|
|
116
354
|
--button-height: 35px;
|
|
117
355
|
position: relative;
|
|
@@ -334,7 +572,7 @@ a {
|
|
|
334
572
|
}
|
|
335
573
|
#main-footer .contact-info .ant-flex {
|
|
336
574
|
gap: 10px !important;
|
|
337
|
-
align-items:
|
|
575
|
+
align-items: center;
|
|
338
576
|
}
|
|
339
577
|
}
|
|
340
578
|
#headline {
|
|
@@ -581,6 +819,18 @@ a {
|
|
|
581
819
|
line-height: 30px;
|
|
582
820
|
}
|
|
583
821
|
}
|
|
822
|
+
@media only screen and (min-width: 1441px) {
|
|
823
|
+
#ribbon-section_header {
|
|
824
|
+
background-image: url("/iceholidays-assets/images/TST Ribbon@2x.png");
|
|
825
|
+
height: 300px;
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
@media only screen and (min-width: 2880px) {
|
|
829
|
+
#ribbon-section_header {
|
|
830
|
+
background-image: url("/iceholidays-assets/images/TST Ribbon@3x.png");
|
|
831
|
+
height: 450px;
|
|
832
|
+
}
|
|
833
|
+
}
|
|
584
834
|
.ant-input {
|
|
585
835
|
field-sizing: content;
|
|
586
836
|
}
|
|
@@ -1360,20 +1610,20 @@ body {
|
|
|
1360
1610
|
#show-page #date-selector {
|
|
1361
1611
|
padding: 20px var(--side-padding);
|
|
1362
1612
|
}
|
|
1363
|
-
#show-page #date-selector [class~=
|
|
1613
|
+
#show-page #date-selector [class~=slick-slider] .slick-slide > div {
|
|
1364
1614
|
padding: 0 5px;
|
|
1365
1615
|
}
|
|
1366
|
-
#show-page #date-selector [class~=
|
|
1616
|
+
#show-page #date-selector [class~=slick-slider] .slick-arrow {
|
|
1367
1617
|
color: rgb(149, 148, 146);
|
|
1368
1618
|
}
|
|
1369
|
-
#show-page #date-selector [class~=
|
|
1619
|
+
#show-page #date-selector [class~=slick-slider] .slick-arrow:hover {
|
|
1370
1620
|
color: #DCB062;
|
|
1371
1621
|
}
|
|
1372
|
-
#show-page #date-selector [class~=
|
|
1373
|
-
inset-inline-start: -
|
|
1622
|
+
#show-page #date-selector [class~=slick-slider] .slick-prev {
|
|
1623
|
+
inset-inline-start: -35px;
|
|
1374
1624
|
}
|
|
1375
|
-
#show-page #date-selector [class~=
|
|
1376
|
-
inset-inline-end: -
|
|
1625
|
+
#show-page #date-selector [class~=slick-slider] .slick-next {
|
|
1626
|
+
inset-inline-end: -35px;
|
|
1377
1627
|
}
|
|
1378
1628
|
#show-page #date-selector .date-box {
|
|
1379
1629
|
background: #FFFFFF;
|
|
@@ -1825,6 +2075,9 @@ body {
|
|
|
1825
2075
|
margin: 20px 0;
|
|
1826
2076
|
display: block;
|
|
1827
2077
|
}
|
|
2078
|
+
#about-signature-tours picture > img {
|
|
2079
|
+
width: 100%;
|
|
2080
|
+
}
|
|
1828
2081
|
#about-signature-tours #about-st-feature #feature {
|
|
1829
2082
|
height: 246px;
|
|
1830
2083
|
gap: 0px;
|
|
@@ -2228,6 +2481,17 @@ body {
|
|
|
2228
2481
|
#blog-page_body #blogs {
|
|
2229
2482
|
margin: 30px 0;
|
|
2230
2483
|
}
|
|
2484
|
+
#blog-page_body #blogs .preview-content {
|
|
2485
|
+
overflow: hidden;
|
|
2486
|
+
text-overflow: ellipsis;
|
|
2487
|
+
display: -webkit-box;
|
|
2488
|
+
-webkit-line-clamp: 2;
|
|
2489
|
+
-webkit-box-orient: vertical;
|
|
2490
|
+
max-height: 100px;
|
|
2491
|
+
}
|
|
2492
|
+
#blog-page_body #blogs .view-blog {
|
|
2493
|
+
margin-top: 10px;
|
|
2494
|
+
}
|
|
2231
2495
|
|
|
2232
2496
|
#blog-show-page_body {
|
|
2233
2497
|
margin: 20px var(--side-padding);
|
|
@@ -2236,6 +2500,21 @@ body {
|
|
|
2236
2500
|
background: rgb(255, 255, 255);
|
|
2237
2501
|
box-shadow: 0px 5px 20px 0px rgba(225, 182, 91, 0.2);
|
|
2238
2502
|
}
|
|
2503
|
+
#blog-show-page_body h1 {
|
|
2504
|
+
font-family: Poppins;
|
|
2505
|
+
font-weight: 600;
|
|
2506
|
+
font-size: 24px;
|
|
2507
|
+
line-height: 36px;
|
|
2508
|
+
letter-spacing: 0%;
|
|
2509
|
+
margin-top: 0;
|
|
2510
|
+
}
|
|
2511
|
+
#blog-show-page_body img {
|
|
2512
|
+
object-fit: cover;
|
|
2513
|
+
height: auto;
|
|
2514
|
+
border-radius: 20px;
|
|
2515
|
+
width: 100%;
|
|
2516
|
+
margin-bottom: 20px;
|
|
2517
|
+
}
|
|
2239
2518
|
|
|
2240
2519
|
@media only screen and (min-width: 769px) {
|
|
2241
2520
|
* {
|
|
@@ -2535,6 +2814,15 @@ body {
|
|
|
2535
2814
|
line-height: 45px;
|
|
2536
2815
|
letter-spacing: 0.05em;
|
|
2537
2816
|
}
|
|
2817
|
+
#show-page #date-selector [class~=slick-slider] .slick-slide > div {
|
|
2818
|
+
padding: 0 5px;
|
|
2819
|
+
}
|
|
2820
|
+
#show-page #date-selector [class~=slick-slider] .slick-prev {
|
|
2821
|
+
inset-inline-start: -40px;
|
|
2822
|
+
}
|
|
2823
|
+
#show-page #date-selector [class~=slick-slider] .slick-next {
|
|
2824
|
+
inset-inline-end: -40px;
|
|
2825
|
+
}
|
|
2538
2826
|
#show-page_body .toggle_contact-agent,
|
|
2539
2827
|
#show-page_body .collapse-contact-agent {
|
|
2540
2828
|
display: none;
|