diff --git a/content/buffers.js b/content/buffers.js
index e6297fb5..8527e4b6 100644
--- a/content/buffers.js
+++ b/content/buffers.js
@@ -529,7 +529,7 @@ vimperator.Buffer = function () //{{{
urlSecurityCheck(aData.href, aPrincipal,
Components.interfaces.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
}
- catch(ex)
+ catch (ex)
{
aIsFeed = false;
}
@@ -545,7 +545,7 @@ vimperator.Buffer = function () //{{{
function createTable(data)
{
var ret = "
| " +
- data[data.length -1][0] + " |
";
+ data[data.length - 1][0] + "";
if (data.length - 1)
{
diff --git a/content/commands.js b/content/commands.js
index ace5d391..57961c13 100644
--- a/content/commands.js
+++ b/content/commands.js
@@ -1934,7 +1934,7 @@ vimperator.Commands = function () //{{{
else if (/^\d+$/.test(args))
{
var index = parseInt(args, 10) - 1;
- if (index < vimperator.tabs.count())
+ if (index < vimperator.tabs.count)
vimperator.tabs.select(index, true);
else
vimperator.beep();
diff --git a/content/help.js b/content/help.js
index a4b6b079..c6a49688 100644
--- a/content/help.js
+++ b/content/help.js
@@ -220,7 +220,7 @@ vimperator.help = function (section, easter) //{{{
{
doc.open();
}
- catch(e)
+ catch (e)
{
// FIXME: what's this all about then, eh? Works the same for if it's removed. -- djk
// when the url is "about:" or any other xhtml page the doc is not open
diff --git a/content/mappings.js b/content/mappings.js
index c6ced0b6..8a08cf05 100644
--- a/content/mappings.js
+++ b/content/mappings.js
@@ -552,7 +552,7 @@ vimperator.Mappings = function () //{{{
addDefaultMap(new vimperator.Map([vimperator.modes.NORMAL], ["", ""],
function ()
{
- if (vimperator.tabs.getTab() == vimperator.tabs.alternate)
+ if (vimperator.tabs.alternate == null || vimperator.tabs.getTab() == vimperator.tabs.alternate)
{
vimperator.echoerr("E23: No alternate page");
return;
diff --git a/content/tabs.js b/content/tabs.js
index a5429f76..f506c7c6 100644
--- a/content/tabs.js
+++ b/content/tabs.js
@@ -38,13 +38,12 @@ vimperator.Tabs = function () //{{{
////////////////////// PRIVATE SECTION /////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
- /** @param spec can either be:
- * - an absolute integer
- * - "" for the current tab
- * - "+1" for the next tab
- * - "-3" for the tab, which is 3 positions left of the current
- * - "$" for the last tab
- */
+ // @param spec can either be:
+ // - an absolute integer
+ // - "" for the current tab
+ // - "+1" for the next tab
+ // - "-3" for the tab, which is 3 positions left of the current
+ // - "$" for the last tab
function indexFromSpec(spec, wrap)
{
var position = getBrowser().tabContainer.selectedIndex;
@@ -80,193 +79,190 @@ vimperator.Tabs = function () //{{{
return position;
}
- var alternates = [null, null];
+ var alternates = [getBrowser().mCurrentTab, null];
/////////////////////////////////////////////////////////////////////////////}}}
////////////////////// PUBLIC SECTION //////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
- // @returns the index of the currently selected tab starting with 0
- this.index = function (tab)
- {
- if (tab)
+ return {
+
+ get alternate() { return alternates[1]; },
+
+ get count() { return getBrowser().mTabs.length; },
+
+ // @returns the index of the currently selected tab starting with 0
+ index: function (tab)
{
- var length = getBrowser().mTabs.length;
- for (var i = 0; i < length; i++)
+ if (tab)
{
- if (getBrowser().mTabs[i] == tab)
- return i;
- }
- return -1;
- }
-
- return getBrowser().tabContainer.selectedIndex;
- };
-
- this.count = function ()
- {
- return getBrowser().mTabs.length;
- };
-
- // TODO: implement filter
- // @returns an array of tabs which match filter
- this.get = function (filter)
- {
- var buffers = [];
- var browsers = getBrowser().browsers;
- for (var i in browsers)
- {
- var title = browsers[i].contentTitle || "(Untitled)";
- var uri = browsers[i].currentURI.spec;
- var number = i + 1;
- buffers.push([number, title, uri]);
- }
- return buffers;
- };
-
- this.getTab = function (index)
- {
- if (index)
- return getBrowser().mTabs[index];
-
- return getBrowser().tabContainer.selectedItem;
- };
-
- /* spec == "" moves the tab to the last position as per Vim
- * wrap causes the movement to wrap around the start and end of the tab list
- * NOTE: position is a 0 based index
- * FIXME: tabmove! N should probably produce an error
- */
- this.move = function (tab, spec, wrap)
- {
- if (spec === "")
- spec = "$"; // if not specified, move to the last tab -> XXX: move to ex handling?
-
- var index = indexFromSpec(spec, wrap);
- getBrowser().moveTabTo(tab, index);
- };
-
- /* quit_on_last_tab = 1: quit without saving session
- * quit_on_last_tab = 2: quit and save session
- */
- this.remove = function (tab, count, focus_left_tab, quit_on_last_tab)
- {
- function removeOrBlankTab (tab)
- {
- if (getBrowser().mTabs.length > 1)
- getBrowser().removeTab(tab);
- else
- {
- if (vimperator.buffer.URL != "about:blank" ||
- getWebNavigation().sessionHistory.count > 0)
+ var length = getBrowser().mTabs.length;
+ for (var i = 0; i < length; i++)
{
- vimperator.open("about:blank", vimperator.NEW_BACKGROUND_TAB);
+ if (getBrowser().mTabs[i] == tab)
+ return i;
+ }
+ return -1;
+ }
+
+ return getBrowser().tabContainer.selectedIndex;
+ },
+
+ // TODO: implement filter
+ // @returns an array of tabs which match filter
+ get: function (filter)
+ {
+ var buffers = [];
+ var browsers = getBrowser().browsers;
+ for (var i in browsers)
+ {
+ var title = browsers[i].contentTitle || "(Untitled)";
+ var uri = browsers[i].currentURI.spec;
+ var number = i + 1;
+ buffers.push([number, title, uri]);
+ }
+ return buffers;
+ },
+
+ getTab: function (index)
+ {
+ if (index)
+ return getBrowser().mTabs[index];
+
+ return getBrowser().tabContainer.selectedItem;
+ },
+
+ // spec == "" moves the tab to the last position as per Vim
+ // wrap causes the movement to wrap around the start and end of the tab list
+ // NOTE: position is a 0 based index
+ // FIXME: tabmove! N should probably produce an error
+ move: function (tab, spec, wrap)
+ {
+ if (spec === "")
+ spec = "$"; // if not specified, move to the last tab -> XXX: move to ex handling?
+
+ var index = indexFromSpec(spec, wrap);
+ getBrowser().moveTabTo(tab, index);
+ },
+
+ // quit_on_last_tab = 1: quit without saving session
+ // quit_on_last_tab = 2: quit and save session
+ remove: function (tab, count, focus_left_tab, quit_on_last_tab)
+ {
+ function removeOrBlankTab (tab)
+ {
+ if (getBrowser().mTabs.length > 1)
getBrowser().removeTab(tab);
- }
else
- vimperator.beep();
+ {
+ if (vimperator.buffer.URL != "about:blank" ||
+ getWebNavigation().sessionHistory.count > 0)
+ {
+ vimperator.open("about:blank", vimperator.NEW_BACKGROUND_TAB);
+ getBrowser().removeTab(tab);
+ }
+ else
+ vimperator.beep();
+ }
}
- }
- if (count < 1)
- count = 1;
+ if (count < 1)
+ count = 1;
- if (quit_on_last_tab >= 1 && getBrowser().mTabs.length <= count)
- {
- if (vimperator.windows.length > 1)
- window.close();
+ if (quit_on_last_tab >= 1 && getBrowser().mTabs.length <= count)
+ {
+ if (vimperator.windows.length > 1)
+ window.close();
+ else
+ vimperator.quit(quit_on_last_tab == 2);
+
+ return;
+ }
+
+ var index = this.index(tab);
+ if (focus_left_tab)
+ {
+ var last_removed_tab = 0;
+ for (var i = index; i > index - count && i >= 0; i--)
+ {
+ removeOrBlankTab(this.getTab(i));
+ last_removed_tab = i > 0 ? i : 1;
+ }
+ getBrowser().mTabContainer.selectedIndex = last_removed_tab - 1;
+ }
else
- vimperator.quit(quit_on_last_tab == 2);
-
- return;
- }
-
- var index = this.index(tab);
- if (focus_left_tab)
- {
- var last_removed_tab = 0;
- for (var i = index; i > index - count && i >= 0; i--)
{
- removeOrBlankTab(this.getTab(i));
- last_removed_tab = i > 0 ? i : 1;
+ var i = index + count - 1;
+ if (i >= this.count)
+ i = this.count - 1;
+
+ for (; i >= index; i--)
+ removeOrBlankTab(this.getTab(i));
}
- getBrowser().mTabContainer.selectedIndex = last_removed_tab - 1;
- }
- else
+ },
+
+ keepOnly: function (tab)
{
- var i = index + count - 1;
- if (i >= this.count())
- i = this.count() - 1;
+ getBrowser().removeAllTabsBut(tab);
+ },
- for (; i >= index; i--)
- removeOrBlankTab(this.getTab(i));
- }
- };
-
- this.keepOnly = function (tab)
- {
- getBrowser().removeAllTabsBut(tab);
- };
-
- this.select = function (spec, wrap)
- {
- var index = indexFromSpec(spec, wrap);
- if (index === false)
+ select: function (spec, wrap)
{
- vimperator.beep(); // XXX: move to ex-handling?
- return false;
- }
- getBrowser().mTabContainer.selectedIndex = index;
- };
-
- // TODO: when restarting a session FF selects the first tab and then the
- // tab that was selected when the session was created. As a result the
- // alternate after a restart is often incorrectly tab 1 when there
- // shouldn't be one yet.
- this.updateSelectionHistory = function ()
- {
- alternates = [this.getTab(), alternates[0]];
- this.alternate = alternates[1];
- };
-
- // TODO: move to v.buffers
- this.alternate = this.getTab();
-
- this.reload = function (tab, bypass_cache)
- {
- if (bypass_cache)
- {
- const nsIWebNavigation = Components.interfaces.nsIWebNavigation;
- const flags = nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
- getBrowser().getBrowserForTab(tab).reloadWithFlags(flags);
- }
- else
- {
- getBrowser().reloadTab(tab);
- }
- };
-
- this.reloadAll = function (bypass_cache)
- {
- if (bypass_cache)
- {
- for (var i = 0; i < getBrowser().mTabs.length; i++)
+ var index = indexFromSpec(spec, wrap);
+ if (index === false)
{
- try
+ vimperator.beep(); // XXX: move to ex-handling?
+ return false;
+ }
+ getBrowser().mTabContainer.selectedIndex = index;
+ },
+
+ // TODO: when restarting a session FF selects the first tab and then the
+ // tab that was selected when the session was created. As a result the
+ // alternate after a restart is often incorrectly tab 1 when there
+ // shouldn't be one yet.
+ updateSelectionHistory: function ()
+ {
+ alternates = [this.getTab(), alternates[0]];
+ },
+
+ reload: function (tab, bypass_cache)
+ {
+ if (bypass_cache)
+ {
+ const nsIWebNavigation = Components.interfaces.nsIWebNavigation;
+ const flags = nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
+ getBrowser().getBrowserForTab(tab).reloadWithFlags(flags);
+ }
+ else
+ {
+ getBrowser().reloadTab(tab);
+ }
+ },
+
+ reloadAll: function (bypass_cache)
+ {
+ if (bypass_cache)
+ {
+ for (var i = 0; i < getBrowser().mTabs.length; i++)
{
- this.reload(getBrowser().mTabs[i], bypass_cache);
- }
- catch (e)
- {
- // FIXME: can we do anything useful here without stopping the
- // other tabs from reloading?
+ try
+ {
+ this.reload(getBrowser().mTabs[i], bypass_cache);
+ }
+ catch (e)
+ {
+ // FIXME: can we do anything useful here without stopping the
+ // other tabs from reloading?
+ }
}
}
+ else
+ {
+ getBrowser().reloadAllTabs();
+ }
}
- else
- {
- getBrowser().reloadAllTabs();
- }
+
};
//}}}
}; //}}}
diff --git a/content/ui.js b/content/ui.js
index d8d478b2..df9084f7 100644
--- a/content/ui.js
+++ b/content/ui.js
@@ -1184,7 +1184,7 @@ vimperator.StatusLine = function () //{{{
if (!cur_index || typeof cur_index != "number")
cur_index = vimperator.tabs.index() + 1;
if (!total_tabs || typeof cur_index != "number")
- total_tabs = vimperator.tabs.count();
+ total_tabs = vimperator.tabs.count;
tabcount_widget.value = "[" + cur_index + "/" + total_tabs + "]";
},
diff --git a/content/vimperator.js b/content/vimperator.js
index 8fbc8a7f..22a2528a 100644
--- a/content/vimperator.js
+++ b/content/vimperator.js
@@ -245,9 +245,12 @@ const vimperator = (function () //{{{
var string = "";
var obj = "";
- try { // for window.JSON
+ try
+ { // for window.JSON
obj = object.toString();
- } catch (e) {
+ }
+ catch (e)
+ {
obj = "<Object>";
}
@@ -604,7 +607,7 @@ const vimperator = (function () //{{{
vimperator.log("Loading module editor...", 3);
vimperator.editor = vimperator.Editor();
vimperator.log("Loading module tabs...", 3);
- vimperator.tabs = new vimperator.Tabs();
+ vimperator.tabs = vimperator.Tabs();
vimperator.log("Loading module marks...", 3);
vimperator.marks = vimperator.Marks();
vimperator.log("Loading module quickmarks...", 3);