IHTSDO/snomed-interaction-components

View on GitHub
external-libs/jlayout.border.js

Summary

Maintainability
C
7 hrs
Test Coverage
/**
 * @preserve jLayout Border Layout - JavaScript Layout Algorithms v0.4
 *
 * Licensed under the new BSD License.
 * Copyright 2008-2009, Bram Stein
 * All rights reserved.
 */
/*global jLayout:true */
(function () {
    jLayout = (typeof jLayout === 'undefined') ? {} : jLayout;

    jLayout.border = function (spec) {
        var my = {},
            that = {},
            east = spec.east,
            west = spec.west,
            north = spec.north,
            south = spec.south,
            center = spec.center;

        my.hgap = spec.hgap || 0;
        my.vgap = spec.vgap || 0;

        that.items = function () {
            var items = [];
            if (east) {
                items.push(east);
            }

            if (west) {
                items.push(west);
            }

            if (north) {
                items.push(north);
            }

            if (south) {
                items.push(south);
            }

            if (center) {
                items.push(center);
            }
            return items;
        };        

        that.layout = function (container) {
            var size = container.bounds(),
                insets = container.insets(),
                top = insets.top,
                bottom = size.height - insets.bottom,
                left = insets.left,
                right = size.width - insets.right,
                tmp;

            if (north && north.isVisible()) {
                tmp = north.preferredSize();
                north.bounds({'x': left, 'y': top, 'width': right - left, 'height': tmp.height});
                north.doLayout();

                top += tmp.height + my.vgap;
            }
            if (south && south.isVisible()) {
                tmp = south.preferredSize();
                south.bounds({'x': left, 'y': bottom - tmp.height, 'width': right - left, 'height': tmp.height});
                south.doLayout();

                bottom -= tmp.height + my.vgap;
            }
            if (east && east.isVisible()) {
                tmp = east.preferredSize();
                east.bounds({'x': right - tmp.width, 'y': top, 'width': tmp.width, 'height': bottom - top});
                east.doLayout();

                right -= tmp.width + my.hgap;
            }
            if (west && west.isVisible()) {
                tmp = west.preferredSize();
                west.bounds({'x': left, 'y': top, 'width': tmp.width, 'height': bottom - top});
                west.doLayout();

                left += tmp.width + my.hgap;
            }
            if (center && center.isVisible()) {
                center.bounds({'x': left, 'y': top, 'width': right - left, 'height': bottom - top});
                center.doLayout();
            }
            return container;
        };

        function typeLayout(type) {
            return function (container) {
                var insets = container.insets(),
                    width = 0,
                    height = 0,
                    type_size;

                if (east && east.isVisible()) {
                    type_size = east[type + 'Size']();
                    width += type_size.width + my.hgap;
                    height = type_size.height;
                }
                if (west && west.isVisible()) {
                    type_size = west[type + 'Size']();
                    width += type_size.width + my.hgap;
                    height = Math.max(type_size.height, height);
                }
                if (center && center.isVisible()) {
                    type_size = center[type + 'Size']();
                    width += type_size.width;
                    height = Math.max(type_size.height, height);
                }
                if (north && north.isVisible()) {
                    type_size = north[type + 'Size']();
                    width = Math.max(type_size.width, width);
                    height += type_size.height + my.vgap;
                }
                if (south && south.isVisible()) {
                    type_size = south[type + 'Size']();
                    width = Math.max(type_size.width, width);
                    height += type_size.height + my.vgap;
                }

                return {
                    'width': width + insets.left + insets.right, 
                    'height': height + insets.top + insets.bottom
                };
            };
        }
        that.preferred = typeLayout('preferred');
        that.minimum = typeLayout('minimum');
        that.maximum = typeLayout('maximum');
        return that;
    };
}());