|
|
- /**
- _enyo.CollapsingArranger_ is an <a href="#enyo.Arranger">enyo.Arranger</a>
- that displays the active control, along with some number of inactive
- controls to fill the available space. The active control is positioned on
- the left side of the container and the rest of the views are laid out to the
- right. The last control, if visible, will expand to fill whatever space is
- not taken up by the previous controls.
-
- For best results with CollapsingArranger, you should set a minimum width
- for each control via a CSS style, e.g., _min-width: 25%_ or
- _min-width: 250px_.
-
- Transitions between arrangements are handled by sliding the new control in
- from the right and collapsing the old control to the left.
- */
- enyo.kind({
- name: "enyo.CollapsingArranger",
- kind: "CarouselArranger",
- size: function() {
- this.clearLastSize();
- this.inherited(arguments);
- },
- //* @protected
- // clear size from last if it's not actually the last
- // (required for adding another control)
- clearLastSize: function() {
- for (var i=0, c$=this.container.getPanels(), c; c=c$[i]; i++) {
- if (c._fit && i != c$.length-1) {
- c.applyStyle("width", null);
- c._fit = null;
- }
- }
- },
- //* @public
- arrange: function(inC, inIndex) {
- var c$ = this.container.getPanels();
- for (var i=0, e=this.containerPadding.left, m, c; c=c$[i]; i++) {
- this.arrangeControl(c, {left: e});
- if (i >= inIndex) {
- e += c.width + c.marginWidth;
- }
- // FIXME: overdragging-ish
- if (i == c$.length - 1 && inIndex < 0) {
- this.arrangeControl(c, {left: e - inIndex});
- }
- }
- },
- calcArrangementDifference: function(inI0, inA0, inI1, inA1) {
- var i = this.container.getPanels().length-1;
- return Math.abs(inA1[i].left - inA0[i].left);
- },
- flowControl: function(inControl, inA) {
- this.inherited(arguments);
- if (this.container.realtimeFit) {
- var c$ = this.container.getPanels();
- var l = c$.length-1;
- var last = c$[l];
- if (inControl == last) {
- this.fitControl(inControl, inA.left);
- }
- }
-
- },
- finish: function() {
- this.inherited(arguments);
- if (!this.container.realtimeFit && this.containerBounds) {
- var c$ = this.container.getPanels();
- var a$ = this.container.arrangement;
- var l = c$.length-1;
- var c = c$[l];
- this.fitControl(c, a$[l].left);
- }
- },
- //* @protected
- fitControl: function(inControl, inOffset) {
- inControl._fit = true;
- inControl.applyStyle("width", (this.containerBounds.width - inOffset) + "px");
- inControl.resized();
- }
- });
|