From eb23b632f7d14c3e9865c99fe47ca4dce7099a12 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Mon, 25 May 2015 20:02:47 +0300 Subject: [PATCH] some minor tweaks to browser.select()... Signed-off-by: Alex A. Naanou --- ui (gen4)/experiments/browse-dialog.html | 1 + ui (gen4)/experiments/browse-dialog.js | 54 ++++++++++++++++++++---- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/ui (gen4)/experiments/browse-dialog.html b/ui (gen4)/experiments/browse-dialog.html index 548d5ca1..5598d469 100755 --- a/ui (gen4)/experiments/browse-dialog.html +++ b/ui (gen4)/experiments/browse-dialog.html @@ -194,6 +194,7 @@ requirejs(['../lib/keyboard', '../object'], function(k, o){ b = Browser($('.container').last(), { list: function(path){ + console.log('>>>', path) var cur = TREE path.forEach(function(p){ cur = cur[p] diff --git a/ui (gen4)/experiments/browse-dialog.js b/ui (gen4)/experiments/browse-dialog.js index 3e00f806..36dd69ee 100755 --- a/ui (gen4)/experiments/browse-dialog.js +++ b/ui (gen4)/experiments/browse-dialog.js @@ -229,21 +229,34 @@ var BrowserPrototype = { // -> elem // // Select element by sequence number + // NOTE: negative numbers count from the tail. + // NOTE: overflowing selects the first/last element. // .select() // -> elem // // Select element by its text... + // NOTE: if text matches one of the reserved commands above use + // quotes to escape it... + // .select('') + // .select("''") // .select('""') // -> elem // + // Select element via a regular expression... + // .select() + // -> elem + // // .select() // -> elem // // This will return a jQuery object. // + // NOTE: if multiple matches occur this will select the first. + // // // XXX revise return values... // XXX Q: should this trigger a "select" event??? + // XXX on string/regexp mismatch this will select the first, is this correct??? select: function(elem){ var browser = this.dom var elems = browser.find('.list div') @@ -252,6 +265,7 @@ var BrowserPrototype = { return $() } + elem = elem == 0 ? 'first' : elem elem = elem || this.select('!') // if none selected get the first... elem = elem.length == 0 ? 'first' : elem @@ -281,23 +295,41 @@ var BrowserPrototype = { return elems.filter('.selected') // number... + // NOTE: on overflow this will get the first/last element... } else if(typeof(elem) == typeof(123)){ - return this.select($(elems[elem])) + return this.select($(elems.slice(elem)[0] || elems.slice(-1)[0] )) // string... - } else if(typeof(elem) == typeof('str') - && /^'.*'$|^".*"$/.test(elem.trim())){ - elem = elem.trim().slice(1, -1) + // XXX on mismatch this will select the first, is this correct??? + } else if(typeof(elem) == typeof('str')){ + if(/^'.*'$|^".*"$/.test(elem.trim())){ + elem = elem.trim().slice(1, -1) + } return this.select(browser.find('.list div') .filter(function(i, e){ return $(e).text() == elem })) + // regexp... + // XXX on mismatch this will select the first, is this correct??? + } else if(elem.constructor === RegExp){ + return this.select(browser.find('.list div') + .filter(function(i, e){ + return elem.test($(e).text()) + })) + // element... } else { - this.select('none') - browser.find('.path .dir.cur').text(elem.text()) - return elem.addClass('selected') + elem = $(elem).first() + + if(elem.length == 0){ + this.select() + + } else { + this.select('none') + browser.find('.path .dir.cur').text(elem.text()) + return elem.addClass('selected') + } } }, @@ -374,7 +406,9 @@ var BrowserPrototype = { return this } - var path = this.path.push(elem.text()) + var path = this.path + + path.push(elem.text()) var res = this.open(path) @@ -382,11 +416,15 @@ var BrowserPrototype = { }, // extension methods... + // XXX this is wrong... + // ...need to actually open something... open: function(path){ + path = path || this.path var m = this.options.list return m ? m.call(this, path) : path }, list: function(path){ + path = path || this.path var m = this.options.list return m ? m.call(this, path) : [] },