@@ -26,6 +26,12 @@ const mergeStyleAllowedCount = ref(0);
2626const showMergeStyleMenu = ref (false );
2727const showActionForm = ref (false );
2828
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+
2935const mergeButtonStyleClass = computed (() => {
3036 if (mergeForm .value .allOverridableChecksOk ) return ' primary' ;
3137 return autoMergeWhenSucceed .value ? ' primary' : ' red' ;
@@ -76,6 +82,22 @@ function switchMergeStyle(name: string, autoMerge = false) {
7682function clearMergeMessage() {
7783 mergeMessageFieldValue .value = mergeForm .value .defaultMergeMessage ;
7884}
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+
79101 </script >
80102
81103<template >
@@ -105,7 +127,22 @@ function clearMergeMessage() {
105127 <input type =" text" name =" merge_title_field" v-model =" mergeTitleFieldValue" >
106128 </div >
107129 <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 >
109146 <template v-if =" mergeMessageFieldValue !== mergeForm .defaultMergeMessage " >
110147 <button @click.prevent =" clearMergeMessage" class =" btn tw-mt-1 tw-p-1 interact-fg" :data-tooltip-content =" mergeForm.textClearMergeMessageHint" >
111148 {{ mergeForm.textClearMergeMessage }}
0 commit comments