User:Fyan/Improving Tab Hierarchy
Jump to navigation
Jump to search
globals:
tabs selectedTab newTabOffset := 0
- opens a new tab with the provided url
- default options: selected = true, position = END, opener = null
openTab(url, options):
tab := new Tab(url) IF 'position' IN options tabs.splice(position, 0, tab) ELSE tabs.push(tab) IF options.opener tab.opener = options.opener IF options.selected selectedTab := tab RETURN tab
- opens a blank tab
openNewTab():
tab := openTab('about:blank', { opener: selectedTab }) tab.onLocationChangeOrDeselect := function() DELETE tab.onLocationChangeOrDeselect DELETE tab.opener
- triggered when a new tab is opened from a tab,
- including window.open, link cmd+click, and context menu
openURLInNewTab(url, openerTab, selected):
IF selected newTabOffset := 0 newTabOffset := newTabOffset + 1 position := openerTab.position + newTabOffset openTab(url, { selected: selected, position: position, opener: openerTab })
- triggered when a tab is closed by any mechanism
onTabClose(closedTab):
prev := closedTab.previousSibling next := closedTab.nextSibling IF closedTab.opener IF next AND next.opener = closedTab.opener selectedTab := next RETURN FOR tab := prev; tab; tab := tab.previousSibling IF tab.opener = closedTab.opener selectedTab := tab RETURN IF prev AND prev = closedTab.opener selectedTab := prev RETURN IF next selectedTab := next ELSE IF prev selectedTab := prev ELSE IF getBoolPref('closeWindowWithLastTab') closeWindow() ELSE openNewTab()
- triggered when the user explicitly switches tabs (not due to tab close, etc.)
onTabUserSelect(fromTab, toTab):
newTabOffset := 0 IF fromTab.opener != toTab AND toTab.opener != fromTab AND fromTab.opener != toTab.opener FOR EACH tab IN tabs: tab.opener := NULL
- triggered when the user explicitly moves tabs
onTabUserMove(fromIndex, toIndex):
FOR EACH tab IN tabs tab.opener := NULL