diff --git a/package.json b/package.json index dec71a0..3263eed 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "chart.js": "^2.7.1", "cross-env": "^5.2.0", "date-fns": "^1.30.1", + "grapheme-splitter": "^1.0.4", "husky": "^1.3.1", "jquery": "^3.2.1", "js-cookie": "^2.2.0", diff --git a/resources/assets/js/checkin.ts b/resources/assets/js/checkin.ts index cb31293..525c6c6 100644 --- a/resources/assets/js/checkin.ts +++ b/resources/assets/js/checkin.ts @@ -1,6 +1,7 @@ import Vue from 'vue'; import TagInput from "./components/TagInput.vue"; import MetadataPreview from './components/MetadataPreview.vue'; +import GraphemeSplitter from "grapheme-splitter"; export const bus = new Vue({name: "EventBus"}); @@ -16,6 +17,7 @@ new Vue({ data: { metadata: null, metadataLoadState: MetadataLoadState.Inactive, + noteLength: 0 }, components: { TagInput, @@ -28,6 +30,16 @@ new Vue({ this.fetchMetadata(linkInput.value); } }, + watch: { + noteLength: (length: number) => { + const counter = document.querySelector( + "#note-character-counter" + ); + if (counter) { + counter.innerText = `残り ${500 - length} 文字`; + } + } + }, methods: { // オカズリンクの変更時 onChangeLink(event: Event) { @@ -43,6 +55,14 @@ new Vue({ this.fetchMetadata(url); } }, + onChangeNote(event: Event) { + if (event.target instanceof HTMLTextAreaElement) { + const splitter = new GraphemeSplitter(); + this.noteLength = splitter.splitGraphemes( + event.target.value + ).length; + } + }, // メタデータの取得 fetchMetadata(url: string) { this.metadataLoadState = MetadataLoadState.Loading; diff --git a/resources/views/ejaculation/checkin.blade.php b/resources/views/ejaculation/checkin.blade.php index e528674..12d4cb2 100644 --- a/resources/views/ejaculation/checkin.blade.php +++ b/resources/views/ejaculation/checkin.blade.php @@ -67,8 +67,8 @@
- - + + 最大 500 文字 @if ($errors->has('note')) diff --git a/resources/views/ejaculation/edit.blade.php b/resources/views/ejaculation/edit.blade.php index ffdbd45..8905934 100644 --- a/resources/views/ejaculation/edit.blade.php +++ b/resources/views/ejaculation/edit.blade.php @@ -68,8 +68,8 @@
- - + + 最大 500 文字 @if ($errors->has('note')) diff --git a/tsconfig.json b/tsconfig.json index d2d1b2c..48e4926 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,9 +5,8 @@ "module": "es2015", "moduleResolution": "node", "strict": true, - "experimentalDecorators": true + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true }, - "include": [ - "resources/assets/js/**/*" - ] -} \ No newline at end of file + "include": ["resources/assets/js/**/*"] +} diff --git a/yarn.lock b/yarn.lock index 4018e62..cdbb620 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3357,6 +3357,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"