11import * as path from "path" ;
22import { commands , Uri , ViewColumn , WebviewPanel , window } from "vscode" ;
3+ import { Model } from "./model" ;
34
45export function noChangesToCommit ( ) {
56 return window . showInformationMessage ( "There are no changes to commit." ) ;
@@ -77,12 +78,15 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
7778 ${ beforeForm }
7879 <form>
7980 <fieldset>
81+ <div class="float-right">
82+ <a href="#" id="pickCommitMessage">Pick a previous commit message</a>
83+ </div>
8084 <label for="message">Commit message</label>
81- <textarea id="message" rows="5 " placeholder="Message (press Ctrl+Enter to commit)"></textarea>
82- <button id="commit" class="button-primary">Commit</button>
83- <div class="float-right">
84- <button id="cancel" class="button button-outline">Cancel</button>
85- </div>
85+ <textarea id="message" rows="3 " placeholder="Message (press Ctrl+Enter to commit)"></textarea>
86+ <button id="commit" class="button-primary">Commit</button>
87+ <div class="float-right">
88+ <button id="cancel" class="button button-outline">Cancel</button>
89+ </div>
8690 </fieldset>
8791 </form>
8892 </section>
@@ -92,6 +96,7 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
9296 const txtMessage = document.getElementById("message");
9397 const btnCommit = document.getElementById("commit");
9498 const btnCancel = document.getElementById("cancel");
99+ const linkPickCommitMessage = document.getElementById("pickCommitMessage");
95100
96101 // load current message
97102 txtMessage.value = ${ JSON . stringify ( message ) } ;
@@ -116,11 +121,34 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
116121 }
117122 });
118123
124+ // Auto resize the height of message
125+ txtMessage.addEventListener("input", function(e) {
126+ txtMessage.style.height = "auto";
127+ txtMessage.style.height = (txtMessage.scrollHeight) + "px";
128+ });
129+
119130 window.addEventListener("load", function() {
120131 setTimeout(() => {
121132 txtMessage.focus();
122133 }, 1000);
123134 });
135+
136+ linkPickCommitMessage.addEventListener("click", function() {
137+ vscode.postMessage({
138+ command: "pickCommitMessage"
139+ });
140+ });
141+
142+ // Message from VSCode
143+ window.addEventListener("message", function(event) {
144+ const message = event.data;
145+ switch (message.command) {
146+ case "setMessage":
147+ txtMessage.value = message.message;
148+ txtMessage.dispatchEvent(new Event("input"));
149+ break;
150+ }
151+ });
124152 </script>
125153</body>
126154</html>` ;
@@ -132,13 +160,33 @@ async function showCommitInput(message?: string, filePaths?: string[]) {
132160 resolve ( undefined ) ;
133161 } ) ;
134162
163+ const pickCommitMessage = async ( ) => {
164+ let repository ;
165+
166+ if ( filePaths && filePaths [ 0 ] ) {
167+ const model = ( await commands . executeCommand ( "svn.getModel" , "" ) ) as Model ;
168+ repository = await model . getRepositoryFromUri ( Uri . file ( filePaths [ 0 ] ) ) ;
169+ }
170+
171+ const message = await commands . executeCommand ( "svn.pickCommitMessage" , repository ) ;
172+ if ( message !== undefined ) {
173+ panel . webview . postMessage ( {
174+ command : "setMessage" ,
175+ message
176+ } ) ;
177+ }
178+ } ;
179+
135180 // On button click
136181 panel . webview . onDidReceiveMessage ( message => {
137182 switch ( message . command ) {
138183 case "commit" :
139184 resolve ( message . message ) ;
140185 panel . dispose ( ) ;
141186 break ;
187+ case "pickCommitMessage" :
188+ pickCommitMessage ( ) ;
189+ break ;
142190 default :
143191 resolve ( undefined ) ;
144192 panel . dispose ( ) ;
0 commit comments