ovenplayer 0.10.47 → 0.10.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,321 +1,321 @@
1
- /**
2
- * Created by hoho on 2018. 7. 26..
3
- */
4
- import OvenTemplate from 'view/engine/OvenTemplate';
5
- import PanelManager from "view/global/PanelManager";
6
- import LA$ from 'utils/likeA$';
7
- import _ from "utils/underscore";
8
- import sizeHumanizer from "utils/sizeHumanizer";
9
- import SpeedPanel from "view/components/controls/settingPanel/speedPanel";
10
- import ZoomPanel from "view/components/controls/settingPanel/zoomPanel";
11
- import SourcePanel from "view/components/controls/settingPanel/sourcePanel";
12
- import QualityPanel from "view/components/controls/settingPanel/qualityPanel";
13
- import AudioTrackPanel from "view/components/controls/settingPanel/audioTrackPanel";
14
- import SubtitleTrackPanel from 'view/components/controls/settingPanel/subtitleTrackPanel';
15
- import CaptionPanel from "view/components/controls/settingPanel/captionPanel";
16
- import TimeDisplayPanel from "view/components/controls/settingPanel/timeDisplayPanel";
17
- import {
18
- CONTENT_LEVEL_CHANGED,
19
- PLAYER_ZOOM_CHANGED,
20
- AUDIO_TRACK_CHANGED,
21
- SUBTITLE_TRACK_CHANGED
22
- } from "api/constants";
23
-
24
- let PANEL_TITLE = {
25
- "speed": "Speed",
26
- "speedUnit": "x",
27
- "source": "Source",
28
- "quality": "Quality",
29
- "audioTrack": "Audio",
30
- "caption": "Caption",
31
- "display": "Display",
32
- "zoom": "Zoom",
33
- "subtitleTrack": "Subtitle"
34
- };
35
-
36
- const Panels = function ($container, api, data) {
37
-
38
- let $root = LA$(api.getContainerElement());
39
- let panelManager = PanelManager();
40
-
41
- let playerConfig = api.getConfig();
42
-
43
- if (playerConfig && playerConfig.systemText) {
44
- Object.keys(PANEL_TITLE).forEach(title => {
45
- PANEL_TITLE[title] = playerConfig.systemText.ui.setting[title];
46
- });
47
- }
48
-
49
- function extractSubPanelData(api, panelType) {
50
- let panel = {
51
- id: "panel-" + new Date().getTime(),
52
- title: "",
53
- body: [],
54
- useCheck: true,
55
- panelType: panelType,
56
- height: $root.height() - $root.find(".op-bottom-panel").height()
57
- };
58
- panel.title = PANEL_TITLE[panelType];
59
- if (panelType === "speed") {
60
- let playBackRates = api.getConfig().playbackRates;
61
- let currentPlaybackRate = api.getPlaybackRate();
62
- for (let i = 0; i < playBackRates.length; i++) {
63
- let body = {
64
- title: playBackRates[i] + PANEL_TITLE.speedUnit, //(playBackRates[i] === 1? "Normal" : playBackRates[i]),
65
- isCheck: currentPlaybackRate === playBackRates[i],
66
- value: playBackRates[i],
67
- description: playBackRates[i],
68
- panelType: panelType
69
- };
70
- panel.body.push(body);
71
- }
72
-
73
- } else if (panelType === "zoom") {
74
- let bodyIn = {
75
- title: "+5%",
76
- isCheck: false,
77
- value: 0.05,
78
- description: 0.05,
79
- panelType: panelType
80
- };
81
- let body = {
82
- title: "100%",
83
- isCheck: false,
84
- value: 0,
85
- description: 1.0,
86
- panelType: panelType
87
- };
88
- let bodyOut = {
89
- title: "-5%",
90
- isCheck: false,
91
- value: -0.05,
92
- description: -0.05,
93
- panelType: panelType
94
- };
95
- panel.body.push(bodyIn);
96
- panel.body.push(body);
97
- panel.body.push(bodyOut);
98
-
99
- } else if (panelType === "source") {
100
- let sources = api.getSources();
101
- for (let i = 0; i < sources.length; i++) {
102
- let body = {
103
- title: sources[i].label,
104
- isCheck: api.getCurrentSource() === i,
105
- value: i,
106
- panelType: panelType
107
- };
108
- panel.body.push(body);
109
- }
110
-
111
- } else if (panelType === "quality") {
112
- let qualityLevels = api.getQualityLevels();
113
- let isQualityCheck = api.isAutoQuality();
114
- panel.body.push({
115
- title: playerConfig.systemText.ui.quality.auto,
116
- isCheck: isQualityCheck,
117
- value: "AUTO",
118
- panelType: panelType
119
- });
120
- for (let i = 0; i < qualityLevels.length; i++) {
121
- let body = {
122
- title: qualityLevels[i].label,
123
- isCheck: !isQualityCheck && api.getCurrentQuality() === i,
124
- value: i,
125
- panelType: panelType
126
- };
127
- panel.body.push(body);
128
- }
129
-
130
- } else if (panelType === "audioTrack") {
131
- let audioTracks = api.getAudioTracks();
132
-
133
- for (let i = 0; i < audioTracks.length; i++) {
134
- let body = {
135
- title: audioTracks[i].label,
136
- isCheck: audioTracks[i].index === api.getCurrentAudioTrack(),
137
- value: audioTracks[i].index,
138
- panelType: panelType
139
- };
140
- panel.body.push(body);
141
- }
142
-
143
- } else if (panelType === "subtitleTrack") {
144
- let subtitleTracks = api.getSubtitleTracks();
145
-
146
- panel.body.push({
147
- title: "Off",
148
- isCheck: api.getCurrentSubtitleTrack() === -1,
149
- value: -1,
150
- panelType: panelType
151
- });
152
-
153
- for (let i = 0; i < subtitleTracks.length; i++) {
154
- let body = {
155
- title: subtitleTracks[i].label,
156
- isCheck: subtitleTracks[i].index === api.getCurrentSubtitleTrack(),
157
- value: subtitleTracks[i].index,
158
- panelType: panelType
159
- };
160
- panel.body.push(body);
161
- }
162
-
163
- } else if (panelType === "caption") {
164
- let captions = api.getCaptionList();
165
- panel.body.push({
166
- title: "Off",
167
- isCheck: api.getCurrentCaption() === -1,
168
- value: -1,
169
- panelType: panelType
170
- });
171
- for (let i = 0; i < captions.length; i++) {
172
- let body = {
173
- title: captions[i].label,
174
- isCheck: api.getCurrentCaption() === i,
175
- value: i,
176
- panelType: panelType
177
- };
178
- panel.body.push(body);
179
- }
180
-
181
- } else if (panelType === "display") {
182
- let displayModes = [
183
- "Play time",
184
- "Framecode"
185
- ];
186
- for (let i = 0; i < displayModes.length; i++) {
187
- let body = {
188
- title: displayModes[i],
189
- isCheck: api.isTimecodeMode() ? (displayModes[i] === "Play time") : (displayModes[i] === "Framecode"),
190
- value: displayModes[i],
191
- panelType: panelType
192
- };
193
- panel.body.push(body);
194
- }
195
-
196
- }
197
- return panel;
198
- };
199
-
200
- data.setFront = function (isFront) {
201
- if (isFront) {
202
- $root.find("#" + data.id).removeClass("background");
203
- } else {
204
- $root.find("#" + data.id).addClass("background");
205
- }
206
- };
207
-
208
- function setPanelMaxHeight() {
209
- if ($root.find(".op-setting-panel")) {
210
- $root.find(".op-setting-panel").css("max-height", $root.height() - $root.find(".op-bottom-panel").height() + "px");
211
- }
212
- };
213
- const onRendered = function ($current, template) {
214
-
215
- setPanelMaxHeight();
216
-
217
- api.on(CONTENT_LEVEL_CHANGED, function (data) {
218
- let newQuality = data.currentQuality;
219
- if (data.type === "render" && $root.find("#" + template.data.id).find(".op-setting-item")) {
220
- _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
221
- let $panel = LA$(panel);
222
-
223
- if ($panel.attr("op-panel-type") === "quality") {
224
- let qualityList = api.getQualityLevels();
225
- let newQualityObject = qualityList[newQuality];
226
- $panel.find(".op-setting-item-value").text(newQualityObject.width + "x" + newQualityObject.height + ", " + sizeHumanizer(newQualityObject.bitrate, true, "bps"));
227
- }
228
-
229
- });
230
- }
231
-
232
- }, template);
233
-
234
- api.on(AUDIO_TRACK_CHANGED, function (data) {
235
- _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
236
-
237
- let $panel = LA$(panel);
238
-
239
- if ($panel.attr("op-panel-type") === "audioTrack") {
240
- $panel.find(".op-setting-item-value").text(api.getAudioTracks()[data.currentAudioTrack].label);
241
- }
242
- });
243
- }, template);
244
-
245
- api.on(SUBTITLE_TRACK_CHANGED, function (data) {
246
- _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
247
-
248
- let $panel = LA$(panel);
249
-
250
- if ($panel.attr("op-panel-type") === "subtitleTrack") {
251
- if (data.currentSubtitleTrack === -1) {
252
- $panel.find(".op-setting-item-value").text("Off");
253
- } else {
254
- $panel.find(".op-setting-item-value").text(api.getSubtitleTracks()[data.currentSubtitleTrack].label);
255
- }
256
-
257
- }
258
- });
259
- }, template);
260
-
261
-
262
- api.on(PLAYER_ZOOM_CHANGED, function (data) {
263
- _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
264
-
265
- let $panel = LA$(panel);
266
-
267
- if ($panel.attr("op-panel-type") === "zoom") {
268
- $panel.find(".op-setting-item-value").text(Math.round(data.zoomFactor * 100) + "%");
269
- }
270
- });
271
- }, template);
272
- };
273
- const onDestroyed = function (template) {
274
- api.off(CONTENT_LEVEL_CHANGED, null, template);
275
- api.off(AUDIO_TRACK_CHANGED, null, template);
276
- api.off(SUBTITLE_TRACK_CHANGED, null, template);
277
- api.off(PLAYER_ZOOM_CHANGED, null, template);
278
- };
279
- const events = {
280
- "click .op-setting-item": function (event, $current, template) {
281
- event.preventDefault();
282
- //if this panel is background it disabled click.
283
- if ($root.find("#" + data.id).hasClass("background")) {
284
- return false;
285
- }
286
- let panelType = LA$(event.currentTarget).attr("op-panel-type");
287
- let panel = null;
288
- if (panelType === "speed") {
289
- panel = SpeedPanel($container, api, extractSubPanelData(api, panelType));
290
- } else if (panelType === "zoom") {
291
- panel = ZoomPanel($container, api, extractSubPanelData(api, panelType));
292
- } else if (panelType === "source") {
293
- panel = SourcePanel($container, api, extractSubPanelData(api, panelType));
294
- } else if (panelType === "quality") {
295
- panel = QualityPanel($container, api, extractSubPanelData(api, panelType));
296
- } else if (panelType === "audioTrack") {
297
- panel = AudioTrackPanel($container, api, extractSubPanelData(api, panelType));
298
- } else if (panelType === "subtitleTrack") {
299
- panel = SubtitleTrackPanel($container, api, extractSubPanelData(api, panelType));
300
- } else if (panelType === "caption") {
301
- panel = CaptionPanel($container, api, extractSubPanelData(api, panelType));
302
- } else if (panelType === "display") {
303
- panel = TimeDisplayPanel($container, api, extractSubPanelData(api, panelType));
304
- }
305
-
306
- panelManager.add(panel);
307
- },
308
- "click .op-setting-title": function (event, $current, template) {
309
- event.preventDefault();
310
- if ($root.find("#" + data.id).hasClass("background")) {
311
- return false;
312
- }
313
- panelManager.removeLastItem();
314
- }
315
- };
316
- return OvenTemplate($container, "Panels", api.getConfig(), data, events, onRendered, onDestroyed);
317
-
318
- };
319
-
320
- export default Panels;
321
-
1
+ /**
2
+ * Created by hoho on 2018. 7. 26..
3
+ */
4
+ import OvenTemplate from 'view/engine/OvenTemplate';
5
+ import PanelManager from "view/global/PanelManager";
6
+ import LA$ from 'utils/likeA$';
7
+ import _ from "utils/underscore";
8
+ import sizeHumanizer from "utils/sizeHumanizer";
9
+ import SpeedPanel from "view/components/controls/settingPanel/speedPanel";
10
+ import ZoomPanel from "view/components/controls/settingPanel/zoomPanel";
11
+ import SourcePanel from "view/components/controls/settingPanel/sourcePanel";
12
+ import QualityPanel from "view/components/controls/settingPanel/qualityPanel";
13
+ import AudioTrackPanel from "view/components/controls/settingPanel/audioTrackPanel";
14
+ import SubtitleTrackPanel from 'view/components/controls/settingPanel/subtitleTrackPanel';
15
+ import CaptionPanel from "view/components/controls/settingPanel/captionPanel";
16
+ import TimeDisplayPanel from "view/components/controls/settingPanel/timeDisplayPanel";
17
+ import {
18
+ CONTENT_LEVEL_CHANGED,
19
+ PLAYER_ZOOM_CHANGED,
20
+ AUDIO_TRACK_CHANGED,
21
+ SUBTITLE_TRACK_CHANGED
22
+ } from "api/constants";
23
+
24
+ let PANEL_TITLE = {
25
+ "speed": "Speed",
26
+ "speedUnit": "x",
27
+ "source": "Source",
28
+ "quality": "Quality",
29
+ "audioTrack": "Audio",
30
+ "caption": "Caption",
31
+ "display": "Display",
32
+ "zoom": "Zoom",
33
+ "subtitleTrack": "Subtitle"
34
+ };
35
+
36
+ const Panels = function ($container, api, data) {
37
+
38
+ let $root = LA$(api.getContainerElement());
39
+ let panelManager = PanelManager();
40
+
41
+ let playerConfig = api.getConfig();
42
+
43
+ if (playerConfig && playerConfig.systemText) {
44
+ Object.keys(PANEL_TITLE).forEach(title => {
45
+ PANEL_TITLE[title] = playerConfig.systemText.ui.setting[title];
46
+ });
47
+ }
48
+
49
+ function extractSubPanelData(api, panelType) {
50
+ let panel = {
51
+ id: "panel-" + new Date().getTime(),
52
+ title: "",
53
+ body: [],
54
+ useCheck: true,
55
+ panelType: panelType,
56
+ height: $root.height() - $root.find(".op-bottom-panel").height()
57
+ };
58
+ panel.title = PANEL_TITLE[panelType];
59
+ if (panelType === "speed") {
60
+ let playBackRates = api.getConfig().playbackRates;
61
+ let currentPlaybackRate = api.getPlaybackRate();
62
+ for (let i = 0; i < playBackRates.length; i++) {
63
+ let body = {
64
+ title: playBackRates[i] + PANEL_TITLE.speedUnit, //(playBackRates[i] === 1? "Normal" : playBackRates[i]),
65
+ isCheck: currentPlaybackRate === playBackRates[i],
66
+ value: playBackRates[i],
67
+ description: playBackRates[i],
68
+ panelType: panelType
69
+ };
70
+ panel.body.push(body);
71
+ }
72
+
73
+ } else if (panelType === "zoom") {
74
+ let bodyIn = {
75
+ title: "+5%",
76
+ isCheck: false,
77
+ value: 0.05,
78
+ description: 0.05,
79
+ panelType: panelType
80
+ };
81
+ let body = {
82
+ title: "100%",
83
+ isCheck: false,
84
+ value: 0,
85
+ description: 1.0,
86
+ panelType: panelType
87
+ };
88
+ let bodyOut = {
89
+ title: "-5%",
90
+ isCheck: false,
91
+ value: -0.05,
92
+ description: -0.05,
93
+ panelType: panelType
94
+ };
95
+ panel.body.push(bodyIn);
96
+ panel.body.push(body);
97
+ panel.body.push(bodyOut);
98
+
99
+ } else if (panelType === "source") {
100
+ let sources = api.getSources();
101
+ for (let i = 0; i < sources.length; i++) {
102
+ let body = {
103
+ title: sources[i].label,
104
+ isCheck: api.getCurrentSource() === i,
105
+ value: i,
106
+ panelType: panelType
107
+ };
108
+ panel.body.push(body);
109
+ }
110
+
111
+ } else if (panelType === "quality") {
112
+ let qualityLevels = api.getQualityLevels();
113
+ let isQualityCheck = api.isAutoQuality();
114
+ panel.body.push({
115
+ title: playerConfig.systemText.ui.quality.auto,
116
+ isCheck: isQualityCheck,
117
+ value: "AUTO",
118
+ panelType: panelType
119
+ });
120
+ for (let i = 0; i < qualityLevels.length; i++) {
121
+ let body = {
122
+ title: qualityLevels[i].label,
123
+ isCheck: !isQualityCheck && api.getCurrentQuality() === i,
124
+ value: i,
125
+ panelType: panelType
126
+ };
127
+ panel.body.push(body);
128
+ }
129
+
130
+ } else if (panelType === "audioTrack") {
131
+ let audioTracks = api.getAudioTracks();
132
+
133
+ for (let i = 0; i < audioTracks.length; i++) {
134
+ let body = {
135
+ title: audioTracks[i].label,
136
+ isCheck: audioTracks[i].index === api.getCurrentAudioTrack(),
137
+ value: audioTracks[i].index,
138
+ panelType: panelType
139
+ };
140
+ panel.body.push(body);
141
+ }
142
+
143
+ } else if (panelType === "subtitleTrack") {
144
+ let subtitleTracks = api.getSubtitleTracks();
145
+
146
+ panel.body.push({
147
+ title: "Off",
148
+ isCheck: api.getCurrentSubtitleTrack() === -1,
149
+ value: -1,
150
+ panelType: panelType
151
+ });
152
+
153
+ for (let i = 0; i < subtitleTracks.length; i++) {
154
+ let body = {
155
+ title: subtitleTracks[i].label,
156
+ isCheck: subtitleTracks[i].index === api.getCurrentSubtitleTrack(),
157
+ value: subtitleTracks[i].index,
158
+ panelType: panelType
159
+ };
160
+ panel.body.push(body);
161
+ }
162
+
163
+ } else if (panelType === "caption") {
164
+ let captions = api.getCaptionList();
165
+ panel.body.push({
166
+ title: "Off",
167
+ isCheck: api.getCurrentCaption() === -1,
168
+ value: -1,
169
+ panelType: panelType
170
+ });
171
+ for (let i = 0; i < captions.length; i++) {
172
+ let body = {
173
+ title: captions[i].label,
174
+ isCheck: api.getCurrentCaption() === i,
175
+ value: i,
176
+ panelType: panelType
177
+ };
178
+ panel.body.push(body);
179
+ }
180
+
181
+ } else if (panelType === "display") {
182
+ let displayModes = [
183
+ "Play time",
184
+ "Framecode"
185
+ ];
186
+ for (let i = 0; i < displayModes.length; i++) {
187
+ let body = {
188
+ title: displayModes[i],
189
+ isCheck: api.isTimecodeMode() ? (displayModes[i] === "Play time") : (displayModes[i] === "Framecode"),
190
+ value: displayModes[i],
191
+ panelType: panelType
192
+ };
193
+ panel.body.push(body);
194
+ }
195
+
196
+ }
197
+ return panel;
198
+ };
199
+
200
+ data.setFront = function (isFront) {
201
+ if (isFront) {
202
+ $root.find("#" + data.id).removeClass("background");
203
+ } else {
204
+ $root.find("#" + data.id).addClass("background");
205
+ }
206
+ };
207
+
208
+ function setPanelMaxHeight() {
209
+ if ($root.find(".op-setting-panel")) {
210
+ $root.find(".op-setting-panel").css("max-height", $root.height() - $root.find(".op-bottom-panel").height() + "px");
211
+ }
212
+ };
213
+ const onRendered = function ($current, template) {
214
+
215
+ setPanelMaxHeight();
216
+
217
+ api.on(CONTENT_LEVEL_CHANGED, function (data) {
218
+ let newQuality = data.currentQuality;
219
+ if (data.type === "render" && $root.find("#" + template.data.id).find(".op-setting-item")) {
220
+ _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
221
+ let $panel = LA$(panel);
222
+
223
+ if ($panel.attr("op-panel-type") === "quality") {
224
+ let qualityList = api.getQualityLevels();
225
+ let newQualityObject = qualityList[newQuality];
226
+ $panel.find(".op-setting-item-value").text(newQualityObject.width + "x" + newQualityObject.height + ", " + sizeHumanizer(newQualityObject.bitrate, true, "bps"));
227
+ }
228
+
229
+ });
230
+ }
231
+
232
+ }, template);
233
+
234
+ api.on(AUDIO_TRACK_CHANGED, function (data) {
235
+ _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
236
+
237
+ let $panel = LA$(panel);
238
+
239
+ if ($panel.attr("op-panel-type") === "audioTrack") {
240
+ $panel.find(".op-setting-item-value").text(api.getAudioTracks()[data.currentAudioTrack].label);
241
+ }
242
+ });
243
+ }, template);
244
+
245
+ api.on(SUBTITLE_TRACK_CHANGED, function (data) {
246
+ _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
247
+
248
+ let $panel = LA$(panel);
249
+
250
+ if ($panel.attr("op-panel-type") === "subtitleTrack") {
251
+ if (data.currentSubtitleTrack === -1) {
252
+ $panel.find(".op-setting-item-value").text("Off");
253
+ } else {
254
+ $panel.find(".op-setting-item-value").text(api.getSubtitleTracks()[data.currentSubtitleTrack].label);
255
+ }
256
+
257
+ }
258
+ });
259
+ }, template);
260
+
261
+
262
+ api.on(PLAYER_ZOOM_CHANGED, function (data) {
263
+ _.forEach($root.find("#" + template.data.id).find(".op-setting-item").get() || [], function (panel) {
264
+
265
+ let $panel = LA$(panel);
266
+
267
+ if ($panel.attr("op-panel-type") === "zoom") {
268
+ $panel.find(".op-setting-item-value").text(Math.round(data.zoomFactor * 100) + "%");
269
+ }
270
+ });
271
+ }, template);
272
+ };
273
+ const onDestroyed = function (template) {
274
+ api.off(CONTENT_LEVEL_CHANGED, null, template);
275
+ api.off(AUDIO_TRACK_CHANGED, null, template);
276
+ api.off(SUBTITLE_TRACK_CHANGED, null, template);
277
+ api.off(PLAYER_ZOOM_CHANGED, null, template);
278
+ };
279
+ const events = {
280
+ "click .op-setting-item": function (event, $current, template) {
281
+ event.preventDefault();
282
+ //if this panel is background it disabled click.
283
+ if ($root.find("#" + data.id).hasClass("background")) {
284
+ return false;
285
+ }
286
+ let panelType = LA$(event.currentTarget).attr("op-panel-type");
287
+ let panel = null;
288
+ if (panelType === "speed") {
289
+ panel = SpeedPanel($container, api, extractSubPanelData(api, panelType));
290
+ } else if (panelType === "zoom") {
291
+ panel = ZoomPanel($container, api, extractSubPanelData(api, panelType));
292
+ } else if (panelType === "source") {
293
+ panel = SourcePanel($container, api, extractSubPanelData(api, panelType));
294
+ } else if (panelType === "quality") {
295
+ panel = QualityPanel($container, api, extractSubPanelData(api, panelType));
296
+ } else if (panelType === "audioTrack") {
297
+ panel = AudioTrackPanel($container, api, extractSubPanelData(api, panelType));
298
+ } else if (panelType === "subtitleTrack") {
299
+ panel = SubtitleTrackPanel($container, api, extractSubPanelData(api, panelType));
300
+ } else if (panelType === "caption") {
301
+ panel = CaptionPanel($container, api, extractSubPanelData(api, panelType));
302
+ } else if (panelType === "display") {
303
+ panel = TimeDisplayPanel($container, api, extractSubPanelData(api, panelType));
304
+ }
305
+
306
+ panelManager.add(panel);
307
+ },
308
+ "click .op-setting-title": function (event, $current, template) {
309
+ event.preventDefault();
310
+ if ($root.find("#" + data.id).hasClass("background")) {
311
+ return false;
312
+ }
313
+ panelManager.removeLastItem();
314
+ }
315
+ };
316
+ return OvenTemplate($container, "Panels", api.getConfig(), data, events, onRendered, onDestroyed);
317
+
318
+ };
319
+
320
+ export default Panels;
321
+