User:Fyan/Improving Tab Hierarchy
Jump to navigation
Jump to search
Phase I
globals:
tabs newTabButton newTabOffset := 0
openTab(url, options):
// opens a new tab with the provided url // default options: selected = true, position = end, opener = null
openURLInNewTab(url, openerTab, selected):
// triggered whenever a new tab is opened from a tab,
// including window.open, link cmd+click, and context menu
IF selected
newTabOffset := 0
newTabOffset := newTabOffset + 1
position := openerTab.position + newTabOffset
openTab(url, { selected : selected, position : position, opener : openerTab })
onTabClose(closedTab):
FOR EACH tab IN tabs
IF tab.opener = closedTab:
tab.opener := closedTab.opener
prev := closedTab.previousSibling
next := closedTab.nextSibling
IF !closedTab.opener
selectTab(next)
RETURN
ELSE IF next AND next.opener = closedTab.opener
selectTab(next)
RETURN
FOR tab := prev; tab; tab := tab.previousSibling
IF tab.opener = closedTab.opener
selectTab(tab)
RETURN
IF prev AND prev = closedTab.opener
selectTab(prev)
ELSE IF next
selectTab(next)
ELSE IF prev
selectTab(prev)
ELSE IF getBoolPref('closeWindowWithLastTab')
closeWindow()
ELSE
openTab('about:blank')
onTabSelect(fromTab, toTab):
newTabOffset := 0
IF !fromTab // triggered by tab close
RETURN
IF fromTab.opener != toTab AND toTab.opener != fromTab AND
fromTab.opener != toTab.opener
FOR EACH tab IN tabs:
tab.opener := NULL
onTabMove(fromIndex, toIndex):
FOR EACH tab IN tabs tab.opener := NULL
Phase II
openBlankTab(trigger):
// this method applies only to new blank tabs
IF trigger = newTabButton
openTab('about:blank')
ELSE
tab := contextTab OR selectedTab
openTab('about:blank', { position : tab.position + 1, opener : tab })