summaryrefslogtreecommitdiff
path: root/vimperator
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2009-10-30 17:19:16 +0100
committerAdrian C. (anrxc) <anrxc@sysphere.org>2009-10-30 17:21:23 +0100
commit31c894c74f590d18048ad06098925a94ce01f684 (patch)
tree06cf9ec7b70687d8896ee6a6b3c8c6bc08f80119 /vimperator
parent2acbed1aec5f77cc58ead316ceb58516054a8b83 (diff)
downloaddotfiles-31c894c74f590d18048ad06098925a94ce01f684.tar.xz
vimperator: another buftabs update
Diffstat (limited to 'vimperator')
-rw-r--r--vimperator/plugin/buftabs.js118
1 files changed, 80 insertions, 38 deletions
diff --git a/vimperator/plugin/buftabs.js b/vimperator/plugin/buftabs.js
index 5cb46ca..f10a616 100644
--- a/vimperator/plugin/buftabs.js
+++ b/vimperator/plugin/buftabs.js
@@ -36,70 +36,107 @@ buftabs = {
updateUrl: function (url)
{
// Get buftabbar
- var buftabs = document.getElementById("liberator-statusline-buftabs");
+ var btabs = document.getElementById("liberator-statusline-buftabs");
var urlWidget = document.getElementById("liberator-statusline-field-url");
- var maxlength = options.get("buftabs_maxlength").get();
- var tabvalue, position=0, selpos;
+ var browsers = tabs.getBrowser().browsers;
+ var position=0, selpos;
- //// Empty the tabbar
- while (buftabs.lastChild != null)
- buftabs.removeChild(buftabs.lastChild);
-
- // Create the new tabs
- for (let [i, browser] in tabs.browsers)
+ // Make sure we have an appropriate amount of labels
+ while (btabs.childNodes.length > browsers.length)
{
- // Title
- if (browser.webProgress.isLoadingDocument)
- tabvalue = "Loading...";
- else
- tabvalue = browser.contentTitle || "Untitled";
-
- // Check length
- if (tabvalue.length > maxlength)
- tabvalue = tabvalue.substr(0, maxlength-3)+"...";
+ btabs.removeChild(btabs.lastChild);
+ }
- // Bookmark icon
- if (liberator.has("bookmarks"))
- if (bookmarks.isBookmarked(browser.contentDocument.location.href))
- tabvalue += "\u2764";
+ while (btabs.childNodes.length < browsers.length)
+ {
+ var label = document.createElement("label");
+ btabs.appendChild(label);
- // Brackets and index
- tabvalue = "["+(i+1)+"-"+tabvalue+"]";
+ label.onclick = function (ev)
+ {
+ if (ev.button == 0)
+ tabs.select(this.tabpos);
+ else if (ev.button == 1)
+ tabs.remove(tabs.getTab(this.tabpos), 1, false, 0);
+ }
+ }
+ // Create the new tabs
+ for (let i=0; i < browsers.length; i++)
+ {
// Create label
- var label = document.createElement("label");
- label.tabpos = i;
- label.setAttribute("value", tabvalue);
- buftabs.appendChild(label);
+ var browser = browsers[i];
+ var label = btabs.childNodes[i];
- label.onclick = function ()
+ // Hook on load
+ if (browser.webProgress.isLoadingDocument)
{
- tabs.select(this.tabpos);
+ browser._buftabs_label = label;
+ browser.contentDocument.addEventListener("load", function ()
+ {
+ buftabs.fillLabel(this._buftabs_label, this);
+ }, false);
}
- if (tabs.index() == i)
+ // Fill label
+ label.tabpos = i;
+ buftabs.fillLabel(label, browser);
+
+ if (tabs.index() == label.tabpos)
{
selpos = [position, label.clientWidth+position];
- label.className = "buftab_selected";
- } else {
- label.className = "buftab";
}
position += label.clientWidth;
}
// Scroll
- if (selpos[0] < buftabs.scrollLeft || selpos[1] > buftabs.scrollLeft+buftabs.clientWidth)
- buftabs.scrollLeft = selpos[0];
+ if (selpos[0] < btabs.scrollLeft || selpos[1] > btabs.scrollLeft+btabs.clientWidth)
+ btabs.scrollLeft = selpos[0];
// Show the entire line if possible
- if (buftabs.scrollWidth == buftabs.clientWidth)
- buftabs.scrollLeft = 0;
+ if (btabs.scrollWidth == btabs.clientWidth)
+ btabs.scrollLeft = 0;
// Empty url label
urlWidget.value = "";
},
+ // Fill a label with browser content
+ fillLabel: function(label, browser)
+ {
+ var maxlength = options.get("buftabs_maxlength").get();
+ var tabvalue;
+
+ // Get title
+ if (browser.webProgress.isLoadingDocument)
+ {
+ tabvalue = "Loading...";
+ } else {
+ tabvalue = browser.contentTitle || "Untitled";
+ }
+
+ // Check length
+ if (tabvalue.length > maxlength)
+ tabvalue = tabvalue.substr(0, maxlength-3)+"...";
+
+ // Bookmark icon
+ if (bookmarks.isBookmarked(browser.contentDocument.location.href))
+ tabvalue += "\u2764";
+
+ // Brackets and index
+ tabvalue = "["+(label.tabpos+1)+"-"+tabvalue+"]";
+
+ label.setAttribute("value", tabvalue);
+
+ if (tabs.index() == label.tabpos)
+ {
+ label.className = "buftab_selected";
+ } else {
+ label.className = "buftab";
+ }
+ },
+
// Create the horizontal box for adding the tabs to
createBar: function()
{
@@ -149,6 +186,11 @@ tabContainer.addEventListener("TabSelect", function (event) {
statusline.updateUrl();
}, false);
+tabs.getBrowser().addEventListener("load", function (event) {
+ if (options.get("buftabs").get())
+ statusline.updateUrl();
+}, false);
+
/// Options
options.add(["buftabs", "buftabs"],
"Control whether to use buftabs in the statusline",