From 31c894c74f590d18048ad06098925a94ce01f684 Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Fri, 30 Oct 2009 17:19:16 +0100 Subject: vimperator: another buftabs update --- vimperator/plugin/buftabs.js | 118 +++++++++++++++++++++++++++++-------------- 1 file changed, 80 insertions(+), 38 deletions(-) (limited to 'vimperator') 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", -- cgit v1.2.3