| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 */ | 7 */ |
| 8 WebInspector.InplaceEditor = function() | 8 WebInspector.InplaceEditor = function() |
| 9 { | 9 { |
| 10 } | 10 } |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 } | 162 } |
| 163 | 163 |
| 164 /** @this {Element} */ | 164 /** @this {Element} */ |
| 165 function editingCommitted() | 165 function editingCommitted() |
| 166 { | 166 { |
| 167 cleanUpAfterEditing(); | 167 cleanUpAfterEditing(); |
| 168 | 168 |
| 169 committedCallback(this, self.editorContent(editingContext), editingC
ontext.oldText, context, moveDirection); | 169 committedCallback(this, self.editorContent(editingContext), editingC
ontext.oldText, context, moveDirection); |
| 170 } | 170 } |
| 171 | 171 |
| 172 /** | |
| 173 * @param {!Event} event | |
| 174 * @return {string} | |
| 175 */ | |
| 176 function defaultFinishHandler(event) | 172 function defaultFinishHandler(event) |
| 177 { | 173 { |
| 178 var isMetaOrCtrl = WebInspector.isMac() ? | 174 var isMetaOrCtrl = WebInspector.isMac() ? |
| 179 event.metaKey && !event.shiftKey && !event.ctrlKey && !event.alt
Key : | 175 event.metaKey && !event.shiftKey && !event.ctrlKey && !event.alt
Key : |
| 180 event.ctrlKey && !event.shiftKey && !event.metaKey && !event.alt
Key; | 176 event.ctrlKey && !event.shiftKey && !event.metaKey && !event.alt
Key; |
| 181 if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !isMultiline
|| isMetaOrCtrl)) | 177 if (isEnterKey(event) && (event.isMetaOrCtrlForTest || !isMultiline
|| isMetaOrCtrl)) |
| 182 return "commit"; | 178 return "commit"; |
| 183 else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.co
de || event.keyIdentifier === "U+001B") | 179 else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.co
de || event.keyIdentifier === "U+001B") |
| 184 return "cancel"; | 180 return "cancel"; |
| 185 else if (!isMultiline && event.keyIdentifier === "U+0009") // Tab ke
y | 181 else if (!isMultiline && event.keyIdentifier === "U+0009") // Tab ke
y |
| 186 return "move-" + (event.shiftKey ? "backward" : "forward"); | 182 return "move-" + (event.shiftKey ? "backward" : "forward"); |
| 187 return ""; | |
| 188 } | 183 } |
| 189 | 184 |
| 190 function handleEditingResult(result, event) | 185 function handleEditingResult(result, event) |
| 191 { | 186 { |
| 192 if (result === "commit") { | 187 if (result === "commit") { |
| 193 editingCommitted.call(element); | 188 editingCommitted.call(element); |
| 194 event.consume(true); | 189 event.consume(true); |
| 195 } else if (result === "cancel") { | 190 } else if (result === "cancel") { |
| 196 editingCancelled.call(element); | 191 editingCancelled.call(element); |
| 197 event.consume(true); | 192 event.consume(true); |
| 198 } else if (result && result.startsWith("move-")) { | 193 } else if (result && result.startsWith("move-")) { |
| 199 moveDirection = result.substring(5); | 194 moveDirection = result.substring(5); |
| 200 if (event.keyIdentifier !== "U+0009") | 195 if (event.keyIdentifier !== "U+0009") |
| 201 blurEventListener(); | 196 blurEventListener(); |
| 202 } | 197 } |
| 203 } | 198 } |
| 204 | 199 |
| 205 /** | |
| 206 * @param {!Event} event | |
| 207 */ | |
| 208 function pasteEventListener(event) | 200 function pasteEventListener(event) |
| 209 { | 201 { |
| 210 var result = pasteCallback(event); | 202 var result = pasteCallback(event); |
| 211 handleEditingResult(result, event); | 203 handleEditingResult(result, event); |
| 212 } | 204 } |
| 213 | 205 |
| 214 /** | |
| 215 * @param {!Event} event | |
| 216 */ | |
| 217 function keyDownEventListener(event) | 206 function keyDownEventListener(event) |
| 218 { | 207 { |
| 219 var result = defaultFinishHandler(event); | 208 var handler = config.customFinishHandler || defaultFinishHandler; |
| 220 if (!result && config.postKeydownFinishHandler) | 209 var result = handler(event); |
| 221 result = config.postKeydownFinishHandler(event); | |
| 222 handleEditingResult(result, event); | 210 handleEditingResult(result, event); |
| 223 } | 211 } |
| 224 | 212 |
| 225 element.addEventListener("blur", blurEventListener, isMultiline); | 213 element.addEventListener("blur", blurEventListener, isMultiline); |
| 226 element.addEventListener("keydown", keyDownEventListener, true); | 214 element.addEventListener("keydown", keyDownEventListener, true); |
| 227 if (pasteCallback) | 215 if (pasteCallback) |
| 228 element.addEventListener("paste", pasteEventListener, true); | 216 element.addEventListener("paste", pasteEventListener, true); |
| 229 | 217 |
| 230 var handle = { | 218 var handle = { |
| 231 cancel: editingCancelled.bind(element), | 219 cancel: editingCancelled.bind(element), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 246 * @template T | 234 * @template T |
| 247 */ | 235 */ |
| 248 WebInspector.InplaceEditor.Config = function(commitHandler, cancelHandler, conte
xt, blurHandler) | 236 WebInspector.InplaceEditor.Config = function(commitHandler, cancelHandler, conte
xt, blurHandler) |
| 249 { | 237 { |
| 250 this.commitHandler = commitHandler; | 238 this.commitHandler = commitHandler; |
| 251 this.cancelHandler = cancelHandler; | 239 this.cancelHandler = cancelHandler; |
| 252 this.context = context; | 240 this.context = context; |
| 253 this.blurHandler = blurHandler; | 241 this.blurHandler = blurHandler; |
| 254 | 242 |
| 255 /** | 243 /** |
| 256 * @type {function(!Event):string|undefined} | 244 * Handles the "paste" event, return values are the same as those for custom
FinishHandler |
| 245 * @type {function(!Element)|undefined} |
| 257 */ | 246 */ |
| 258 this.pasteHandler; | 247 this.pasteHandler; |
| 259 | 248 |
| 260 /** | 249 /** |
| 250 * Whether the edited element is multiline |
| 261 * @type {boolean|undefined} | 251 * @type {boolean|undefined} |
| 262 */ | 252 */ |
| 263 this.multiline; | 253 this.multiline; |
| 264 | 254 |
| 265 /** | 255 /** |
| 266 * @type {function(!Event):string|undefined} | 256 * Custom finish handler for the editing session (invoked on keydown) |
| 257 * @type {function(!Element,*)|undefined} |
| 267 */ | 258 */ |
| 268 this.postKeydownFinishHandler; | 259 this.customFinishHandler; |
| 269 } | 260 } |
| 270 | 261 |
| 271 WebInspector.InplaceEditor.Config.prototype = { | 262 WebInspector.InplaceEditor.Config.prototype = { |
| 272 setPasteHandler: function(pasteHandler) | 263 setPasteHandler: function(pasteHandler) |
| 273 { | 264 { |
| 274 this.pasteHandler = pasteHandler; | 265 this.pasteHandler = pasteHandler; |
| 275 }, | 266 }, |
| 276 | 267 |
| 277 /** | 268 /** |
| 278 * @param {string} initialValue | 269 * @param {string} initialValue |
| 279 * @param {!Object} mode | 270 * @param {!Object} mode |
| 280 * @param {string} theme | 271 * @param {string} theme |
| 281 * @param {boolean=} lineWrapping | 272 * @param {boolean=} lineWrapping |
| 282 * @param {boolean=} smartIndent | 273 * @param {boolean=} smartIndent |
| 283 */ | 274 */ |
| 284 setMultilineOptions: function(initialValue, mode, theme, lineWrapping, smart
Indent) | 275 setMultilineOptions: function(initialValue, mode, theme, lineWrapping, smart
Indent) |
| 285 { | 276 { |
| 286 this.multiline = true; | 277 this.multiline = true; |
| 287 this.initialValue = initialValue; | 278 this.initialValue = initialValue; |
| 288 this.mode = mode; | 279 this.mode = mode; |
| 289 this.theme = theme; | 280 this.theme = theme; |
| 290 this.lineWrapping = lineWrapping; | 281 this.lineWrapping = lineWrapping; |
| 291 this.smartIndent = smartIndent; | 282 this.smartIndent = smartIndent; |
| 292 }, | 283 }, |
| 293 | 284 |
| 294 /** | 285 setCustomFinishHandler: function(customFinishHandler) |
| 295 * @param {function(!Event):string} postKeydownFinishHandler | |
| 296 */ | |
| 297 setPostKeydownFinishHandler: function(postKeydownFinishHandler) | |
| 298 { | 286 { |
| 299 this.postKeydownFinishHandler = postKeydownFinishHandler; | 287 this.customFinishHandler = customFinishHandler; |
| 300 } | 288 } |
| 301 } | 289 } |
| OLD | NEW |