Created
July 7, 2011 00:53
-
-
Save 958/1068696 to your computer and use it in GitHub Desktop.
[keysnail]サムネイル付きタブ一覧を表示する & XULMigemoる
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://www.lifehacker.jp/2011/06/110622_listalltabsthumbs.html | |
// をしなくても、以下のようなキーバインドを割り当てればタブ一覧が表示される | |
key.setViewKey('A', function (ev, arg) { | |
allTabs.open(); | |
}, 'タブを一覧表示', true); | |
// ついでに、上記で表示されるタブ一覧と、Ctrl+Shift+e で表示されるタブグループ一覧(?)で | |
// タブ検索を XULMigemoる | |
// これは %PRESERVE% エリアへ | |
(function(){ | |
let tabviewdeck = document.getElementById("tab-view-deck"); // browser | |
if(tabviewdeck) { | |
let isInit = false; | |
tabviewdeck.addEventListener("DOMNodeInserted", function(){ | |
let tabView = document.getElementById('tab-view'); | |
if (tabView && !isInit) { | |
isInit = true; | |
tabView.addEventListener("DOMContentLoaded", function() { | |
let proto = tabView.contentWindow.TabMatcher.prototype; | |
tabView.contentWindow.TabMatcher = function(term) { | |
this.term = new RegExp(window.xulMigemoCore.getRegExps(term).join('|'), "ig"); | |
}; | |
tabView.contentWindow.TabMatcher.prototype = proto; | |
tabView.contentWindow.TabMatcher.prototype._filterAndSortForMatches = function(tabs) { | |
let TabUtils = tabView.contentWindow.TabUtils; | |
let self = this; | |
tabs = tabs.filter(function(tab){ | |
let name = TabUtils.nameOf(tab); | |
let url = TabUtils.URLOf(tab); | |
return name.match(self.term, "i") || url.match(self.term, "i"); | |
}); | |
tabs.sort(function sorter(x, y){ | |
let xterm = TabUtils.nameOf(x) + TabUtils.URLOf(x); | |
let yterm = TabUtils.nameOf(y) + TabUtils.URLOf(y); | |
let yScore = (yterm.match(self.term, "i") || "").toString().length; | |
let xScore = (xterm.match(self.term, "i") || "").toString().length; | |
return yScore - xScore; | |
}); | |
return tabs; | |
}; | |
}, false); | |
} | |
}, true); | |
} | |
if (window.allTabs) { | |
let self = window.allTabs; | |
window.allTabs.filter = function () { | |
if (self._currentFilter == self.filterField.value) return; | |
self._currentFilter = self.filterField.value; | |
let filter = new RegExp(window.xulMigemoCore.getRegExps(self._currentFilter).join('|'), "ig"); | |
self._visible = 0; | |
Array.forEach(self.previews, function (preview) { | |
let tab = preview._tab; | |
var matches = 0; | |
if (!tab.hidden) { | |
let tabstring = tab.linkedBrowser.currentURI.spec; | |
try { | |
tabstring = decodeURI(tabstring); | |
} catch (e) {} | |
tabstring = tab.label + " " + tab.label.toLocaleLowerCase() + " " + tabstring; | |
if (filter.test(tabstring)) { | |
self._visible++; | |
self._updatePreview(preview); | |
preview.hidden = false; | |
} else | |
preview.hidden = true; | |
} | |
}, self); | |
self._reflow(); | |
} | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment