From 466ecf5981c3268bef32bf0aa2e37c0b95454079 Mon Sep 17 00:00:00 2001 From: schooltechx Date: Mon, 27 Mar 2023 16:43:56 +0700 Subject: [PATCH] add 3 demo calendar --- .github/workflows/release.yaml | 5 +- action-events.json | 13 - cms/docker-compose.yaml | 4 +- cms/package-lock.json | 46 ++++ cms/package.json | 2 + .../lib/components/Calendar/Calendar.svelte | 131 +++++++++++ .../components/Calendar/CalendarArrow.svelte | 22 ++ .../lib/components/Calendar/calendarize.ts | 22 ++ .../lib/components/Calendar2/Calendar.svelte | 191 +++++++++++++++ .../Calendar2/CalendarContent.svelte | 222 ++++++++++++++++++ cms/src/lib/data/qualify-exam.json | 5 + cms/src/lib/data/qualify-exam.ts | 4 + cms/src/routes/+layout.svelte | 2 +- cms/src/routes/about/+page.server.ts | 2 +- cms/src/routes/about/+page.svelte | 47 +++- cms/src/routes/competitive/+page.svelte | 40 +++- cms/src/routes/qualifying/+page.server.ts | 8 + cms/src/routes/qualifying/+page.svelte | 30 ++- cms/svelte.config.js | 1 + cms/vite.config.ts | 1 + 20 files changed, 765 insertions(+), 33 deletions(-) delete mode 100644 action-events.json create mode 100644 cms/src/lib/components/Calendar/Calendar.svelte create mode 100644 cms/src/lib/components/Calendar/CalendarArrow.svelte create mode 100644 cms/src/lib/components/Calendar/calendarize.ts create mode 100644 cms/src/lib/components/Calendar2/Calendar.svelte create mode 100644 cms/src/lib/components/Calendar2/CalendarContent.svelte create mode 100644 cms/src/lib/data/qualify-exam.json create mode 100644 cms/src/lib/data/qualify-exam.ts create mode 100644 cms/src/routes/qualifying/+page.server.ts diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 563e6cd..5e164aa 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -16,7 +16,7 @@ env: REGISTRY: docker.frappet.com IMAGE_NAME: demo/qualifying-exam-cms jobs: - # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=v0.2.1-dev -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd + # act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=v0.2.3-dev -s DOCKER_USER=sorawit -s DOCKER_PASS=P@ssword -s SSH_PASSWORD=P@ssw0rd release: runs-on: ubuntu-latest steps: @@ -37,7 +37,8 @@ jobs: echo "{\"version\":\"$IMAGE_VER\", \"builddate\":\"$(date +"%Y-%m-%d_%T")\",\"ref_name\":\"$GITHUB_REF\" }" > ./cms/src/lib/ver.json cat ./cms/src/lib/ver.json echo '::set-output name=image_ver::'$IMAGE_VER - # - name: Test Version + # - name: Debug act + # if: ${{ env.ACT }} # run: | # echo $GITHUB_REF # echo ${{ steps.gen_ver.outputs.image_ver }} diff --git a/action-events.json b/action-events.json deleted file mode 100644 index 1d78b75..0000000 --- a/action-events.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "push":{ - - }, - "pull_request": { - "head": { - "ref": "sample-head-ref" - }, - "base": { - "ref": "sample-base-ref" - } - } - } \ No newline at end of file diff --git a/cms/docker-compose.yaml b/cms/docker-compose.yaml index 4d16470..796fb0b 100644 --- a/cms/docker-compose.yaml +++ b/cms/docker-compose.yaml @@ -1,9 +1,9 @@ version: "3.4" services: - hi: + qualifying-exam-cms: image: docker.frappet.com/demo/qualifying-exam-cms:latest restart: unless-stopped ports: - "4010:80" environment: - TZ: Asia/Bangkok + TZ: Asia/Bangkok \ No newline at end of file diff --git a/cms/package-lock.json b/cms/package-lock.json index f1bc7ee..06d62cf 100644 --- a/cms/package-lock.json +++ b/cms/package-lock.json @@ -18,6 +18,7 @@ "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "autoprefixer": "^10.4.7", + "dayjs": "^1.11.7", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-svelte3": "^4.0.0", @@ -28,6 +29,7 @@ "prettier-plugin-svelte": "^2.8.1", "sass": "^1.58.3", "svelte": "^3.54.0", + "svelte-calendar": "^3.1.6", "svelte-check": "^3.0.1", "svelte-preprocess": "^4.10.7", "svelte-seo": "^1.5.3", @@ -1553,6 +1555,12 @@ "postcss": "^8.1.6" } }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2514,6 +2522,12 @@ "npm": ">=6" } }, + "node_modules/just-throttle": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/just-throttle/-/just-throttle-2.3.1.tgz", + "integrity": "sha512-0H4miIAWZYpnpg7oD/Y/PBb77ISSHAETif5xK9EnwIgYCO6oC8ErkJxDumMUTR44shSOwptRIArRuvNuvN/hOw==", + "dev": true + }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -3563,6 +3577,16 @@ "node": ">= 8" } }, + "node_modules/svelte-calendar": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/svelte-calendar/-/svelte-calendar-3.1.6.tgz", + "integrity": "sha512-jOHiPlxBAa1LGVFQZoczdAGnCSI2RKcuQQHj32TjLbXO/P2Povx4JphPEcP7XjKj/s/jimBC6xQyFhyjD0vxbg==", + "dev": true, + "dependencies": { + "dayjs": "^1.10.6", + "just-throttle": "^2.3.1" + } + }, "node_modules/svelte-check": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.1.0.tgz", @@ -5160,6 +5184,12 @@ "tailwindcss": "^3" } }, + "dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5882,6 +5912,12 @@ "semver": "^7.3.8" } }, + "just-throttle": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/just-throttle/-/just-throttle-2.3.1.tgz", + "integrity": "sha512-0H4miIAWZYpnpg7oD/Y/PBb77ISSHAETif5xK9EnwIgYCO6oC8ErkJxDumMUTR44shSOwptRIArRuvNuvN/hOw==", + "dev": true + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -6575,6 +6611,16 @@ "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", "dev": true }, + "svelte-calendar": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/svelte-calendar/-/svelte-calendar-3.1.6.tgz", + "integrity": "sha512-jOHiPlxBAa1LGVFQZoczdAGnCSI2RKcuQQHj32TjLbXO/P2Povx4JphPEcP7XjKj/s/jimBC6xQyFhyjD0vxbg==", + "dev": true, + "requires": { + "dayjs": "^1.10.6", + "just-throttle": "^2.3.1" + } + }, "svelte-check": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.1.0.tgz", diff --git a/cms/package.json b/cms/package.json index 09027e5..802598e 100644 --- a/cms/package.json +++ b/cms/package.json @@ -21,6 +21,7 @@ "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "autoprefixer": "^10.4.7", + "dayjs": "^1.11.7", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-svelte3": "^4.0.0", @@ -31,6 +32,7 @@ "prettier-plugin-svelte": "^2.8.1", "sass": "^1.58.3", "svelte": "^3.54.0", + "svelte-calendar": "^3.1.6", "svelte-check": "^3.0.1", "svelte-preprocess": "^4.10.7", "svelte-seo": "^1.5.3", diff --git a/cms/src/lib/components/Calendar/Calendar.svelte b/cms/src/lib/components/Calendar/Calendar.svelte new file mode 100644 index 0000000..c4dc5e3 --- /dev/null +++ b/cms/src/lib/components/Calendar/Calendar.svelte @@ -0,0 +1,131 @@ + + +
+ +

{months[month]} - {year+ (buddhist?543:0)}

+ +
+ +
+ {#each labels as txt, idx (txt)} + + dispatch('headerClick',txt)} >{ labels[(idx + offset) % 7] } + {/each} + + {#each { length:6 } as w,idxw (idxw)} + {#if current[idxw]} + {#each { length:7 } as d,idxd (idxd)} + {#if current[idxw][idxd] != 0} + + { current[idxw][idxd] } + + {:else if (idxw < 1)} + { prev[prev.length - 1][idxd] } + {:else} + { next[0][idxd] } + {/if} + {/each} + {/if} + {/each} +
+ + \ No newline at end of file diff --git a/cms/src/lib/components/Calendar/CalendarArrow.svelte b/cms/src/lib/components/Calendar/CalendarArrow.svelte new file mode 100644 index 0000000..c86cbea --- /dev/null +++ b/cms/src/lib/components/Calendar/CalendarArrow.svelte @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/cms/src/lib/components/Calendar/calendarize.ts b/cms/src/lib/components/Calendar/calendarize.ts new file mode 100644 index 0000000..352f63a --- /dev/null +++ b/cms/src/lib/components/Calendar/calendarize.ts @@ -0,0 +1,22 @@ +//Modify by Oom +//code from https://www.npmjs.com/package/calendarize +export default function (target?: Date|string, offset=0) { + let i=0, j=0, week = Array(7) + const out=[], date = new Date(target || new Date); + const year = date.getFullYear(), month = date.getMonth(); + // day index (of week) for 1st of month + let first = new Date(year, month, 1 - (offset | 0)).getDay(); + + // how many days there are in this month + const days = new Date(year, month+1, 0).getDate(); + + while (i < days) { + for (j=0, week=Array(7); j < 7;) { + while (j < first) week[j++] = 0; + week[j++] = ++i > days ? 0 : i; + first = 0; + } + out.push(week); + } + return out; +} \ No newline at end of file diff --git a/cms/src/lib/components/Calendar2/Calendar.svelte b/cms/src/lib/components/Calendar2/Calendar.svelte new file mode 100644 index 0000000..2b60f77 --- /dev/null +++ b/cms/src/lib/components/Calendar2/Calendar.svelte @@ -0,0 +1,191 @@ + + +
+
+

+ + + {months[month]} {year+ (buddhist?543:0)} + + +

+ {eventText} +
+ + dayClick(e.detail)} + on:itemClick={(e)=>itemClick(e.detail)} + on:headerClick={(e)=>headerClick(e.detail)} + /> +
+ + diff --git a/cms/src/lib/components/Calendar2/CalendarContent.svelte b/cms/src/lib/components/Calendar2/CalendarContent.svelte new file mode 100644 index 0000000..1fe55ad --- /dev/null +++ b/cms/src/lib/components/Calendar2/CalendarContent.svelte @@ -0,0 +1,222 @@ +
+ {#each headers as header} + + dispatch('headerClick',header)}>{header} + {/each} + + {#each days as day} + {#if day.enabled} + + dispatch('dayClick',day)}>{day.name} + {:else} + + dispatch('dayClick',day)}>{day.name} + {/if} + {/each} + + {#each items as item} + +
dispatch('itemClick',item)} + class="task {item.className}" + style="grid-column: {item.startCol} / span {item.len}; + grid-row: {item.startRow}; + align-self: {item.isBottom?'end':'center'};" + > + {item.title} + {#if item.detailHeader} +
+

{item.detailHeader}

+

{item.detailContent}

+
+ {/if} +
+ {/each} +
+ + + + + + diff --git a/cms/src/lib/data/qualify-exam.json b/cms/src/lib/data/qualify-exam.json new file mode 100644 index 0000000..4d5ea92 --- /dev/null +++ b/cms/src/lib/data/qualify-exam.json @@ -0,0 +1,5 @@ +[ + {"id":20,"date":"2023/03/25","detail":"ประกาศรับสมัครสอบและคัดเลือกบุคคลเข้ารับราชการเป็นลูกจ้างชั่วคราว","institute":"สำนักอนามัย","time":"๕/๒๕๖๕"}, + {"id":19,"date":"2023/03/23","detail":"ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบคัดเลือกบุคคลภายนอกช่วยปฎิบัติราชการ","institute":"สำนักการแพทย์","time":"๔/๒๕๖๔"}, + {"id":18,"date":"2023/03/20","detail":"ประกาศกรุงเทพมหานคร เรื่อง ประกาศผู้ชนะการเสนอราคา จ้างเหมาซ่อมแซมป้ายชื่อ","institute":"สำนักวัฒนธรรม กีฬาและการท่องเที่ยว","time":"๔/๒๕๖๓"} +] \ No newline at end of file diff --git a/cms/src/lib/data/qualify-exam.ts b/cms/src/lib/data/qualify-exam.ts new file mode 100644 index 0000000..88d0817 --- /dev/null +++ b/cms/src/lib/data/qualify-exam.ts @@ -0,0 +1,4 @@ +import exams from "./qualify-exam.json" +export async function getExams(){ + return exams +} diff --git a/cms/src/routes/+layout.svelte b/cms/src/routes/+layout.svelte index 359b317..17ad86e 100644 --- a/cms/src/routes/+layout.svelte +++ b/cms/src/routes/+layout.svelte @@ -4,7 +4,7 @@
-
+
diff --git a/cms/src/routes/about/+page.server.ts b/cms/src/routes/about/+page.server.ts index 94b4c70..66ef041 100644 --- a/cms/src/routes/about/+page.server.ts +++ b/cms/src/routes/about/+page.server.ts @@ -7,5 +7,5 @@ export const load: PageServerLoad = async () => { }*/ export const load = (async () => { - return getContact() + return await getContact() }) satisfies PageServerLoad diff --git a/cms/src/routes/about/+page.svelte b/cms/src/routes/about/+page.svelte index 0313a17..568711e 100644 --- a/cms/src/routes/about/+page.svelte +++ b/cms/src/routes/about/+page.svelte @@ -1,15 +1,54 @@ - -

{data.company_name}

- +

เกี่ยวกับ {data.company_name}

{data.description}
{ver.version}
{ver.builddate}
+

svelte-calendar

+

3rd svelte-calendar ไม่รองรับ พ.ศ.

+ + + + + +

Custom Calendar1

+
+ Calendar ทำเองยังไม่รองรับการแสดง event ในวัน +
+ + +

Custom Calendar2

+
+ ทำเองรองรับการแสดง event และคลิ้กได้ ได้แต่ยังปรับโค้ดไม่เรียบร้อย +
+ diff --git a/cms/src/routes/competitive/+page.svelte b/cms/src/routes/competitive/+page.svelte index f9fb294..c24890c 100644 --- a/cms/src/routes/competitive/+page.svelte +++ b/cms/src/routes/competitive/+page.svelte @@ -1,7 +1,35 @@ -

การสอบแข่งขัน

+ + + +

การสอบแข่งขัน

+ + + + + +
+ {#each locales as loc} + | + {/each} +
diff --git a/cms/src/routes/qualifying/+page.server.ts b/cms/src/routes/qualifying/+page.server.ts new file mode 100644 index 0000000..38e0209 --- /dev/null +++ b/cms/src/routes/qualifying/+page.server.ts @@ -0,0 +1,8 @@ + +import {getExams} from "$lib/data/qualify-exam" +import type { PageServerLoad } from './$types' +export const load: PageServerLoad = async () => { + const exams = await getExams() + return {exams} +} + diff --git a/cms/src/routes/qualifying/+page.svelte b/cms/src/routes/qualifying/+page.svelte index 19b0c23..b5a10ac 100644 --- a/cms/src/routes/qualifying/+page.svelte +++ b/cms/src/routes/qualifying/+page.svelte @@ -1,6 +1,28 @@ + +

การสอบคัดเลือก

- - - - +้

รายการสอบ

+
+ + + + + + + + + + {#each exams as exam} + + + + + {/each} + +
วันที่การสอบหน่วยงาน
{exam.date}{exam.detail}{exam.institute}
+
\ No newline at end of file diff --git a/cms/svelte.config.js b/cms/svelte.config.js index ce7c783..80da8aa 100644 --- a/cms/svelte.config.js +++ b/cms/svelte.config.js @@ -15,6 +15,7 @@ const config = { ], kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. diff --git a/cms/vite.config.ts b/cms/vite.config.ts index 37b6a84..19cd1f8 100644 --- a/cms/vite.config.ts +++ b/cms/vite.config.ts @@ -6,4 +6,5 @@ export default defineConfig({ test: { include: ['src/**/*.{test,spec}.{js,ts}'] } + });