/* * * (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 * */ /** * Links.js * * Created by Julia Radzhabova on 22.12.2017 * Copyright (c) 2018 Ascensio System SIA. All rights reserved. * */ define([ 'common/main/lib/util/utils', 'common/main/lib/component/BaseView', 'common/main/lib/component/Layout' ], function () { 'use strict'; DE.Views.Links = Common.UI.BaseView.extend(_.extend((function(){ function setEvents() { var me = this; this.btnsContents.forEach(function(button) { button.menu.on('item:click', function (menu, item, e) { me.fireEvent('links:contents', [item.value]); }); button.on('click', function (b, e) { me.fireEvent('links:contents', [0]); }); button.menu.on('show:after', function (menu, e) { me.fireEvent('links:contents-open', [menu]); }); }); this.contentsMenu.on('item:click', function (menu, item, e) { setTimeout(function(){ me.fireEvent('links:contents', [item.value, true]); }, 10); }); this.contentsMenu.on('show:after', function (menu, e) { me.fireEvent('links:contents-open', [menu]); }); this.btnContentsUpdate.menu.on('item:click', function (menu, item, e) { me.fireEvent('links:update', [item.value]); }); this.btnContentsUpdate.on('click', function (b, e) { me.fireEvent('links:update', ['all']); }); this.contentsUpdateMenu.on('item:click', function (menu, item, e) { setTimeout(function(){ me.fireEvent('links:update', [item.value, true]); }, 10); }); this.btnsNotes.forEach(function(button) { button.menu.on('item:click', function (menu, item, e) { me.fireEvent('links:notes', [item.value]); }); button.on('click', function (b, e) { me.fireEvent('links:notes', ['ins_footnote']); }); button.menu.items[7].menu.on('item:click', function (menu, item, e) {//convert me.fireEvent('links:notes', [item.value]); }); }); this.btnsPrevNote.forEach(function(button) { button.on('click', function (b, e) { me.fireEvent('links:notes', ['prev']); }); }); this.btnsNextNote.forEach(function(button) { button.on('click', function (b, e) { me.fireEvent('links:notes', ['next']); }); }); this.btnsPrevEndNote.forEach(function(button) { button.on('click', function (b, e) { me.fireEvent('links:notes', ['prev-end']); }); }); this.btnsNextEndNote.forEach(function(button) { button.on('click', function (b, e) { me.fireEvent('links:notes', ['next-end']); }); }); this.btnsHyperlink.forEach(function(button) { button.on('click', function (b, e) { me.fireEvent('links:hyperlink'); }); }); this.btnBookmarks.on('click', function (b, e) { me.fireEvent('links:bookmarks'); }); this.btnCaption.on('click', function (b, e) { me.fireEvent('links:caption'); }); this.btnCrossRef.on('click', function (b, e) { me.fireEvent('links:crossref'); }); this.btnTableFigures.on('click', function (b, e) { me.fireEvent('links:tof'); }); this.btnTableFiguresUpdate.on('click', function (b, e) { me.fireEvent('links:tof-update'); }); } return { options: {}, initialize: function (options) { Common.UI.BaseView.prototype.initialize.call(this); this.toolbar = options.toolbar; this.btnsPrevNote = []; this.btnsNextNote = []; this.btnsPrevEndNote = []; this.btnsNextEndNote = []; this.paragraphControls = []; var me = this, $host = me.toolbar.$el; this.btnsContents = Common.Utils.injectButtons($host.find('.btn-slot.btn-contents'), '', 'toolbar__icon btn-contents', me.capBtnInsContents, undefined, true, true, undefined, '1', 'bottom' ); this.btnsNotes = Common.Utils.injectButtons($host.find('.btn-slot.slot-notes'), '', 'toolbar__icon btn-notes', me.capBtnInsFootnote, undefined, true, true, undefined, '1', 'bottom'); this.btnsHyperlink = Common.Utils.injectButtons($host.find('.btn-slot.slot-inshyperlink'), '', 'toolbar__icon btn-inserthyperlink', me.capBtnInsLink, undefined, undefined, undefined, undefined, '1', 'bottom'); Array.prototype.push.apply(this.paragraphControls, this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink)); this.btnContentsUpdate = new Common.UI.Button({ parentEl: $host.find('#slot-btn-contents-update'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-update', caption: this.capBtnContentsUpdate, split: true, menu: true, disabled: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnContentsUpdate); this.btnBookmarks = new Common.UI.Button({ parentEl: $host.find('#slot-btn-bookmarks'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-bookmarks', caption: this.capBtnBookmarks, disabled: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnBookmarks); this.btnCaption = new Common.UI.Button({ parentEl: $host.find('#slot-btn-caption'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-caption', caption: this.capBtnCaption, disabled: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnCaption); this.btnCrossRef = new Common.UI.Button({ parentEl: $host.find('#slot-btn-crossref'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-cross-reference', caption: this.capBtnCrossRef, disabled: true, dataHint: '1', dataHintDirection: 'bottom' }); this.paragraphControls.push(this.btnCrossRef); this.btnTableFigures = new Common.UI.Button({ parentEl: $host.find('#slot-btn-tof'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-contents', caption: this.capBtnTOF, disabled: true, dataHint: '1', dataHintDirection: 'right' }); this.paragraphControls.push(this.btnTableFigures); this.btnTableFiguresUpdate = new Common.UI.Button({ parentEl: $host.find('#slot-btn-tof-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', caption: this.capBtnContentsUpdate, disabled: true, dataHint: '1', dataHintDirection: 'right' }); this.paragraphControls.push(this.btnTableFiguresUpdate); this._state = {disabled: false}; Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, render: function (el) { return this; }, onAppReady: function (config) { var me = this; (new Promise(function (accept, reject) { accept(); })).then(function(){ var contentsTemplate = _.template(''); me.btnsContents.forEach( function(btn) { btn.updateHint( me.tipContents ); var _menu = new Common.UI.Menu({ cls: 'toc-menu shifted-left', items: [ {template: contentsTemplate, offsety: 0, value: 0, previewId: 'id-toolbar-toc-0'}, {template: contentsTemplate, offsety: 72, value: 1, previewId: 'id-toolbar-toc-1'}, {caption: me.textContentsSettings, value: 'settings'}, {caption: me.textContentsRemove, value: 'remove'} ] }); btn.setMenu(_menu); }); me.contentsMenu = new Common.UI.Menu({ cls: 'toc-menu shifted-left', items: [ {template: contentsTemplate, offsety: 0, value: 0, previewId: 'id-toolbar-toc-menu-0'}, {template: contentsTemplate, offsety: 72, value: 1, previewId: 'id-toolbar-toc-menu-1'}, {caption: me.textContentsSettings, value: 'settings'}, {caption: me.textContentsRemove, value: 'remove'} ] }); me.btnContentsUpdate.updateHint([me.textUpdateAll, me.tipContentsUpdate]); me.btnContentsUpdate.setMenu(new Common.UI.Menu({ items: [ {caption: me.textUpdateAll, value: 'all'}, {caption: me.textUpdatePages, value: 'pages'} ] })); me.contentsUpdateMenu = new Common.UI.Menu({ items: [ {caption: me.textUpdateAll, value: 'all'}, {caption: me.textUpdatePages, value: 'pages'} ] }); me.btnsNotes.forEach( function(btn, index) { btn.updateHint( me.tipNotes ); var _menu = new Common.UI.Menu({ items: [ {caption: me.mniInsFootnote, value: 'ins_footnote'}, {caption: me.mniInsEndnote, value: 'ins_endnote'}, {caption: '--'}, new Common.UI.MenuItem({ template: _.template([ '
' ].join('')), stopPropagation: true }), new Common.UI.MenuItem({ template: _.template([ ' ' ].join('')), stopPropagation: true }), {caption: '--'}, {caption: me.mniDelFootnote, value: 'delele'}, { caption: me.mniConvertNote, value: 'convert', menu: new Common.UI.Menu({ menuAlign : 'tl-tr', items: [ {caption: me.textConvertToEndnotes, value: 'to-endnotes'}, {caption: me.textConvertToFootnotes, value: 'to-footnotes'}, {caption: me.textSwapNotes, value: 'swap'} ] }) }, {caption: me.mniNoteSettings, value: 'settings'} ] }); btn.setMenu(_menu); me.btnsPrevNote.push(new Common.UI.Button({ el: $('#id-menu-goto-footnote-prev-'+index), cls: 'btn-toolbar' })); me.btnsNextNote.push(new Common.UI.Button({ el: $('#id-menu-goto-footnote-next-'+index), cls: 'btn-toolbar' })); me.btnsPrevEndNote.push(new Common.UI.Button({ el: $('#id-menu-goto-endnote-prev-'+index), cls: 'btn-toolbar' })); me.btnsNextEndNote.push(new Common.UI.Button({ el: $('#id-menu-goto-endnote-next-'+index), cls: 'btn-toolbar' })); }); me.btnsHyperlink.forEach( function(btn) { btn.updateHint(me.tipInsertHyperlink + Common.Utils.String.platformKey('Ctrl+K')); }); me.btnBookmarks.updateHint(me.tipBookmarks); me.btnCaption.updateHint(me.tipCaption); me.btnCrossRef.updateHint(me.tipCrossRef); me.btnTableFigures.updateHint(me.tipTableFigures); me.btnTableFiguresUpdate.updateHint(me.tipTableFiguresUpdate); setEvents.call(me); }); }, show: function () { Common.UI.BaseView.prototype.show.call(this); this.fireEvent('show', this); }, getButtons: function() { return this.paragraphControls; }, SetDisabled: function (state) { this._state.disabled = state; this.paragraphControls.forEach(function(button) { if ( button ) { button.setDisabled(state); } }, this); }, capBtnInsContents: 'Table of Contents', tipContents: 'Insert table of contents', textContentsSettings: 'Settings', textContentsRemove: 'Remove table of contents', capBtnContentsUpdate: 'Refresh', tipContentsUpdate: 'Refresh table of contents', textUpdateAll: 'Refresh entire table', textUpdatePages: 'Refresh page numbers only', tipNotes: 'Footnotes', mniInsFootnote: 'Insert Footnote', mniDelFootnote: 'Delete All Notes', mniNoteSettings: 'Notes Settings', textGotoFootnote: 'Go to Footnotes', capBtnInsFootnote: 'Footnotes', confirmDeleteFootnotes: 'Do you want to delete all footnotes?', capBtnInsLink: 'Hyperlink', tipInsertHyperlink: 'Add Hyperlink', capBtnBookmarks: 'Bookmark', tipBookmarks: 'Create a bookmark', capBtnCaption: 'Caption', tipCaption: 'Insert caption', mniConvertNote: 'Convert All Notes', textGotoEndnote: 'Go to Endnotes', mniInsEndnote: 'Insert Endnote', textConvertToEndnotes: 'Convert All Footnotes to Endnotes', textConvertToFootnotes: 'Convert All Endnotes to Footnotes', textSwapNotes: 'Swap Footnotes and Endnotes', capBtnCrossRef: 'Cross-reference', tipCrossRef: 'Insert cross-reference', capBtnTOF: 'Table of Figures', tipTableFiguresUpdate: 'Refresh table of figures', tipTableFigures: 'Insert table of figures', confirmReplaceTOF: 'Do you want to replace the selected table of figures?', titleUpdateTOF: 'Refresh Table of Figures' } }()), DE.Views.Links || {})); });