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 })