UNPKG

4.33 kBJavaScriptView Raw
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})();