11"use strict" ;
2+
23var _ = require ( "lodash" ) ;
34var assert = require ( "assert" ) ;
45var path = require ( "path" ) ;
56var defaultLayoutConfig = require ( "./default-layout-config" ) ;
67var validate = require ( "jsonschema" ) . validate ;
78var layoutConfigSchema = require ( "./layout-config-schema.json" ) ;
8- /* eslint-disable no-magic-numbers */
9-
10- // Each layout consists of vertical panels, that contains its position and horizontal views.
11- // Flex-like positions of panels and views defined by 'grow' and 'size' parameters.
12- // View or panel with 'size' has exactly <size> height or width respectively.
13- // View or panel with 'grow' fills <grow> part of the residuary space (it works like flex-grow).
14- // By default, position = { grow: 1 }
15-
16- var normalizePosition = function ( position ) {
17- if ( ! _ . has ( position , "grow" ) && ! _ . has ( position , "size" ) ) {
18- position = { grow : 1 } ;
19- }
20-
21- return position ;
22- } ;
23-
24- var concatPosition = function ( position1 , position2 ) {
25- position1 = normalizePosition ( position1 ) ;
26- position2 = normalizePosition ( position2 ) ;
27-
28- return {
29- grow : ( position1 . grow || 0 ) + ( position2 . grow || 0 ) ,
30- size : ( position1 . size || 0 ) + ( position2 . size || 0 )
31- } ;
32- } ;
33-
34- var getSummaryPosition = function ( items ) {
35- return items . map ( function ( item ) { return item . position ; } )
36- . reduce ( concatPosition , { grow : 0 , size : 0 } ) ;
37- } ;
38-
39- var getSize = function ( parentSize , itemPosition ) {
40- var position = normalizePosition ( itemPosition . position ) ;
41- if ( _ . has ( position , "size" ) ) {
42- return position . size ;
43- }
44-
45- // Prevent last growing view from overflowing screen
46- var round = itemPosition . offset . grow + position . grow === itemPosition . summary . grow ?
47- Math . floor : Math . ceil ;
48-
49- return round (
50- ( parentSize - itemPosition . summary . size ) * position . grow / itemPosition . summary . grow
51- ) ;
52- } ;
53-
54- var getOffset = function ( parentSize , itemPosition ) {
55- return itemPosition . summary . grow ? Math . ceil (
56- itemPosition . offset . size +
57- ( parentSize - itemPosition . summary . size ) * itemPosition . offset . grow / itemPosition . summary . grow
58- ) : 0 ;
59- } ;
60-
61- var createViewLayout = function ( view , viewPosition , panelPosition ) {
62- return {
63- view : view ,
64- getPosition : function ( parent ) {
65- return {
66- width : getSize ( parent . width , panelPosition ) ,
67- height : getSize ( parent . height , viewPosition ) ,
68- left : getOffset ( parent . width , panelPosition ) ,
69- top : getOffset ( parent . height , viewPosition )
70- } ;
71- }
72- } ;
73- } ;
74-
75- var createPanelLayout = function ( panelPosition , views ) {
76- var viewSummaryPosition = getSummaryPosition ( views ) ;
77- var offsetPosition = { size : 0 , grow : 0 } ;
78-
79- return views . map ( function ( view ) {
80- var viewPosition = {
81- summary : viewSummaryPosition ,
82- offset : offsetPosition ,
83- position : view . position
84- } ;
85-
86- offsetPosition = concatPosition ( view . position , offsetPosition ) ;
87-
88- return createViewLayout ( view , viewPosition , panelPosition ) ;
89- } ) ;
90- } ;
91-
92- var createLayout = function ( panelsConfig ) {
93- var panelSummaryPosition = getSummaryPosition ( panelsConfig ) ;
94- var offsetPosition = { size : 0 , grow : 0 } ;
95-
96- return panelsConfig . reduce ( function ( layouts , panelConfig ) {
97- var panelPosition = {
98- summary : panelSummaryPosition ,
99- offset : offsetPosition ,
100- position : panelConfig . position
101- } ;
102-
103- var viewLayouts = createPanelLayout ( panelPosition , panelConfig . views ) ;
104-
105- offsetPosition = concatPosition ( panelConfig . position , offsetPosition ) ;
106-
107- return layouts . concat ( viewLayouts ) ;
108- } , [ ] ) ;
109- } ;
1109
11110module . exports = function generateLayouts ( layoutsFile ) {
11211 var layoutConfig = defaultLayoutConfig ;
@@ -125,5 +24,13 @@ module.exports = function generateLayouts(layoutsFile) {
12524 ) ;
12625 }
12726
128- return layoutConfig . map ( createLayout ) ;
27+ return layoutConfig . map ( function ( layouts ) {
28+ return {
29+ view : {
30+ type : "panel" ,
31+ views : layouts . map ( function ( config ) { return _ . merge ( config , { type : "panel" } ) ; } )
32+ } ,
33+ getPosition : _ . identity
34+ } ;
35+ } ) ;
12936} ;
0 commit comments