Skip to content

Commit 3b363cd

Browse files
elct9620claude
andauthored
refactor: migrate jQuery and Bootstrap to Vanilla JS (#17)
* refactor(js): replace jQuery with Importmap, Turbo and Stimulus Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: remove obsolete static branch from deploy trigger The static branch has been merged and is no longer needed. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 36fb353 commit 3b363cd

16 files changed

Lines changed: 384 additions & 129 deletions

.github/workflows/jekyll.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ on:
55
push:
66
branches:
77
- master
8-
- static # Current branch, after merging, will be deleted
98

109
workflow_dispatch:
1110

_includes/blogs.html

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
<section id="blogs">
2-
<div class="blog-card">
1+
<section id="blogs" data-controller="modal">
2+
<div class="blog-card" data-controller="toggle">
33
<h3 class="section-title">{{ site.data.i18n.section.blog }}</h3>
44

5-
<div class="blog-list">
5+
<div class="blog-list" data-toggle-target="wrapper">
66
{% for post in site.posts %}
77
<div class="blog{% if forloop.index > 5 %} more{% endif %}">
88
<span class="blog-date">{{ post.date | date: "%b %d %Y" }}</span>
99
<a href="{{ post.url }}" class="blog-title"
10-
data-blog-index="{{ forloop.index0 }}">{{ post.title }}</a>
11-
<div class="blog-modal-content" id="blog-content-{{ forloop.index0 }}" style="display:none">
12-
<span class="content-date">{{ post.date | date: "%b %d, %Y" }}</span>
13-
<h1 class="content-title">{{ post.title }}</h1>
14-
{{ post.content }}
15-
</div>
10+
data-turbo-frame="blog-modal-content"
11+
data-turbo-action="advance"
12+
data-action="click->modal#open">{{ post.title }}</a>
1613
</div>
1714
{% endfor %}
1815
</div>
1916

2017
{% if site.posts.size >= 5 %}
21-
<button class="button-more blog-more">{{ site.data.i18n.helper.view_more }}</button>
18+
<button class="button-more blog-more" data-action="click->toggle#toggle">{{ site.data.i18n.helper.view_more }}</button>
2219
{% endif %}
2320
</div>
2421

25-
<div id="blog-modal" class="modal fade" tabindex="-1">
22+
<div id="blog-modal" class="modal fade" tabindex="-1" data-modal-target="dialog"
23+
data-action="click->modal#closeOnOverlay">
2624
<div class="modal-dialog">
2725
<div class="modal-content">
28-
<div class="modal-close" data-dismiss="modal" aria-label="Close"></div>
26+
<div class="modal-close" data-action="click->modal#close" aria-label="Close"></div>
2927
<div class="modal-body">
30-
<div class="content"></div>
28+
<turbo-frame id="blog-modal-content">
29+
<div class="content"></div>
30+
</turbo-frame>
3131
</div>
3232
</div>
3333
</div>

_includes/campaigns.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,23 @@ <h4 class="campaign-title">{{ campaign.title }}</h4>
1212
{%- endfor -%}
1313
</div>
1414

15-
<div class="campaign-photos carousel slide" data-ride="carousel" id="{{ campaign.id }}-photo">
15+
<div class="campaign-photos carousel slide" id="{{ campaign.id }}-photo"
16+
data-controller="carousel"
17+
data-action="touchstart->carousel#onTouchStart touchend->carousel#onTouchEnd">
1618
<!-- Indicators -->
1719
<ol class="carousel-indicators">
1820
{% for photo in campaign.photo %}
19-
<li data-slide-to="{{ forloop.index0 }}" data-target="#{{ campaign.id }}-photo"{% if forloop.first %} class="active"{% endif %}></li>
21+
<li data-carousel-target="indicator"
22+
data-action="click->carousel#goToIndicator"
23+
{% if forloop.first %}class="active"{% endif %}></li>
2024
{% endfor %}
2125
</ol>
2226
<!-- Wrapper for slides -->
2327
<div class="carousel-inner" role="listbox">
2428
{% for photo in campaign.photo %}
25-
<div class="item{% if forloop.first %} active{% endif %}" id="{{ campaign.id }}-photo-{{ forloop.index0 }}">
29+
<div class="item{% if forloop.first %} active{% endif %}"
30+
data-carousel-target="slide"
31+
id="{{ campaign.id }}-photo-{{ forloop.index0 }}">
2632
<img src="{{ '/assets/images/campaigns/' | append: photo | relative_url }}" alt="{{ campaign.title }}" title="{{ campaign.title }}">
2733
</div>
2834
{% endfor %}

_includes/events.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
<section id="events">
1+
<section id="events" data-controller="toggle">
22
<h3 class="section-title">{{ site.data.i18n.section.events }}</h3>
33

4-
<div class="events-list">
4+
<div class="events-list" data-toggle-target="wrapper">
55
{% assign ended_events = site.events | where: "ended", true %}
66
{% assign active_events = site.events | where_exp: "event", "event.ended != true" %}
77

@@ -64,6 +64,6 @@ <h3 class="section-title">{{ site.data.i18n.section.events }}</h3>
6464
</div>
6565

6666
{% if ended_events.size > 0 %}
67-
<button class="button-more events-more">{{ site.data.i18n.helper.order_events }}</button>
67+
<button class="button-more events-more" data-action="click->toggle#toggle">{{ site.data.i18n.helper.order_events }}</button>
6868
{% endif %}
6969
</section>

_includes/nav.html

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1-
<nav id="affixNav" class="navbar navbar-default navbar-custom navbar-fixed-top">
1+
<nav id="affixNav" class="navbar navbar-default navbar-custom navbar-fixed-top"
2+
data-controller="navbar scroll">
23
<div class="container-fluid">
34
<div class="navbar-header page-scroll">
4-
<button class="navbar-toggle" data-target="#navbar-collapse" data-toggle="collapse" type="button">
5+
<button class="navbar-toggle" type="button"
6+
data-action="click->navbar#toggleCollapse">
57
<i class="fa fa-bars"></i>
68
</button>
7-
<a class="navbar-brand page-scroll" href="#cover">
9+
<a class="navbar-brand page-scroll" href="#cover"
10+
data-action="click->scroll#scroll">
811
{% include cover/ruby_taiwan_logotype.svg %}
912
</a>
1013
</div>
1114

12-
<div id="navbar-collapse" class="collapse navbar-collapse">
15+
<div id="navbar-collapse" class="collapse navbar-collapse"
16+
data-navbar-target="collapse">
1317
<ul class="nav navbar-nav navbar-right">
1418
<li>
15-
<a class="page-scroll" href="#blogs">{{ site.data.i18n.section.blog }}</a>
19+
<a class="page-scroll" href="#blogs"
20+
data-action="click->scroll#scroll click->navbar#closeCollapse">{{ site.data.i18n.section.blog }}</a>
1621
</li>
1722
<li>
18-
<a class="page-scroll" href="#events">{{ site.data.i18n.section.events }}</a>
23+
<a class="page-scroll" href="#events"
24+
data-action="click->scroll#scroll click->navbar#closeCollapse">{{ site.data.i18n.section.events }}</a>
1925
</li>
2026
<li>
21-
<a class="page-scroll" href="#communities">{{ site.data.i18n.section.communities }}</a>
27+
<a class="page-scroll" href="#communities"
28+
data-action="click->scroll#scroll click->navbar#closeCollapse">{{ site.data.i18n.section.communities }}</a>
2229
</li>
2330
<li class="social-media">
2431
<a href="{{ site.data.social_media.twitter }}" target="_blank">

_layouts/default.html

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<title>{{ page.title | default: site.title }}</title>
66
{% seo %}
7-
<meta content="yes" name="apple-mobile-web-app-capable">
7+
<meta content="yes" name="mobile-web-app-capable">
88
<meta content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
99

1010
<!-- Favicons -->
@@ -23,10 +23,14 @@
2323
{{ content }}
2424

2525
<!-- JS -->
26-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
27-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
28-
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
29-
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.touchswipe/1.6.19/jquery.touchSwipe.min.js"></script>
30-
<script src="{{ '/assets/js/main.js' | relative_url }}"></script>
26+
<script type="importmap" data-turbo-permanent id="importmap">
27+
{
28+
"imports": {
29+
"@hotwired/turbo": "https://cdn.jsdelivr.net/npm/@hotwired/turbo@8/dist/turbo.es2017-esm.min.js",
30+
"@hotwired/stimulus": "https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3/dist/stimulus.js"
31+
}
32+
}
33+
</script>
34+
<script type="module" src="{{ '/assets/js/application.js' | relative_url }}"></script>
3135
</body>
3236
</html>

_layouts/post.html

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@
3636
</div>
3737
</nav>
3838

39-
<div class="content">
40-
<span class="content-date">{{ page.date | date: "%b %d, %Y" }}</span>
41-
<h1 class="content-title">{{ page.title }}</h1>
42-
{% include icon_ruby.svg %}
43-
{{ content }}
44-
</div>
39+
<turbo-frame id="blog-modal-content">
40+
<div class="content">
41+
<span class="content-date">{{ page.date | date: "%b %d, %Y" }}</span>
42+
<h1 class="content-title">{{ page.title }}</h1>
43+
{% include icon_ruby.svg %}
44+
{{ content }}
45+
</div>
46+
</turbo-frame>
4547
</div>
4648

4749
{% include footer.html %}

_sass/style/_blog.sass

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
@extend .flexbox
3434
align-items: center
3535
justify-content: flex-start
36-
36+
3737
+ .blog
3838
border-top: solid 1px $light-grey
3939
padding-top: 30px
@@ -71,4 +71,7 @@
7171
.blog-date
7272
background-color: $red
7373
.blog-title
74-
color: $red
74+
color: $red
75+
76+
&.more--visible .blog.more
77+
display: flex

_sass/style/_events.sass

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
&.ended
3535
display: none
3636

37+
&.more--visible .event-card.ended
38+
display: block
39+
3740
.event-photo
3841
position: relative
3942
overflow: hidden

assets/js/application.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import "@hotwired/turbo"
2+
import { Application } from "@hotwired/stimulus"
3+
4+
import ScrollController from "./controllers/scroll_controller.js"
5+
import NavbarController from "./controllers/navbar_controller.js"
6+
import ToggleController from "./controllers/toggle_controller.js"
7+
import ModalController from "./controllers/modal_controller.js"
8+
import CarouselController from "./controllers/carousel_controller.js"
9+
10+
const application = Application.start()
11+
application.register("scroll", ScrollController)
12+
application.register("navbar", NavbarController)
13+
application.register("toggle", ToggleController)
14+
application.register("modal", ModalController)
15+
application.register("carousel", CarouselController)

0 commit comments

Comments
 (0)