User:Fyan/Improving Tab Hierarchy: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
Line 2: Line 2:


globals:
globals:
    tabs
  tabs
    newTabButton
  newTabButton
    newTabOffset := 0
  newTabOffset := 0


openTab(url, options):
openTab(url, options):
    // opens a new tab with the provided url
  // opens a new tab with the provided url
    // default options: selected = true, position = end, opener = null
  // default options: selected = true, position = end, opener = null


openURLInNewTab(url, openerTab, selected):
openURLInNewTab(url, openerTab, selected):
    // triggered whenever a new tab is opened from a tab,
  // triggered whenever a new tab is opened from a tab,
    // including window.open, link cmd+click, and context menu
  // including window.open, link cmd+click, and context menu
    IF selected:
  IF selected
        newTabOffset := 0
    newTabOffset := 0
    newTabOffset := newTabOffset + 1
  newTabOffset := newTabOffset + 1
    position := openerTab.position + newTabOffset
  position := openerTab.position + newTabOffset
    newTab := openTab(url, { selected : selected, position : position, opener : openerTab })
  openTab(url, { selected : selected, position : position, opener : openerTab })


onTabClose(closedTab):
onTabClose(closedTab):
    FOR EACH tab IN tabs:
  FOR EACH tab IN tabs
        IF tab.opener = closedTab:
    IF tab.opener = closedTab:
            tab.opener := closedTab.opener
      tab.opener := closedTab.opener
    prev := closedTab.prevSibling
  prev := closedTab.previousSibling
    next := closedTab.nextSibling
  next := closedTab.nextSibling
     IF next AND next.opener AND next.opener = closedTab.opener:
  IF !closedTab.opener
        selectTab(next)
    selectTab(next)
     ELSE IF prev AND prev.opener AND prev.opener = closedTab.opener:
     RETURN
        selectTab(prev)
  ELSE IF next AND next.opener = closedTab.opener
    ELSE IF prev AND prev = closedTab.opener:
    selectTab(next)
        selectTab(prev)
     RETURN
    ELSE IF next:
  FOR tab := prev; tab; tab := tab.previousSibling
        selectTab(next)
    IF tab.opener = closedTab.opener
    ELSE IF prev:
      selectTab(tab)
        selectTab(prev)
      RETURN
    ELSE IF getBoolPref('closeWindowWithLastTab'):
  IF prev AND prev = closedTab.opener
        closeWindow()
    selectTab(prev)
    ELSE:
  ELSE IF next
        openTab('about:blank')
    selectTab(next)
  ELSE IF prev
    selectTab(prev)
  ELSE IF getBoolPref('closeWindowWithLastTab')
    closeWindow()
  ELSE
    openTab('about:blank')


onTabSelect(fromTab, toTab):
onTabSelect(fromTab, toTab):
    newTabOffset := 0
  newTabOffset := 0
    IF !fromTab: // triggered by tab close
  IF !fromTab // triggered by tab close
        RETURN
    RETURN
    IF fromTab.opener != toTab AND toTab.opener != fromTab AND
  IF fromTab.opener != toTab AND toTab.opener != fromTab AND
      fromTab.opener != toTab.opener:
    fromTab.opener != toTab.opener
        FOR EACH tab IN tabs:
    FOR EACH tab IN tabs:
            tab.opener := NULL
      tab.opener := NULL


onTabMove(fromIndex, toIndex):
onTabMove(fromIndex, toIndex):
    FOR EACH tab IN tabs:
  FOR EACH tab IN tabs
        tab.opener := NULL
    tab.opener := NULL


=== Phase II ===
=== Phase II ===


openNewTab(newTab, trigger):
openBlankTab(trigger):
    // this method applies only to new blank tabs
  // this method applies only to new blank tabs
    IF trigger = newTabButton:
  IF trigger = newTabButton
        openTab('about:blank')
    openTab('about:blank')
    ELSE:
  ELSE
        tab := contextTab OR selectedTab
    tab := contextTab OR selectedTab
        openTab('about:blank', { position : tab.position + 1, opener : tab })
    openTab('about:blank', { position : tab.position + 1, opener : tab })
134

edits

Navigation menu