WIP: pinned tabs in the vertical tab bar can be moved to other rows

This commit is contained in:
Piro / YUKI Hiroshi 2012-12-04 02:49:52 +09:00
parent 196bb1e93c
commit a9b74110e3

View File

@ -164,7 +164,7 @@
'TDUContext.utils.updateDraggedTabs(TDUContext);'
).replace(
'let leftTab =',
'tabs = TDUContext.utils.collectAlignedTabs(tabs, TDUContext);\n' +
'tabs = TDUContext.utils.collectAnimateTabs(tabs, TDUContext);\n' +
'$&'
).replace(
'translateX = Math.max(',
@ -249,7 +249,7 @@
//
// // Move the dragged tab based on the mouse position.
//
// tabs = TDUContext.utils.collectAlignedTabs(tabs, TDUContext);
// tabs = TDUContext.utils.collectAnimateTabs(tabs, TDUContext);
// let leftTab = tabs[0];
// let rightTab = tabs[tabs.length - 1];
//
@ -354,19 +354,29 @@
);
var tabbar = this.getTabbarFromEvent(aEvent);
var tabbarIsVertical = this.isVertical(tabbar);
var isVertical = 'isVertical' in context.options ?
context.options.isVertical :
this.isVertical(tabbar) ;
tabbarIsVertical ;
context.position = isVertical ? 'screenY' : 'screenX' ;
context.align = isVertical ? 'screenX' : 'screenY' ;
context.align = tabbarIsVertical ? 'screenY' : 'screenX' ;
context.size = isVertical ? 'height' : 'width' ;
context.sizeToAlign = tabbarIsVertical ? 'height' : 'width' ;
context.scroll = isVertical ? 'scrollY' : 'scrollX';
context.translator = isVertical ? 'translateY' : 'translateX' ;
context.currentX = aEvent[context.position];
context.currentPositionCoordinate = aEvent[context.position];
context.currentAlignCoordinate = aEvent[context.align];
var b = this.getTabBrowserFromChild(tabbar);
var firstNormalTab = b.visibleTabs[b._numPinnedTabs];
context.pinned = context.draggedTab.pinned;
context.onPinnedArea = context.currentAlignCoordinate < firstNormalTab.boxObject[context.align];
context.tabbarIsVertical = tabbarIsVertical;
context.tabWidth = context.draggedTab.getBoundingClientRect()[context.size];
context.tabCenterOffset = context.tabWidth / (context.options.canDropOnSelf ? 3 : 2 );
context.utils = this;
context.destroy = function() {
Object.keys(context).forEach(function(key) {
@ -392,7 +402,7 @@
draggedTab._dragData.animLastScreenX = draggedTab._dragData[context.position];
}, this);
if (!('previousPosition' in context.draggedTab._dragData))
context.draggedTab._dragData.previousPosition = context.currentX;
context.draggedTab._dragData.previousPosition = context.currentPositionCoordinate;
},
fixDragData : function TDU_fixDragData(aData)
{
@ -404,21 +414,22 @@
updateDraggedTabs : function TDU_updateDraggedTabs(context)
{
context.draggedTabs.forEach(function(draggedTab) {
draggedTab._dragData.animLastScreenX = context.currentX;
draggedTab._dragData.animLastScreenX = context.currentPositionCoordinate;
}, this);
},
collectAlignedTabs : function TDU_collectAlignedTabs(tabs, context)
collectAnimateTabs : function TDU_collectAnimateTabs(tabs, context)
{
context.allAnimatedTabs = tabs;
var baseTab = context.draggedTab;
if (!baseTab.pinned)
if (!context.pinned || !context.onPinnedArea || !context.isVertical)
return tabs;
// With Tree Style Tabs, pinned tabs are shown with multiple rows.
// We should animate only tabs in the same row.
var base = baseTab.boxObject[context.align];
return tabs.filter(function(aTab) {
return aTab.boxObject[context.align] == base;
var box = aTab.boxObject;
var min = box[context.align];
var max = min + box[context.sizeToAlign];
return context.currentAlignCoordinate >= min && context.currentAlignCoordinate <= max;
});
},
updateLeftBound : function TDU_updateLeftBound(leftBound, context)
@ -447,16 +458,16 @@
context.dontMove = (
context.options.canDropOnSelf &&
(
(context.draggedTab._dragData.previousPosition > context.currentX &&
(context.draggedTab._dragData.previousPosition > context.currentPositionCoordinate &&
context.screenX + context.tabCenterOffset < context.tabCenter) ||
(context.draggedTab._dragData.previousPosition < context.currentX &&
(context.draggedTab._dragData.previousPosition < context.currentPositionCoordinate &&
context.screenX + boxObject[context.size] - context.tabCenterOffset > context.lastTabCenter)
)
);
},
checkDontMove : function TDU_checkDontMove(context)
{
context.draggedTab._dragData.previousPosition = context.currentX;
context.draggedTab._dragData.previousPosition = context.currentPositionCoordinate;
return context.dontMove;
},
extractNotDraggedTabs : function TDU_extractNotDraggedTabs(tabs, context)