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 newTab := 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.prevSibling next := closedTab.nextSibling IF next AND next.opener AND next.opener = closedTab.opener: selectTab(next) ELSE IF prev AND prev.opener AND prev.opener = closedTab.opener: selectTab(prev) ELSE 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
openNewTab(newTab, 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 })