/* * * (c) Copyright Ascensio System SIA 2010-2019 * * 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 20A-12 Ernesta Birznieka-Upisha * street, Riga, Latvia, EU, LV-1050. * * 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 * */ /** * EditContainer.js * Document Editor * * Created by Alexander Yuzhin on 9/27/16 * Copyright (c) 2018 Ascensio System SIA. All rights reserved. * */ define([ 'core', 'jquery', 'underscore', 'backbone' ], function (core, $, _, Backbone) { 'use strict'; DE.Controllers.EditContainer = Backbone.Controller.extend(_.extend((function() { // Private var _settings = [], _headerType = 1, _activeTab; return { models: [], collections: [], views: [], initialize: function() { // }, setApi: function(api) { this.api = api; this.api.asc_registerCallback('asc_onFocusObject', _.bind(this.onApiFocusObject, this)); }, onLaunch: function() { // }, showModal: function() { var me = this, mainView = DE.getController('Editor').getView('Editor').f7View, isAndroid = Framework7.prototype.device.android === true; if ($$('.container-edit.modal-in').length > 0) { // myApp.closeModal('.picker-modal.edit.modal-in'); // me.fireEvent('editcontainer:error', [this, 'alreadyOpen']); return; } uiApp.closeModal(); me._showByStack(Common.SharedSettings.get('phone')); DE.getController('Toolbar').getView('Toolbar').hideSearch(); }, hideModal: function () { if (this.picker) { uiApp.closeModal(this.picker); } }, _emptyEditController: function () { var layout = '
' + '
' + '

Select object to edit

' + '
' + '
'; return { caption: this.textSettings, layout: layout } }, _layoutEditorsByStack: function () { var me = this, editors = []; if (_settings.length < 1) { editors.push(me._emptyEditController()); } else { if (_.contains(_settings, 'text')) { editors.push({ caption: me.textText, id: 'edit-text', layout: DE.getController('EditText').getView('EditText').rootLayout() }) } if (_.contains(_settings, 'paragraph')) { editors.push({ caption: me.textParagraph, id: 'edit-paragraph', layout: DE.getController('EditParagraph').getView('EditParagraph').rootLayout() }) } if (_.contains(_settings, 'table')) { editors.push({ caption: me.textTable, id: 'edit-table', layout: DE.getController('EditTable').getView('EditTable').rootLayout() }) } if (_.contains(_settings, 'header')) { editors.push({ caption: _headerType==2 ? me.textFooter : me.textHeader, id: 'edit-header', layout: DE.getController('EditHeader').getView('EditHeader').rootLayout() }) } if (_.contains(_settings, 'shape')) { editors.push({ caption: me.textShape, id: 'edit-shape', layout: DE.getController('EditShape').getView('EditShape').rootLayout() }) } if (_.contains(_settings, 'image')) { editors.push({ caption: me.textImage, id: 'edit-image', layout: DE.getController('EditImage').getView('EditImage').rootLayout() }) } if (_.contains(_settings, 'chart')) { editors.push({ caption: me.textChart, id: 'edit-chart', layout: DE.getController('EditChart').getView('EditChart').rootLayout() }) } if (_.contains(_settings, 'hyperlink')) { editors.push({ caption: me.textHyperlink, id: 'edit-link', layout: DE.getController('EditHyperlink').getView('EditHyperlink').rootLayout() }) } } return editors; }, _showByStack: function(isPhone) { var me = this, mainView = DE.getController('Editor').getView('Editor').f7View, isAndroid = Framework7.prototype.device.android === true, layoutEditors = me._layoutEditorsByStack(); if ($$('.container-edit.modal-in').length > 0) { return; } // Navigation bar var $layoutNavbar = $( '' ); if (layoutEditors.length < 2) { $layoutNavbar .find('.center') .removeClass('categories') .html(layoutEditors[0].caption); } else { if (isAndroid) { $layoutNavbar .find('.center') .append('
'); _.each(layoutEditors, function (layout, index) { $layoutNavbar .find('.toolbar-inner') .append( '' + layout.caption + '' ); }); $layoutNavbar .find('.toolbar-inner') .append(''); } else { $layoutNavbar .find('.center') .append('
'); _.each(layoutEditors, function (layout, index) { $layoutNavbar .find('.buttons-row') .append( '' + layout.caption + '' ); }); } } // Content var $layoutPages = $( '
' + '
' + '
' + '
' + '
' + '
' ); _.each(layoutEditors, function (editor, index) { $layoutPages.find('.tabs').append( '
' + '
' + '
' + '
' + editor.layout + '
' + '
' + '
' + '
' ); }); if (isPhone) { me.picker = $$(uiApp.pickerModal( '
' + '' + '
' )).on('opened', function () { if (_.isFunction(me.api.asc_OnShowContextMenu)) { me.api.asc_OnShowContextMenu() } }).on('close', function (e) { mainView.showNavbar(); }).on('closed', function () { if (_.isFunction(me.api.asc_OnHideContextMenu)) { me.api.asc_OnHideContextMenu() } }); mainView.hideNavbar(); } else { me.picker = uiApp.popover( '
' + '
' + '
' + '
' + '' + '
' + '
', $$('#toolbar-edit') ); // Prevent hide overlay. Conflict popover and modals. var $overlay = $('.modal-overlay'); $$(me.picker).on('opened', function () { $overlay.on('removeClass', function () { if (!$overlay.hasClass('modal-overlay-visible')) { $overlay.addClass('modal-overlay-visible') } }); if (_.isFunction(me.api.asc_OnShowContextMenu)) { me.api.asc_OnShowContextMenu() } }).on('close', function () { $overlay.off('removeClass'); $overlay.removeClass('modal-overlay-visible') }).on('closed', function () { if (_.isFunction(me.api.asc_OnHideContextMenu)) { me.api.asc_OnHideContextMenu() } }); } $('.container-edit .tab').single('show', function (e) { Common.NotificationCenter.trigger('editcategory:show', e); }); if (isAndroid) { $$('.view.edit-root-view.navbar-through').removeClass('navbar-through').addClass('navbar-fixed'); $$('.view.edit-root-view .navbar').prependTo('.view.edit-root-view > .pages > .page'); } me.rootView = uiApp.addView('.edit-root-view', { dynamicNavbar: true, domCache: true }); Common.NotificationCenter.trigger('editcontainer:show'); if (_activeTab === 'edit-link') { uiApp.showTab('#' + _activeTab, false); } }, // API handlers onApiFocusObject: function (objects) { _settings = []; _activeTab = undefined; // Paragraph : 0, // Table : 1, // Image : 2, // Header : 3, // Shape : 4, // Slide : 5, // Chart : 6, // MailMerge : 7, // TextArt : 8 _.each(objects, function(object) { var type = object.get_ObjectType(); if (Asc.c_oAscTypeSelectElement.Paragraph == type) { _settings.push('text', 'paragraph'); } else if (Asc.c_oAscTypeSelectElement.Table == type) { _settings.push('table'); } else if (Asc.c_oAscTypeSelectElement.Image == type) { if (object.get_ObjectValue().get_ChartProperties()) { _settings.push('chart'); } else if (object.get_ObjectValue().get_ShapeProperties()) { _settings.push('shape'); } else { _settings.push('image'); } } else if (Asc.c_oAscTypeSelectElement.Hyperlink == type) { _settings.push('hyperlink'); if (_.isUndefined(_activeTab)) { _activeTab = 'edit-link'; } } else if (Asc.c_oAscTypeSelectElement.Header == type) { _settings.push('header'); _headerType = object.get_ObjectValue().get_Type(); } }); // Exclude shapes if chart exist if (_settings.indexOf('chart') > -1) { _settings = _.without(_settings, 'shape'); } _settings = _.uniq(_settings); }, textSettings: 'Settings', textText: 'Text', textParagraph: 'Paragraph', textTable: 'Table', textShape: 'Shape', textImage: 'Image', textChart: 'Chart', textHyperlink: 'Hyperlink', textHeader: 'Header', textFooter: 'Footer' } })(), DE.Controllers.EditContainer || {})) });