1 | (function() {
|
2 | 'use strict';
|
3 |
|
4 | window.Ractive.controller('pl-layout-sidebars', function(component, data, el, config, done) {
|
5 | var DIRECTIONS = ['left', 'right'],
|
6 |
|
7 | freezeSet = false;
|
8 |
|
9 | $.each(DIRECTIONS, function(i, dir) {
|
10 | data[dir + 'ContentUsed'] = config && config.partials && config.partials[dir + '-content'];
|
11 | data[dir + 'ContentPos'] = 0;
|
12 | data[dir + 'ContentCollapsedAfter'] = false;
|
13 | data[dir + 'ContentWidth'] = typeof data[dir + '-content-width'] != 'undefined' ? data[dir + '-content-width'] : 300;
|
14 | data[dir + 'ContentAreaWidth'] = data[dir + 'ContentUsed'] ? data[dir + 'ContentWidth'] : 30;
|
15 | data[dir + 'ContentExpended'] = false;
|
16 | });
|
17 |
|
18 | var LayoutSidebars = component({
|
19 | plName: 'pl-layout-sidebars',
|
20 | data: data
|
21 | }),
|
22 | parentPlatform = LayoutSidebars.findParent('name', 'pl-layout-platform'),
|
23 | _$el = {
|
24 | window: $(window),
|
25 | layout: $(LayoutSidebars.el),
|
26 | content: $(LayoutSidebars.el).find('.pl-layout-content')
|
27 | };
|
28 |
|
29 | if (parentPlatform) {
|
30 | parentPlatform.on('titleAreaHeightChanged', function(args) {
|
31 | LayoutSidebars.set('titleAreaHeight', args.height);
|
32 |
|
33 | _fireContentResize(args.waiting);
|
34 | });
|
35 |
|
36 | LayoutSidebars.set('titleAreaHeight', parentPlatform.get('titleAreaHeight'));
|
37 | }
|
38 |
|
39 | function _fireContentResize(waiting) {
|
40 | LayoutSidebars.fire('contentResize', {
|
41 | width: _$el.window.width() - LayoutSidebars.get('leftContentAreaWidth') - LayoutSidebars.get('rightContentAreaWidth'),
|
42 | height: _$el.content.outerHeight(),
|
43 | waiting: typeof waiting == 'undefined' ? 550 : waiting
|
44 | });
|
45 | }
|
46 |
|
47 | function _refreshDirContent(dir, expended, updateContentExpended) {
|
48 | if (freezeSet) {
|
49 | return;
|
50 | }
|
51 |
|
52 | updateContentExpended = updateContentExpended === false ? false : true;
|
53 |
|
54 | freezeSet = true;
|
55 |
|
56 | var $dirContent = _$el.layout.find('.pl-layout-' + dir + '-container'),
|
57 | $bar = $dirContent.find('.pl-layout-' + dir + '-bar-container');
|
58 |
|
59 | if (updateContentExpended) {
|
60 | LayoutSidebars.set(dir + '-content-expended', expended);
|
61 | }
|
62 |
|
63 | LayoutSidebars.set(dir + 'ContentExpended', expended);
|
64 | LayoutSidebars.set(dir + 'ContentAreaWidth', expended ? $dirContent.width() : $bar.width());
|
65 | LayoutSidebars.set(dir + 'ContentPos', expended ? 0 : -$dirContent.width() + $bar.width());
|
66 |
|
67 | _fireContentResize();
|
68 |
|
69 | if (expended) {
|
70 | LayoutSidebars.set(dir + 'ContentCollapsedAfter', false);
|
71 | }
|
72 | else if (updateContentExpended) {
|
73 | setTimeout(function() {
|
74 | LayoutSidebars.set(dir + 'ContentCollapsedAfter', true);
|
75 | }, 550);
|
76 | }
|
77 |
|
78 | freezeSet = false;
|
79 | }
|
80 |
|
81 | $.each(DIRECTIONS, function(i, dir) {
|
82 | LayoutSidebars.set(dir + 'NoAnimation', true);
|
83 | _refreshDirContent(dir, data[dir + 'ContentExpended'], false);
|
84 | LayoutSidebars.set(dir + 'NoAnimation', false);
|
85 |
|
86 | LayoutSidebars.observe(dir + '-content-expended', function(newValue) {
|
87 | if (freezeSet) {
|
88 | return;
|
89 | }
|
90 |
|
91 | var expended = newValue === false || (newValue && newValue == 'false') ? false : true;
|
92 |
|
93 | _refreshDirContent(dir, expended);
|
94 | });
|
95 |
|
96 | LayoutSidebars.observe(dir + '-content-title', function(newValue) {
|
97 | if (freezeSet) {
|
98 | return;
|
99 | }
|
100 |
|
101 | LayoutSidebars.set(dir + 'ContentTitle', newValue || null);
|
102 | });
|
103 |
|
104 | LayoutSidebars.observe(dir + '-content-width', function(newValue) {
|
105 | if (freezeSet) {
|
106 | return;
|
107 | }
|
108 |
|
109 | newValue = typeof newValue == 'undefined' ? 300 : newValue;
|
110 |
|
111 | var expended = !!LayoutSidebars.get(dir + 'ContentExpended');
|
112 |
|
113 | LayoutSidebars.set(dir + 'NoAnimation', !expended ? true : false);
|
114 |
|
115 | LayoutSidebars.set(dir + 'ContentWidth', newValue ? parseInt(newValue, 10) : 0);
|
116 |
|
117 | _refreshDirContent(dir, expended);
|
118 |
|
119 | LayoutSidebars.set(dir + 'NoAnimation', false);
|
120 | });
|
121 | });
|
122 |
|
123 | LayoutSidebars.on('toggleLeftBar toggleRightBar', function(event) {
|
124 | var dir = event.name == 'toggleLeftBar' ? 'left' : 'right',
|
125 | expended = !LayoutSidebars.get(dir + 'ContentExpended');
|
126 |
|
127 | _refreshDirContent(dir, expended);
|
128 | });
|
129 |
|
130 | LayoutSidebars.require().then(done);
|
131 | });
|
132 |
|
133 | })();
|