Histree is the basic algorithm. It
preserves the current Back/Forward menus, but adds a twist: If you
visited a page, that entry in the Back/Forward menu will turn into a
submenu. Going into it will show you the pages that previously were
removed from the stack.
For example, let's say you're on page 1, then navigate to page 2, then
go back to page 1 and navigate to page 3. With the regular Back menu,
you can no longer get to page 2 (your Back menu will simply allow you
to go between 1 and 3). Using Histree, however, page 1 turns into a
submenu. Open it and there's page 2 again! You can continue to go to
all the pages you visited from page 2 (if you visited any pages there).
There are two options associated with Histree. The first, "Per-tab" or
"Universal", changes the essential way Histree works. "Per-tab" is the
usual behavior - each tab and window has its own Back/Forward menu
associated with it. However, a Universal Histree has only one single
navigation history; opening a new tab will simply add a new link to the
navigation history, rather than creating a new one! However, each tab
and window has its own
path within the navigation.
For example, let's say you go from page 1 to 2, then open a new tab
which loads page 3. You now have a history that contains a link from 1
to 2
and a link from 2 to 3.
However, the first tab is still on page 2, whereas the second tab is
now on page 3. Your usual Back menu will remain and allow you to use it
normally - the only difference is that you now have access to every
page you visited in
other tabs or windows as well!
The second option, "histree depth", indicates how smart you want
Histree to be. Histree can tell if you took a path with no offshoots -
for example, you could be at a "hub" where you clicked three different
pages, but at each of those pages, you only clicked once or twice and
went back. Histree can display all the paths at once, meaning you won't
have to go through three different submenus to see them all. But this
can get crowded, so you can set how many pages Histree should check for
in a single menu.
FamilyTree - Type 1
FamilyTree (admittedly a bad name for it) is markedly different from
Histree. It'll be easier for me to talk about it in terms of nodes,
parents and children. For my purposes, a
node is any page you visit
1.If you click a link from node A to node B, node A is a
parent of node B, and node B is a
child of node A. Any node can have many children, but also many parents!
Here's the main way FamilyTree differs from Histree. Histree is, as it sounds, a
tree
- it starts from a root and spreads out its leaves. That means,
however, that there can be duplicate entries. FamilyTree, however, is
technically a
graph - since it allows one node to have many parents, it's all interconnected rather than having one starting point.
As a quick illustration, let's say you start at page A, then click to
page B, then to page C, then follow a link from page B back to page A.
Histree will think of it like this:
FamilyTree, though, will think of it like this:
So how does that translate to your Back menu? FamilyTree Type 1 will
actually give you a "most-recently-visited" list. That means that it'll
simply list the 15 most recently visited pages. From each of those
pages, you can open a submenu which will tell you a) the
parents of that page, and b) the
children
of that page. You can then open more submenus to see the parents and
children of further pages. This eliminates duplicates and ensures you
can always see everywhere you've been from a given page, and every way
you've gotten to that page. The downside? You'll have to open more
submenus to get to the page you want. There's also no Forward menu to
speak of, even though the Back and Forward buttons work like usual.
FamilyTree - Type 2
Unlike its Type 1 cousin, Type 2 retains the original Back/Forward menus. Other than that, it's identical.
1. Note that some pages may have different content at different times - so
in actuality a node is really a unique page visit as determined by URL,
frameset, and POST data. All right, I lied, I
should be checking the frameset, but I didn't. Sorry.