@hashtagcms/web-ui-kit 1.0.5
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/LICENSE +21 -0
- package/README.md +164 -0
- package/bin/cli.js +139 -0
- package/package.json +51 -0
- package/src/themes/basic/fonts/FontAwesome.otf +0 -0
- package/src/themes/basic/fonts/fontawesome-webfont.eot +0 -0
- package/src/themes/basic/fonts/fontawesome-webfont.svg +2671 -0
- package/src/themes/basic/fonts/fontawesome-webfont.ttf +0 -0
- package/src/themes/basic/fonts/fontawesome-webfont.woff +0 -0
- package/src/themes/basic/fonts/fontawesome-webfont.woff2 +0 -0
- package/src/themes/basic/img/clouds.jpg +0 -0
- package/src/themes/basic/img/cms-box-1.png +0 -0
- package/src/themes/basic/img/cms-box-2.png +0 -0
- package/src/themes/basic/img/dfd.png +0 -0
- package/src/themes/basic/img/favicon.png +0 -0
- package/src/themes/basic/img/hasshtagcms-product-1.jpg +0 -0
- package/src/themes/basic/img/hasshtagcms-product-2.jpg +0 -0
- package/src/themes/basic/img/hasshtagcms-product-bg.jpg +0 -0
- package/src/themes/basic/img/hasshtagcms-product-with-text.jpg +0 -0
- package/src/themes/basic/img/hill.jpg +0 -0
- package/src/themes/basic/img/logo-transparent.png +0 -0
- package/src/themes/basic/img/logo-white-bg.jpg +0 -0
- package/src/themes/basic/img/qr-code.jpg +0 -0
- package/src/themes/basic/img/sunset.jpg +0 -0
- package/src/themes/basic/img/sunset2.jpg +0 -0
- package/src/themes/basic/img/user-default.jpg +0 -0
- package/src/themes/basic/js/app.js +9 -0
- package/src/themes/basic/sass/_basic.scss +410 -0
- package/src/themes/basic/sass/_variables.scss +12 -0
- package/src/themes/basic/sass/animate.css +1579 -0
- package/src/themes/basic/sass/app.scss +10 -0
- package/src/themes/basic/sass/font-awesome/HELP-US-OUT.txt +7 -0
- package/src/themes/basic/sass/font-awesome/css/font-awesome.css +2337 -0
- package/src/themes/basic/sass/font-awesome/css/font-awesome.min.css +4 -0
- package/src/themes/basic/sass/font-awesome/fonts/FontAwesome.otf +0 -0
- package/src/themes/basic/sass/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- package/src/themes/basic/sass/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
- package/src/themes/basic/sass/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- package/src/themes/basic/sass/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- package/src/themes/basic/sass/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- package/src/themes/basic/sass/font-awesome/scss/_animated.scss +34 -0
- package/src/themes/basic/sass/font-awesome/scss/_bordered-pulled.scss +25 -0
- package/src/themes/basic/sass/font-awesome/scss/_core.scss +12 -0
- package/src/themes/basic/sass/font-awesome/scss/_fixed-width.scss +6 -0
- package/src/themes/basic/sass/font-awesome/scss/_icons.scss +789 -0
- package/src/themes/basic/sass/font-awesome/scss/_larger.scss +13 -0
- package/src/themes/basic/sass/font-awesome/scss/_list.scss +19 -0
- package/src/themes/basic/sass/font-awesome/scss/_mixins.scss +60 -0
- package/src/themes/basic/sass/font-awesome/scss/_path.scss +15 -0
- package/src/themes/basic/sass/font-awesome/scss/_rotated-flipped.scss +20 -0
- package/src/themes/basic/sass/font-awesome/scss/_screen-reader.scss +5 -0
- package/src/themes/basic/sass/font-awesome/scss/_stacked.scss +20 -0
- package/src/themes/basic/sass/font-awesome/scss/_variables.scss +799 -0
- package/src/themes/basic/sass/font-awesome/scss/font-awesome.scss +18 -0
- package/src/themes/basic/views/_layout_/index.blade.php +73 -0
- package/src/themes/basic/views/_layout_/lottie.blade.php +50 -0
- package/src/themes/basic/views/_services_/index.blade.php +10 -0
- package/src/themes/basic/views/auth/login.blade.php +90 -0
- package/src/themes/basic/views/auth/passwords/email.blade.php +112 -0
- package/src/themes/basic/views/auth/passwords/reset.blade.php +63 -0
- package/src/themes/basic/views/auth/register.blade.php +73 -0
- package/src/themes/basic/views/auth/verify.blade.php +23 -0
- package/src/themes/basic/views/blog.blade.php +28 -0
- package/src/themes/basic/views/category-text.blade.php +1 -0
- package/src/themes/basic/views/contact.blade.php +64 -0
- package/src/themes/basic/views/copyright.blade.php +33 -0
- package/src/themes/basic/views/example/custom.blade.php +11 -0
- package/src/themes/basic/views/example/query.blade.php +36 -0
- package/src/themes/basic/views/example/queryservice.blade.php +38 -0
- package/src/themes/basic/views/example/service-later.blade.php +34 -0
- package/src/themes/basic/views/example/service.blade.php +24 -0
- package/src/themes/basic/views/example/urlservice.blade.php +27 -0
- package/src/themes/basic/views/footer.blade.php +31 -0
- package/src/themes/basic/views/header.blade.php +63 -0
- package/src/themes/basic/views/hero.blade.php +20 -0
- package/src/themes/basic/views/info.blade.php +46 -0
- package/src/themes/basic/views/our-speciality.blade.php +95 -0
- package/src/themes/basic/views/products.blade.php +20 -0
- package/src/themes/basic/views/profile.blade.php +88 -0
- package/src/themes/basic/views/seo.blade.php +31 -0
- package/src/themes/basic/views/social.blade.php +8 -0
- package/src/themes/basic/views/stories.blade.php +55 -0
- package/src/themes/basic/views/story-comments.blade.php +56 -0
- package/src/themes/basic/views/story.blade.php +103 -0
- package/src/themes/basic/views/subscribe.blade.php +23 -0
- package/src/themes/elegant/img/feature-ai.png +0 -0
- package/src/themes/elegant/img/feature-cloud.png +0 -0
- package/src/themes/elegant/img/hero-bg.png +0 -0
- package/src/themes/elegant/js/app.js +109 -0
- package/src/themes/elegant/sass/_elegant.scss +508 -0
- package/src/themes/elegant/sass/_variables.scss +42 -0
- package/src/themes/elegant/sass/app.scss +14 -0
- package/src/themes/elegant/views/_layout_/index.blade.php +73 -0
- package/src/themes/elegant/views/_layout_/lottie.blade.php +50 -0
- package/src/themes/elegant/views/_services_/index.blade.php +10 -0
- package/src/themes/elegant/views/auth/login.blade.php +90 -0
- package/src/themes/elegant/views/auth/passwords/email.blade.php +112 -0
- package/src/themes/elegant/views/auth/passwords/reset.blade.php +63 -0
- package/src/themes/elegant/views/auth/register.blade.php +73 -0
- package/src/themes/elegant/views/auth/verify.blade.php +23 -0
- package/src/themes/elegant/views/blog.blade.php +28 -0
- package/src/themes/elegant/views/category-text.blade.php +1 -0
- package/src/themes/elegant/views/contact.blade.php +64 -0
- package/src/themes/elegant/views/copyright.blade.php +33 -0
- package/src/themes/elegant/views/example/custom.blade.php +11 -0
- package/src/themes/elegant/views/example/query.blade.php +36 -0
- package/src/themes/elegant/views/example/queryservice.blade.php +38 -0
- package/src/themes/elegant/views/example/service-later.blade.php +34 -0
- package/src/themes/elegant/views/example/service.blade.php +24 -0
- package/src/themes/elegant/views/example/urlservice.blade.php +27 -0
- package/src/themes/elegant/views/footer.blade.php +31 -0
- package/src/themes/elegant/views/header.blade.php +63 -0
- package/src/themes/elegant/views/hero.blade.php +20 -0
- package/src/themes/elegant/views/info.blade.php +46 -0
- package/src/themes/elegant/views/our-speciality.blade.php +95 -0
- package/src/themes/elegant/views/products.blade.php +20 -0
- package/src/themes/elegant/views/profile.blade.php +88 -0
- package/src/themes/elegant/views/seo.blade.php +31 -0
- package/src/themes/elegant/views/social.blade.php +8 -0
- package/src/themes/elegant/views/stories.blade.php +55 -0
- package/src/themes/elegant/views/story-comments.blade.php +56 -0
- package/src/themes/elegant/views/story.blade.php +103 -0
- package/src/themes/elegant/views/subscribe.blade.php +23 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
@php
|
|
2
|
+
$results = $data['results'];
|
|
3
|
+
$hasData = count($results) > 0;
|
|
4
|
+
@endphp
|
|
5
|
+
|
|
6
|
+
<section class="section-blogs">
|
|
7
|
+
<div class="container">
|
|
8
|
+
<div class="row">
|
|
9
|
+
<div class="col-lg-9 col-6">
|
|
10
|
+
@if($hasData)
|
|
11
|
+
@foreach($results as $index=>$story)
|
|
12
|
+
<div class="card shadow blog">
|
|
13
|
+
<div class="card-body">
|
|
14
|
+
<div>
|
|
15
|
+
<div class="pull-right">
|
|
16
|
+
<span class="blog-date shadow-common">
|
|
17
|
+
<span class="fa fa-calendar-o icon"></span>
|
|
18
|
+
<span class="text">{{getFormattedDate($story['createdAt'])}}
|
|
19
|
+
</span>
|
|
20
|
+
</span>
|
|
21
|
+
</div>
|
|
22
|
+
<h2><a href="{{htcms_get_path($story['categoryLinkRewrite'].'/'.$story['linkRewrite'])}}">{{$story['title']}}</a></h2>
|
|
23
|
+
</div>
|
|
24
|
+
{!! $story['description'] !!}
|
|
25
|
+
|
|
26
|
+
<p class="more">
|
|
27
|
+
<a href="{{htcms_get_path($story['categoryLinkRewrite'].'/'.$story['linkRewrite'])}}">Read More</a>
|
|
28
|
+
</p>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="card-footer">
|
|
31
|
+
<div class="pull-left author">
|
|
32
|
+
@if(!empty($story['author'])) Author: {{$story['author']}} @endif
|
|
33
|
+
</div>
|
|
34
|
+
<div class="pull-right">
|
|
35
|
+
<span class="fa fa-comment-o"></span> {{$story['commentsCount'] ?? 0}} Comments
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
@endforeach
|
|
40
|
+
@else
|
|
41
|
+
<div class="card shadow blog">
|
|
42
|
+
<div class="card-body">
|
|
43
|
+
There is no post for now.
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
@endif
|
|
47
|
+
</div>
|
|
48
|
+
<div class="col-lg-3 col-6">
|
|
49
|
+
<div style="border: 1px solid #c3c3c3; background: #f3f3f3; width: 350px; height: 250px; padding:5px">
|
|
50
|
+
Ad Content
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</section>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
@if(isset($isBlogHome) && $isBlogHome == 1)
|
|
2
|
+
|
|
3
|
+
@else
|
|
4
|
+
@php
|
|
5
|
+
$commentsCount = isset($data) ? sizeof($data) : 0;
|
|
6
|
+
$hasComments = $commentsCount > 0;
|
|
7
|
+
@endphp
|
|
8
|
+
<section class="section-comments">
|
|
9
|
+
<div class="container">
|
|
10
|
+
@if($hasComments)
|
|
11
|
+
<hr/>
|
|
12
|
+
<fieldset>
|
|
13
|
+
<legend>
|
|
14
|
+
<h3>Comments <span class="badge badge-dark">{{$commentsCount}}</span></h3>
|
|
15
|
+
</legend>
|
|
16
|
+
<div class="row mb-3 mt-3">
|
|
17
|
+
<div class="col-lg-12 text-right mt-1">
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
@foreach($data as $comment)
|
|
22
|
+
<div class="row">
|
|
23
|
+
<div class="col-lg-2 mb-5 text-center image-column">
|
|
24
|
+
<div class="rounded-circle image" style="width:75px;height:75px">
|
|
25
|
+
@php
|
|
26
|
+
$email = md5($comment['email']);
|
|
27
|
+
@endphp
|
|
28
|
+
<img src="https://www.gravatar.com/avatar/{{$email}}?d=&s=75}}" />
|
|
29
|
+
</div>
|
|
30
|
+
<span class="author">
|
|
31
|
+
{{$comment['name']}}
|
|
32
|
+
</span>
|
|
33
|
+
<span class="said">said on</span>
|
|
34
|
+
<span class="date"><span class="fa fa-calendar-o"></span> {{getFormattedDate($comment['created_at'])}}</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="col-lg-6">
|
|
37
|
+
<div style="" class="" role="tooltip" x-placement="right">
|
|
38
|
+
<div class="arrow" style="top: 16px;"></div>
|
|
39
|
+
<h3 class="popover-header"></h3>
|
|
40
|
+
<div class="popover-body">{{$comment['comment']}}
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
@endforeach
|
|
46
|
+
</fieldset>
|
|
47
|
+
@else
|
|
48
|
+
<legend style="margin-bottom: 100px; display: none">
|
|
49
|
+
<span class="first-text">
|
|
50
|
+
Be the first to write a comment.
|
|
51
|
+
</span>
|
|
52
|
+
</legend>
|
|
53
|
+
@endif
|
|
54
|
+
</div>
|
|
55
|
+
</section>
|
|
56
|
+
@endif
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
|
|
2
|
+
<section class="section-blogs">
|
|
3
|
+
<div class="container">
|
|
4
|
+
@if(isset($data) && count($data) > 0)
|
|
5
|
+
@php
|
|
6
|
+
$data = $data[0];
|
|
7
|
+
$hasContent = true;
|
|
8
|
+
$categoryId = $data['category_id'];
|
|
9
|
+
$contentId = $data['id'];
|
|
10
|
+
|
|
11
|
+
$storyObj = htcms_get_shared_data('MODULE_STORY');
|
|
12
|
+
$title = isset($storyObj) ? $storyObj[0]['name'] : htcms_get_category_info('name');
|
|
13
|
+
@endphp
|
|
14
|
+
<h1>{{$title}}</h1>
|
|
15
|
+
{!! $data['page_content'] !!}
|
|
16
|
+
@else
|
|
17
|
+
@php
|
|
18
|
+
$hasContent = false;
|
|
19
|
+
@endphp
|
|
20
|
+
|
|
21
|
+
@endif
|
|
22
|
+
</div>
|
|
23
|
+
</section>
|
|
24
|
+
|
|
25
|
+
@php
|
|
26
|
+
$user = auth()->user();
|
|
27
|
+
if($user != null) {
|
|
28
|
+
$name = $user->name. " ".$user->last_name;
|
|
29
|
+
$email = $user->email;
|
|
30
|
+
} else {
|
|
31
|
+
$name = "";
|
|
32
|
+
$email = "";
|
|
33
|
+
}
|
|
34
|
+
$name = old("name", $name);
|
|
35
|
+
$email = old("email", $email);
|
|
36
|
+
$comment = old("comment");
|
|
37
|
+
$sessionResults = session('results');
|
|
38
|
+
$successMessage = $sessionResults['message'] ?? "";
|
|
39
|
+
@endphp
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@if($hasContent)
|
|
43
|
+
@if($data['enable_comments'] == 1)
|
|
44
|
+
<section class="section-comments">
|
|
45
|
+
<div class="container">
|
|
46
|
+
<h2>Post Comments</h2>
|
|
47
|
+
<form class="comment-form relative" action="/comment/saveComment" method="post">
|
|
48
|
+
@csrf
|
|
49
|
+
<input type="hidden" name="category_id" value="{{$categoryId}}" />
|
|
50
|
+
<input type="hidden" name="page_id" value="{{$contentId}}" />
|
|
51
|
+
<div class="row mb-3">
|
|
52
|
+
<div class="col-sm-2">
|
|
53
|
+
<label for="_htcms_form_comment_name_">Name</label>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="col-sm-10">
|
|
56
|
+
<input id="_htcms_form_comment_name_" name="name" type="text" class="form-control" required placeholder="Please enter your name" value="{{$name}}" />
|
|
57
|
+
</div>
|
|
58
|
+
<div class="text text-danger"></div>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="row mb-3">
|
|
61
|
+
<div class="col-sm-2">
|
|
62
|
+
<label for="_htcms_form_comment_email_">Email</label>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="col-sm-10">
|
|
65
|
+
<input id="_htcms_form_comment_email_" type="email" name="email" class="form-control" required placeholder="Please enter your email " value="{{$email}}" />
|
|
66
|
+
</div>
|
|
67
|
+
<div class="text text-danger"></div>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="row mb-3">
|
|
70
|
+
<div class="col-sm-2">
|
|
71
|
+
<label for="_htcms_form_comment_comment_">Comment</label>
|
|
72
|
+
</div>
|
|
73
|
+
<div class="col-sm-10">
|
|
74
|
+
<textarea id="_htcms_form_comment_comment_" name="comment" class="form-control" rows="7">{{$comment}}</textarea>
|
|
75
|
+
<div class="text text-danger"></div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="row mb-3">
|
|
79
|
+
<div class="col-sm-2">
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
<div class="col-sm-10 text-center">
|
|
83
|
+
<button class="btn btn-lg btn-outline-secondary mb-1" type="submit">Submit</button>
|
|
84
|
+
<div class="alert text-success">
|
|
85
|
+
{{$successMessage}}
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
@if ($errors->any())
|
|
89
|
+
<div class="alert alert-danger">
|
|
90
|
+
<ul>
|
|
91
|
+
@foreach ($errors->all() as $error)
|
|
92
|
+
<li>{{ $error }}</li>
|
|
93
|
+
@endforeach
|
|
94
|
+
</ul>
|
|
95
|
+
</div>
|
|
96
|
+
@endif
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</form>
|
|
100
|
+
</div>
|
|
101
|
+
</section>
|
|
102
|
+
@endif
|
|
103
|
+
@endif
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<section class="section-subscribe">
|
|
2
|
+
<div class="container">
|
|
3
|
+
<div class="row justify-content-center">
|
|
4
|
+
<div class="col-lg-6 text-center">
|
|
5
|
+
<h2 class="newsletter-title">{{____("hashtagcms::modules.Subscribe to our newsletter")}}</h2>
|
|
6
|
+
<p class="newsletter-subtitle">{{____("hashtagcms::modules.Please leave us your email address. We will update you.")}}</p>
|
|
7
|
+
<form data-form="newsletter-form" class="newsletter-form relative newsletter-form" action="/common/newsletter" method="post" onsubmit="return HashtagCms.Newsletter.newsletterNow(this)">
|
|
8
|
+
<div class="row">
|
|
9
|
+
<div class="col-8" style="padding: 0; margin: 0">
|
|
10
|
+
<input type="email" name="email" class="form-control input " placeholder="{{____("hashtagcms::auth.E-Mail Address")}}" required>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="col-4">
|
|
13
|
+
<button class="btn btn-lg btn-primary btn-block newsletter" type="submit">{{____("hashtagcms::auth.Submit")}}</button>
|
|
14
|
+
</div>
|
|
15
|
+
<div class="alert col-12 mt-2" data-message-holder="newsletter-message-holder" style="display: none; background-color: lightyellow; color:#000">
|
|
16
|
+
<span class="message" data-class="newsletter-message"></span> <span data-class="newsletter-close" title="Close" class="pull-right pointer hand" style="background-color: #5f5f5f; color:#fff;padding:1px 5px">x</span>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</form>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</section> <!-- end Newsletter -->
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Analytics, Newsletter, AppConfig } from "@hashtagcms/web-sdk";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
window.HashtagCms = { configData: {} };
|
|
5
|
+
window.HashtagCms.Newsletter = new Newsletter();
|
|
6
|
+
window.HashtagCms.Subscribe = window.HashtagCms.Newsletter; // Legacy support
|
|
7
|
+
window.HashtagCms.Analytics = new Analytics();
|
|
8
|
+
window.HashtagCms.AppConfig = new AppConfig();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Elegant Theme - Modern Tech Aesthetic
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Smooth scroll animations
|
|
15
|
+
* - Parallax effects
|
|
16
|
+
* - Modern card interactions
|
|
17
|
+
* - Dynamic Navbar
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
class ElegantTheme {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.initNewsletter();
|
|
23
|
+
this.initSmoothScroll();
|
|
24
|
+
this.initParallax();
|
|
25
|
+
this.initCardAnimations();
|
|
26
|
+
this.initNavbar();
|
|
27
|
+
console.log('Elegant Theme loaded');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
initNewsletter() {
|
|
31
|
+
// Newsletter is already initialized globally as window.HashtagCms.Newsletter
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
initNavbar() {
|
|
35
|
+
const navbar = document.querySelector('.navbar');
|
|
36
|
+
if (navbar) {
|
|
37
|
+
window.addEventListener('scroll', () => {
|
|
38
|
+
if (window.scrollY > 50) {
|
|
39
|
+
navbar.classList.add('scrolled');
|
|
40
|
+
} else {
|
|
41
|
+
navbar.classList.remove('scrolled');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// Initial check
|
|
45
|
+
if (window.scrollY > 50) {
|
|
46
|
+
navbar.classList.add('scrolled');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
initSmoothScroll() {
|
|
52
|
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
53
|
+
anchor.addEventListener('click', function (e) {
|
|
54
|
+
const href = this.getAttribute('href');
|
|
55
|
+
if (href && href !== '#' && href !== '#!') {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
const target = document.querySelector(href);
|
|
58
|
+
if (target) {
|
|
59
|
+
target.scrollIntoView({
|
|
60
|
+
behavior: 'smooth',
|
|
61
|
+
block: 'start'
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
initParallax() {
|
|
70
|
+
const parallaxElements = document.querySelectorAll('.parallax');
|
|
71
|
+
|
|
72
|
+
if (parallaxElements.length > 0) {
|
|
73
|
+
window.addEventListener('scroll', () => {
|
|
74
|
+
const scrolled = window.pageYOffset;
|
|
75
|
+
|
|
76
|
+
parallaxElements.forEach(element => {
|
|
77
|
+
const speed = element.dataset.speed || 0.5;
|
|
78
|
+
element.style.transform = `translateY(${scrolled * speed}px)`;
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
initCardAnimations() {
|
|
85
|
+
const cards = document.querySelectorAll('.feature-card, .tech-card, .card'); // Added generic .card
|
|
86
|
+
|
|
87
|
+
if (cards.length > 0) {
|
|
88
|
+
const observer = new IntersectionObserver((entries) => {
|
|
89
|
+
entries.forEach(entry => {
|
|
90
|
+
if (entry.isIntersecting) {
|
|
91
|
+
entry.target.classList.add('animate-in');
|
|
92
|
+
observer.unobserve(entry.target); // Only animate once
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}, {
|
|
96
|
+
threshold: 0.1
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
cards.forEach(card => observer.observe(card));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Initialize theme when DOM is ready
|
|
105
|
+
if (document.readyState === 'loading') {
|
|
106
|
+
document.addEventListener('DOMContentLoaded', () => new ElegantTheme());
|
|
107
|
+
} else {
|
|
108
|
+
new ElegantTheme();
|
|
109
|
+
}
|