2016-04-01 13:17:09 +00:00
/ *
*
2019-01-17 13:05:03 +00:00
* ( c ) Copyright Ascensio System SIA 2010 - 2019
2016-04-01 13:17:09 +00:00
*
* 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
*
2019-01-17 13:00:34 +00:00
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
2016-04-01 13:17:09 +00:00
*
* 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
*
* /
2016-03-11 00:48:53 +00:00
/ * *
* LeftMenu . js
*
* Controller
*
* Created by Maxim Kadushkin on 10 April 2014
2018-03-01 12:16:38 +00:00
* Copyright ( c ) 2018 Ascensio System SIA . All rights reserved .
2016-03-11 00:48:53 +00:00
*
* /
define ( [
'core' ,
'common/main/lib/util/Shortcuts' ,
2018-09-27 12:25:15 +00:00
'common/main/lib/view/SaveAsDlg' ,
2016-03-11 00:48:53 +00:00
'presentationeditor/main/app/view/LeftMenu' ,
'presentationeditor/main/app/view/FileMenu'
] , function ( ) {
'use strict' ;
PE . Controllers . LeftMenu = Backbone . Controller . extend ( _ . extend ( {
views : [
'LeftMenu' ,
'FileMenu'
] ,
initialize : function ( ) {
this . _state = { no _slides : undefined } ;
this . addListeners ( {
'Common.Views.Chat' : {
'hide' : _ . bind ( this . onHideChat , this )
} ,
2017-04-20 13:34:39 +00:00
'Common.Views.Header' : {
2021-03-24 07:39:09 +00:00
'file:settings' : _ . bind ( this . clickToolbarSettings , this ) ,
'history:show' : function ( ) {
if ( ! this . leftMenu . panelHistory . isVisible ( ) )
this . clickMenuFileItem ( 'header' , 'history' ) ;
} . bind ( this )
2016-03-11 00:48:53 +00:00
} ,
2017-08-11 11:01:27 +00:00
'Common.Views.Plugins' : {
2017-12-06 11:25:29 +00:00
'plugin:open' : _ . bind ( this . onPluginOpen , this ) ,
'hide' : _ . bind ( this . onHidePlugins , this )
2016-03-11 00:48:53 +00:00
} ,
'Common.Views.About' : {
'show' : _ . bind ( this . aboutShowHide , this , false ) ,
'hide' : _ . bind ( this . aboutShowHide , this , true )
} ,
2017-08-11 11:01:27 +00:00
'LeftMenu' : {
'panel:show' : _ . bind ( this . menuExpand , this ) ,
'comments:show' : _ . bind ( this . commentsShowHide , this , 'show' ) ,
'comments:hide' : _ . bind ( this . commentsShowHide , this , 'hide' )
} ,
2016-03-11 00:48:53 +00:00
'FileMenu' : {
2017-05-01 11:30:44 +00:00
'menu:hide' : _ . bind ( this . menuFilesShowHide , this , 'hide' ) ,
'menu:show' : _ . bind ( this . menuFilesShowHide , this , 'show' ) ,
2016-03-11 00:48:53 +00:00
'filemenu:hide' : _ . bind ( this . menuFilesHide , this ) ,
'item:click' : _ . bind ( this . clickMenuFileItem , this ) ,
'saveas:format' : _ . bind ( this . clickSaveAsFormat , this ) ,
2018-09-27 12:25:15 +00:00
'savecopy:format' : _ . bind ( this . clickSaveCopyAsFormat , this ) ,
2016-03-11 00:48:53 +00:00
'settings:apply' : _ . bind ( this . applySettings , this ) ,
'create:new' : _ . bind ( this . onCreateNew , this ) ,
2017-11-17 14:23:38 +00:00
'recent:open' : _ . bind ( this . onOpenRecent , this )
2016-03-11 00:48:53 +00:00
} ,
'Toolbar' : {
2017-04-20 13:34:39 +00:00
'file:settings' : _ . bind ( this . clickToolbarSettings , this ) ,
'file:open' : this . clickToolbarTab . bind ( this , 'file' ) ,
2018-02-15 23:56:17 +00:00
'file:close' : this . clickToolbarTab . bind ( this , 'other' ) ,
'save:disabled' : this . changeToolbarSaveState . bind ( this )
2016-03-11 00:48:53 +00:00
} ,
'SearchDialog' : {
'hide' : _ . bind ( this . onSearchDlgHide , this ) ,
'search:back' : _ . bind ( this . onQuerySearch , this , 'back' ) ,
2018-12-05 16:45:21 +00:00
'search:next' : _ . bind ( this . onQuerySearch , this , 'next' ) ,
'search:replace' : _ . bind ( this . onQueryReplace , this ) ,
'search:replaceall' : _ . bind ( this . onQueryReplaceAll , this )
2017-10-12 09:22:31 +00:00
} ,
'Common.Views.ReviewChanges' : {
'collaboration:chat' : _ . bind ( this . onShowHideChat , this )
2016-03-11 00:48:53 +00:00
}
} ) ;
2017-10-24 11:56:49 +00:00
Common . NotificationCenter . on ( 'leftmenu:change' , _ . bind ( this . onMenuChange , this ) ) ;
2021-03-24 07:39:09 +00:00
Common . NotificationCenter . on ( 'collaboration:history' , _ . bind ( function ( ) {
if ( ! this . leftMenu . panelHistory . isVisible ( ) )
this . clickMenuFileItem ( null , 'history' ) ;
} , this ) ) ;
2016-03-11 00:48:53 +00:00
} ,
onLaunch : function ( ) {
this . leftMenu = this . createView ( 'LeftMenu' ) . render ( ) ;
this . leftMenu . btnSearch . on ( 'toggle' , _ . bind ( this . onMenuSearch , this ) ) ;
this . leftMenu . btnThumbs . on ( 'toggle' , _ . bind ( this . onShowTumbnails , this ) ) ;
this . isThumbsShown = true ;
Common . util . Shortcuts . delegateShortcuts ( {
shortcuts : {
'command+shift+s,ctrl+shift+s' : _ . bind ( this . onShortcut , this , 'save' ) ,
'command+f,ctrl+f' : _ . bind ( this . onShortcut , this , 'search' ) ,
2018-12-05 16:45:21 +00:00
'ctrl+h' : _ . bind ( this . onShortcut , this , 'replace' ) ,
2016-03-11 00:48:53 +00:00
'alt+f' : _ . bind ( this . onShortcut , this , 'file' ) ,
'esc' : _ . bind ( this . onShortcut , this , 'escape' ) ,
/** coauthoring begin **/
'alt+q' : _ . bind ( this . onShortcut , this , 'chat' ) ,
'command+shift+h,ctrl+shift+h' : _ . bind ( this . onShortcut , this , 'comments' ) ,
/** coauthoring end **/
'f1' : _ . bind ( this . onShortcut , this , 'help' )
}
} ) ;
Common . util . Shortcuts . suspendEvents ( ) ;
} ,
setApi : function ( api ) {
this . api = api ;
this . api . asc _registerCallback ( 'asc_onThumbnailsShow' , _ . bind ( this . onThumbnailsShow , this ) ) ;
2018-10-25 13:19:29 +00:00
this . api . asc _registerCallback ( 'asc_onCoAuthoringDisconnect' , _ . bind ( this . onApiServerDisconnect , this ) ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . on ( 'api:disconnect' , _ . bind ( this . onApiServerDisconnect , this ) ) ;
2018-09-27 12:25:15 +00:00
this . api . asc _registerCallback ( 'asc_onDownloadUrl' , _ . bind ( this . onDownloadUrl , this ) ) ;
2018-12-05 16:55:31 +00:00
this . api . asc _registerCallback ( 'asc_onReplaceAll' , _ . bind ( this . onApiTextReplaced , this ) ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
if ( this . mode . canCoAuthoring ) {
if ( this . mode . canChat )
this . api . asc _registerCallback ( 'asc_onCoAuthoringChatReceiveMessage' , _ . bind ( this . onApiChatMessage , this ) ) ;
if ( this . mode . canComments ) {
this . api . asc _registerCallback ( 'asc_onAddComment' , _ . bind ( this . onApiAddComment , this ) ) ;
this . api . asc _registerCallback ( 'asc_onAddComments' , _ . bind ( this . onApiAddComments , this ) ) ;
var collection = this . getApplication ( ) . getCollection ( 'Common.Collections.Comments' ) ;
for ( var i = 0 ; i < collection . length ; ++ i ) {
if ( collection . at ( i ) . get ( 'userid' ) !== this . mode . user . id ) {
this . leftMenu . markCoauthOptions ( 'comments' , true ) ;
break ;
}
}
}
}
/** coauthoring end **/
this . api . asc _registerCallback ( 'asc_onCountPages' , _ . bind ( this . onApiCountPages , this ) ) ;
this . onApiCountPages ( this . api . getCountPages ( ) ) ;
this . leftMenu . getMenu ( 'file' ) . setApi ( api ) ;
2021-03-24 07:39:09 +00:00
if ( this . mode . canUseHistory )
this . getApplication ( ) . getController ( 'Common.Controllers.History' ) . setApi ( this . api ) . setMode ( this . mode ) ;
2016-03-11 00:48:53 +00:00
return this ;
} ,
setMode : function ( mode ) {
this . mode = mode ;
this . leftMenu . setMode ( mode ) ;
this . leftMenu . getMenu ( 'file' ) . setMode ( mode ) ;
2017-08-14 11:24:00 +00:00
if ( ! mode . isEdit ) // TODO: unlock 'save as', 'open file menu' for 'view' mode
Common . util . Shortcuts . removeShortcuts ( {
shortcuts : {
'command+shift+s,ctrl+shift+s' : _ . bind ( this . onShortcut , this , 'save' ) ,
'alt+f' : _ . bind ( this . onShortcut , this , 'file' )
}
} ) ;
2016-03-11 00:48:53 +00:00
return this ;
} ,
createDelayedElements : function ( ) {
/** coauthoring begin **/
if ( this . mode . canCoAuthoring ) {
2018-12-17 08:37:43 +00:00
this . leftMenu . btnComments [ ( this . mode . canViewComments && ! this . mode . isLightVersion ) ? 'show' : 'hide' ] ( ) ;
if ( this . mode . canViewComments )
2017-04-11 11:05:56 +00:00
this . leftMenu . setOptionsPanel ( 'comment' , this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) . getView ( 'Common.Views.Comments' ) ) ;
2016-03-11 00:48:53 +00:00
2016-06-30 09:38:54 +00:00
this . leftMenu . btnChat [ ( this . mode . canChat && ! this . mode . isLightVersion ) ? 'show' : 'hide' ] ( ) ;
2016-03-11 00:48:53 +00:00
if ( this . mode . canChat )
this . leftMenu . setOptionsPanel ( 'chat' , this . getApplication ( ) . getController ( 'Common.Controllers.Chat' ) . getView ( 'Common.Views.Chat' ) ) ;
} else {
this . leftMenu . btnChat . hide ( ) ;
this . leftMenu . btnComments . hide ( ) ;
}
2021-03-24 07:39:09 +00:00
if ( this . mode . canUseHistory )
this . leftMenu . setOptionsPanel ( 'history' , this . getApplication ( ) . getController ( 'Common.Controllers.History' ) . getView ( 'Common.Views.History' ) ) ;
2020-11-02 20:26:17 +00:00
( this . mode . trialMode || this . mode . isBeta ) && this . leftMenu . setDeveloperMode ( this . mode . trialMode , this . mode . isBeta , this . mode . buildVersion ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
Common . util . Shortcuts . resumeEvents ( ) ;
this . leftMenu . btnThumbs . toggle ( true ) ;
return this ;
} ,
2016-07-26 11:45:41 +00:00
enablePlugins : function ( ) {
if ( this . mode . canPlugins ) {
2017-08-11 11:01:27 +00:00
// this.leftMenu.btnPlugins.show();
2016-07-26 11:45:41 +00:00
this . leftMenu . setOptionsPanel ( 'plugins' , this . getApplication ( ) . getController ( 'Common.Controllers.Plugins' ) . getView ( 'Common.Views.Plugins' ) ) ;
} else
this . leftMenu . btnPlugins . hide ( ) ;
2020-11-02 20:26:17 +00:00
( this . mode . trialMode || this . mode . isBeta ) && this . leftMenu . setDeveloperMode ( this . mode . trialMode , this . mode . isBeta , this . mode . buildVersion ) ;
2016-07-26 11:45:41 +00:00
} ,
2016-03-11 00:48:53 +00:00
clickMenuFileItem : function ( menu , action , isopts ) {
var close _menu = true ;
switch ( action ) {
case 'back' : break ;
case 'save' : this . api . asc _Save ( ) ; break ;
case 'save-desktop' : this . api . asc _DownloadAs ( ) ; break ;
2021-04-20 15:46:41 +00:00
case 'print' : this . api . asc _Print ( new Asc . asc _CDownloadOptions ( null , Common . Utils . isChrome || Common . Utils . isSafari || Common . Utils . isOpera || Common . Utils . isGecko && Common . Utils . firefoxVersion > 86 ) ) ; break ;
2016-03-11 00:48:53 +00:00
case 'exit' : Common . NotificationCenter . trigger ( 'goback' ) ; break ;
case 'edit' :
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( this . requestEditRightsText ) ;
Common . Gateway . requestEditRights ( ) ;
break ;
case 'new' :
if ( isopts ) close _menu = false ;
else this . onCreateNew ( undefined , 'blank' ) ;
break ;
2016-09-27 12:09:32 +00:00
case 'rename' :
var me = this ,
documentCaption = me . api . asc _getDocumentName ( ) ;
( new Common . Views . RenameDialog ( {
filename : documentCaption ,
2021-05-12 16:04:14 +00:00
maxLength : this . mode . wopi ? this . mode . wopi . FileNameMaxLength : undefined ,
2016-09-27 12:09:32 +00:00
handler : function ( result , value ) {
if ( result == 'ok' && ! _ . isEmpty ( value . trim ( ) ) && documentCaption !== value . trim ( ) ) {
2021-05-12 16:04:14 +00:00
me . mode . wopi ? me . api . asc _wopi _renameFile ( value ) : Common . Gateway . requestRename ( value ) ;
2016-09-27 12:09:32 +00:00
}
Common . NotificationCenter . trigger ( 'edit:complete' , me ) ;
}
} ) ) . show ( ) ;
break ;
2021-03-24 07:39:09 +00:00
case 'history' :
if ( ! this . leftMenu . panelHistory . isVisible ( ) ) {
if ( this . api . isDocumentModified ( ) ) {
var me = this ;
this . api . asc _stopSaving ( ) ;
Common . UI . warning ( {
closable : false ,
width : 500 ,
title : this . notcriticalErrorTitle ,
msg : this . leavePageText ,
buttons : [ 'ok' , 'cancel' ] ,
primary : 'ok' ,
callback : function ( btn ) {
if ( btn == 'ok' ) {
me . api . asc _undoAllChanges ( ) ;
2021-03-29 13:40:05 +00:00
me . api . asc _continueSaving ( ) ;
2021-03-24 07:39:09 +00:00
me . showHistory ( ) ;
} else
me . api . asc _continueSaving ( ) ;
}
} ) ;
} else
this . showHistory ( ) ;
}
break ;
default : close _menu = false ;
2016-03-11 00:48:53 +00:00
}
2021-03-24 07:39:09 +00:00
if ( close _menu && menu ) {
2016-03-11 00:48:53 +00:00
menu . hide ( ) ;
}
} ,
clickSaveAsFormat : function ( menu , format ) {
2019-07-24 08:36:13 +00:00
this . api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( format ) ) ;
2016-03-11 00:48:53 +00:00
menu . hide ( ) ;
} ,
2018-09-27 12:25:15 +00:00
clickSaveCopyAsFormat : function ( menu , format , ext ) {
this . isFromFileDownloadAs = ext ;
2019-07-24 08:36:13 +00:00
this . api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( format , true ) ) ;
2018-09-27 12:25:15 +00:00
menu . hide ( ) ;
} ,
onDownloadUrl : function ( url ) {
if ( this . isFromFileDownloadAs ) {
var me = this ,
defFileName = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) . getDocumentCaption ( ) ;
! defFileName && ( defFileName = me . txtUntitled ) ;
if ( typeof this . isFromFileDownloadAs == 'string' ) {
var idx = defFileName . lastIndexOf ( '.' ) ;
if ( idx > 0 )
defFileName = defFileName . substring ( 0 , idx ) + this . isFromFileDownloadAs ;
}
2019-07-26 09:54:20 +00:00
if ( me . mode . canRequestSaveAs ) {
Common . Gateway . requestSaveAs ( url , defFileName ) ;
} else {
me . _saveCopyDlg = new Common . Views . SaveAsDlg ( {
saveFolderUrl : me . mode . saveAsUrl ,
saveFileUrl : url ,
defFileName : defFileName
} ) ;
me . _saveCopyDlg . on ( 'saveaserror' , function ( obj , err ) {
var config = {
closable : false ,
title : me . notcriticalErrorTitle ,
msg : err ,
iconCls : 'warn' ,
buttons : [ 'ok' ] ,
callback : function ( btn ) {
Common . NotificationCenter . trigger ( 'edit:complete' , me ) ;
}
} ;
Common . UI . alert ( config ) ;
} ) . on ( 'close' , function ( obj ) {
me . _saveCopyDlg = undefined ;
} ) ;
me . _saveCopyDlg . show ( ) ;
}
2018-09-27 12:25:15 +00:00
}
this . isFromFileDownloadAs = false ;
} ,
2016-03-11 00:48:53 +00:00
applySettings : function ( menu ) {
2017-10-04 15:44:01 +00:00
var value = Common . localStorage . getBool ( "pe-settings-inputmode" ) ;
Common . Utils . InternalSettings . set ( "pe-settings-inputmode" , value ) ;
this . api . SetTextBoxInputMode ( value ) ;
2016-03-11 00:48:53 +00:00
2021-04-02 19:36:08 +00:00
var fast _coauth = Common . Utils . InternalSettings . get ( "pe-settings-coauthmode" ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
2016-12-20 14:29:37 +00:00
if ( this . mode . isEdit && ! this . mode . isOffline && this . mode . canCoAuthoring ) {
2021-04-02 19:36:08 +00:00
if ( this . mode . canChangeCoAuthoring ) {
fast _coauth = Common . localStorage . getBool ( "pe-settings-coauthmode" , true ) ;
Common . Utils . InternalSettings . set ( "pe-settings-coauthmode" , fast _coauth ) ;
this . api . asc _SetFastCollaborative ( fast _coauth ) ;
}
2016-03-11 00:48:53 +00:00
}
/** coauthoring end **/
2020-02-17 13:43:02 +00:00
value = Common . localStorage . getBool ( "pe-settings-cachemode" , true ) ;
Common . Utils . InternalSettings . set ( "pe-settings-cachemode" , value ) ;
this . api . asc _setDefaultBlitMode ( value ) ;
2019-02-28 12:01:47 +00:00
value = Common . localStorage . getItem ( "pe-settings-fontrender" ) ;
Common . Utils . InternalSettings . set ( "pe-settings-fontrender" , value ) ;
this . api . SetFontRenderingMode ( parseInt ( value ) ) ;
2017-06-16 07:29:15 +00:00
if ( this . mode . isEdit ) {
2021-04-02 19:36:08 +00:00
if ( this . mode . canChangeCoAuthoring || ! fast _coauth ) { // can change co-auth. mode or for strict mode
value = parseInt ( Common . localStorage . getItem ( "pe-settings-autosave" ) ) ;
Common . Utils . InternalSettings . set ( "pe-settings-autosave" , value ) ;
this . api . asc _setAutoSaveGap ( value ) ;
}
2017-06-16 07:29:15 +00:00
2017-10-04 15:44:01 +00:00
value = Common . localStorage . getBool ( "pe-settings-spellcheck" , true ) ;
Common . Utils . InternalSettings . set ( "pe-settings-spellcheck" , value ) ;
this . api . asc _setSpellCheck ( value ) ;
2020-06-04 08:51:14 +00:00
value = parseInt ( Common . localStorage . getItem ( "pe-settings-paste-button" ) ) ;
Common . Utils . InternalSettings . set ( "pe-settings-paste-button" , value ) ;
this . api . asc _setVisiblePasteButton ( ! ! value ) ;
2017-06-16 07:29:15 +00:00
}
2016-03-11 00:48:53 +00:00
2017-10-04 15:44:01 +00:00
this . api . put _ShowSnapLines ( Common . Utils . InternalSettings . get ( "pe-settings-showsnaplines" ) ) ;
2016-03-11 00:48:53 +00:00
menu . hide ( ) ;
} ,
onCreateNew : function ( menu , type ) {
2019-07-16 13:30:37 +00:00
if ( ! Common . Controllers . Desktop . process ( 'create:new' ) ) {
2020-06-15 17:05:19 +00:00
if ( this . mode . canRequestCreateNew )
Common . Gateway . requestCreateNew ( ) ;
else {
var newDocumentPage = window . open ( type == 'blank' ? this . mode . createUrl : type , "_blank" ) ;
if ( newDocumentPage ) newDocumentPage . focus ( ) ;
}
2019-07-16 13:30:37 +00:00
}
2016-03-11 00:48:53 +00:00
if ( menu ) {
menu . hide ( ) ;
}
} ,
onOpenRecent : function ( menu , url ) {
if ( menu ) {
menu . hide ( ) ;
}
var recentDocPage = window . open ( url ) ;
if ( recentDocPage )
recentDocPage . focus ( ) ;
Common . component . Analytics . trackEvent ( 'Open Recent' ) ;
} ,
clickToolbarSettings : function ( obj ) {
2017-04-20 13:34:39 +00:00
this . leftMenu . showMenu ( 'file:opts' ) ;
} ,
clickToolbarTab : function ( tab , e ) {
if ( tab == 'file' )
this . leftMenu . menuFile . show ( ) ; else
this . leftMenu . menuFile . hide ( ) ;
2016-03-11 00:48:53 +00:00
} ,
2018-02-15 23:56:17 +00:00
changeToolbarSaveState : function ( state ) {
2018-07-25 08:21:18 +00:00
var btnSave = this . leftMenu . menuFile . getButton ( 'save' ) ;
btnSave && btnSave . setDisabled ( state ) ;
2018-02-15 23:56:17 +00:00
} ,
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
onHideChat : function ( ) {
$ ( this . leftMenu . btnChat . el ) . blur ( ) ;
Common . NotificationCenter . trigger ( 'layout:changed' , 'leftmenu' ) ;
} ,
2017-12-06 11:25:29 +00:00
onHidePlugins : function ( ) {
Common . NotificationCenter . trigger ( 'layout:changed' , 'leftmenu' ) ;
} ,
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
onQuerySearch : function ( d , w , opts ) {
if ( opts . textsearch && opts . textsearch . length ) {
2018-12-05 16:45:21 +00:00
if ( ! this . api . findText ( opts . textsearch , d != 'back' , opts . matchcase ) ) {
2016-03-11 00:48:53 +00:00
var me = this ;
Common . UI . info ( {
msg : this . textNoTextFound ,
callback : function ( ) {
me . dlgSearch . focus ( ) ;
}
} ) ;
}
}
} ,
2018-12-05 16:45:21 +00:00
onQueryReplace : function ( w , opts ) {
if ( ! _ . isEmpty ( opts . textsearch ) ) {
if ( ! this . api . asc _replaceText ( opts . textsearch , opts . textreplace , false , opts . matchcase ) ) {
var me = this ;
Common . UI . info ( {
msg : this . textNoTextFound ,
callback : function ( ) {
me . dlgSearch . focus ( ) ;
}
} ) ;
}
}
} ,
onQueryReplaceAll : function ( w , opts ) {
if ( ! _ . isEmpty ( opts . textsearch ) ) {
this . api . asc _replaceText ( opts . textsearch , opts . textreplace , true , opts . matchcase ) ;
}
} ,
showSearchDlg : function ( show , action ) {
2016-03-11 00:48:53 +00:00
if ( ! this . dlgSearch ) {
2018-12-05 16:45:21 +00:00
this . dlgSearch = ( new Common . UI . SearchDialog ( {
matchcase : true
} ) ) ;
2019-09-05 13:55:21 +00:00
var me = this ;
Common . NotificationCenter . on ( 'preview:start' , function ( ) {
me . dlgSearch . hide ( ) ;
} ) ;
2016-03-11 00:48:53 +00:00
}
if ( show ) {
2019-02-13 09:57:02 +00:00
var mode = this . mode . isEdit && ! this . viewmode ? ( action || undefined ) : 'no-replace' ;
2018-12-05 16:45:21 +00:00
if ( this . dlgSearch . isVisible ( ) ) {
this . dlgSearch . setMode ( mode ) ;
this . dlgSearch . focus ( ) ;
} else {
this . dlgSearch . show ( mode ) ;
}
2016-03-11 00:48:53 +00:00
} else this . dlgSearch [ 'hide' ] ( ) ;
} ,
onMenuSearch : function ( obj , show ) {
this . showSearchDlg ( show ) ;
} ,
onShowTumbnails : function ( obj , show ) {
this . api . ShowThumbnails ( show ) ;
} ,
onThumbnailsShow : function ( isShow ) {
if ( isShow && ! this . isThumbsShown ) {
this . leftMenu . btnThumbs . toggle ( true , false ) ;
} else if ( ! isShow && this . isThumbsShown )
this . leftMenu . btnThumbs . toggle ( false , false ) ;
this . isThumbsShown = isShow ;
} ,
onSearchDlgHide : function ( ) {
this . leftMenu . btnSearch . toggle ( false , true ) ;
$ ( this . leftMenu . btnSearch . el ) . blur ( ) ;
this . api . asc _enableKeyEvents ( true ) ;
// this.api.asc_selectSearchingResults(false);
} ,
2018-12-05 16:55:31 +00:00
onApiTextReplaced : function ( found , replaced ) {
var me = this ;
if ( found ) {
! ( found - replaced > 0 ) ?
Common . UI . info ( { msg : Common . Utils . String . format ( this . textReplaceSuccess , replaced ) } ) :
Common . UI . warning ( { msg : Common . Utils . String . format ( this . textReplaceSkipped , found - replaced ) } ) ;
} else {
Common . UI . info ( { msg : this . textNoTextFound } ) ;
}
} ,
2019-02-13 09:57:02 +00:00
setPreviewMode : function ( mode ) {
if ( this . viewmode === mode ) return ;
this . viewmode = mode ;
this . dlgSearch && this . dlgSearch . setMode ( this . viewmode ? 'no-replace' : 'search' ) ;
} ,
2018-10-25 13:19:29 +00:00
onApiServerDisconnect : function ( enableDownload ) {
2016-03-11 00:48:53 +00:00
this . mode . isEdit = false ;
this . leftMenu . close ( ) ;
/** coauthoring begin **/
this . leftMenu . btnComments . setDisabled ( true ) ;
this . leftMenu . btnChat . setDisabled ( true ) ;
/** coauthoring end **/
2016-07-26 11:45:41 +00:00
this . leftMenu . btnPlugins . setDisabled ( true ) ;
2016-03-11 00:48:53 +00:00
2018-10-25 13:19:29 +00:00
this . leftMenu . getMenu ( 'file' ) . setMode ( { isDisconnected : true , enableDownload : ! ! enableDownload } ) ;
2016-03-11 00:48:53 +00:00
if ( this . dlgSearch ) {
this . leftMenu . btnSearch . toggle ( false , true ) ;
this . dlgSearch [ 'hide' ] ( ) ;
}
} ,
onApiCountPages : function ( count ) {
2018-03-20 11:10:29 +00:00
if ( this . _state . no _slides !== ( count <= 0 ) ) {
2016-03-11 00:48:53 +00:00
this . _state . no _slides = ( count <= 0 ) ;
/** coauthoring begin **/
2018-03-20 11:10:29 +00:00
this . leftMenu . btnComments && this . leftMenu . btnComments . setDisabled ( this . _state . no _slides ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
2018-03-20 11:10:29 +00:00
this . leftMenu . btnSearch && this . leftMenu . btnSearch . setDisabled ( this . _state . no _slides ) ;
2016-03-11 00:48:53 +00:00
}
} ,
menuExpand : function ( obj , panel , show ) {
if ( panel == 'thumbs' ) {
this . isThumbsShown = show ;
} else {
2021-03-24 07:39:09 +00:00
if ( ! show && this . isThumbsShown && ! this . leftMenu . _state . pluginIsRunning && ! this . leftMenu . _state . historyIsRunning ) {
2016-03-11 00:48:53 +00:00
this . leftMenu . btnThumbs . toggle ( true , false ) ;
}
}
} ,
menuFilesHide : function ( obj ) {
2017-04-20 13:34:39 +00:00
// $(this.leftMenu.btnFile.el).blur();
2016-03-11 00:48:53 +00:00
} ,
/** coauthoring begin **/
onApiChatMessage : function ( ) {
this . leftMenu . markCoauthOptions ( 'chat' ) ;
} ,
onApiAddComment : function ( id , data ) {
if ( data && data . asc _getUserId ( ) !== this . mode . user . id )
this . leftMenu . markCoauthOptions ( 'comments' ) ;
} ,
onApiAddComments : function ( data ) {
for ( var i = 0 ; i < data . length ; ++ i ) {
2016-05-31 15:42:12 +00:00
if ( data [ i ] . asc _getUserId ( ) !== this . mode . user . id ) {
2016-03-11 00:48:53 +00:00
this . leftMenu . markCoauthOptions ( 'comments' ) ;
break ;
}
}
} ,
commentsShowHide : function ( mode ) {
// var value = Common.localStorage.getItem("pe-settings-livecomment");
// if (value!==null && parseInt(value) == 0)
// (mode=='show') ? this.api.asc_showComments() : this.api.asc_hideComments();
if ( mode === 'show' ) {
this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) . onAfterShow ( ) ;
}
$ ( this . leftMenu . btnComments . el ) . blur ( ) ;
} ,
/** coauthoring end **/
aboutShowHide : function ( value ) {
if ( this . api )
this . api . asc _enableKeyEvents ( value ) ;
if ( value ) $ ( this . leftMenu . btnAbout . el ) . blur ( ) ;
2019-03-27 13:03:16 +00:00
if ( value && this . leftMenu . _state . pluginIsRunning ) {
this . leftMenu . panelPlugins . show ( ) ;
this . leftMenu . $el . width ( Common . localStorage . getItem ( 'pe-mainmenu-width' ) || MENU _SCALE _PART ) ;
if ( this . mode . canCoAuthoring ) {
this . mode . canViewComments && this . leftMenu . panelComments [ 'hide' ] ( ) ;
this . mode . canChat && this . leftMenu . panelChat [ 'hide' ] ( ) ;
}
}
2016-03-11 00:48:53 +00:00
} ,
2017-05-01 11:30:44 +00:00
menuFilesShowHide : function ( state ) {
if ( this . dlgSearch ) {
if ( state == 'show' )
this . dlgSearch . suspendKeyEvents ( ) ;
else
2017-06-20 09:53:18 +00:00
Common . Utils . asyncCall ( this . dlgSearch . resumeKeyEvents , this . dlgSearch ) ;
2017-05-01 11:30:44 +00:00
}
} ,
2016-03-11 00:48:53 +00:00
onShortcut : function ( s , e ) {
2018-02-06 10:54:40 +00:00
if ( ! this . mode ) return ;
2016-03-11 00:48:53 +00:00
var previewPanel = PE . getController ( 'Viewport' ) . getView ( 'DocumentPreview' ) ;
switch ( s ) {
2018-12-05 16:45:21 +00:00
case 'replace' :
2016-03-11 00:48:53 +00:00
case 'search' :
if ( ( ! previewPanel || ! previewPanel . isVisible ( ) ) && ! this . _state . no _slides ) {
Common . UI . Menu . Manager . hideAll ( ) ;
2017-04-20 13:34:39 +00:00
var full _menu _pressed = this . leftMenu . btnAbout . pressed ;
2018-12-05 16:45:21 +00:00
this . showSearchDlg ( true , s ) ;
2016-03-11 00:48:53 +00:00
this . leftMenu . btnSearch . toggle ( true , true ) ;
this . leftMenu . btnAbout . toggle ( false ) ;
2017-04-20 13:34:39 +00:00
full _menu _pressed && this . menuExpand ( this . leftMenu . btnAbout , 'files' , false ) ;
2016-03-11 00:48:53 +00:00
}
return false ;
case 'save' :
if ( this . mode . canDownload && ( ! previewPanel || ! previewPanel . isVisible ( ) ) ) {
if ( this . mode . isDesktopApp && this . mode . isOffline ) {
this . api . asc _DownloadAs ( ) ;
} else {
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'file:saveas' ) ;
}
}
return false ;
case 'help' :
2018-04-19 14:26:42 +00:00
if ( this . mode . isEdit && this . mode . canHelp ) { // TODO: unlock 'help' panel for 'view' mode
2017-08-09 16:59:54 +00:00
2016-03-11 00:48:53 +00:00
if ( ! previewPanel || ! previewPanel . isVisible ( ) ) {
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'file:help' ) ;
}
2017-08-09 16:59:54 +00:00
}
2016-03-11 00:48:53 +00:00
return false ;
case 'file' :
if ( ! previewPanel || ! previewPanel . isVisible ( ) ) {
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'file' ) ;
}
return false ;
case 'escape' :
// if (!this.leftMenu.isOpened()) return true;
2017-04-20 13:34:39 +00:00
// TODO:
if ( this . leftMenu . menuFile . isVisible ( ) ) {
2021-06-21 17:49:45 +00:00
if ( Common . UI . HintManager . needCloseMenu ( ) )
this . leftMenu . menuFile . hide ( ) ;
2017-04-20 13:34:39 +00:00
return false ;
}
2016-03-11 00:48:53 +00:00
var statusbar = PE . getController ( 'Statusbar' ) ;
var menu _opened = statusbar . statusbar . $el . find ( '.open > [data-toggle="dropdown"]' ) ;
if ( menu _opened . length ) {
$ . fn . dropdown . Constructor . prototype . keydown . call ( menu _opened [ 0 ] , e ) ;
return false ;
}
2016-07-26 11:45:41 +00:00
if ( this . mode . canPlugins && this . leftMenu . panelPlugins ) {
menu _opened = this . leftMenu . panelPlugins . $el . find ( '#menu-plugin-container.open > [data-toggle="dropdown"]' ) ;
if ( menu _opened . length ) {
$ . fn . dropdown . Constructor . prototype . keydown . call ( menu _opened [ 0 ] , e ) ;
return false ;
}
}
2017-04-20 13:34:39 +00:00
if ( this . leftMenu . btnAbout . pressed || this . leftMenu . btnPlugins . pressed ||
2016-03-11 00:48:53 +00:00
$ ( e . target ) . parents ( '#left-menu' ) . length ) {
this . leftMenu . close ( ) ;
Common . NotificationCenter . trigger ( 'layout:changed' , 'leftmenu' ) ;
return false ;
}
break ;
/** coauthoring begin **/
case 'chat' :
2016-06-30 09:38:54 +00:00
if ( this . mode . canCoAuthoring && this . mode . canChat && ! this . mode . isLightVersion && ( ! previewPanel || ! previewPanel . isVisible ( ) ) ) {
2016-03-11 00:48:53 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'chat' ) ;
}
return false ;
case 'comments' :
2018-12-17 08:37:43 +00:00
if ( this . mode . canCoAuthoring && this . mode . canViewComments && ! this . mode . isLightVersion && ( ! previewPanel || ! previewPanel . isVisible ( ) ) && ! this . _state . no _slides ) {
2016-03-11 00:48:53 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'comments' ) ;
this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) . onAfterShow ( ) ;
}
return false ;
/** coauthoring end **/
}
} ,
2017-08-11 11:01:27 +00:00
onPluginOpen : function ( panel , type , action ) {
2017-09-13 08:57:30 +00:00
if ( type == 'onboard' ) {
if ( action == 'open' ) {
2017-08-18 12:17:25 +00:00
this . leftMenu . close ( ) ;
2017-08-11 11:01:27 +00:00
this . leftMenu . btnThumbs . toggle ( false , false ) ;
this . leftMenu . panelPlugins . show ( ) ;
2017-09-13 08:57:30 +00:00
this . leftMenu . onBtnMenuClick ( { pressed : true , options : { action : 'plugins' } } ) ;
2019-03-27 13:03:16 +00:00
this . leftMenu . _state . pluginIsRunning = true ;
2017-08-11 11:01:27 +00:00
} else {
2019-03-27 13:03:16 +00:00
this . leftMenu . _state . pluginIsRunning = false ;
2017-08-11 11:01:27 +00:00
this . leftMenu . close ( ) ;
}
}
} ,
2017-10-24 11:56:49 +00:00
onMenuChange : function ( value ) {
if ( 'hide' === value ) {
if ( this . leftMenu . btnComments . isActive ( ) && this . api ) {
this . leftMenu . btnComments . toggle ( false ) ;
this . leftMenu . onBtnMenuClick ( this . leftMenu . btnComments ) ;
2019-03-27 13:03:16 +00:00
if ( this . leftMenu . _state . pluginIsRunning ) // hide comments panel when plugin is running
this . leftMenu . onCoauthOptions ( ) ;
2017-10-24 11:56:49 +00:00
// focus to sdk
this . api . asc _enableKeyEvents ( true ) ;
}
}
} ,
2017-10-12 09:22:31 +00:00
onShowHideChat : function ( state ) {
if ( this . mode . canCoAuthoring && this . mode . canChat && ! this . mode . isLightVersion ) {
if ( state ) {
Common . UI . Menu . Manager . hideAll ( ) ;
this . leftMenu . showMenu ( 'chat' ) ;
} else {
this . leftMenu . btnChat . toggle ( false , true ) ;
this . leftMenu . onBtnMenuClick ( this . leftMenu . btnChat ) ;
}
}
} ,
2021-03-24 07:39:09 +00:00
showHistory : function ( ) {
2021-05-13 11:45:53 +00:00
if ( ! this . mode . wopi ) {
var maincontroller = PE . getController ( 'Main' ) ;
if ( ! maincontroller . loadMask )
maincontroller . loadMask = new Common . UI . LoadMask ( { owner : $ ( '#viewport' ) } ) ;
maincontroller . loadMask . setTitle ( this . textLoadHistory ) ;
maincontroller . loadMask . show ( ) ;
}
2021-03-24 07:39:09 +00:00
Common . Gateway . requestHistory ( ) ;
} ,
SetDisabled : function ( disable , disableFileMenu ) {
this . mode . isEdit = ! disable ;
if ( disable ) this . leftMenu . close ( ) ;
/** coauthoring begin **/
this . leftMenu . btnComments . setDisabled ( disable ) ;
var comments = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( comments )
comments . setPreviewMode ( disable ) ;
this . setPreviewMode ( disable ) ;
this . leftMenu . btnChat . setDisabled ( disable ) ;
/** coauthoring end **/
this . leftMenu . btnPlugins . setDisabled ( disable ) ;
this . leftMenu . btnThumbs . setDisabled ( disable ) ;
if ( disableFileMenu ) this . leftMenu . getMenu ( 'file' ) . SetDisabled ( disable ) ;
} ,
2016-03-11 00:48:53 +00:00
textNoTextFound : 'Text not found' ,
newDocumentTitle : 'Unnamed document' ,
2018-09-27 12:25:15 +00:00
requestEditRightsText : 'Requesting editing rights...' ,
notcriticalErrorTitle : 'Warning' ,
2018-12-05 16:55:31 +00:00
txtUntitled : 'Untitled' ,
textReplaceSuccess : 'Search has been done. {0} occurrences have been replaced' ,
2021-03-24 07:39:09 +00:00
textReplaceSkipped : 'The replacement has been made. {0} occurrences were skipped.' ,
textLoadHistory : 'Loading version history...' ,
leavePageText : 'All unsaved changes in this document will be lost.<br> Click \'Cancel\' then \'Save\' to save them. Click \'OK\' to discard all the unsaved changes.'
2016-03-11 00:48:53 +00:00
} , PE . Controllers . LeftMenu || { } ) ) ;
} ) ;