/* * * (c) Copyright Ascensio System Limited 2010-2016 * * 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 * */ /** * StatusBar View * * Created by Maxim Kadushkin on 11/28/2016 * Copyright (c) 2016 Ascensio System SIA. All rights reserved. * */ define([ 'core', 'underscore' ], function(template){ 'use strict'; SSE.Views.Statusbar = Backbone.View.extend({ el: '.pages > .page', template: '
' + '
' + '' + '
' + '
' + '' + '
' + '
', tabtemplate: _.template('
  • "><%= label %>
  • '), menutemplate: _.template( '<% _.each(menuItems, function(item) { %>' + '
  • ">' + '<%= item.caption %>' + '
  • ' + '<% }); %>'), events: {}, api: undefined, initialize: function (options) { _.extend(this, options); }, render: function () { var me = this; this.$el = $(this.template).appendTo($(this.el)); this.$boxTabs = this.$el.find('.box-tabs > ul'); this.$btnAddTab = this.$el.find('#box-addtab > .button'); this.$btnAddTab.on('click', function(e){ me.fireEvent('sheet:addnew'); }); // this.editMode = false; return this; }, setMode: function(mode) { if ('edit' == mode) { this.$btnAddTab.show(); } else if ('disconnect' == mode) { this.$btnAddTab.toggleClass('disabled', true); } }, setVisible: function(visible) { visible ? this.show(): this.hide(); }, addSheet: function(model) { var index = this.$boxTabs.children().length; var $item = $(this.tabtemplate({ label: model.get('name'), locked: model.get('locked') })).appendTo(this.$boxTabs); $item.on('click', this.onSheetClick.bind(this, index, model)); model.get('active') && $item.addClass('active'); return $item; }, addSheets: function (collection) { var me = this; collection.each(function(model) { var $item = me.addSheet(model); model.set('el', $item, {silent:true}); }); }, clearTabs: function () { this.$boxTabs.children().off('click'); this.$boxTabs.empty(); }, setActiveTab: function (index) { this.$boxTabs.children().removeClass('active') .eq(index).addClass('active'); }, update: function() { var me = this; return; this.tabbar.empty(true); this.btnAddWorksheet.setDisabled(true); if (this.api) { var wc = this.api.asc_getWorksheetsCount(), i = -1; var hidentems = [], items = [], tab, locked; var sindex = this.api.asc_getActiveWorksheetIndex(); while (++i < wc) { locked = me.api.asc_isWorksheetLockedOrDeleted(i); tab = { sheetindex : i, active : sindex == i, label : me.api.asc_getWorksheetName(i), // reorderable : !locked, cls : locked ? 'coauth-locked':'', isLockTheDrag : locked }; this.api.asc_isWorksheetHidden(i)? hidentems.push(tab) : items.push(tab); } if (hidentems.length) { hidentems.forEach(function(item){ me.tabMenu.items[6].menu.addItem(new Common.UI.MenuItem({ style: 'white-space: pre-wrap', caption: Common.Utils.String.htmlEncode(item.label), value: item.sheetindex })); }); this.tabMenu.items[6].show(); } this.tabbar.add(items); if (!_.isUndefined(this.tabBarScroll)) { this.tabbar.$bar.scrollLeft(this.tabBarScroll.scrollLeft); this.tabBarScroll = undefined; } if (!this.tabbar.isTabVisible(sindex)) this.tabbar.setTabVisible(sindex); this.btnAddWorksheet.setDisabled(me.mode.isDisconnected || me.api.asc_isWorkbookLocked()); $('#status-label-zoom').text(Common.Utils.String.format(this.zoomText, Math.floor((this.api.asc_getZoom() +.005)*100))); me.fireEvent('sheet:changed', [me, sindex]); me.fireEvent('sheet:updateColors', [true]); Common.NotificationCenter.trigger('comments:updatefilter', {property: 'uid', value: new RegExp('^(doc_|sheet' + me.api.asc_getActiveWorksheetId() + '_)')}, false); } }, onSheetClick: function (index, model, e) { this.fireEvent('sheet:click', [index, model]); return false; }, onSheetChanged: function(o, index, tab) { this.api.asc_showWorksheet(tab.sheetindex); if (this.hasTabInvisible && !this.tabbar.isTabVisible(index)) { this.tabbar.setTabVisible(index); } this.fireEvent('sheet:changed', [this, tab.sheetindex]); this.fireEvent('sheet:updateColors', [true]); Common.NotificationCenter.trigger('comments:updatefilter', { property: 'uid', value: new RegExp('^(doc_|sheet' + this.api.asc_getActiveWorksheetId() + '_)') }, false // hide popover ); }, changeViewMode: function (edit) { if (edit) { this.tabBarBox.css('left', '152px'); } else { this.tabBarBox.css('left', ''); } this.tabbar.options.draggable = edit; this.editMode = edit; }, showTabContextMenu: function (items, model) { uiApp.closeModal('.document-menu.modal-in'); var popoverHTML = '
    '+ '
    '+ '
    '+ '
      '+ this.menutemplate({menuItems: items}) + '
    '+ '
    '+ '
    '+ '
    '; uiApp.popover(popoverHTML, model.get('el')); $('.modal-overlay').removeClass('modal-overlay-visible'); $('.document-menu li').single('click', _.buffered(function(e) { uiApp.closeModal('.document-menu.modal-in'); var $target = $(e.currentTarget), eventName = $target.data('event'); this.fireEvent('contextmenu:click', [this, eventName, model]); }, 100, this)); } }); } );