/* * * (c) Copyright Ascensio System Limited 2010-2017 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ /** * Viewport.js * * Controller for the viewport * * Created by Julia Radzhabova on 26 March 2014 * Copyright (c) 2014 Ascensio System SIA. All rights reserved. * */ define([ 'core', 'common/main/lib/view/Header', 'presentationeditor/main/app/view/DocumentPreview', 'presentationeditor/main/app/view/Viewport' // 'documenteditor/main/app/view/LeftMenu' ], function (Viewport) { 'use strict'; PE.Controllers.Viewport = Backbone.Controller.extend({ // Specifying a Viewport model models: [], // Specifying a collection of out Viewport collections: [], // Specifying application views views: [ 'Viewport', // is main application layout 'Common.Views.Header', 'DocumentPreview' ], // When controller is created let's setup view event listeners initialize: function() { var me = this; // This most important part when we will tell our controller what events should be handled this.addListeners({ 'Toolbar': { 'render:before' : function (toolbar) { var config = PE.getController('Main').appOptions; toolbar.setExtra('right', me.header.getPanel('right', config)); toolbar.setExtra('left', me.header.getPanel('left', config)); }, 'view:compact' : function (toolbar, state) { me.viewport.vlayout.panels[0].height = state ? 32 : 32+67; } }, // Events generated by main view 'Viewport': { } }); Common.NotificationCenter.on('preview:start', this.onPreviewStart.bind(this)); }, setApi: function(api) { this.api = api; }, // When our application is ready, lets get started onLaunch: function() { // Create and render main view this.viewport = this.createView('Viewport').render(); this.header = this.createView('Common.Views.Header', { headerCaption: 'Presentation Editor', storeUsers: PE.getCollection('Common.Collections.Users') }); this.docPreview = this.createView('DocumentPreview', {}).render(); Common.NotificationCenter.on('layout:changed', _.bind(this.onLayoutChanged, this)); $(window).on('resize', _.bind(this.onWindowResize, this)); var leftPanel = $('#left-menu'); this.viewport.hlayout.on('layout:resizedrag', function() { this.api.Resize(); Common.localStorage.setItem('pe-mainmenu-width',leftPanel.width()); }, this); Common.NotificationCenter.on('app:face', this.onAppShowed.bind(this)); }, onAppShowed: function (config) { var me = this; if ( !config.isEdit || ( !Common.localStorage.itemExists("pe-compact-toolbar") && config.customization && config.customization.compactToolbar )) { me.viewport.vlayout.panels[0].height = 32; } }, onLayoutChanged: function(area) { switch (area) { default: this.viewport.vlayout.doLayout(); case 'rightmenu': this.viewport.hlayout.doLayout(); break; case 'leftmenu': var panel = this.viewport.hlayout.items[0]; if (panel.resize.el) { panel.el.width() > 40 ? panel.resize.el.show() : panel.resize.el.hide(); } this.viewport.hlayout.doLayout(); break; case 'header': case 'toolbar': case 'status': this.viewport.vlayout.doLayout(); break; } this.api.Resize(); }, onWindowResize: function(e) { this.onLayoutChanged('window'); Common.NotificationCenter.trigger('window:resize'); }, onPreviewStart: function(slidenum, presenter) { this.previewPanel = this.previewPanel || PE.getController('Viewport').getView('DocumentPreview'); var me = this, isResized = false; var reporterObject = (presenter) ? PE.getController('Main').document : null; if (reporterObject) { reporterObject.translations = { reset: me.previewPanel.txtReset, endSlideshow: me.previewPanel.txtEndSlideshow, slideOf: me.previewPanel.slideIndexText }; reporterObject.token = me.api.asc_getSessionToken(); } if (this.previewPanel && !this.previewPanel.isVisible() && this.api) { this.previewPanel.show(); var _onWindowResize = function() { if (isResized) return; isResized = true; Common.NotificationCenter.off('window:resize', _onWindowResize); me.api.StartDemonstration('presentation-preview', _.isNumber(slidenum) ? slidenum : 0, reporterObject); Common.component.Analytics.trackEvent('Viewport', 'Preview'); }; if (!me.viewport.mode.isDesktopApp && !Common.Utils.isIE11 && !presenter) { Common.NotificationCenter.on('window:resize', _onWindowResize); me.fullScreen(document.documentElement); setTimeout(function(){ _onWindowResize(); }, 100); } else _onWindowResize(); } }, fullScreen: function(element) { if (element) { if(element.requestFullscreen) { element.requestFullscreen(); } else if(element.webkitRequestFullscreen) { element.webkitRequestFullscreen(); } else if(element.mozRequestFullScreen) { element.mozRequestFullScreen(); } else if(element.msRequestFullscreen) { element.msRequestFullscreen(); } } } }); });