/* * * (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 * * This is out main controller which will do most of job * It will listen for view and collection events and manage all data-related operations * * Created by Alexander Yuzhin on 1/15/14 * Copyright (c) 2014 Ascensio System SIA. All rights reserved. * */ define([ 'core', 'common/main/lib/view/Header', 'documenteditor/main/app/view/Viewport', 'documenteditor/main/app/view/LeftMenu' ], function (Viewport) { 'use strict'; DE.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' ], // When controller is created let's setup view event listeners initialize: function() { // This most important part when we will tell our controller what events should be handled var me = this; this.addListeners({ 'Toolbar': { 'render:before' : function (toolbar) { var config = DE.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 ? 40 : 40+67; } }, 'Common.Views.Header': { 'go:back': function (opts) { Common.NotificationCenter.trigger('goback', /new/.test(opts)); // Common.component.Analytics.trackEvent('Back to Folder'); } } }); }, 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: 'Document Editor', storeUsers: DE.getCollection('Common.Collections.Users') }); Common.NotificationCenter.on('layout:changed', _.bind(this.onLayoutChanged, this)); $(window).on('resize', _.bind(this.onWindowResize, this)); var leftPanel = $('#left-menu'), histPanel = $('#left-panel-history'); this.viewport.hlayout.on('layout:resizedrag', function() { this.api.Resize(); Common.localStorage.setItem('de-mainmenu-width', histPanel.is(':visible') ? (histPanel.width()+SCALE_MIN) : leftPanel.width() ); }, this); this.boxSdk = $('#editor_sdk'); this.boxSdk.css('border-left', 'none'); Common.NotificationCenter.on('app:face', this.onAppShowed.bind(this)); }, onAppShowed: function (config) { var me = this; if ( !config.isEdit || ( !Common.localStorage.itemExists("de-compact-toolbar") && config.customization && config.customization.compactToolbar )) { me.viewport.vlayout.panels[0].height = 40; } }, onLayoutChanged: function(area) { switch (area) { default: this.viewport.vlayout.doLayout(); case 'rightmenu': this.viewport.hlayout.doLayout(); break; case 'history': var panel = this.viewport.hlayout.items[1]; if (panel.resize.el) { this.boxSdk.css('border-left', ''); panel.resize.el.show(); } this.viewport.hlayout.doLayout(); break; case 'leftmenu': var panel = this.viewport.hlayout.items[0]; if (panel.resize.el) { if (panel.el.width() > 40) { this.boxSdk.css('border-left', ''); panel.resize.el.show(); } else { panel.resize.el.hide(); this.boxSdk.css('border-left', '0 none'); } } 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'); } }); });