| Index: third_party/polymer/components-chromium/core-layout-trbl/core-layout-trbl-extracted.js
|
| diff --git a/third_party/polymer/components-chromium/core-layout-trbl/core-layout-trbl-extracted.js b/third_party/polymer/components-chromium/core-layout-trbl/core-layout-trbl-extracted.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..58c21f0c2e51ccefb1a082ccf3fecb621f07c0de
|
| --- /dev/null
|
| +++ b/third_party/polymer/components-chromium/core-layout-trbl/core-layout-trbl-extracted.js
|
| @@ -0,0 +1,130 @@
|
| +
|
| +
|
| + Polymer('core-layout-trbl', {
|
| +
|
| + vertical: false,
|
| +
|
| + ready: function() {
|
| + this.setAttribute('nolayout', '');
|
| + },
|
| +
|
| + attached: function() {
|
| + this.asyncMethod(function() {
|
| + this.prepare();
|
| + this.layout();
|
| + });
|
| + },
|
| +
|
| + prepare: function() {
|
| + var parent = this.parentNode.host || this.parentNode;
|
| + // explicit position harmful on <body>
|
| + if (parent.localName !== 'body') {
|
| + // may recalc
|
| + var cs = window.getComputedStyle(parent);
|
| + if (cs.position === 'static') {
|
| + parent.style.position = 'relative';
|
| + }
|
| + //parent.style.overflow = 'hidden';
|
| + }
|
| + // changes will cause another recalc at next validation step
|
| + var stylize = this.stylize, vertical;
|
| + this.parentNode.childNodes.array().forEach(function(c, i) {
|
| + if (c.nodeType === Node.ELEMENT_NODE && !c.hasAttribute('nolayout')) {
|
| + stylize(c, {
|
| + position: 'absolute',
|
| + boxSizing: 'border-box',
|
| + MozBoxSizing: 'border-box',
|
| + });
|
| + // test for auto-vertical
|
| + if (vertical === undefined) {
|
| + vertical = (c.offsetWidth == 0 && c.offsetHeight !== 0);
|
| + }
|
| + }
|
| + });
|
| + this.vertical = this.vertical || vertical;
|
| + },
|
| +
|
| + /**
|
| + * Arrange sibling nodes end-to-end in one dimension.
|
| + *
|
| + * Arrangement is horizontal unless the `vertical`
|
| + * attribute is applied on this node.
|
| + *
|
| + * @method layout
|
| + */
|
| + layout: function() {
|
| + var parent = this.parentNode.host || this.parentNode;
|
| + var vertical = this.vertical;
|
| + var ww = 0, hh = 0, pre = [], fit, post = [];
|
| + var list = pre;
|
| + // gather element information (at most one recalc)
|
| + this.parentNode.childNodes.array().forEach(function(c, i) {
|
| + if (c.nodeType===Node.ELEMENT_NODE && !c.hasAttribute('nolayout')) {
|
| + var info = {
|
| + element: c,
|
| + w: c.offsetWidth,
|
| + h: c.offsetHeight
|
| + };
|
| + if (!c.hasAttribute('fit') && !c.hasAttribute('flex')) {
|
| + ww += c.offsetWidth;
|
| + hh += c.offsetHeight;
|
| + list.push(info);
|
| + } else {
|
| + fit = c;
|
| + list = post;
|
| + ww = hh = 0;
|
| + }
|
| + }
|
| + });
|
| + // update layout styles (invalidate, no recalc)
|
| + var v = 0;
|
| + var mxp = 0, myp = 0;
|
| + var stylize = this.stylize;
|
| + pre.forEach(function(info) {
|
| + if (vertical) {
|
| + stylize(info.element, {
|
| + top: v + 'px', right: mxp, height: info.h + 'px', left: mxp
|
| + });
|
| + } else {
|
| + stylize(info.element, {
|
| + top: myp, width: info.w + 'px', bottom: myp, left: v + 'px'
|
| + });
|
| + }
|
| + v += vertical ? info.h : info.w;
|
| + });
|
| + if (fit) {
|
| + if (vertical) {
|
| + stylize(fit, {
|
| + top: v + 'px', right: mxp, bottom: hh + 'px', left: mxp
|
| + });
|
| + } else {
|
| + stylize(fit, {
|
| + top: myp, right: ww + 'px', bottom: myp, left: v + 'px'
|
| + });
|
| + }
|
| + v = vertical ? hh : ww;
|
| + post.forEach(function(info) {
|
| + v -= vertical ? info.h : info.w;
|
| + if (vertical) {
|
| + stylize(info.element, {
|
| + height: info.h + 'px', right: mxp, bottom: v + 'px', left: mxp
|
| + });
|
| + } else {
|
| + stylize(info.element, {
|
| + top: myp, right: v + 'px', bottom: myp, width: info.w + 'px'
|
| + });
|
| + }
|
| + });
|
| + }
|
| + },
|
| +
|
| + stylize: function(element, styles) {
|
| + var style = element.style;
|
| + Object.keys(styles).forEach(function(k){
|
| + style[k] = styles[k];
|
| + });
|
| + }
|
| +
|
| + });
|
| +
|
| +
|
|
|