OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 this._contentType = contentType; | 49 this._contentType = contentType; |
50 /** @type {?function(?string)} */ | 50 /** @type {?function(?string)} */ |
51 this._requestContentCallback = null; | 51 this._requestContentCallback = null; |
52 /** @type {?Promise<?string>} */ | 52 /** @type {?Promise<?string>} */ |
53 this._requestContentPromise = null; | 53 this._requestContentPromise = null; |
54 /** @type {!Map<string, !Map<number, !WebInspector.UISourceCode.LineMarker>>
} */ | 54 /** @type {!Map<string, !Map<number, !WebInspector.UISourceCode.LineMarker>>
} */ |
55 this._lineDecorations = new Map(); | 55 this._lineDecorations = new Map(); |
56 | 56 |
57 /** @type {!Array.<!WebInspector.Revision>} */ | 57 /** @type {!Array.<!WebInspector.Revision>} */ |
58 this.history = []; | 58 this.history = []; |
59 this._hasUnsavedCommittedChanges = false; | |
60 | 59 |
61 /** @type {!Array<!WebInspector.UISourceCode.Message>} */ | 60 /** @type {!Array<!WebInspector.UISourceCode.Message>} */ |
62 this._messages = []; | 61 this._messages = []; |
63 } | 62 } |
64 | 63 |
65 /** @enum {symbol} */ | 64 /** @enum {symbol} */ |
66 WebInspector.UISourceCode.Events = { | 65 WebInspector.UISourceCode.Events = { |
67 WorkingCopyChanged: Symbol("WorkingCopyChanged"), | 66 WorkingCopyChanged: Symbol("WorkingCopyChanged"), |
68 WorkingCopyCommitted: Symbol("WorkingCopyCommitted"), | 67 WorkingCopyCommitted: Symbol("WorkingCopyCommitted"), |
69 TitleChanged: Symbol("TitleChanged"), | 68 TitleChanged: Symbol("TitleChanged"), |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 this._project.requestFileContent(this, contentLoaded.bind(this)); | 284 this._project.requestFileContent(this, contentLoaded.bind(this)); |
286 | 285 |
287 /** | 286 /** |
288 * @param {?string} updatedContent | 287 * @param {?string} updatedContent |
289 * @this {WebInspector.UISourceCode} | 288 * @this {WebInspector.UISourceCode} |
290 */ | 289 */ |
291 function contentLoaded(updatedContent) | 290 function contentLoaded(updatedContent) |
292 { | 291 { |
293 if (updatedContent === null) { | 292 if (updatedContent === null) { |
294 var workingCopy = this.workingCopy(); | 293 var workingCopy = this.workingCopy(); |
295 this._contentCommitted("", true, false); | 294 this._contentCommitted("", false); |
296 this.setWorkingCopy(workingCopy); | 295 this.setWorkingCopy(workingCopy); |
297 this._terminateContentCheck(); | 296 this._terminateContentCheck(); |
298 return; | 297 return; |
299 } | 298 } |
300 if (typeof this._lastAcceptedContent === "string" && this._lastAccep
tedContent === updatedContent) { | 299 if (typeof this._lastAcceptedContent === "string" && this._lastAccep
tedContent === updatedContent) { |
301 this._terminateContentCheck(); | 300 this._terminateContentCheck(); |
302 return; | 301 return; |
303 } | 302 } |
304 | 303 |
305 if (this._content === updatedContent) { | 304 if (this._content === updatedContent) { |
306 delete this._lastAcceptedContent; | 305 delete this._lastAcceptedContent; |
307 this._terminateContentCheck(); | 306 this._terminateContentCheck(); |
308 return; | 307 return; |
309 } | 308 } |
310 | 309 |
311 if (!this.isDirty() || this._workingCopy === updatedContent) { | 310 if (!this.isDirty() || this._workingCopy === updatedContent) { |
312 this._contentCommitted(updatedContent, true, false); | 311 this._contentCommitted(updatedContent, false); |
313 this._terminateContentCheck(); | 312 this._terminateContentCheck(); |
314 return; | 313 return; |
315 } | 314 } |
316 | 315 |
317 var shouldUpdate = window.confirm(WebInspector.UIString("This file w
as changed externally. Would you like to reload it?")); | 316 var shouldUpdate = window.confirm(WebInspector.UIString("This file w
as changed externally. Would you like to reload it?")); |
318 if (shouldUpdate) | 317 if (shouldUpdate) |
319 this._contentCommitted(updatedContent, true, false); | 318 this._contentCommitted(updatedContent, false); |
320 else | 319 else |
321 this._lastAcceptedContent = updatedContent; | 320 this._lastAcceptedContent = updatedContent; |
322 this._terminateContentCheck(); | 321 this._terminateContentCheck(); |
323 } | 322 } |
324 }, | 323 }, |
325 | 324 |
326 forceLoadOnCheckContent: function() | 325 forceLoadOnCheckContent: function() |
327 { | 326 { |
328 this._forceLoadOnCheckContent = true; | 327 this._forceLoadOnCheckContent = true; |
329 }, | 328 }, |
330 | 329 |
331 /** | 330 /** |
332 * @return {!Promise<?string>} | 331 * @return {!Promise<?string>} |
333 */ | 332 */ |
334 requestOriginalContent: function() | 333 requestOriginalContent: function() |
335 { | 334 { |
336 var callback; | 335 var callback; |
337 var promise = new Promise(fulfill => callback = fulfill); | 336 var promise = new Promise(fulfill => callback = fulfill); |
338 this._project.requestFileContent(this, callback); | 337 this._project.requestFileContent(this, callback); |
339 return promise; | 338 return promise; |
340 }, | 339 }, |
341 | 340 |
342 /** | 341 /** |
343 * @param {string} content | 342 * @param {string} content |
344 */ | 343 */ |
345 _commitContent: function(content) | 344 _commitContent: function(content) |
346 { | 345 { |
347 var wasPersisted = false; | |
348 if (this._project.canSetFileContent()) { | 346 if (this._project.canSetFileContent()) { |
349 this._project.setFileContent(this, content, function() { }); | 347 this._project.setFileContent(this, content, function() { }); |
350 wasPersisted = true; | |
351 } else if (this._project.workspace().hasResourceContentTrackingExtension
s()) { | |
352 wasPersisted = true; | |
353 } else if (this._url && WebInspector.fileManager.isURLSaved(this._url))
{ | 348 } else if (this._url && WebInspector.fileManager.isURLSaved(this._url))
{ |
354 WebInspector.fileManager.save(this._url, content, false, function()
{ }); | 349 WebInspector.fileManager.save(this._url, content, false, function()
{ }); |
355 WebInspector.fileManager.close(this._url); | 350 WebInspector.fileManager.close(this._url); |
356 wasPersisted = true; | |
357 } | 351 } |
358 this._contentCommitted(content, wasPersisted, true); | 352 this._contentCommitted(content, true); |
359 }, | 353 }, |
360 | 354 |
361 /** | 355 /** |
362 * @param {string} content | 356 * @param {string} content |
363 * @param {boolean} wasPersisted | |
364 * @param {boolean} committedByUser | 357 * @param {boolean} committedByUser |
365 */ | 358 */ |
366 _contentCommitted: function(content, wasPersisted, committedByUser) | 359 _contentCommitted: function(content, committedByUser) |
367 { | 360 { |
368 delete this._lastAcceptedContent; | 361 delete this._lastAcceptedContent; |
369 this._content = content; | 362 this._content = content; |
370 this._contentLoaded = true; | 363 this._contentLoaded = true; |
371 | 364 |
372 var lastRevision = this.history.length ? this.history[this.history.lengt
h - 1] : null; | 365 var lastRevision = this.history.length ? this.history[this.history.lengt
h - 1] : null; |
373 if (!lastRevision || lastRevision._content !== this._content) { | 366 if (!lastRevision || lastRevision._content !== this._content) { |
374 var revision = new WebInspector.Revision(this, this._content, new Da
te()); | 367 var revision = new WebInspector.Revision(this, this._content, new Da
te()); |
375 this.history.push(revision); | 368 this.history.push(revision); |
376 } | 369 } |
377 | 370 |
378 this._innerResetWorkingCopy(); | 371 this._innerResetWorkingCopy(); |
379 this._hasUnsavedCommittedChanges = !wasPersisted; | 372 this.dispatchEventToListeners(WebInspector.UISourceCode.Events.WorkingCo
pyCommitted, { content: content }); |
380 this.dispatchEventToListeners(WebInspector.UISourceCode.Events.WorkingCo
pyCommitted); | |
381 this._project.workspace().dispatchEventToListeners(WebInspector.Workspac
e.Events.WorkingCopyCommitted, { uiSourceCode: this, content: content }); | 373 this._project.workspace().dispatchEventToListeners(WebInspector.Workspac
e.Events.WorkingCopyCommitted, { uiSourceCode: this, content: content }); |
382 if (committedByUser) | 374 if (committedByUser) |
383 this._project.workspace().dispatchEventToListeners(WebInspector.Work
space.Events.WorkingCopyCommittedByUser, { uiSourceCode: this, content: content
}); | 375 this._project.workspace().dispatchEventToListeners(WebInspector.Work
space.Events.WorkingCopyCommittedByUser, { uiSourceCode: this, content: content
}); |
384 }, | 376 }, |
385 | 377 |
386 saveAs: function() | 378 saveAs: function() |
387 { | 379 { |
388 WebInspector.fileManager.save(this._url, this.workingCopy(), true, callb
ack.bind(this)); | 380 WebInspector.fileManager.save(this._url, this.workingCopy(), true, callb
ack.bind(this)); |
389 WebInspector.fileManager.close(this._url); | 381 WebInspector.fileManager.close(this._url); |
390 | 382 |
391 /** | 383 /** |
392 * @param {boolean} accepted | 384 * @param {boolean} accepted |
393 * @this {WebInspector.UISourceCode} | 385 * @this {WebInspector.UISourceCode} |
394 */ | 386 */ |
395 function callback(accepted) | 387 function callback(accepted) |
396 { | 388 { |
397 if (accepted) | 389 if (accepted) |
398 this._contentCommitted(this.workingCopy(), true, true); | 390 this._contentCommitted(this.workingCopy(), true); |
399 } | 391 } |
400 }, | 392 }, |
401 | 393 |
402 /** | 394 /** |
403 * @return {boolean} | |
404 */ | |
405 hasUnsavedCommittedChanges: function() | |
406 { | |
407 return this._hasUnsavedCommittedChanges; | |
408 }, | |
409 | |
410 /** | |
411 * @param {string} content | 395 * @param {string} content |
412 */ | 396 */ |
413 addRevision: function(content) | 397 addRevision: function(content) |
414 { | 398 { |
415 this._commitContent(content); | 399 this._commitContent(content); |
416 }, | 400 }, |
417 | 401 |
418 /** | 402 /** |
419 * @return {!Promise} | 403 * @return {!Promise} |
420 */ | 404 */ |
(...skipping 551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 }, | 956 }, |
973 | 957 |
974 /** | 958 /** |
975 * @return {*} | 959 * @return {*} |
976 */ | 960 */ |
977 data: function() | 961 data: function() |
978 { | 962 { |
979 return this._data; | 963 return this._data; |
980 } | 964 } |
981 } | 965 } |
OLD | NEW |