+ Now saving pageBounds.
+ Removed some unnecessary save calls and added some necessary ones
+ Added a reset command to the dev menu; wipes storage and refreshes
+ Fixed the save command on the dev menu so it now works again
+ Reconnected storage sanity checks
+ Removed a bunch of now unused storage code
+ Fixed a problem with cold start
+ Removed a bunch of logging code
+ Pulled BrowserWatcher out of tabs.js
+ Added a direct link to the code documentation to the dev menu
+ Fixed a typo where errors in onFocus weren't being logged. (When you go back to the TabCandy from a tab, the tab strip get hidden late, causing a jarring jump)
+ Also: fixed bug 567010
+ the TabCandy button/hot key now works to make a separate TabCandy for each window
+ Fixed a number of startup issues relating to multiple tab candies running at the same time
+ Fixed: Quit Firefox and relaunch. You'll reopen with that tab, but the tab bar doesn't have its tab limited to the containing group. It should limit them.
+ Fixed: If you quit tab candy (but not the browser), all of the tabs need to be reshown.
+ Starting firefox with tab candy selected now hides the tab bar
+ Utils.activeTab now returns a Tabs tab, rather than a raw tab
+ The last tab you were viewing is now highlighted as the focused tab.
+ You can get back to the tab you were looking at now by hitting the escape key.
+ You can navigate to the focused tab by hitting the return key.
+ You can select other tabs via the keyboard with the arrow keys.
+ Created Utils.copy to make duplicating objects cleaner
+ Fixed a number of issues with pulling tabs out of a tray. Temporarily disabled the delay on drag as well.
+ Improved the threshold for switching from grid to stack; only happens when the grid fills up.
+ No longer announcing "bad storage data" when there is in fact no storage data (fresh start)
+ A couple more asserts
+ Added sanity checks on data going to and from storage (still some work to be done there); if the check doesn't pass, the data isn't loaded/saved
+ Added a manual save option to the dev menu
+ Added Utils.isNumber, as well as standalone isRect and isPoint routines
+ Miscellaneous double checks and assertions
+ Groups now have some extra space at the bottom to accommodate for the "new tab" button
+ Items now unsquish after another item is closed, and on resize. This should cut down on random-seeming unsquishes later.
+ Changed the behavior of removing the penultimate tab from a group. The group no longer goes away until the very last tab is removed.
+ Added some new rect utilities for finding if a point/rect is inside another rect
+ Improved minimal size for groups and tabs inside of groups
+ When you close the active group, it was still being remembered as the active group (even though it didn't exist anymore); fixed.
+ If you have two tabs with the same url in different groups, and you refresh, it now does the right thing (unless that url is about:blank, in which case it drops them in the "new tabs" group)
+ Updated documentation (since Aza's been commenting!)
+ Adds an new-tab animation that Feels Right(tm) [although the timing might still need tweaking]
+ When new tabs are added while TabCandy is focused, the no longer animate in from a random location.
- Before this commit, changing the order of tabs in a group would change
the order of tabs in the tab bar on zoom-in.
- After this commit, that continues to be the case. In addition, if you
change the order of tabs in the tab bar, those changes will be reflected
in the order of tabs in the group.
+ New tab button animation now goes to where the tab is actually going to arrive
+ Giving a little more space at the bottom of groups so tabs overlap the new tab button
+ Fixed issue with tab reconnection on startup
(1) It means that the tabs are shown in the order which they appear in the group. Keeps the mental model clean.
(2) When you close a tab, the next tab that is focused is sane (i.e., it is in the group not some random tab)
+ Misc fixes
+ We now show chrome tabs (but not the tab candy tab)
+ When the browser first starts up, it takes it a while for the tabs to all get their correct URLs; we now properly deal with this when reconnecting them to their groups
+ Added a "dev" menu in the upper left for various debugging features. Nothing much there so far
+ TODOs (see the code)
+ (1) There is a potential race condition groups.js:line 121
+ (2) The new tab animation is to the wrong place groups.js:line 96
+ TODO: Ideally, we should have an animation of the last tab be zoomed out into the tabcandy interface, and then that tab fading away along with the group (if the group is unnamed).
+ Commented out the _render routine in toolbar-button.js, as it was throwing exceptions and didn't seem to work anyway
+ Added some asserts to Item and cleaned up its documentation
+ Made Utils.assert more robust
+ Made tabs prettier when stacked
+ Commented out js lint, which doesn't seem to work in this context
+ Fixed it so you can't resize locked groups
+ Made it so the "new tabs" group is no longer locked (for the time being at least)
+ Tabs no longer change order when you drag their groups around
+ The tray now goes away more beautifully
+ You now have to drag at least 100 pixels and at least 500 milliseconds before a tab is pulled out its tray
+ No longer reserving space at the bottom of the screen for the "new tabs" group
+ Tab titles now go away when stacked and come back when not (there was a problem with them coming back)
+ No longer explicitly positioning the "new tabs" group
+ Page names are no longer visible when in stacks
+ Page names have been prettified when in the stack tray.
+ TODO: Page names don't seem to come back after a group is turned into a stack, and then unstacked.
+ Created a new easing function called "tabcandyBounce" (which will soon be all the rage in the underground dance clubs fo Europe).
+ tabcandyBounce is the kind of easing function that gentle overshoots the ends and then bounces back, giving a human feel.
+ tabcandyBounce feels faster than it actually is :)
+ The new easing function is now used for most animations.
+ Cleaned up issues with algorithm for choosing where to position a tab dropped into a group
+ You can no longer drag a tab or group around by its close box
+ Changed tab drop tolerance… tabs now just need to overlap 50% in order to group. This is to make it consistent with dropping a tab on an existing group, which already behaved this way
+ A single tab in a group will no longer fill the entire group
+ Added the close box back to the "new tab" group; it doesn't close the group, but it closes all the tabs. Seems like a useful feature, though maybe it shouldn't look like all the other close boxes
+ Groups no longer auto-close when all items are removed, if they're named
+ You can now close an empty group
+ Fixed bug with dragging tabs out of a group
+ Resizing the window now works, even if you've closed tab candy
+ When unsquishing, groups aren't forced into tab aspect ratio
+ Groups now have unique ids
+ Items now have a "parent" property (instead of $(this.container).data('group'))
+ Group.add now accepts Item objects rather than just jQuery objects
+ Fixed several cold start issues
+ Added storage.js… starting serialization
+ Disabled autoscroll on drag; the window should be locked down now
+ Fixed Aza's "cute little bug"; small tabs used to scoot up and left
+ It works now!
+ Shrink a group to a pile and then click on the stack.
+ The group opens in an overlay.
+ Moving your cursor outside the group makes it animate back into the stack.
+ In Zoomgroups put some pages into a group, then scale it down
+ It will animate itself into a stack
+ Pull it out again and it will go back to being a zoomgroup
+ started locking down the "new tabs" group
+ children no longer lag when dragging a group
+ you can no longer nest groups inside of other groups (for now)
+ We pause tab mirroring/painting on zooms.
+ We remove box shadows and rounded corners on zooms. (Which, according to Shark, was costing around 10% time)
+ The tab bar toggle and decorative strip now reside above the tab candy content in Z
+ Group titles now have prompt text/icon
+ Additional documentation (especially Mirror)
+ Fixed the dev mode features (were broken by the tab bar toggle changes)
+ The Firefox nav bar now correctly shows again when you create and go to a new tab
+ the "new tab" group now always lives at the bottom of the page
+ the candy switcher and the "grid" and "sites" features are now hidden by default. add ?dev=1 to the url to show them
+ the Firefox nav bar is now hidden when you're in the tab candy page
+ the starting grid now scales depending on how many tabs you have. (it is in fact sharing the arrange code that groups use for their children)
+ Now handles being embedded both in a browser.xul context (i.e., in firefoxOverlay.xul) and a more normal content document context
+ Access the toolbar in a normal context via Toolbar.*
+ Automatic badging for unread tabs: just set Toolbar.unread += 1 or some such.
They were plentiful when from the darkness it emerged
The dark mercurial spirits singing SVN a dirge
A beast with many heads
No arms but branches in its stead
As you push into unknowns your final utterance will be "merge"
-- The only surving translation of the last song of the commited.
+ Clicking on it opens a tab to Revision-A
- The tab is moved to being the first tab
- The tab is visually hidden
- Clicking on it again re-uses the opened tab
Some notes:
* Only styled for OSX
* We should think about loading the page in the background on startup
so that there is no time delay when clicking on it the first time
+ Now compensating for padding in tabs when laying them out
+ Tab titles are now a single line, cut at the width of the tab (but no ellipsis yet)
+ Groups now have the move cursor
+ Tab resizing now works, and is disabled when a tab is in a group
+ We now have a "new tabs" group that new tabs go into (created as needed)
+ New layout algorithm for tabs inside a group. It's not as space efficient as the last one, but the unused space is at the bottom rather than the right side, and in general I think it behaves more like people expect.
+ Groups now have a minimum width when resizing
+ If you drag the second to last tab out of a group and don't return it to that group, the group now dissolves.
+ When a tab gets below a certain size, its thumbnail and close box are hidden
+ When a tab's title gets below a certain size, it is hidden.
+ Added a doc folder that contains generated documentation
+ Now pointing to the doc folder from the Tab Candy home page
+ The Tab Candy home page is now accessible from the Candy drop-down
+ Now properly handling z order for dragging and nesting groups
+ If a group is the last item inside a group, closing it now closes the outer group as well
+ Fixed bug causing the closing of unrelated tabs to destroy groups
+ Renamed Group._container to .container (which it now inherits from Item)
+ Added Item.debug flag which turns on rectangles for debugging item locations
+ further unified dragging tabs vs dragging groups
+ Further unified the Group and TabItem objects under Item
+ tabs now return to their proper size when you pull them out of a group
+ you can now nest groups inside of other groups (though all of the funky repercussions haven't been sorted out yet)
+ Group._children is now an array of Items (rather than DOM elements)
+ Groups and tabs now push other items away when they're moved, and groups also do so when resized
+ The Groups object now keeps an array of groups. This is more robust than counting DOM elements, for instance when a group is fading away (you want to act like it doesn't exist, even though its DOM element is still on the screen)
+ Documented the Item interface in items.js
+ lots of miscellaneous refinements to the code
+ Added Group to window
+ Moved window.Items into items.js
+ Moved window.TabItem into tabitems.js and added a window.TabItems, which is largely the mod routine pulled from ui.js
+ Added jquery.lint to revision-a. Haven't caught anything yet, but seems like it could be helpful.
+ More fiddling with the resizer css
--HG--
rename : browser/themes/pinstripe/browser/tabcandy/shared/resizer.png => browser/themes/pinstripe/browser/tabcandy/resizer.png
+ The grid feature now removes all the tabs from their groups beforehand; it doesn't restore tab sizes properly yet
+ You can now rearrange tabs inside a group
+ More geometry:
++ The Rect constructor now accepts either coordinates or another Rect
++ Rect.inset now accepts either coordinates or a Point
++ New functions: Rect.offset and Rect.equals
+ more work on groups pushing things out of the way
+ some steps toward having groups and tabs share an interface
+ more geometry: we now have a point class, and the rect class now has center and intersect routines
--HG--
rename : content/candies/zoomgroups/gfx/resizer.png => browser/themes/pinstripe/browser/tabcandy/shared/resizer.png
+ You can no longer launch into a tab by right clicking it
+ A group's close box now works
+ A group's title bar now works again (silly css misunderstanding)
+ Added a basic Rect object to utils.js, and a getBounds routine for retrieving the bounds of a DOM element
+ The Utils logging routines no longer expand functions (instead just saying that it's a function)
+ It's no longer possible to accidentally launch into a tab by dragging the mouse and ending up on a tab. Same for close boxes
+ It's no longer possible to add a tab to a group twice (by dragging it around inside the group)
+ When a tab inside a group is closed, it's removed from the group. If it's the last in the group, the group goes away
+ Refactored mirror code to make mirror objects first-class citizens
+ Added a utility routine for determining if an object is a jQuery object (couldn't find one in jQuery itself)
+ Removed some un-needed code that dealt with old-style animations from both of the ui.js implementations (from ian1 and original)
+ Added code that handles zIndex went zooming
+ Moved the pretty new group title bar into the original and ian1 candies, updating the close style so it works in both the tab and group contexts
+ Added forceCanvasSize and unforceCanvasSize functions to tab mirrors
+ Used the new canvas size forcing functions to make the zoom in and out happen in high resolution. Not convinced it's an improvement, especially in the reverse zoom.
+ Brought additional changes from the original candy to the ian1 candy
Also, fixed a bug where I didn't remove the "transitionend" event handler which was causing all sorts of strange things (like zooming in on a tab when the search-box was used.
When you click on a page (both in zoomgroups and original)
the page zooms to the foreground before the tab switch happens
giving the appearance of having the tab zoom to life.
Just after the switch the page resumes its normal size and
position.
It is so very pretty.
+ TODO: Add the reverse animation when switching back from
a tab.
+ Cleaned up the text location when shrunk down
+ Gave the groups rounded corners on all but the resize corner
+ Liberal use of overflow:hidden
+ Removed lasso (for now)
+ The "site" feature now uses grouping. Each site that has multiple pages gets its own group; the remaining pages are grouped together (unless there's only one remaining page, in which case it's just left alone (though maybe it should get a group too))
GROUPS:
+ Although the animation is chunky to non-existent, the Groups object now has an arrange() function that breaks the window into equal sections
+ Fixed a bug where dragging a tab within a group and dropping it again would add it a second time. Related to this bug, found that tabs were being added to the Group._children sometimes as DOM elements and sometimes as jQuery objects. Standardized on DOM objects
+ The Group class is now available from the Groups object, so outside code can create new groups
+ added automatic thumbnail repainting for resized thumbnails
+ updated the original and ian1 candies so the thumbnail scales automatically with the jquery animation of the whole tab
* Added a stop-gap measure for scaling tabs better. (Ian has a better, automatic solution?)
* Ported changes over to the original candy
** TODO: the .arrange() method doesn't work all that well in the original candy
The first time you use the function, it embeds Firebug Lite and then uses that console. This makes it easy to introspect objects, etc. All-around good stuff.
+ New tabs in the stacks candy now find an empty hole rather than piling up at the top
+ The stacks candy now has a "site" feature (upper right) that groups the tabs by domain
+ TabMirror now has a feature to allow pausing paint updates. This allows you to fly things around the screen without getting stutter from paint calls. The stacks candy is currently the only candy that takes advantage of this.
+ The stacks candy was not visually deselecting a group that had been lassoed once the menu went away; it is now.
+ Added assert() to Utils
+ Utils.error() now identifies the error as coming from tabcandy
+ Added a getMilliseconds() to mirror.js (for some reason, it wasn't liking the one in Utils) to replace the use of new Date(), which doesn't work in all situations
+ Added a heartbeat to TabMirror, where all painting happens now. This allows us to control when and how frequently painting happens, throttling when there are a lot of items on the screen.
+ Additional clean-up in TabMirror
+ Updated to jQuery 1.4.2
+ Nice menu fadeout behavior in the stacks candy (fades out faster for a click than a mouse out; pops back in if you mouse back over while it's fading out)
+ Added a tab() feature to window.Tabs, to get a tab object from one of the tab's elements
+ Stacks now pile up directly on top of each other in the stacks candy (rather than being offset a little)
+ Added Utils.isRightClick() for weeding out right clicks in mousedown
+ The Lasso now only starts for left clicks, not both left or right
+ the top level index.html now automatically grabs all the different visualizations and lists them
+ Added a visualization switcher that can be dropped into any visualization; drop down in the upper left of the window
+ The Utils routines log(), trace() and error() now take in any number of parameters. If a parameter is an object, its first level is automatically expanded
+ Fixed lasso in the "original" visualization
--HG--
rename : browser/base/content/tabcandy/jquery-ui.js => browser/base/content/tabcandy/app/jquery-ui.js
rename : browser/base/content/tabcandy/jquery.js => browser/base/content/tabcandy/core/jquery.js
rename : browser/base/content/tabcandy/app/jquery.lasso.js => browser/base/content/tabcandy/shared/jquery.lasso.js
rename : content/ian1/index.html => content/candies/ian1/index.html
rename : content/ian1/ui.js => content/candies/ian1/js/ui.js
rename : content/line/index.html => content/candies/line/index.html
rename : content/line/js/jquery.line.js => content/candies/line/js/jquery.line.js
rename : content/line/js/jquery.select.js => content/candies/line/js/jquery.select.js
rename : content/tab.html => content/candies/original/index.html
rename : content/select/index.html => content/candies/select/index.html
rename : content/stacks/index.html => content/candies/stacks/index.html
rename : content/stacks/js/jquery.select.js => content/candies/stacks/js/jquery.select.js
rename : content/stacks/js/ui.js => content/candies/stacks/js/ui.js
+ updated main index.html to point to all experiences
+ did some file reorganization
--HG--
rename : content/select/js/jquery.lasso.js => browser/base/content/tabcandy/app/jquery.lasso.js
rename : browser/base/content/tabcandy/overlay.js => browser/base/content/tabcandy/app/overlay.js
rename : browser/base/content/tabcandy/pixastic.js => browser/base/content/tabcandy/app/pixastic.js