/* * * (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': { } }); }, 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'); } }); });