@@ -26,6 +26,12 @@ const mergeStyleAllowedCount = ref(0);
26
26
const showMergeStyleMenu = ref (false );
27
27
const showActionForm = ref (false );
28
28
29
+ const mergeMessageTextarea = ref <HTMLTextAreaElement | null >(null );
30
+ const cursorLine = ref (1 );
31
+ const cursorColumn = ref (1 );
32
+ const wordCount = ref (1 );
33
+ const lineCount = ref (1 );
34
+
29
35
const mergeButtonStyleClass = computed (() => {
30
36
if (mergeForm .value .allOverridableChecksOk ) return ' primary' ;
31
37
return autoMergeWhenSucceed .value ? ' primary' : ' red' ;
@@ -76,6 +82,22 @@ function switchMergeStyle(name: string, autoMerge = false) {
76
82
function clearMergeMessage() {
77
83
mergeMessageFieldValue .value = mergeForm .value .defaultMergeMessage ;
78
84
}
85
+
86
+ function updateCursorPosition() {
87
+ const textarea = mergeMessageTextarea .value ;
88
+ if (! textarea ) return ;
89
+
90
+ const pos = textarea .selectionStart ?? 0 ;
91
+ const value = textarea .value ;
92
+
93
+ const lines = value .substring (0 , pos ).split (' \n ' );
94
+ cursorLine .value = lines .length ;
95
+ cursorColumn .value = lines [lines .length - 1 ].length + 1 ;
96
+
97
+ lineCount .value = textarea .value .split (' \n ' ).length ;
98
+ wordCount .value = textarea .value .trim ().split (/ \s + / ).filter (Boolean ).length ;
99
+ }
100
+
79
101
</script >
80
102
81
103
<template >
@@ -105,7 +127,22 @@ function clearMergeMessage() {
105
127
<input type =" text" name =" merge_title_field" v-model =" mergeTitleFieldValue" >
106
128
</div >
107
129
<div class =" field" >
108
- <textarea name =" merge_message_field" rows =" 5" :placeholder =" mergeForm.mergeMessageFieldPlaceHolder" v-model =" mergeMessageFieldValue" />
130
+ <textarea
131
+ ref =" mergeMessageTextarea"
132
+ name =" merge_message_field"
133
+ rows =" 5"
134
+ :placeholder =" mergeForm.mergeMessageFieldPlaceHolder"
135
+ v-model =" mergeMessageFieldValue"
136
+ @click =" updateCursorPosition"
137
+ @keyup =" updateCursorPosition"
138
+ @input =" updateCursorPosition"
139
+ />
140
+ <div class =" editor-statusbar" >
141
+ <span class =" autosave" ></span >
142
+ <span class =" lines" >{{ lineCount }}</span >
143
+ <span class =" words" >{{ wordCount }}</span >
144
+ <span class =" cursor" >{{ cursorLine }}:{{ cursorColumn }}</span >
145
+ </div >
109
146
<template v-if =" mergeMessageFieldValue !== mergeForm .defaultMergeMessage " >
110
147
<button @click.prevent =" clearMergeMessage" class =" btn tw-mt-1 tw-p-1 interact-fg" :data-tooltip-content =" mergeForm.textClearMergeMessageHint" >
111
148
{{ mergeForm.textClearMergeMessage }}
0 commit comments