From e29cd66bbc2b4a395a4bea5dceafe3445f44d8e6 Mon Sep 17 00:00:00 2001 From: Chris Bank Date: Mon, 16 Jan 2012 13:16:20 -0800 Subject: [PATCH 1/5] Add function to suggest untitled document name --- src/FileCommandHandlers.js | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/FileCommandHandlers.js b/src/FileCommandHandlers.js index 4c9b4ebd996..3f8436b3507 100644 --- a/src/FileCommandHandlers.js +++ b/src/FileCommandHandlers.js @@ -196,8 +196,8 @@ define(function(require, exports, module) { // Create the new node. The createNewItem function does all the heavy work // of validating file name, creating the new file and selecting. - // TODO: Use a unique name like Untitled-1, Untitled-2, etc. - return ProjectManager.createNewItem(baseDir, "Untitled.js", false); + var untitledFileName = _getUntitledFileSuggestion(baseDir, "Untitled", ".js"); + return ProjectManager.createNewItem(baseDir, untitledFileName, false); } function handleFileSave() { @@ -331,6 +331,34 @@ define(function(require, exports, module) { return result; } + /** + * @private + * Ensures the suggested file name doesn't already exit. + * @param {string} dir The directory to use + * @param {string} baseFileName The base to start with, "-n" will get appened to make unique + * @param {string} fileExt The file extension + */ + function _getUntitledFileSuggestion( dir, baseFileName, fileExt ) { + var suggestedName = baseFileName + fileExt; + var dirEntry = new NativeFileSystem.DirectoryEntry(dir); + var result = $.Deferred(); + //In unique suggestion isn't found below the user can still just enter their own + for( var i = 1 ; i < 100 ; i++ ) { + dirEntry.getFile( suggestedName, {}, function successCallback(entry){}, function errorCallback(error) { + if( error.code !== FileError.PATH_EXISTS_ERR ) { + //If the file can't be open for read use it as the suggestion. The error is probably because the + //file doesn't exist. Other errors are better handled by the user when they confirm the name + result.resolve(); + } + }); + if( result.isResolved() ) { + return suggestedName; + } + suggestedName = baseFileName + "-" + i + fileExt; + } + return baseFileName + fileExt; + } + // Define public API exports.init = init; }); From bf34d2b663d692bdd83df7773162b1afa969c797 Mon Sep 17 00:00:00 2001 From: Chris Bank Date: Mon, 16 Jan 2012 14:57:11 -0800 Subject: [PATCH 2/5] make async in the project manager --- src/FileCommandHandlers.js | 31 +----------------- src/ProjectManager.js | 64 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 30 deletions(-) diff --git a/src/FileCommandHandlers.js b/src/FileCommandHandlers.js index 3f8436b3507..921be8c05ec 100644 --- a/src/FileCommandHandlers.js +++ b/src/FileCommandHandlers.js @@ -196,8 +196,7 @@ define(function(require, exports, module) { // Create the new node. The createNewItem function does all the heavy work // of validating file name, creating the new file and selecting. - var untitledFileName = _getUntitledFileSuggestion(baseDir, "Untitled", ".js"); - return ProjectManager.createNewItem(baseDir, untitledFileName, false); + return ProjectManager.createNewItem(baseDir, "Untitled.js", false); } function handleFileSave() { @@ -331,34 +330,6 @@ define(function(require, exports, module) { return result; } - /** - * @private - * Ensures the suggested file name doesn't already exit. - * @param {string} dir The directory to use - * @param {string} baseFileName The base to start with, "-n" will get appened to make unique - * @param {string} fileExt The file extension - */ - function _getUntitledFileSuggestion( dir, baseFileName, fileExt ) { - var suggestedName = baseFileName + fileExt; - var dirEntry = new NativeFileSystem.DirectoryEntry(dir); - var result = $.Deferred(); - //In unique suggestion isn't found below the user can still just enter their own - for( var i = 1 ; i < 100 ; i++ ) { - dirEntry.getFile( suggestedName, {}, function successCallback(entry){}, function errorCallback(error) { - if( error.code !== FileError.PATH_EXISTS_ERR ) { - //If the file can't be open for read use it as the suggestion. The error is probably because the - //file doesn't exist. Other errors are better handled by the user when they confirm the name - result.resolve(); - } - }); - if( result.isResolved() ) { - return suggestedName; - } - suggestedName = baseFileName + "-" + i + fileExt; - } - return baseFileName + fileExt; - } - // Define public API exports.init = init; }); diff --git a/src/ProjectManager.js b/src/ProjectManager.js index d50c12a7f48..2e554c559bb 100644 --- a/src/ProjectManager.js +++ b/src/ProjectManager.js @@ -326,7 +326,22 @@ define(function(require, exports, module) { var renameInput = _projectTree.find(".jstree-rename-input"); + var defferedInputupdate; + if( !skipRename ) { + defferedInputupdate = _updateRenameFileSuggestion( selectionEntry, initialName, renameInput ); + } + + renameInput.on("mousedown", function(event) { + if( defferedInputupdate ) { + defferedInputupdate.reject(); + } + }); + renameInput.on("keydown", function(event) { + if( defferedInputupdate ) { + defferedInputupdate.reject(); + } + // Listen for escape key on keydown, so we can remove the node in the create.jstree handler above if (event.keyCode == 27) { escapeKeyPressed = true; @@ -471,6 +486,55 @@ define(function(require, exports, module) { }); }; + /** + * @private + * Updates the rename filename suggestion edit input to a unique filename + * @param {object} dirEntry NativeFileSystem.DirectoryEntry, the directory to name into + * @param {string} fileName The filename to make unique + * @param {object} renameInput The jQuery object for the input value to rename + */ + function _updateRenameFileSuggestion( dirEntry, fileName, renameInput) { + var result = new $.Deferred(); + + var splitStr = fileName.split(".", 2); + var baseFileName = splitStr[0]; + if( !baseFileName ) { + //nothing to do + return result; + } + var fileExt = splitStr[1] || ""; + + result.progress( function attemptNewName( suggestedName, nextIndexToUse ) { + if( nextIndexToUse > 99 ) { + //we've tried this enough + result.reject(); + return; + } + + //check this name + dirEntry.getFile( suggestedName + , {} + , function successCallback(entry){ + //file exists, notify to the next progress + result.notify(baseFileName + "-" + nextIndexToUse + "." + fileExt , nextIndexToUse + 1); + } + , function errorCallback(error) { + //most likely error is FNF, user is better equiped to handle the rest + result.resolve(suggestedName); + } + ); + }); + + result.done( function setSuggestedName( suggestedName ) { + renameInput.val(suggestedName); + }); + + //kick it off + result.notify(fileName, 1); + + return result; + } + // Define public API exports.getProjectRoot = getProjectRoot; exports.openProject = openProject; From 55dfcda84ae0e695917c559c067a6b9fdff6752d Mon Sep 17 00:00:00 2001 From: Chris Bank Date: Mon, 16 Jan 2012 20:44:47 -0800 Subject: [PATCH 3/5] more tweaks --- src/FileCommandHandlers.js | 48 +++++++++++++++++++++++++++- src/ProjectManager.js | 64 -------------------------------------- 2 files changed, 47 insertions(+), 65 deletions(-) diff --git a/src/FileCommandHandlers.js b/src/FileCommandHandlers.js index 921be8c05ec..97a665b8aed 100644 --- a/src/FileCommandHandlers.js +++ b/src/FileCommandHandlers.js @@ -196,7 +196,14 @@ define(function(require, exports, module) { // Create the new node. The createNewItem function does all the heavy work // of validating file name, creating the new file and selecting. - return ProjectManager.createNewItem(baseDir, "Untitled.js", false); + var deferred = _getUntitledFileSuggestion(baseDir, "Untitled", ".js"); + var createWithSuggestedName = function ( suggestedName ) { + ProjectManager.createNewItem(baseDir, suggestedName, false).pipe( deferred.resolve, deferred.reject, deferred.notify ); + }; + + deferred.done( createWithSuggestedName ); + deferred.fail( function createWithDefault() { createWithSuggestedName( "Untitled.js" ); } ); + return deferred; } function handleFileSave() { @@ -330,6 +337,45 @@ define(function(require, exports, module) { return result; } + /** + * @private + * Ensures the suggested file name doesn't already exit. + * @param {string} dir The directory to use + * @param {string} baseFileName The base to start with, "-n" will get appened to make unique + * @param {string} fileExt The file extension + */ + function _getUntitledFileSuggestion( dir, baseFileName, fileExt ) { + var result = new $.Deferred(); + var suggestedName = baseFileName + fileExt; + var dirEntry = new NativeFileSystem.DirectoryEntry(dir); + + result.progress( function attemptNewName( suggestedName, nextIndexToUse ) { + if( nextIndexToUse > 99 ) { + //we've tried this enough + result.reject(); + return; + } + + //check this name + dirEntry.getFile( suggestedName + , {} + , function successCallback(entry){ + //file exists, notify to the next progress + result.notify(baseFileName + "-" + nextIndexToUse + fileExt , nextIndexToUse + 1); + } + , function errorCallback(error) { + //most likely error is FNF, user is better equiped to handle the rest + result.resolve(suggestedName); + } + ); + }); + + //kick it off + result.notify(fileName, 1); + + return result; + } + // Define public API exports.init = init; }); diff --git a/src/ProjectManager.js b/src/ProjectManager.js index 2e554c559bb..d50c12a7f48 100644 --- a/src/ProjectManager.js +++ b/src/ProjectManager.js @@ -326,22 +326,7 @@ define(function(require, exports, module) { var renameInput = _projectTree.find(".jstree-rename-input"); - var defferedInputupdate; - if( !skipRename ) { - defferedInputupdate = _updateRenameFileSuggestion( selectionEntry, initialName, renameInput ); - } - - renameInput.on("mousedown", function(event) { - if( defferedInputupdate ) { - defferedInputupdate.reject(); - } - }); - renameInput.on("keydown", function(event) { - if( defferedInputupdate ) { - defferedInputupdate.reject(); - } - // Listen for escape key on keydown, so we can remove the node in the create.jstree handler above if (event.keyCode == 27) { escapeKeyPressed = true; @@ -486,55 +471,6 @@ define(function(require, exports, module) { }); }; - /** - * @private - * Updates the rename filename suggestion edit input to a unique filename - * @param {object} dirEntry NativeFileSystem.DirectoryEntry, the directory to name into - * @param {string} fileName The filename to make unique - * @param {object} renameInput The jQuery object for the input value to rename - */ - function _updateRenameFileSuggestion( dirEntry, fileName, renameInput) { - var result = new $.Deferred(); - - var splitStr = fileName.split(".", 2); - var baseFileName = splitStr[0]; - if( !baseFileName ) { - //nothing to do - return result; - } - var fileExt = splitStr[1] || ""; - - result.progress( function attemptNewName( suggestedName, nextIndexToUse ) { - if( nextIndexToUse > 99 ) { - //we've tried this enough - result.reject(); - return; - } - - //check this name - dirEntry.getFile( suggestedName - , {} - , function successCallback(entry){ - //file exists, notify to the next progress - result.notify(baseFileName + "-" + nextIndexToUse + "." + fileExt , nextIndexToUse + 1); - } - , function errorCallback(error) { - //most likely error is FNF, user is better equiped to handle the rest - result.resolve(suggestedName); - } - ); - }); - - result.done( function setSuggestedName( suggestedName ) { - renameInput.val(suggestedName); - }); - - //kick it off - result.notify(fileName, 1); - - return result; - } - // Define public API exports.getProjectRoot = getProjectRoot; exports.openProject = openProject; From b7ffea81e4f2fe8e5e315f0056b51d63d39f8172 Mon Sep 17 00:00:00 2001 From: Chris Bank Date: Mon, 16 Jan 2012 20:48:19 -0800 Subject: [PATCH 4/5] one more --- src/FileCommandHandlers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FileCommandHandlers.js b/src/FileCommandHandlers.js index 97a665b8aed..d3f2e8c3599 100644 --- a/src/FileCommandHandlers.js +++ b/src/FileCommandHandlers.js @@ -371,7 +371,7 @@ define(function(require, exports, module) { }); //kick it off - result.notify(fileName, 1); + result.notify(baseFileName + fileExt , 1); return result; } From 980a00c44a1215e35f6576d5441b4949e13b6fca Mon Sep 17 00:00:00 2001 From: Chris Bank Date: Mon, 16 Jan 2012 20:49:44 -0800 Subject: [PATCH 5/5] whitespace --- src/FileCommandHandlers.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/FileCommandHandlers.js b/src/FileCommandHandlers.js index d3f2e8c3599..c53975cd250 100644 --- a/src/FileCommandHandlers.js +++ b/src/FileCommandHandlers.js @@ -197,12 +197,12 @@ define(function(require, exports, module) { // Create the new node. The createNewItem function does all the heavy work // of validating file name, creating the new file and selecting. var deferred = _getUntitledFileSuggestion(baseDir, "Untitled", ".js"); - var createWithSuggestedName = function ( suggestedName ) { - ProjectManager.createNewItem(baseDir, suggestedName, false).pipe( deferred.resolve, deferred.reject, deferred.notify ); - }; - - deferred.done( createWithSuggestedName ); - deferred.fail( function createWithDefault() { createWithSuggestedName( "Untitled.js" ); } ); + var createWithSuggestedName = function ( suggestedName ) { + ProjectManager.createNewItem(baseDir, suggestedName, false).pipe( deferred.resolve, deferred.reject, deferred.notify ); + }; + + deferred.done( createWithSuggestedName ); + deferred.fail( function createWithDefault() { createWithSuggestedName( "Untitled.js" ); } ); return deferred; }