Browse Source

Fix completion loop

Stop on first found rather than last found.
Weiyi Lou 9 years ago
parent
commit
83b7f41d67
1 changed files with 10 additions and 8 deletions
  1. 10 8
      js/pgsh.js

+ 10 - 8
js/pgsh.js

@@ -21,7 +21,7 @@ function pgsh(ev) {
   ev.on('mount', function() {
     document.getElementById(ev.id).onkeydown = function(e) {
       var code = e.keyCode || e.which
-      // Tab for file path completion
+      // Tab for file path completion.
       if (code == 9) {
         var input = ev.tags['command-line'].command.value.trim().split(' ')
         var command = input.shift()
@@ -277,12 +277,13 @@ function pgsh(ev) {
       if (part == '..' && path.length > 1) { path.pop() }
       if (part != '..' && part) { path.push(part) }
     })
-    return path.length > 1 ? path.join('/') : '/'
+    return (path.length > 1) ? path.join('/') : '/'
   }
 
-  // Check if a path exists in the tree
+  // Check if a path exists in the tree.
   var pathExists = function(path, isFile) {
-    var isFile = (typeof isFile !== 'undefined') ? isFile : false; // Old way, for Safari.
+    // Old way of defining default values, for Safari.
+    var isFile = (typeof isFile !== 'undefined') ? isFile : false;
     var parts = path.trim().split('/')
     var fname = isFile ? parts.pop() : ''
     var tree = self.tree
@@ -309,7 +310,7 @@ function pgsh(ev) {
     parts.forEach(function(part) {
       if (part) { tree = tree[part] }
     })
-    // Sort JS object. TODO not a great way.
+    // Sort JS object. Not a great way, but more compatible.
     if (typeof tree === 'object') {
       var keys = []
       for (key in tree) {
@@ -325,22 +326,23 @@ function pgsh(ev) {
     return tree
   }
 
+  // Complete a given file path string based on the current tree.
   var completePath = function(input, isFile) {
     // Extract file fragment and get actual path.
     var slash = input.lastIndexOf('/') + 1
     var frag = input.substring(slash)
     var base = input.substring(0, slash)
     var path = resolveAbsPath(base)
-    // Complete fragments
+    // Complete fragments.
     if (pathExists(path)) {
       var contents = getContents(path)
       var found = ''
       for (var name in contents) {
         if (!isFile && typeof contents[name] === 'string') { continue }
         if (!frag) { found = name; break }
-        if (name.indexOf(frag) == 0) { found = name }
+        if (name.indexOf(frag) == 0) { found = name; break }
       }
-      var end = typeof contents[found] === 'object' ? '/' : ''
+      var end = (typeof contents[found] === 'object') ? '/' : ''
       return base + found + end
     }
     return ''