-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
スマホブラウザ版の UI を改良 #982
スマホブラウザ版の UI を改良 #982
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
@@ -298,6 +298,8 @@ | |||||||||
|
||||||||||
export type ChangePositionHandler = () => void; | ||||||||||
export type UpdateTreeHandler = () => void; | ||||||||||
export type UpdateCommentHandler = () => void; | ||||||||||
export type UpdateBookmarkHandler = () => void; | ||||||||||
export type UpdateCustomDataHandler = () => void; | ||||||||||
export type BackupHandler = () => BackupOptions | null | void; | ||||||||||
|
||||||||||
|
@@ -307,6 +309,8 @@ | |||||||||
private _sourceURL?: string; | ||||||||||
private changePositionHandler: ChangePositionHandler | null = null; | ||||||||||
private updateTreeHandler: UpdateTreeHandler | null = null; | ||||||||||
private updateCommentHandler: UpdateCommentHandler | null = null; | ||||||||||
private updateBookmarkHandler: UpdateBookmarkHandler | null = null; | ||||||||||
Comment on lines
+312
to
+313
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using The new handler properties follow the existing pattern, but there's an opportunity to improve type safety. - private updateCommentHandler: UpdateCommentHandler | null = null;
- private updateBookmarkHandler: UpdateBookmarkHandler | null = null;
+ private updateCommentHandler: UpdateCommentHandler | undefined = undefined;
+ private updateBookmarkHandler: UpdateBookmarkHandler | undefined = undefined; This aligns with TypeScript best practices and the static analysis suggestion about avoiding confusing void types in unions. 📝 Committable suggestion
Suggested change
🧰 Tools🪛 Biome
|
||||||||||
private updateCustomDataHandler: UpdateCustomDataHandler | null = null; | ||||||||||
private backupHandler: BackupHandler | null = null; | ||||||||||
|
||||||||||
|
@@ -627,11 +631,13 @@ | |||||||||
updateComment(comment: string): void { | ||||||||||
this._record.current.comment = comment; | ||||||||||
this._unsaved = true; | ||||||||||
this.onUpdateComment(); | ||||||||||
} | ||||||||||
|
||||||||||
updateBookmark(bookmark: string): void { | ||||||||||
this._record.current.bookmark = bookmark; | ||||||||||
this._unsaved = true; | ||||||||||
this.onUpdateBookmark(); | ||||||||||
} | ||||||||||
|
||||||||||
appendComment(add: string, behavior: CommentBehavior): void { | ||||||||||
|
@@ -654,6 +660,7 @@ | |||||||||
break; | ||||||||||
} | ||||||||||
this._unsaved = true; | ||||||||||
this.onUpdateComment(); | ||||||||||
} | ||||||||||
|
||||||||||
appendSearchComment( | ||||||||||
|
@@ -788,20 +795,28 @@ | |||||||||
this._unsaved = true; | ||||||||||
} | ||||||||||
|
||||||||||
on(event: "changePosition", handler: ChangePositionHandler): this; | ||||||||||
on(event: "changePosition", handler: () => void): this; | ||||||||||
on(event: "updateTree", handler: () => void): this; | ||||||||||
on(event: "updateCustomData", handler: UpdateCustomDataHandler): this; | ||||||||||
on(event: "updateComment", handler: () => void): this; | ||||||||||
on(event: "updateCustomData", handler: () => void): this; | ||||||||||
on(event: "updateBookmark", handler: () => void): this; | ||||||||||
on(event: "backup", handler: BackupHandler): this; | ||||||||||
on(event: string, handler: unknown): this { | ||||||||||
switch (event) { | ||||||||||
case "changePosition": | ||||||||||
this.changePositionHandler = handler as ChangePositionHandler; | ||||||||||
this.changePositionHandler = handler as () => void; | ||||||||||
break; | ||||||||||
case "updateTree": | ||||||||||
this.updateTreeHandler = handler as UpdateTreeHandler; | ||||||||||
this.updateTreeHandler = handler as () => void; | ||||||||||
break; | ||||||||||
case "updateComment": | ||||||||||
this.updateCommentHandler = handler as () => void; | ||||||||||
break; | ||||||||||
case "updateBookmark": | ||||||||||
this.updateBookmarkHandler = handler as () => void; | ||||||||||
break; | ||||||||||
case "updateCustomData": | ||||||||||
this.updateCustomDataHandler = handler as UpdateCustomDataHandler; | ||||||||||
this.updateCustomDataHandler = handler as () => void; | ||||||||||
break; | ||||||||||
case "backup": | ||||||||||
this.backupHandler = handler as BackupHandler; | ||||||||||
|
@@ -822,6 +837,18 @@ | |||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
private onUpdateComment() { | ||||||||||
if (this.updateCommentHandler) { | ||||||||||
this.updateCommentHandler(); | ||||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
private onUpdateBookmark() { | ||||||||||
if (this.updateBookmarkHandler) { | ||||||||||
this.updateBookmarkHandler(); | ||||||||||
} | ||||||||||
} | ||||||||||
|
||||||||||
private onUpdateCustomData() { | ||||||||||
if (this.updateCustomDataHandler) { | ||||||||||
this.updateCustomDataHandler(); | ||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,43 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="full row controls"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.changePly(0)"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.FIRST" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.goBack()"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.BACK" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.goForward()"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.NEXT" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.changePly(Number.MAX_SAFE_INTEGER)"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.LAST" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.removeCurrentMove()"><Icon :icon="IconType.DELETE" /></button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="isMobileMenuVisible = true">Menu</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+4
to
+17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add accessibility attributes to navigation buttons. The buttons lack proper accessibility attributes which could make them difficult to use with screen readers. Apply these improvements: - <button @click="store.changePly(0)">
+ <button
+ @click="store.changePly(0)"
+ aria-label="Go to start position"
+ role="button">
<Icon :icon="IconType.FIRST" />
</button>
- <button @click="store.goBack()">
+ <button
+ @click="store.goBack()"
+ aria-label="Go to previous move"
+ role="button">
<Icon :icon="IconType.BACK" />
</button>
- <button @click="store.goForward()">
+ <button
+ @click="store.goForward()"
+ aria-label="Go to next move"
+ role="button">
<Icon :icon="IconType.NEXT" />
</button>
- <button @click="store.changePly(Number.MAX_SAFE_INTEGER)">
+ <button
+ @click="store.changePly(Number.MAX_SAFE_INTEGER)"
+ aria-label="Go to end position"
+ role="button">
<Icon :icon="IconType.LAST" />
</button>
- <button @click="store.removeCurrentMove()"><Icon :icon="IconType.DELETE" /></button>
+ <button
+ @click="store.removeCurrentMove()"
+ aria-label="Remove current move"
+ role="button">
+ <Icon :icon="IconType.DELETE" />
+ </button>
- <button @click="isMobileMenuVisible = true">Menu</button>
+ <button
+ @click="isMobileMenuVisible = true"
+ aria-label="Open menu"
+ role="button">
+ {{ $t('menu.title') }}
+ </button> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+3
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance mobile touch interaction and semantic structure. The controls section could benefit from improved mobile interaction and semantic structure:
- <div class="full row controls">
+ <nav class="full row controls" role="navigation" aria-label="Game controls">
- <button @click="store.changePly(0)">
+ <button
+ @click="store.changePly(0)"
+ @touchstart.prevent="store.changePly(0)">
<Icon :icon="IconType.FIRST" />
</button>
- <button @click="store.goBack()">
+ <button
+ @click="store.goBack()"
+ @touchstart.prevent="store.goBack()">
<Icon :icon="IconType.BACK" />
</button>
<!-- Similar changes for other buttons -->
- </div>
+ </nav>
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<FileMenu v-if="isMobileMenuVisible" @close="isMobileMenuVisible = false" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+17
to
+19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance menu button and dialog implementation. The menu button and dialog implementation could be improved for better mobile UX and internationalization: - <button @click="isMobileMenuVisible = true">Menu</button>
+ <button
+ @click="isMobileMenuVisible = true"
+ class="menu-button">
+ {{ $t('menu.title') }}
+ </button>
- <FileMenu v-if="isMobileMenuVisible" @close="isMobileMenuVisible = false" />
+ <FileMenu
+ v-if="isMobileMenuVisible"
+ @close="isMobileMenuVisible = false"
+ class="mobile-menu" /> Add these styles: .menu-button {
font-weight: 500;
}
.menu-button:active {
background-color: rgba(0, 0, 0, 0.1);
}
.mobile-menu {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1000;
} |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<script setup lang="ts"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { IconType } from "@/renderer/assets/icons"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useStore } from "@/renderer/store"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import Icon from "@/renderer/view/primitive/Icon.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import FileMenu from "@/renderer/view/menu/FileMenu.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { ref } from "vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const store = useStore(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const isMobileMenuVisible = ref(false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</script> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+23
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider adding cleanup for menu visibility state. The menu visibility state should be reset when the component is unmounted to prevent potential issues if the component is re-mounted. Add cleanup using import { IconType } from "@/renderer/assets/icons";
import { useStore } from "@/renderer/store";
import Icon from "@/renderer/view/primitive/Icon.vue";
import FileMenu from "@/renderer/view/menu/FileMenu.vue";
-import { ref } from "vue";
+import { ref, onUnmounted } from "vue";
const store = useStore();
const isMobileMenuVisible = ref(false);
+
+onUnmounted(() => {
+ isMobileMenuVisible.value = false;
+}); 📝 Committable suggestion
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why? It is internal of script-setup tag. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sunfish-shogi, thank you for the clarification. You're absolutely right; since (_/) ✏️ Learnings added
Comment on lines
+23
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance type safety and store usage. Consider improving type safety and store usage patterns: <script setup lang="ts">
import { IconType } from "@/renderer/assets/icons";
-import { useStore } from "@/renderer/store";
+import type { Store } from "@/renderer/store";
+import { useStore } from "@/renderer/store";
import Icon from "@/renderer/view/primitive/Icon.vue";
import FileMenu from "@/renderer/view/menu/FileMenu.vue";
import { ref } from "vue";
-const store = useStore();
+const store: Store = useStore();
const isMobileMenuVisible = ref<boolean>(false);
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<style scoped> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.controls button { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
font-size: 100%; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
width: 100%; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height: 100%; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.controls button .icon { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height: 68%; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</style> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+34
to
+43
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Enhance mobile-specific styles. The current styles could be improved for better mobile interaction: <style scoped>
.controls button {
font-size: 100%;
width: 100%;
height: 100%;
+ min-height: 44px; /* Ensure minimum tap target size */
+ touch-action: manipulation; /* Disable double-tap zoom */
+ transition: transform 0.1s ease;
}
+
+.controls button:active {
+ transform: scale(0.95);
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
.controls button .icon {
height: 68%;
+ pointer-events: none; /* Prevent touch event issues on icons */
}
</style> 📝 Committable suggestion
Suggested change
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -4,67 +4,84 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="column"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<BoardPane | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:max-size="boardPaneMaxSize" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:layout-type="BoardLayoutType.PORTRAIT" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:layout-type="boardLayoutType" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@resize="onBoardPaneResize" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div class="row controls" :style="{ height: `${controlPaneHeight}px` }"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.changePly(0)"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.FIRST" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.goBack()"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.BACK" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.goForward()"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.NEXT" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.changePly(Number.MAX_SAFE_INTEGER)"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Icon :icon="IconType.LAST" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="store.removeCurrentMove()"><Icon :icon="IconType.DELETE" /></button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<button @click="isMobileMenuVisible = true">Menu</button> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordPane | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<MobileControls | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="showRecordViewOnBottom" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="auto" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ width: `${windowSize.width}px`, height: `${bottomRecordViewSize.height}px` }" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ height: `${controlPaneHeight}px` }" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordPane | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="showRecordViewOnBottom && !commentEditorMode" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
width: `${windowSize.width}px`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height: `${bottomRecordViewSize.height - toggleHeight}px`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+16
to
+19
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure non-negative height in Subtracting Apply this diff to fix the issue: 16 :style="{
17 width: `${windowSize.width}px`,
-18 height: `${bottomRecordViewSize.height - toggleHeight}px`,
+18 height: `${Math.max(0, bottomRecordViewSize.height - toggleHeight)}px`,
19 }" 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-top-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-bottom-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-branches="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-elapsed-time="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-comment="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordComment | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="showRecordViewOnBottom && commentEditorMode" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
width: `${windowSize.width}px`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height: `${bottomRecordViewSize.height - toggleHeight}px`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+28
to
+31
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure non-negative height in Similar to Apply this diff to fix the issue: 28 :style="{
29 width: `${windowSize.width}px`,
-30 height: `${bottomRecordViewSize.height - toggleHeight}px`,
+30 height: `${Math.max(0, bottomRecordViewSize.height - toggleHeight)}px`,
31 }" 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ToggleButton | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
label="コメント編集モード" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:height="toggleHeight" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:value="commentEditorMode" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@change=" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(value) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
commentEditorMode = value; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+33
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update Since Apply this diff to fix the issue: 33 <ToggleButton
34 label="コメント編集モード"
35 :height="toggleHeight"
-36 :value="commentEditorMode"
+36 :value="commentEditorMode.value"
37 @change="
38 (value) => {
-39 commentEditorMode = value;
+39 commentEditorMode.value = value;
40 }
41 " 📝 Committable suggestion
Suggested change
Comment on lines
+35
to
+41
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix ref access in ToggleButton component. The Apply this diff to fix the ref access: <ToggleButton
label="コメント編集モード"
:height="toggleHeight"
:value="commentEditorMode"
@change="
(value) => {
- commentEditorMode = value;
+ commentEditorMode.value = value;
}
"
/> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="!showRecordViewOnBottom" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
class="column" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ width: `${windowSize.width - boardPaneSize.width}px` }" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<MobileControls :style="{ height: `${controlPaneHeight}px` }" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordPane | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ height: `${(windowSize.height - controlPaneHeight) * 0.6}px` }" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-top-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure non-negative height in The height calculation might result in a negative value if window dimensions are small. Use Apply this diff to fix the issue: -51 :style="{ height: `${(windowSize.height - controlPaneHeight) * 0.6}px` }"
+51 :style="{ height: `${Math.max(0, (windowSize.height - controlPaneHeight) * 0.6)}px` }"
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-bottom-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-elapsed-time="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-comment="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordComment | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:style="{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
'margin-top': '5px', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
height: `${(windowSize.height - controlPaneHeight) * 0.4 - 5}px`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+59
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure non-negative height in Subtracting values may lead to negative heights. Ensure the height remains non-negative with Apply this diff to fix the issue: 59 'margin-top': '5px',
-60 height: `${(windowSize.height - controlPaneHeight) * 0.4 - 5}px`,
+60 height: `${Math.max(0, (windowSize.height - controlPaneHeight) * 0.4 - 5)}px`, 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<RecordPane | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v-if="showRecordViewOnSide" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-top-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-bottom-control="false" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-elapsed-time="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
:show-comment="true" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
/> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<FileMenu v-if="isMobileMenuVisible" @close="isMobileMenuVisible = false" /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</template> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<script setup lang="ts"> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { RectSize } from "@/common/assets/geometry"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { BoardLayoutType } from "@/common/settings/layout"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { IconType } from "@/renderer/assets/icons"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { Lazy } from "@/renderer/helpers/lazy"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useStore } from "@/renderer/store"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import BoardPane from "@/renderer/view/main/BoardPane.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import RecordPane from "@/renderer/view/main/RecordPane.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import FileMenu from "@/renderer/view/menu/FileMenu.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import Icon from "@/renderer/view/primitive/Icon.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { computed, onMounted, onUnmounted, reactive, ref } from "vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import MobileControls from "./MobileControls.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import ToggleButton from "@/renderer/view/primitive/ToggleButton.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import RecordComment from "@/renderer/view/tab/RecordComment.vue"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const lazyUpdateDelay = 80; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const minRecordViewWidth = 150; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const minRecordViewHeight = 100; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const toggleHeight = 24; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const minRecordViewWidth = 300; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const minRecordViewHeight = 200; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+79
to
+81
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider making toggle height responsive. The Example implementation: -const toggleHeight = 24;
+const toggleHeight = computed(() => Math.min(windowSize.height * 0.03, windowSize.width * 0.06));
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const store = useStore(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const isMobileMenuVisible = ref(false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const windowSize = reactive(new RectSize(window.innerWidth, window.innerHeight)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const commentEditorMode = ref(false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const windowLazyUpdate = new Lazy(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const updateSize = () => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -74,27 +91,36 @@ const updateSize = () => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, lazyUpdateDelay); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const showRecordViewOnBottom = computed(() => windowSize.height >= windowSize.width); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const controlPaneHeight = computed(() => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Math.min(windowSize.height * 0.08, windowSize.width * 0.12), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Math.min(windowSize.height * 0.06, windowSize.width * 0.12), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const boardPaneMaxSize = computed(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const maxSize = new RectSize(windowSize.width, windowSize.height); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (showRecordViewOnBottom.value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxSize.height -= controlPaneHeight.value + minRecordViewHeight; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxSize.width -= minRecordViewWidth; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return maxSize; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const boardLayoutType = computed(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (showRecordViewOnBottom.value) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return windowSize.width < windowSize.height * 0.5 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? BoardLayoutType.PORTRAIT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
: BoardLayoutType.COMPACT; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return windowSize.width < windowSize.height * 1.6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
? BoardLayoutType.PORTRAIT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
: BoardLayoutType.COMPACT; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const boardPaneMaxSize = computed( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
() => new RectSize(windowSize.width, windowSize.height - controlPaneHeight.value), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const boardPaneSize = ref(windowSize); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const onBoardPaneResize = (size: RectSize) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
boardPaneSize.value = size; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const showRecordViewOnSide = computed(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return windowSize.width >= boardPaneSize.value.width + minRecordViewWidth; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const showRecordViewOnBottom = computed(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
!showRecordViewOnSide.value && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
windowSize.height >= boardPaneSize.value.height + minRecordViewHeight | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const bottomRecordViewSize = computed(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return new RectSize( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
windowSize.width, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider adding error handling and debouncing for save operations.
The new event handlers for comments and bookmarks immediately trigger save operations without error handling. This could lead to silent failures and performance issues with rapid updates.
Consider these improvements:
Don't forget to import the debounce utility: