feat: implement livestream post functionality and update site theme assets

This commit is contained in:
2026-07-14 23:34:50 +07:00
parent 1b905d8c60
commit f4e24a0e00
130 changed files with 17284 additions and 277 deletions
@@ -6,12 +6,16 @@
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.20.xsd">
<changeSet id="20260714080000-1" author="antigravity">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="0">SELECT COUNT(*) FROM sis_component_template WHERE slug = 'news-grid'</sqlCheck>
</preConditions>
<insert tableName="sis_component_template">
<column name="id" valueComputed="(select coalesce(max(id), 0) + 1 from sis_component_template)"/>
<column name="slug" value="news-grid"/>
<column name="name" value="News Grid"/>
<column name="description" value="Dynamic grid layout for news."/>
<column name="active" valueBoolean="true"/>
<column name="created_by" value="system"/>
<column name="html_template"><![CDATA[{{#each news_posts}}
<div class="featured-grid__item">
<article class="news-card news-card--featured">
@@ -43,6 +47,7 @@
<column name="name" value="Events List"/>
<column name="description" value="List layout for events."/>
<column name="active" valueBoolean="true"/>
<column name="created_by" value="system"/>
<column name="html_template"><![CDATA[<style>
.campus-events-widget { background: transparent; padding: 0; font-family: inherit; }
.campus-events-widget .events-list { list-style: none; margin: 0; padding: 0; }
@@ -95,6 +100,8 @@
</div>]]></column>
<column name="created_date" valueComputed="CURRENT_TIMESTAMP"/>
</insert>
</changeSet>
<changeSet id="20260714080000-3" author="antigravity" runAlways="true">
<update tableName="sis_component_template">
<column name="html_template"><![CDATA[{{#each news_posts}}
@@ -122,9 +129,6 @@
<where>slug = 'news-grid'</where>
</update>
</changeSet>
</databaseChangeLog>
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.20.xsd">
<changeSet id="20260714080000-2" author="antigravity" runAlways="true">
<update tableName="sis_component_template">
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="20260714112000-1" author="antigravity">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="sis_post" columnName="location"/>
</not>
</preConditions>
<addColumn tableName="sis_post">
<column name="location" type="varchar(255)">
<constraints nullable="true" />
</column>
</addColumn>
</changeSet>
</databaseChangeLog>
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="20260714113000-1" author="antigravity" runAlways="true">
<update tableName="sis_component_template">
<column name="html_template"><![CDATA[<style>
.campus-events-widget { background: transparent; padding: 0; font-family: inherit; }
.campus-events-widget .events-list { list-style: none; margin: 0; padding: 0; }
.campus-events-widget .teaser-item { padding: 20px 0; border-bottom: 1px solid #e5e5e5; }
.campus-events-widget .teaser-item:last-child { border-bottom: none; }
.campus-events-widget .event-wrapper { display: flex; gap: 20px; align-items: flex-start; }
.campus-events-widget .event-date { display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 0.125rem; padding: 0.25rem; background: #881C1C; width: 2.875rem; height: 3.125rem; box-sizing: border-box; }
.campus-events-widget .event-date__month { font-size: 1rem; font-weight: 800; line-height: 1.25rem; text-transform: uppercase; text-align: center; color: #fff; }
.campus-events-widget .event-date__day { font-size: 1rem; font-weight: 800; line-height: 1.25rem; text-transform: uppercase; text-align: center; color: #fff; }
.campus-events-widget .event-details { flex: 1; position: relative; }
.campus-events-widget .event-title { font-size: 1rem; font-weight: 800; line-height: 1.25rem; text-transform: uppercase; color: #000; }
.campus-events-widget .event-title a { color: inherit; text-decoration: none; }
.campus-events-widget .event-title a:hover { text-decoration: underline; }
.campus-events-widget .event-time { font-size: 16px; color: #000; margin-bottom: 4px; }
.campus-events-widget .event-location { font-size: 1rem; font-weight: 400; line-height: 1.5rem; font-style: normal; color: #000; }
@media (max-width: 768px) {
.campus-events-widget .event-title { font-size: 0.75rem; }
.campus-events-widget .event-time { font-size: 0.75rem; }
.campus-events-widget .event-location { font-size: 0.75rem; }
.campus-events-widget .event-wrapper { display: flex; flex: 1; padding-right: 10px; align-items: stretch; gap: 12px; border: 1px solid #CCC; }
.campus-events-widget .event-date { display: flex; padding: 4px 8px; flex-direction: column; justify-content: center; align-items: center; align-self: stretch; background: #881C1C; min-width: 48px; height: auto; }
.campus-events-widget .event-details { padding: 8px 10px 8px 0; }
.campus-events-widget .teaser-item { flex: 0 0 279px; display: flex; border: 0px solid #CCC; padding-bottom: 0; }
.campus-events-widget .events-list { display: flex; gap: 1rem; overflow-x: auto; padding-bottom: 1rem; }
}
@media (max-width: 480px) {
.campus-events-widget .event-wrapper { gap: 10px; }
.campus-events-widget .event-date__day { font-size: 18px; }
}
</style>
<div class="campus-events-widget">
<div class="events-list">
{{#each event_posts}}
<div class="teaser-item">
<div class="event-wrapper">
<div class="event-date">
<div class="event-date__month">{{eventMonth}}</div>
<div class="event-date__day">{{eventDay}}</div>
</div>
<div class="event-details">
<div class="event-title">
<a href="/post/{{slug}}">{{title}}</a>
</div>
<div class="event-time">{{eventTimeStr}}</div>
{{locationHtml}}
</div>
</div>
</div>
{{/each}}
</div>
</div>]]></column>
<where>slug = 'events-list'</where>
</update>
</changeSet>
</databaseChangeLog>
@@ -37,4 +37,6 @@
<!-- jhipster-needle-liquibase-add-constraints-changelog - JHipster will add liquibase constraints changelogs here -->
<!-- jhipster-needle-liquibase-add-incremental-changelog - JHipster will add incremental liquibase changelogs here -->
<include file="config/liquibase/changelog/20260714080000_seed_news_events_components.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260714112000_add_location_to_post.xml" relativeToChangelogFile="false"/>
<include file="config/liquibase/changelog/20260714113000_update_events_list.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>