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
/ * *
* Main . js
*
* Main controller
*
* Created by Alexander Yuzhin on 1 / 15 / 14
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' ,
'irregularstack' ,
'common/main/lib/component/Window' ,
'common/main/lib/component/LoadMask' ,
'common/main/lib/component/Tooltip' ,
'common/main/lib/controller/Fonts' ,
'common/main/lib/collection/TextArt' ,
'common/main/lib/view/OpenDialog' ,
2016-11-21 13:17:59 +00:00
'common/main/lib/util/LocalStorage' ,
2016-03-11 00:48:53 +00:00
'documenteditor/main/app/collection/ShapeGroups' ,
'documenteditor/main/app/collection/EquationGroups'
] , function ( ) {
'use strict' ;
DE . Controllers . Main = Backbone . Controller . extend ( _ . extend ( ( function ( ) {
2017-04-21 13:36:06 +00:00
var appHeader ;
2016-03-11 00:48:53 +00:00
var ApplyEditRights = - 255 ;
var LoadingDocument = - 256 ;
var mapCustomizationElements = {
about : 'button#left-btn-about' ,
feedback : 'button#left-btn-support' ,
2016-10-28 13:38:33 +00:00
goback : '#fm-btn-back > a, #header-back > div'
} ;
var mapCustomizationExtElements = {
2016-10-21 13:47:46 +00:00
toolbar : '#viewport #toolbar' ,
2016-10-28 13:38:33 +00:00
leftMenu : '#viewport #left-menu, #viewport #id-toolbar-full-placeholder-btn-settings, #viewport #id-toolbar-short-placeholder-btn-settings' ,
rightMenu : '#viewport #right-menu' ,
2017-04-12 07:59:28 +00:00
statusBar : '#statusbar'
2016-03-11 00:48:53 +00:00
} ;
Common . localStorage . setId ( 'text' ) ;
Common . localStorage . setKeysFilter ( 'de-,asc.text' ) ;
Common . localStorage . sync ( ) ;
return {
models : [ ] ,
collections : [
'ShapeGroups' ,
'EquationGroups' ,
'Common.Collections.HistoryUsers' ,
'Common.Collections.TextArt'
] ,
views : [ ] ,
initialize : function ( ) {
this . addListeners ( {
'FileMenu' : {
'settings:apply' : _ . bind ( this . applySettings , this )
2017-11-24 06:31:34 +00:00
} ,
'Common.Views.ReviewChanges' : {
'settings:apply' : _ . bind ( this . applySettings , this )
2016-03-11 00:48:53 +00:00
}
} ) ;
} ,
onLaunch : function ( ) {
var me = this ;
this . stackLongActions = new Common . IrregularStack ( {
strongCompare : function ( obj1 , obj2 ) { return obj1 . id === obj2 . id && obj1 . type === obj2 . type ; } ,
weakCompare : function ( obj1 , obj2 ) { return obj1 . type === obj2 . type ; }
} ) ;
2018-05-28 10:00:03 +00:00
this . _state = { isDisconnected : false , usersCount : 1 , fastCoauth : true , lostEditingRights : false , licenseType : false } ;
2017-04-19 08:28:40 +00:00
this . languages = null ;
2017-06-23 13:46:10 +00:00
this . translationTable = [ ] ;
2018-07-25 13:33:46 +00:00
this . isModalShowed = 0 ;
2016-03-11 00:48:53 +00:00
// Initialize viewport
if ( ! Common . Utils . isBrowserSupported ( ) ) {
Common . Utils . showBrowserRestriction ( ) ;
Common . Gateway . reportError ( undefined , this . unsupportedBrowserErrorText ) ;
return ;
}
var value = Common . localStorage . getItem ( "de-settings-fontrender" ) ;
if ( value === null )
window . devicePixelRatio > 1 ? value = '1' : '0' ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-fontrender" , value ) ;
2016-03-11 00:48:53 +00:00
// Initialize api
2016-05-10 11:52:24 +00:00
window [ "flat_desine" ] = true ;
2017-06-23 13:46:10 +00:00
var styleNames = [ 'Normal' , 'No Spacing' , 'Heading 1' , 'Heading 2' , 'Heading 3' , 'Heading 4' , 'Heading 5' ,
2018-03-07 11:54:22 +00:00
'Heading 6' , 'Heading 7' , 'Heading 8' , 'Heading 9' , 'Title' , 'Subtitle' , 'Quote' , 'Intense Quote' , 'List Paragraph' , 'footnote text' ] ,
2019-03-06 08:16:21 +00:00
translate = {
'Series' : this . txtSeries ,
'Diagram Title' : this . txtDiagramTitle ,
'X Axis' : this . txtXAxis ,
'Y Axis' : this . txtYAxis ,
'Your text here' : this . txtArt ,
"Error! Bookmark not defined." : this . txtBookmarkError ,
"above" : this . txtAbove ,
"below" : this . txtBelow ,
"on page " : this . txtOnPage ,
"Header" : this . txtHeader ,
"Footer" : this . txtFooter ,
" -Section " : this . txtSection ,
"First Page " : this . txtFirstPage ,
"Even Page " : this . txtEvenPage ,
"Odd Page " : this . txtOddPage ,
"Same as Previous" : this . txtSameAsPrev ,
"Current Document" : this . txtCurrentDocument ,
"No table of contents entries found." : this . txtNoTableOfContents ,
"Table of Contents" : this . txtTableOfContents ,
"Syntax Error" : this . txtSyntaxError ,
"Missing Operator" : this . txtMissOperator ,
"Missing Argument" : this . txtMissArg ,
"Number Too Large To Format" : this . txtTooLarge ,
"Zero Divide" : this . txtZeroDivide ,
"Is Not In Table" : this . txtNotInTable ,
"Index Too Large" : this . txtIndTooLarge ,
"The Formula Not In Table" : this . txtFormulaNotInTable ,
"Table Index Cannot be Zero" : this . txtTableInd ,
"Undefined Bookmark" : this . txtUndefBookmark ,
"Unexpected End of Formula" : this . txtEndOfFormula
} ;
2017-06-23 13:46:10 +00:00
styleNames . forEach ( function ( item ) {
2017-06-22 13:04:31 +00:00
translate [ item ] = me . translationTable [ item ] = me [ 'txtStyle_' + item . replace ( / /g , '_' ) ] || item ;
2017-06-23 13:46:10 +00:00
} ) ;
2018-03-07 11:54:22 +00:00
me . translationTable [ 'Header' ] = this . txtHeader ;
me . translationTable [ 'Footer' ] = this . txtFooter ;
2017-06-23 13:46:10 +00:00
this . api = new Asc . asc _docs _api ( {
'id-view' : 'editor_sdk' ,
'translate' : translate
2016-05-13 08:37:54 +00:00
} ) ;
2016-03-11 00:48:53 +00:00
if ( this . api ) {
2018-05-10 12:18:28 +00:00
this . api . SetDrawingFreeze ( true ) ;
2016-03-11 00:48:53 +00:00
switch ( value ) {
case '0' : this . api . SetFontRenderingMode ( 3 ) ; break ;
case '1' : this . api . SetFontRenderingMode ( 1 ) ; break ;
case '2' : this . api . SetFontRenderingMode ( 2 ) ; break ;
}
this . api . asc _registerCallback ( 'asc_onError' , _ . bind ( this . onError , this ) ) ;
this . api . asc _registerCallback ( 'asc_onDocumentContentReady' , _ . bind ( this . onDocumentContentReady , this ) ) ;
this . api . asc _registerCallback ( 'asc_onOpenDocumentProgress' , _ . bind ( this . onOpenDocument , this ) ) ;
this . api . asc _registerCallback ( 'asc_onDocumentUpdateVersion' , _ . bind ( this . onUpdateVersion , this ) ) ;
2017-04-11 11:37:45 +00:00
this . api . asc _registerCallback ( 'asc_onServerVersion' , _ . bind ( this . onServerVersion , this ) ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _registerCallback ( 'asc_onAdvancedOptions' , _ . bind ( this . onAdvancedOptions , this ) ) ;
this . api . asc _registerCallback ( 'asc_onDocumentName' , _ . bind ( this . onDocumentName , this ) ) ;
this . api . asc _registerCallback ( 'asc_onPrintUrl' , _ . bind ( this . onPrintUrl , this ) ) ;
2016-09-26 10:54:25 +00:00
this . api . asc _registerCallback ( 'asc_onMeta' , _ . bind ( this . onMeta , this ) ) ;
2017-04-19 08:28:40 +00:00
this . api . asc _registerCallback ( 'asc_onSpellCheckInit' , _ . bind ( this . loadLanguages , this ) ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . on ( 'api:disconnect' , _ . bind ( this . onCoAuthoringDisconnect , this ) ) ;
Common . NotificationCenter . on ( 'goback' , _ . bind ( this . goBack , this ) ) ;
this . isShowOpenDialog = false ;
// Initialize api gateway
this . editorConfig = { } ;
this . appOptions = { } ;
2016-05-19 09:46:21 +00:00
this . plugins = undefined ;
2016-11-16 09:38:16 +00:00
this . UICustomizePlugins = [ ] ;
2016-03-11 00:48:53 +00:00
Common . Gateway . on ( 'init' , _ . bind ( this . loadConfig , this ) ) ;
Common . Gateway . on ( 'showmessage' , _ . bind ( this . onExternalMessage , this ) ) ;
Common . Gateway . on ( 'opendocument' , _ . bind ( this . loadDocument , this ) ) ;
2017-09-20 11:32:18 +00:00
Common . Gateway . appReady ( ) ;
2016-03-11 00:48:53 +00:00
// $(window.top).resize(_.bind(this.onDocumentResize, this));
this . getApplication ( ) . getController ( 'Viewport' ) . setApi ( this . api ) ;
this . getApplication ( ) . getController ( 'Statusbar' ) . setApi ( this . api ) ;
/** coauthoring begin **/
this . contComments = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
/** coauthoring end **/
// Syncronize focus with api
$ ( document . body ) . on ( 'focus' , 'input, textarea' , function ( e ) {
if ( ! /area_id/ . test ( e . target . id ) ) {
if ( /msg-reply/ . test ( e . target . className ) )
me . dontCloseDummyComment = true ;
2017-04-12 09:43:04 +00:00
else if ( /chat-msg-text/ . test ( e . target . id ) )
me . dontCloseChat = true ;
2018-03-20 15:43:59 +00:00
else if ( ! me . isModalShowed && /form-control/ . test ( e . target . className ) )
2018-03-15 11:38:53 +00:00
me . inFormControl = true ;
2016-03-11 00:48:53 +00:00
}
} ) ;
$ ( document . body ) . on ( 'blur' , 'input, textarea' , function ( e ) {
if ( ! me . isModalShowed ) {
2018-03-26 13:50:15 +00:00
if ( /form-control/ . test ( e . target . className ) )
me . inFormControl = false ;
2016-10-14 13:58:57 +00:00
if ( ! e . relatedTarget ||
2017-10-02 11:08:26 +00:00
! /area_id/ . test ( e . target . id ) && ( $ ( e . target ) . parent ( ) . find ( e . relatedTarget ) . length < 1 || e . target . localName == 'textarea' ) /* Check if focus in combobox goes from input to it's menu button or menu items, or from comment editing area to Ok/Cancel button */
2016-10-14 13:58:57 +00:00
&& ( e . relatedTarget . localName != 'input' || ! /form-control/ . test ( e . relatedTarget . className ) ) /* Check if focus goes to text input with class "form-control" */
&& ( e . relatedTarget . localName != 'textarea' || /area_id/ . test ( e . relatedTarget . id ) ) ) /* Check if focus goes to textarea, but not to "area_id" */ {
2017-12-13 09:11:27 +00:00
if ( Common . Utils . isIE && e . originalEvent && e . originalEvent . target && /area_id/ . test ( e . originalEvent . target . id ) && ( e . originalEvent . target === e . originalEvent . srcElement ) )
return ;
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( true ) ;
if ( /msg-reply/ . test ( e . target . className ) )
me . dontCloseDummyComment = false ;
2017-04-12 09:43:04 +00:00
else if ( /chat-msg-text/ . test ( e . target . id ) )
me . dontCloseChat = false ;
2016-03-11 00:48:53 +00:00
}
}
} ) . on ( 'dragover' , function ( e ) {
var event = e . originalEvent ;
if ( event . target && $ ( event . target ) . closest ( '#editor_sdk' ) . length < 1 ) {
event . preventDefault ( ) ;
event . dataTransfer . dropEffect = "none" ;
return false ;
}
2019-02-21 10:40:03 +00:00
} ) . on ( 'dragstart' , function ( e ) {
var event = e . originalEvent ;
if ( event . target ) {
var target = $ ( event . target ) ;
if ( target . closest ( '.combobox' ) . length > 0 || target . closest ( '.dropdown-menu' ) . length > 0 ||
target . closest ( '.ribtab' ) . length > 0 || target . closest ( '.combo-dataview' ) . length > 0 ) {
event . preventDefault ( ) ;
}
}
2016-03-11 00:48:53 +00:00
} ) ;
Common . NotificationCenter . on ( {
'modal:show' : function ( ) {
2018-07-25 13:33:46 +00:00
me . isModalShowed ++ ;
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( false ) ;
} ,
'modal:close' : function ( dlg ) {
2018-07-25 13:33:46 +00:00
me . isModalShowed -- ;
if ( ! me . isModalShowed )
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( true ) ;
} ,
'modal:hide' : function ( dlg ) {
2018-07-25 13:33:46 +00:00
me . isModalShowed -- ;
if ( ! me . isModalShowed )
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( true ) ;
} ,
'settings:unitschanged' : _ . bind ( this . unitsChanged , this ) ,
2016-07-08 09:12:09 +00:00
'dataview:focus' : function ( e ) {
} ,
2016-03-11 00:48:53 +00:00
'dataview:blur' : function ( e ) {
2016-07-08 09:12:09 +00:00
if ( ! me . isModalShowed ) {
me . api . asc _enableKeyEvents ( true ) ;
}
2016-06-23 07:50:10 +00:00
} ,
2016-07-08 09:12:09 +00:00
'menu:show' : function ( e ) {
} ,
2017-04-12 09:45:16 +00:00
'menu:hide' : function ( e , isFromInputControl ) {
if ( ! me . isModalShowed && ! isFromInputControl )
2016-07-08 09:12:09 +00:00
me . api . asc _enableKeyEvents ( true ) ;
2016-03-11 00:48:53 +00:00
} ,
'edit:complete' : _ . bind ( me . onEditComplete , me )
} ) ;
this . initNames ( ) ; //for shapes
2017-04-06 06:55:47 +00:00
Common . util . Shortcuts . delegateShortcuts ( {
shortcuts : {
2018-07-26 14:14:41 +00:00
'command+s,ctrl+s,command+p,ctrl+p,command+k,ctrl+k,command+d,ctrl+d' : _ . bind ( function ( e ) {
2018-07-25 13:33:46 +00:00
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
2017-04-06 06:55:47 +00:00
} , this )
}
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
loadConfig : function ( data ) {
this . editorConfig = $ . extend ( this . editorConfig , data . config ) ;
this . editorConfig . user =
this . appOptions . user = Common . Utils . fillUserInfo ( this . editorConfig . user , this . editorConfig . lang , this . textAnonymous ) ;
this . appOptions . isDesktopApp = this . editorConfig . targetApp == 'desktop' ;
this . appOptions . canCreateNew = ! _ . isEmpty ( this . editorConfig . createUrl ) && ! this . appOptions . isDesktopApp ;
2017-04-10 13:11:09 +00:00
this . appOptions . canOpenRecent = this . editorConfig . recent !== undefined && ! this . appOptions . isDesktopApp ;
2016-03-11 00:48:53 +00:00
this . appOptions . templates = this . editorConfig . templates ;
this . appOptions . recent = this . editorConfig . recent ;
this . appOptions . createUrl = this . editorConfig . createUrl ;
this . appOptions . lang = this . editorConfig . lang ;
2016-04-08 08:55:15 +00:00
this . appOptions . location = ( typeof ( this . editorConfig . location ) == 'string' ) ? this . editorConfig . location . toLowerCase ( ) : '' ;
2016-03-11 00:48:53 +00:00
this . appOptions . sharingSettingsUrl = this . editorConfig . sharingSettingsUrl ;
this . appOptions . fileChoiceUrl = this . editorConfig . fileChoiceUrl ;
this . appOptions . mergeFolderUrl = this . editorConfig . mergeFolderUrl ;
2018-09-27 10:25:30 +00:00
this . appOptions . saveAsUrl = this . editorConfig . saveAsUrl ;
2016-03-11 00:48:53 +00:00
this . appOptions . canAnalytics = false ;
this . appOptions . customization = this . editorConfig . customization ;
this . appOptions . canBackToFolder = ( this . editorConfig . canBackToFolder !== false ) && ( typeof ( this . editorConfig . customization ) == 'object' )
&& ( typeof ( this . editorConfig . customization . goback ) == 'object' ) && ! _ . isEmpty ( this . editorConfig . customization . goback . url ) ;
2017-04-10 13:11:09 +00:00
this . appOptions . canBack = this . appOptions . canBackToFolder === true ;
2016-05-19 09:46:21 +00:00
this . appOptions . canPlugins = false ;
this . plugins = this . editorConfig . plugins ;
2019-03-18 11:47:41 +00:00
this . appOptions . canMakeActionLink = this . editorConfig . canMakeActionLink ;
2016-03-11 00:48:53 +00:00
2017-04-21 13:36:06 +00:00
appHeader = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) ;
2018-04-01 22:11:24 +00:00
appHeader . setCanBack ( this . appOptions . canBackToFolder === true , ( this . appOptions . canBackToFolder ) ? this . editorConfig . customization . goback . text : '' )
2018-02-03 13:10:38 +00:00
. setUserName ( this . appOptions . user . fullname ) ;
2016-03-11 00:48:53 +00:00
if ( this . editorConfig . lang )
this . api . asc _setLocale ( this . editorConfig . lang ) ;
2016-04-08 08:55:15 +00:00
if ( this . appOptions . location == 'us' || this . appOptions . location == 'ca' )
Common . Utils . Metric . setDefaultMetric ( Common . Utils . Metric . c _MetricUnits . inch ) ;
2018-02-21 23:23:32 +00:00
Common . Controllers . Desktop . init ( this . appOptions ) ;
2016-03-11 00:48:53 +00:00
} ,
loadDocument : function ( data ) {
this . permissions = { } ;
this . document = data . doc ;
var docInfo = { } ;
if ( data . doc ) {
this . permissions = $ . extend ( this . permissions , data . doc . permissions ) ;
2017-10-23 12:19:07 +00:00
var _permissions = $ . extend ( { } , data . doc . permissions ) ,
2019-03-21 11:06:59 +00:00
_options = $ . extend ( { } , data . doc . options , this . editorConfig . actionLink || { } ) ;
2019-03-18 11:48:10 +00:00
var _user = new Asc . asc _CUserInfo ( ) ;
2016-03-11 00:48:53 +00:00
_user . put _Id ( this . appOptions . user . id ) ;
_user . put _FullName ( this . appOptions . user . fullname ) ;
2016-04-18 12:21:15 +00:00
docInfo = new Asc . asc _CDocInfo ( ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _Id ( data . doc . key ) ;
docInfo . put _Url ( data . doc . url ) ;
docInfo . put _Title ( data . doc . title ) ;
docInfo . put _Format ( data . doc . fileType ) ;
docInfo . put _VKey ( data . doc . vkey ) ;
2019-03-18 11:48:10 +00:00
docInfo . put _Options ( _options ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _UserInfo ( _user ) ;
docInfo . put _CallbackUrl ( this . editorConfig . callbackUrl ) ;
2016-11-24 13:44:54 +00:00
docInfo . put _Token ( data . doc . token ) ;
2017-10-23 12:19:07 +00:00
docInfo . put _Permissions ( _permissions ) ;
2016-03-11 00:48:53 +00:00
// docInfo.put_Review(this.permissions.review);
// docInfo.put_OfflineApp(this.editorConfig.nativeApp === true); // used in sdk for testing
2017-10-23 12:19:07 +00:00
var type = /^(?:(pdf|djvu|xps))$/ . exec ( data . doc . fileType ) ;
if ( type && typeof type [ 1 ] === 'string' ) {
this . permissions . edit = this . permissions . review = false ;
}
2016-03-11 00:48:53 +00:00
}
this . api . asc _registerCallback ( 'asc_onGetEditorPermissions' , _ . bind ( this . onEditorPermissions , this ) ) ;
2017-11-22 12:20:51 +00:00
this . api . asc _registerCallback ( 'asc_onLicenseChanged' , _ . bind ( this . onLicenseChanged , this ) ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _setDocInfo ( docInfo ) ;
this . api . asc _getEditorPermissions ( this . editorConfig . licenseUrl , this . editorConfig . customerId ) ;
if ( data . doc ) {
2017-04-21 13:36:06 +00:00
appHeader . setDocumentCaption ( data . doc . title ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onProcessSaveResult : function ( data ) {
this . api . asc _OnSaveEnd ( data . result ) ;
if ( data && data . result === false ) {
Common . UI . error ( {
title : this . criticalErrorTitle ,
msg : _ . isEmpty ( data . message ) ? this . errorProcessSaveResult : data . message
} ) ;
}
} ,
onProcessRightsChange : function ( data ) {
if ( data && data . enabled === false ) {
var me = this ,
old _rights = this . _state . lostEditingRights ;
this . _state . lostEditingRights = ! this . _state . lostEditingRights ;
this . api . asc _coAuthoringDisconnect ( ) ;
this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'file' ) . panels [ 'rights' ] . onLostEditRights ( ) ;
2016-11-10 12:38:26 +00:00
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
2016-03-11 00:48:53 +00:00
if ( ! old _rights )
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
2016-08-09 09:25:34 +00:00
maxwidth : 600 ,
2016-03-11 00:48:53 +00:00
msg : _ . isEmpty ( data . message ) ? this . warnProcessRightsChange : data . message ,
callback : function ( ) {
me . _state . lostEditingRights = false ;
me . onEditComplete ( ) ;
}
} ) ;
}
} ,
2017-10-24 11:23:15 +00:00
onDownloadAs : function ( format ) {
2019-01-10 14:20:59 +00:00
if ( ! this . appOptions . canDownload && ! this . appOptions . canDownloadOrigin ) {
Common . Gateway . reportError ( Asc . c _oAscError . ID . AccessDeny , this . errorAccessDeny ) ;
return ;
}
2016-09-19 07:41:02 +00:00
this . _state . isFromGatewayDownloadAs = true ;
2016-03-11 00:48:53 +00:00
var type = /^(?:(pdf|djvu|xps))$/ . exec ( this . document . fileType ) ;
2017-10-24 11:23:15 +00:00
if ( type && typeof type [ 1 ] === 'string' )
this . api . asc _DownloadOrigin ( true ) ;
else {
var _format = ( format && ( typeof format == 'string' ) ) ? Asc . c _oAscFileType [ format . toUpperCase ( ) ] : null ,
_supported = [
Asc . c _oAscFileType . TXT ,
Asc . c _oAscFileType . ODT ,
Asc . c _oAscFileType . DOCX ,
Asc . c _oAscFileType . HTML ,
2018-07-18 11:07:24 +00:00
Asc . c _oAscFileType . PDF ,
2019-02-21 13:10:37 +00:00
Asc . c _oAscFileType . PDFA ,
Asc . c _oAscFileType . DOTX ,
Asc . c _oAscFileType . OTT
2017-10-24 11:23:15 +00:00
] ;
if ( ! _format || _supported . indexOf ( _format ) < 0 )
_format = Asc . c _oAscFileType . DOCX ;
this . api . asc _DownloadAs ( _format , true ) ;
}
2016-03-11 00:48:53 +00:00
} ,
onProcessMouse : function ( data ) {
if ( data . type == 'mouseup' ) {
var e = document . getElementById ( 'editor_sdk' ) ;
if ( e ) {
var r = e . getBoundingClientRect ( ) ;
this . api . OnMouseUp (
data . x - r . left ,
data . y - r . top
) ;
}
}
} ,
onRefreshHistory : function ( opts ) {
this . loadMask && this . loadMask . hide ( ) ;
if ( opts . data . error || ! opts . data . history ) {
2016-09-16 12:46:00 +00:00
var historyStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' ) ;
if ( historyStore && historyStore . size ( ) > 0 ) {
historyStore . each ( function ( item ) {
item . set ( 'canRestore' , false ) ;
} ) ;
}
Common . UI . alert ( {
2016-03-11 00:48:53 +00:00
title : this . notcriticalErrorTitle ,
msg : ( opts . data . error ) ? opts . data . error : this . txtErrorLoadHistory ,
iconCls : 'warn' ,
buttons : [ 'ok' ] ,
callback : _ . bind ( function ( btn ) {
this . onEditComplete ( ) ;
} , this )
2016-09-16 12:46:00 +00:00
} ) ;
2016-03-11 00:48:53 +00:00
} else {
this . api . asc _coAuthoringDisconnect ( ) ;
2017-04-21 13:36:06 +00:00
appHeader . setCanRename ( false ) ;
2016-03-11 00:48:53 +00:00
this . getApplication ( ) . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . showHistory ( ) ;
this . disableEditing ( true ) ;
var versions = opts . data . history ,
historyStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' ) ,
currentVersion = null ;
if ( historyStore ) {
var arrVersions = [ ] , ver , version , group = - 1 , prev _ver = - 1 , arrColors = [ ] , docIdPrev = '' ,
usersStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryUsers' ) , user = null , usersCnt = 0 ;
for ( ver = versions . length - 1 ; ver >= 0 ; ver -- ) {
version = versions [ ver ] ;
if ( version . versionGroup === undefined || version . versionGroup === null )
version . versionGroup = version . version ;
if ( version ) {
if ( ! version . user ) version . user = { } ;
docIdPrev = ( ver > 0 && versions [ ver - 1 ] ) ? versions [ ver - 1 ] . key : version . key + '0' ;
user = usersStore . findUser ( version . user . id ) ;
if ( ! user ) {
user = new Common . Models . User ( {
id : version . user . id ,
username : version . user . name ,
2016-04-05 11:52:34 +00:00
colorval : Asc . c _oAscArrUserColors [ usersCnt ] ,
color : this . generateUserColor ( Asc . c _oAscArrUserColors [ usersCnt ++ ] )
2016-03-11 00:48:53 +00:00
} ) ;
usersStore . add ( user ) ;
}
arrVersions . push ( new Common . Models . HistoryVersion ( {
version : version . versionGroup ,
revision : version . version ,
userid : version . user . id ,
username : version . user . name ,
usercolor : user . get ( 'color' ) ,
created : version . created ,
docId : version . key ,
markedAsVersion : ( group !== version . versionGroup ) ,
2016-09-16 12:46:00 +00:00
selected : ( opts . data . currentVersion == version . version ) ,
2016-09-22 11:57:41 +00:00
canRestore : this . appOptions . canHistoryRestore && ( ver < versions . length - 1 ) ,
2017-09-22 14:18:06 +00:00
isExpanded : true ,
serverVersion : version . serverVersion
2016-03-11 00:48:53 +00:00
} ) ) ;
if ( opts . data . currentVersion == version . version ) {
currentVersion = arrVersions [ arrVersions . length - 1 ] ;
}
group = version . versionGroup ;
if ( prev _ver !== version . version ) {
prev _ver = version . version ;
arrColors . reverse ( ) ;
for ( i = 0 ; i < arrColors . length ; i ++ ) {
arrVersions [ arrVersions . length - i - 2 ] . set ( 'arrColors' , arrColors ) ;
}
arrColors = [ ] ;
}
arrColors . push ( user . get ( 'colorval' ) ) ;
var changes = version . changes , change , i ;
if ( changes && changes . length > 0 ) {
arrVersions [ arrVersions . length - 1 ] . set ( 'docIdPrev' , docIdPrev ) ;
2016-10-07 13:37:18 +00:00
if ( ! _ . isEmpty ( version . serverVersion ) && version . serverVersion == this . appOptions . buildVersion ) {
2016-10-05 14:08:53 +00:00
arrVersions [ arrVersions . length - 1 ] . set ( 'changeid' , changes . length - 1 ) ;
arrVersions [ arrVersions . length - 1 ] . set ( 'hasChanges' , changes . length > 1 ) ;
for ( i = changes . length - 2 ; i >= 0 ; i -- ) {
change = changes [ i ] ;
user = usersStore . findUser ( change . user . id ) ;
if ( ! user ) {
user = new Common . Models . User ( {
id : change . user . id ,
username : change . user . name ,
colorval : Asc . c _oAscArrUserColors [ usersCnt ] ,
color : this . generateUserColor ( Asc . c _oAscArrUserColors [ usersCnt ++ ] )
} ) ;
usersStore . add ( user ) ;
}
arrVersions . push ( new Common . Models . HistoryVersion ( {
version : version . versionGroup ,
revision : version . version ,
changeid : i ,
userid : change . user . id ,
username : change . user . name ,
usercolor : user . get ( 'color' ) ,
created : change . created ,
docId : version . key ,
docIdPrev : docIdPrev ,
selected : false ,
canRestore : this . appOptions . canHistoryRestore ,
isRevision : false ,
2017-09-22 14:18:06 +00:00
isVisible : true ,
serverVersion : version . serverVersion
2016-10-05 14:08:53 +00:00
} ) ) ;
arrColors . push ( user . get ( 'colorval' ) ) ;
2016-03-11 00:48:53 +00:00
}
}
} else if ( ver == 0 && versions . length == 1 ) {
arrVersions [ arrVersions . length - 1 ] . set ( 'docId' , version . key + '1' ) ;
}
}
}
if ( arrColors . length > 0 ) {
arrColors . reverse ( ) ;
for ( i = 0 ; i < arrColors . length ; i ++ ) {
arrVersions [ arrVersions . length - i - 1 ] . set ( 'arrColors' , arrColors ) ;
}
arrColors = [ ] ;
}
2016-09-16 12:46:00 +00:00
historyStore . reset ( arrVersions ) ;
2016-03-11 00:48:53 +00:00
if ( currentVersion === null && historyStore . size ( ) > 0 ) {
currentVersion = historyStore . at ( 0 ) ;
currentVersion . set ( 'selected' , true ) ;
}
if ( currentVersion )
this . getApplication ( ) . getController ( 'Common.Controllers.History' ) . onSelectRevision ( null , null , currentVersion ) ;
}
}
} ,
generateUserColor : function ( color ) {
return "#" + ( "000000" + color . toString ( 16 ) ) . substr ( - 6 ) ;
} ,
disableEditing : function ( disable ) {
var app = this . getApplication ( ) ;
if ( this . appOptions . canEdit && this . editorConfig . mode !== 'view' ) {
app . getController ( 'RightMenu' ) . getView ( 'RightMenu' ) . clearSelection ( ) ;
app . getController ( 'RightMenu' ) . SetDisabled ( disable , false ) ;
app . getController ( 'Statusbar' ) . getView ( 'Statusbar' ) . SetDisabled ( disable ) ;
}
app . getController ( 'LeftMenu' ) . SetDisabled ( disable , true ) ;
2019-02-05 12:11:22 +00:00
app . getController ( 'Toolbar' ) . DisableToolbar ( disable , disable ) ;
app . getController ( 'Common.Controllers.ReviewChanges' ) . SetDisabled ( disable ) ;
2016-03-11 00:48:53 +00:00
} ,
2019-01-10 13:20:27 +00:00
goBack : function ( current ) {
2018-02-21 23:23:32 +00:00
if ( ! Common . Controllers . Desktop . process ( 'goback' ) ) {
2018-02-13 08:23:53 +00:00
var href = this . appOptions . customization . goback . url ;
2019-01-10 13:20:27 +00:00
if ( ! current && this . appOptions . customization . goback . blank !== false ) {
2018-02-13 08:23:53 +00:00
window . open ( href , "_blank" ) ;
} else {
parent . location . href = href ;
}
2016-03-11 00:48:53 +00:00
}
} ,
onEditComplete : function ( cmp ) {
// this.getMainMenu().closeFullScaleMenu();
var application = this . getApplication ( ) ,
toolbarController = application . getController ( 'Toolbar' ) ,
2017-04-21 13:36:06 +00:00
toolbarView = toolbarController . getView ( ) ;
2016-03-11 00:48:53 +00:00
if ( this . appOptions . isEdit && toolbarView && ( toolbarView . btnInsertShape . pressed || toolbarView . btnInsertText . pressed ) &&
2017-08-09 10:40:46 +00:00
( ! _ . isObject ( arguments [ 1 ] ) || arguments [ 1 ] . id !== 'tlbtn-insertshape' ) ) { // TODO: Event from api is needed to clear btnInsertShape state
2016-03-11 00:48:53 +00:00
if ( this . api )
this . api . StartAddShape ( '' , false ) ;
toolbarView . btnInsertShape . toggle ( false , false ) ;
toolbarView . btnInsertText . toggle ( false , false ) ;
}
2016-10-13 08:40:59 +00:00
if ( this . appOptions . isEdit && toolbarView && toolbarView . btnHighlightColor . pressed &&
( ! _ . isObject ( arguments [ 1 ] ) || arguments [ 1 ] . id !== 'id-toolbar-btn-highlight' ) ) {
this . api . SetMarkerFormat ( false ) ;
toolbarView . btnHighlightColor . toggle ( false , false ) ;
}
2017-04-03 16:24:24 +00:00
application . getController ( 'DocumentHolder' ) . getView ( ) . focus ( ) ;
2016-03-11 00:48:53 +00:00
2018-05-15 12:37:26 +00:00
if ( this . api && this . appOptions . isEdit && ! toolbarView . _state . previewmode ) {
2017-04-11 13:40:01 +00:00
var cansave = this . api . asc _isDocumentCanSave ( ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
2018-05-08 10:05:05 +00:00
isSyncButton = ( toolbarView . btnCollabChanges . rendered ) ? toolbarView . btnCollabChanges . $icon . hasClass ( 'btn-synch' ) : false ,
2017-09-05 07:54:44 +00:00
isDisabled = ! cansave && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
2018-02-15 23:56:17 +00:00
toolbarView . btnSave . setDisabled ( isDisabled ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onLongActionBegin : function ( type , id ) {
var action = { id : id , type : type } ;
this . stackLongActions . push ( action ) ;
this . setLongActionView ( action ) ;
} ,
onLongActionEnd : function ( type , id ) {
var action = { id : id , type : type } ;
this . stackLongActions . pop ( action ) ;
2017-04-21 13:36:06 +00:00
appHeader . setDocumentCaption ( this . api . asc _getDocumentName ( ) ) ;
2016-03-11 00:48:53 +00:00
this . updateWindowTitle ( true ) ;
2016-04-05 11:52:34 +00:00
action = this . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . Information } ) ;
2016-03-11 00:48:53 +00:00
if ( action ) {
this . setLongActionView ( action )
} else {
2017-06-27 10:38:19 +00:00
var me = this ;
2017-07-07 09:04:00 +00:00
if ( ( id == Asc . c _oAscAsyncAction [ 'Save' ] || id == Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] ) && ! this . appOptions . isOffline ) {
2017-04-11 13:40:01 +00:00
if ( this . _state . fastCoauth && this . _state . usersCount > 1 ) {
me . _state . timerSave = setTimeout ( function ( ) {
2017-06-27 10:38:19 +00:00
me . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( me . textChangesSaved , false , 3000 ) ;
2017-04-11 13:40:01 +00:00
} , 500 ) ;
} else
2017-06-27 10:38:19 +00:00
me . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( me . textChangesSaved , false , 3000 ) ;
2017-04-11 13:40:01 +00:00
} else
2016-03-11 00:48:53 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' ) ;
}
2016-04-05 11:52:34 +00:00
action = this . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ;
2016-03-11 00:48:53 +00:00
action ? this . setLongActionView ( action ) : this . loadMask && this . loadMask . hide ( ) ;
2018-07-19 09:39:52 +00:00
if ( this . appOptions . isEdit && ( id == Asc . c _oAscAsyncAction [ 'Save' ] || id == Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] ) && ( ! this . _state . fastCoauth || this . _state . usersCount < 2 ||
2017-08-25 09:25:54 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . isPreviewChangesMode ( ) ) )
2016-03-11 00:48:53 +00:00
this . synchronizeChanges ( ) ;
2018-09-20 12:56:20 +00:00
else if ( this . appOptions . isEdit && ( id == Asc . c _oAscAsyncAction [ 'Save' ] || id == Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] || id == Asc . c _oAscAsyncAction [ 'ApplyChanges' ] ) &&
this . _state . fastCoauth )
2018-08-16 14:43:06 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . synchronizeChanges ( ) ;
2016-03-11 00:48:53 +00:00
2019-02-05 12:11:22 +00:00
if ( id == Asc . c _oAscAsyncAction [ 'Open' ] ) {
Common . Utils . InternalSettings . get ( "de-settings-livecomment" ) ? this . api . asc _showComments ( Common . Utils . InternalSettings . get ( "de-settings-resolvedcomment" ) ) : this . api . asc _hideComments ( ) ;
}
2016-04-05 11:52:34 +00:00
if ( type == Asc . c _oAscAsyncActionType . BlockInteraction &&
2016-03-11 00:48:53 +00:00
( ! this . getApplication ( ) . getController ( 'LeftMenu' ) . dlgSearch || ! this . getApplication ( ) . getController ( 'LeftMenu' ) . dlgSearch . isVisible ( ) ) &&
2018-03-15 11:38:53 +00:00
! ( id == Asc . c _oAscAsyncAction [ 'ApplyChanges' ] && ( this . dontCloseDummyComment || this . dontCloseChat || this . isModalShowed || this . inFormControl ) ) ) {
2016-07-27 12:52:35 +00:00
// this.onEditComplete(this.loadMask); //если делать фокус, то при принятии чужих изменений, заканчивается свой композитный ввод
2016-03-11 00:48:53 +00:00
this . api . asc _enableKeyEvents ( true ) ;
}
} ,
setLongActionView : function ( action ) {
2017-04-11 13:40:01 +00:00
var title = '' , text = '' , force = false ;
2016-03-11 00:48:53 +00:00
switch ( action . id ) {
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'Open' ] :
2016-03-11 00:48:53 +00:00
title = this . openTitleText ;
text = this . openTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'Save' ] :
2017-04-11 13:40:01 +00:00
case Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] :
clearTimeout ( this . _state . timerSave ) ;
force = true ;
2017-12-05 15:04:30 +00:00
title = this . saveTitleText ;
2017-07-07 09:04:00 +00:00
text = ( ! this . appOptions . isOffline ) ? this . saveTextText : '' ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'LoadDocumentFonts' ] :
2016-03-11 00:48:53 +00:00
title = this . loadFontsTitleText ;
text = this . loadFontsTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'LoadDocumentImages' ] :
2016-03-11 00:48:53 +00:00
title = this . loadImagesTitleText ;
text = this . loadImagesTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'LoadFont' ] :
2016-03-11 00:48:53 +00:00
title = this . loadFontTitleText ;
text = this . loadFontTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'LoadImage' ] :
2016-03-11 00:48:53 +00:00
title = this . loadImageTitleText ;
text = this . loadImageTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'DownloadAs' ] :
2016-03-11 00:48:53 +00:00
title = this . downloadTitleText ;
text = this . downloadTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'Print' ] :
2016-03-11 00:48:53 +00:00
title = this . printTitleText ;
text = this . printTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'UploadImage' ] :
2016-03-11 00:48:53 +00:00
title = this . uploadImageTitleText ;
text = this . uploadImageTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'ApplyChanges' ] :
2016-03-11 00:48:53 +00:00
title = this . applyChangesTitleText ;
text = this . applyChangesTextText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'PrepareToSave' ] :
2016-03-11 00:48:53 +00:00
title = this . savePreparingText ;
text = this . savePreparingTitle ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'MailMergeLoadFile' ] :
2016-03-11 00:48:53 +00:00
title = this . mailMergeLoadFileText ;
text = this . mailMergeLoadFileTitle ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'DownloadMerge' ] :
2016-03-11 00:48:53 +00:00
title = this . downloadMergeTitle ;
text = this . downloadMergeText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'SendMailMerge' ] :
2016-03-11 00:48:53 +00:00
title = this . sendMergeTitle ;
text = this . sendMergeText ;
break ;
case ApplyEditRights :
title = this . txtEditingMode ;
text = this . txtEditingMode ;
break ;
case LoadingDocument :
title = this . loadingDocumentTitleText ;
text = this . loadingDocumentTextText ;
break ;
2018-02-05 09:22:03 +00:00
default :
if ( typeof action . id == 'string' ) {
title = action . id ;
text = action . id ;
}
break ;
2016-03-11 00:48:53 +00:00
}
2016-04-05 11:52:34 +00:00
if ( action . type == Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] ) {
2016-03-11 00:48:53 +00:00
if ( ! this . loadMask )
this . loadMask = new Common . UI . LoadMask ( { owner : $ ( '#viewport' ) } ) ;
this . loadMask . setTitle ( title ) ;
if ( ! this . isShowOpenDialog )
this . loadMask . show ( ) ;
2017-03-16 10:24:03 +00:00
} else {
2017-06-27 10:38:19 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( text , force ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onApplyEditRights : function ( data ) {
2017-04-11 13:52:31 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' ) ;
2016-03-11 00:48:53 +00:00
2017-04-11 13:52:31 +00:00
if ( data && ! data . allowed ) {
Common . UI . info ( {
title : this . requestEditFailedTitleText ,
msg : data . message || this . requestEditFailedMessageText
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onDocumentContentReady : function ( ) {
if ( this . _isDocReady )
return ;
2017-09-08 08:39:07 +00:00
if ( this . _state . openDlg )
this . _state . openDlg . close ( ) ;
2016-03-11 00:48:53 +00:00
var me = this ,
value ;
me . _isDocReady = true ;
2017-04-25 16:56:17 +00:00
Common . NotificationCenter . trigger ( 'app:ready' , this . appOptions ) ;
2016-03-11 00:48:53 +00:00
me . api . SetDrawingFreeze ( false ) ;
me . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
2017-06-16 11:53:29 +00:00
this . isLiveCommenting = Common . localStorage . getBool ( "de-settings-livecomment" , true ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-livecomment" , this . isLiveCommenting ) ;
2018-04-26 12:17:02 +00:00
value = Common . localStorage . getBool ( "de-settings-resolvedcomment" ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-resolvedcomment" , value ) ;
this . isLiveCommenting ? this . api . asc _showComments ( value ) : this . api . asc _hideComments ( ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
value = Common . localStorage . getItem ( "de-settings-zoom" ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-zoom" , value ) ;
2016-09-13 08:28:21 +00:00
var zf = ( value !== null ) ? parseInt ( value ) : ( this . appOptions . customization && this . appOptions . customization . zoom ? parseInt ( this . appOptions . customization . zoom ) : 100 ) ;
( zf == - 1 ) ? this . api . zoomFitToPage ( ) : ( ( zf == - 2 ) ? this . api . zoomFitToWidth ( ) : this . api . zoom ( zf > 0 ? zf : 100 ) ) ;
2016-03-11 00:48:53 +00:00
value = Common . localStorage . getItem ( "de-show-hiddenchars" ) ;
me . api . put _ShowParaMarks ( ( value !== null ) ? eval ( value ) : false ) ;
value = Common . localStorage . getItem ( "de-show-tableline" ) ;
me . api . put _ShowTableEmptyLine ( ( value !== null ) ? eval ( value ) : true ) ;
2017-10-03 11:22:33 +00:00
value = Common . localStorage . getBool ( "de-settings-spellcheck" , true ) ;
Common . Utils . InternalSettings . set ( "de-settings-spellcheck" , value ) ;
me . api . asc _setSpellCheck ( value ) ;
2016-03-11 00:48:53 +00:00
2017-10-04 15:44:01 +00:00
Common . Utils . InternalSettings . set ( "de-settings-showsnaplines" , me . api . get _ShowSnapLines ( ) ) ;
2016-03-11 00:48:53 +00:00
function checkWarns ( ) {
if ( ! window [ 'AscDesktopEditor' ] ) {
var tips = [ ] ;
Common . Utils . isIE9m && tips . push ( me . warnBrowserIE9 ) ;
if ( tips . length ) me . showTips ( tips ) ;
}
2016-04-11 08:05:14 +00:00
document . removeEventListener ( 'visibilitychange' , checkWarns ) ;
2016-03-11 00:48:53 +00:00
}
if ( typeof document . hidden !== 'undefined' && document . hidden ) {
2016-04-11 08:05:14 +00:00
document . addEventListener ( 'visibilitychange' , checkWarns ) ;
2016-03-11 00:48:53 +00:00
} else checkWarns ( ) ;
me . api . asc _registerCallback ( 'asc_onStartAction' , _ . bind ( me . onLongActionBegin , me ) ) ;
me . api . asc _registerCallback ( 'asc_onEndAction' , _ . bind ( me . onLongActionEnd , me ) ) ;
me . api . asc _registerCallback ( 'asc_onCoAuthoringDisconnect' , _ . bind ( me . onCoAuthoringDisconnect , me ) ) ;
me . api . asc _registerCallback ( 'asc_onPrint' , _ . bind ( me . onPrint , me ) ) ;
2017-04-21 13:36:06 +00:00
appHeader . setDocumentCaption ( me . api . asc _getDocumentName ( ) ) ;
2016-03-11 00:48:53 +00:00
me . updateWindowTitle ( true ) ;
2017-10-03 11:22:33 +00:00
value = Common . localStorage . getBool ( "de-settings-inputmode" ) ;
Common . Utils . InternalSettings . set ( "de-settings-inputmode" , value ) ;
me . api . SetTextBoxInputMode ( value ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
2016-12-20 14:29:37 +00:00
if ( me . appOptions . isEdit && ! me . appOptions . isOffline && me . appOptions . canCoAuthoring ) {
2016-03-11 00:48:53 +00:00
value = Common . localStorage . getItem ( "de-settings-coauthmode" ) ;
2017-06-16 11:53:29 +00:00
if ( value === null && ! Common . localStorage . itemExists ( "de-settings-autosave" ) &&
2016-11-17 11:13:33 +00:00
me . appOptions . customization && me . appOptions . customization . autosave === false ) {
value = 0 ; // use customization.autosave only when de-settings-coauthmode and de-settings-autosave are null
}
2016-03-11 00:48:53 +00:00
me . _state . fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
me . api . asc _SetFastCollaborative ( me . _state . fastCoauth ) ;
value = Common . localStorage . getItem ( ( me . _state . fastCoauth ) ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict" ) ;
2017-10-03 11:22:33 +00:00
if ( value == null ) value = me . _state . fastCoauth ? 'none' : 'last' ;
me . api . SetCollaborativeMarksShowType ( value == 'all' ? Asc . c _oAscCollaborativeMarksShowType . All :
( value == 'none' ? Asc . c _oAscCollaborativeMarksShowType . None : Asc . c _oAscCollaborativeMarksShowType . LastChanges ) ) ;
Common . Utils . InternalSettings . set ( ( me . _state . fastCoauth ) ? "de-settings-showchanges-fast" : "de-settings-showchanges-strict" , value ) ;
2018-07-19 14:47:03 +00:00
} else if ( ! me . appOptions . isEdit && me . appOptions . isRestrictedEdit ) {
2017-06-14 11:59:43 +00:00
me . _state . fastCoauth = true ;
me . api . asc _SetFastCollaborative ( me . _state . fastCoauth ) ;
2017-06-28 13:49:58 +00:00
me . api . SetCollaborativeMarksShowType ( Asc . c _oAscCollaborativeMarksShowType . None ) ;
2017-06-16 07:29:15 +00:00
me . api . asc _setAutoSaveGap ( 1 ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-autosave" , 1 ) ;
2016-03-11 00:48:53 +00:00
} else {
me . _state . fastCoauth = false ;
me . api . asc _SetFastCollaborative ( me . _state . fastCoauth ) ;
2016-04-05 11:52:34 +00:00
me . api . SetCollaborativeMarksShowType ( Asc . c _oAscCollaborativeMarksShowType . None ) ;
2016-03-11 00:48:53 +00:00
}
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-coauthmode" , me . _state . fastCoauth ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
2017-04-21 13:36:06 +00:00
var application = me . getApplication ( ) ;
2016-03-11 00:48:53 +00:00
var toolbarController = application . getController ( 'Toolbar' ) ,
statusbarController = application . getController ( 'Statusbar' ) ,
documentHolderController = application . getController ( 'DocumentHolder' ) ,
fontsController = application . getController ( 'Common.Controllers.Fonts' ) ,
rightmenuController = application . getController ( 'RightMenu' ) ,
leftmenuController = application . getController ( 'LeftMenu' ) ,
2016-05-17 15:38:54 +00:00
chatController = application . getController ( 'Common.Controllers.Chat' ) ,
2017-12-19 13:30:58 +00:00
pluginsController = application . getController ( 'Common.Controllers.Plugins' ) ,
navigationController = application . getController ( 'Navigation' ) ;
2016-03-11 00:48:53 +00:00
leftmenuController . getView ( 'LeftMenu' ) . getMenu ( 'file' ) . loadDocument ( { doc : me . document } ) ;
leftmenuController . setMode ( me . appOptions ) . createDelayedElements ( ) . setApi ( me . api ) ;
2018-03-07 10:47:41 +00:00
navigationController . setApi ( me . api ) . setMode ( this . appOptions ) ;
2018-02-19 09:34:15 +00:00
2016-03-11 00:48:53 +00:00
chatController . setApi ( this . api ) . setMode ( this . appOptions ) ;
application . getController ( 'Common.Controllers.ExternalDiagramEditor' ) . setApi ( this . api ) . loadConfig ( { config : this . editorConfig , customization : this . editorConfig . customization } ) ;
application . getController ( 'Common.Controllers.ExternalMergeEditor' ) . setApi ( this . api ) . loadConfig ( { config : this . editorConfig , customization : this . editorConfig . customization } ) ;
2016-07-06 13:35:01 +00:00
pluginsController . setApi ( me . api ) ;
2017-10-11 08:45:42 +00:00
me . requestPlugins ( '../../../../plugins.json' ) ;
2016-07-06 13:35:01 +00:00
me . api . asc _registerCallback ( 'asc_onPluginsInit' , _ . bind ( me . updatePluginsList , me ) ) ;
2017-12-07 12:02:19 +00:00
me . api . asc _registerCallback ( 'asc_onPluginsReset' , _ . bind ( me . resetPluginsList , me ) ) ;
2016-05-17 15:38:54 +00:00
2016-03-11 00:48:53 +00:00
documentHolderController . setApi ( me . api ) ;
documentHolderController . createDelayedElements ( ) ;
statusbarController . createDelayedElements ( ) ;
leftmenuController . getView ( 'LeftMenu' ) . disableMenu ( 'all' , false ) ;
if ( me . appOptions . canBranding )
me . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'about' ) . setLicInfo ( me . editorConfig . customization ) ;
2017-04-03 16:24:24 +00:00
documentHolderController . getView ( ) . setApi ( me . api ) . on ( 'editcomplete' , _ . bind ( me . onEditComplete , me ) ) ;
2016-03-11 00:48:53 +00:00
if ( me . appOptions . isEdit ) {
2016-03-25 07:48:19 +00:00
value = Common . localStorage . getItem ( "de-settings-autosave" ) ;
2016-11-17 11:13:33 +00:00
if ( value === null && me . appOptions . customization && me . appOptions . customization . autosave === false )
value = 0 ;
2016-08-16 10:01:23 +00:00
value = ( ! me . _state . fastCoauth && value !== null ) ? parseInt ( value ) : ( me . appOptions . canCoAuthoring ? 1 : 0 ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-autosave" , value ) ;
2016-03-25 07:48:19 +00:00
me . api . asc _setAutoSaveGap ( value ) ;
2017-04-11 13:40:01 +00:00
if ( me . appOptions . canForcesave ) { // use asc_setIsForceSaveOnUserSave only when customization->forcesave = true
2017-06-16 11:53:29 +00:00
me . appOptions . forcesave = Common . localStorage . getBool ( "de-settings-forcesave" , me . appOptions . canForcesave ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-forcesave" , me . appOptions . forcesave ) ;
2017-04-11 13:40:01 +00:00
me . api . asc _setIsForceSaveOnUserSave ( me . appOptions . forcesave ) ;
}
2016-03-11 00:48:53 +00:00
if ( me . needToUpdateVersion )
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
var timer _sl = setInterval ( function ( ) {
if ( window . styles _loaded ) {
clearInterval ( timer _sl ) ;
2016-08-04 17:02:57 +00:00
toolbarController . createDelayedElements ( ) ;
2016-03-11 00:48:53 +00:00
2017-04-03 16:24:24 +00:00
documentHolderController . getView ( ) . createDelayedElements ( ) ;
2017-04-19 08:28:40 +00:00
me . setLanguages ( ) ;
2016-03-11 00:48:53 +00:00
2016-05-10 13:46:51 +00:00
var shapes = me . api . asc _getPropertyEditorShapes ( ) ;
2016-03-11 00:48:53 +00:00
if ( shapes )
me . fillAutoShapes ( shapes [ 0 ] , shapes [ 1 ] ) ;
2016-10-12 15:38:10 +00:00
rightmenuController . createDelayedElements ( ) ;
2016-03-11 00:48:53 +00:00
me . updateThemeColors ( ) ;
toolbarController . activateControls ( ) ;
if ( me . needToUpdateVersion )
toolbarController . onApiCoAuthoringDisconnect ( ) ;
me . api . UpdateInterfaceState ( ) ;
me . fillTextArt ( me . api . asc _getTextArtPreviews ( ) ) ;
2016-11-16 09:38:16 +00:00
2017-11-28 11:20:54 +00:00
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
2017-11-22 13:32:43 +00:00
me . applyLicense ( ) ;
2016-03-11 00:48:53 +00:00
}
} , 50 ) ;
2017-06-06 08:04:04 +00:00
} else {
documentHolderController . getView ( ) . createDelayedElementsViewer ( ) ;
2017-11-28 11:20:54 +00:00
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
2017-06-06 08:04:04 +00:00
}
2016-03-11 00:48:53 +00:00
if ( this . appOptions . canAnalytics && false )
Common . component . Analytics . initialize ( 'UA-12442749-13' , 'Document Editor' ) ;
Common . Gateway . on ( 'applyeditrights' , _ . bind ( me . onApplyEditRights , me ) ) ;
Common . Gateway . on ( 'processsaveresult' , _ . bind ( me . onProcessSaveResult , me ) ) ;
Common . Gateway . on ( 'processrightschange' , _ . bind ( me . onProcessRightsChange , me ) ) ;
Common . Gateway . on ( 'processmouse' , _ . bind ( me . onProcessMouse , me ) ) ;
Common . Gateway . on ( 'refreshhistory' , _ . bind ( me . onRefreshHistory , me ) ) ;
Common . Gateway . on ( 'downloadas' , _ . bind ( me . onDownloadAs , me ) ) ;
Common . Gateway . sendInfo ( { mode : me . appOptions . isEdit ? 'edit' : 'view' } ) ;
$ ( document ) . on ( 'contextmenu' , _ . bind ( me . onContextMenu , me ) ) ;
2019-01-10 08:20:53 +00:00
Common . Gateway . documentReady ( ) ;
2017-11-22 13:32:43 +00:00
} ,
onLicenseChanged : function ( params ) {
var licType = params . asc _getLicenseType ( ) ;
2018-05-28 10:00:03 +00:00
if ( licType !== undefined && this . appOptions . canEdit && this . editorConfig . mode !== 'view' &&
( licType === Asc . c _oLicenseResult . Connections || licType === Asc . c _oLicenseResult . UsersCount || licType === Asc . c _oLicenseResult . ConnectionsOS || licType === Asc . c _oLicenseResult . UsersCountOS ) )
this . _state . licenseType = licType ;
2017-11-22 13:32:43 +00:00
if ( this . _isDocReady )
this . applyLicense ( ) ;
} ,
2016-03-11 00:48:53 +00:00
2017-11-22 13:32:43 +00:00
applyLicense : function ( ) {
2018-05-28 10:00:03 +00:00
if ( this . _state . licenseType ) {
var license = this . _state . licenseType ,
buttons = [ 'ok' ] ,
primary = 'ok' ;
if ( license === Asc . c _oLicenseResult . Connections || license === Asc . c _oLicenseResult . UsersCount ) {
license = ( license === Asc . c _oLicenseResult . Connections ) ? this . warnLicenseExceeded : this . warnLicenseUsersExceeded ;
} else {
license = ( license === Asc . c _oLicenseResult . ConnectionsOS ) ? this . warnNoLicense : this . warnNoLicenseUsers ;
buttons = [ { value : 'buynow' , caption : this . textBuyNow } , { value : 'contact' , caption : this . textContactUs } ] ;
primary = 'buynow' ;
}
2017-11-22 12:20:51 +00:00
this . disableEditing ( true ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
2017-11-22 13:32:43 +00:00
var value = Common . localStorage . getItem ( "de-license-warning" ) ;
2016-03-11 00:48:53 +00:00
value = ( value !== null ) ? parseInt ( value ) : 0 ;
var now = ( new Date ) . getTime ( ) ;
if ( now - value > 86400000 ) {
Common . UI . info ( {
2016-06-23 06:45:41 +00:00
width : 500 ,
2016-03-11 00:48:53 +00:00
title : this . textNoLicenseTitle ,
2018-05-28 10:00:03 +00:00
msg : license ,
buttons : buttons ,
primary : primary ,
2016-03-11 00:48:53 +00:00
callback : function ( btn ) {
2019-02-12 07:59:32 +00:00
Common . localStorage . setItem ( "de-license-warning" , now ) ;
2016-04-13 12:40:58 +00:00
if ( btn == 'buynow' )
2017-10-18 12:08:11 +00:00
window . open ( 'https://www.onlyoffice.com' , "_blank" ) ;
2016-04-13 12:40:58 +00:00
else if ( btn == 'contact' )
window . open ( 'mailto:sales@onlyoffice.com' , "_blank" ) ;
2016-03-11 00:48:53 +00:00
}
} ) ;
}
2019-03-15 10:30:01 +00:00
} else if ( ! this . appOptions . isDesktopApp && ! this . appOptions . canBrandingExt &&
this . editorConfig && this . editorConfig . customization && ( this . editorConfig . customization . loaderName || this . editorConfig . customization . loaderLogo ) ) {
Common . UI . warning ( {
title : this . textPaidFeature ,
msg : this . textCustomLoader ,
buttons : [ { value : 'contact' , caption : this . textContactUs } , { value : 'close' , caption : this . textClose } ] ,
primary : 'contact' ,
callback : function ( btn ) {
if ( btn == 'contact' )
window . open ( 'mailto:sales@onlyoffice.com' , "_blank" ) ;
}
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onOpenDocument : function ( progress ) {
var elem = document . getElementById ( 'loadmask-text' ) ;
var proc = ( progress . asc _getCurrentFont ( ) + progress . asc _getCurrentImage ( ) ) / ( progress . asc _getFontsCount ( ) + progress . asc _getImagesCount ( ) ) ;
proc = this . textLoadingDocument + ': ' + Math . min ( Math . round ( proc * 100 ) , 100 ) + '%' ;
2018-11-07 13:32:22 +00:00
elem ? elem . innerHTML = proc : this . loadMask && this . loadMask . setTitle ( proc ) ;
2016-03-11 00:48:53 +00:00
} ,
onEditorPermissions : function ( params ) {
2016-08-29 11:46:15 +00:00
var licType = params . asc _getLicenseType ( ) ;
2016-08-30 10:30:11 +00:00
if ( Asc . c _oLicenseResult . Expired === licType || Asc . c _oLicenseResult . Error === licType || Asc . c _oLicenseResult . ExpiredTrial === licType ) {
2016-08-29 11:46:15 +00:00
Common . UI . warning ( {
title : this . titleLicenseExp ,
msg : this . warnLicenseExp ,
buttons : [ ] ,
closable : false
} ) ;
return ;
}
2017-04-11 11:37:45 +00:00
if ( this . onServerVersion ( params . asc _getBuildVersion ( ) ) ) return ;
2016-03-11 00:48:53 +00:00
this . permissions . review = ( this . permissions . review === undefined ) ? ( this . permissions . edit !== false ) : this . permissions . review ;
2016-10-20 07:22:16 +00:00
if ( params . asc _getRights ( ) !== Asc . c _oRights . Edit )
this . permissions . edit = this . permissions . review = false ;
2016-03-11 00:48:53 +00:00
this . appOptions . canAnalytics = params . asc _getIsAnalyticsEnable ( ) ;
2016-12-20 15:40:43 +00:00
this . appOptions . canLicense = ( licType === Asc . c _oLicenseResult . Success || licType === Asc . c _oLicenseResult . SuccessLimit ) ;
2016-06-30 08:56:15 +00:00
this . appOptions . isLightVersion = params . asc _getIsLight ( ) ;
2016-07-06 14:17:28 +00:00
/** coauthoring begin **/
this . appOptions . canCoAuthoring = ! this . appOptions . isLightVersion ;
/** coauthoring end **/
2016-03-11 00:48:53 +00:00
this . appOptions . isOffline = this . api . asc _isOffline ( ) ;
2017-06-15 13:35:55 +00:00
this . appOptions . isReviewOnly = this . permissions . review === true && this . permissions . edit === false ;
2016-06-16 13:09:26 +00:00
this . appOptions . canRequestEditRights = this . editorConfig . canRequestEditRights ;
2018-02-06 10:54:40 +00:00
this . appOptions . canRequestClose = this . editorConfig . canRequestClose ;
2016-03-11 00:48:53 +00:00
this . appOptions . canEdit = ( this . permissions . edit !== false || this . permissions . review === true ) && // can edit or review
( this . editorConfig . canRequestEditRights || this . editorConfig . mode !== 'view' ) && // if mode=="view" -> canRequestEditRights must be defined
( ! this . appOptions . isReviewOnly || this . appOptions . canLicense ) ; // if isReviewOnly==true -> canLicense must be true
this . appOptions . isEdit = this . appOptions . canLicense && this . appOptions . canEdit && this . editorConfig . mode !== 'view' ;
2017-03-29 09:01:34 +00:00
this . appOptions . canReview = this . permissions . review === true && this . appOptions . canLicense && this . appOptions . isEdit ;
2018-12-18 14:27:19 +00:00
this . appOptions . canViewReview = true ;
2018-04-03 13:40:31 +00:00
this . appOptions . canUseHistory = this . appOptions . canLicense && this . editorConfig . canUseHistory && this . appOptions . canCoAuthoring && ! this . appOptions . isOffline ;
2016-03-11 00:48:53 +00:00
this . appOptions . canHistoryClose = this . editorConfig . canHistoryClose ;
2016-09-16 12:46:00 +00:00
this . appOptions . canHistoryRestore = this . editorConfig . canHistoryRestore && ! ! this . permissions . changeHistory ;
2017-03-31 10:57:19 +00:00
this . appOptions . canUseMailMerge = this . appOptions . canLicense && this . appOptions . canEdit && ! this . appOptions . isOffline ;
2016-03-11 00:48:53 +00:00
this . appOptions . canSendEmailAddresses = this . appOptions . canLicense && this . editorConfig . canSendEmailAddresses && this . appOptions . canEdit && this . appOptions . canCoAuthoring ;
2018-08-13 14:04:29 +00:00
this . appOptions . canComments = this . appOptions . canLicense && ( this . permissions . comment === undefined ? this . appOptions . isEdit : this . permissions . comment ) && ( this . editorConfig . mode !== 'view' ) ;
2017-06-14 11:53:29 +00:00
this . appOptions . canComments = this . appOptions . canComments && ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . comments === false ) ;
2018-12-17 08:37:43 +00:00
this . appOptions . canViewComments = this . appOptions . canComments || ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . comments === false ) ;
2017-06-14 11:53:29 +00:00
this . appOptions . canChat = this . appOptions . canLicense && ! this . appOptions . isOffline && ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . chat === false ) ;
2016-03-11 00:48:53 +00:00
this . appOptions . canEditStyles = this . appOptions . canLicense && this . appOptions . canEdit ;
this . appOptions . canPrint = ( this . permissions . print !== false ) ;
2018-04-17 13:05:41 +00:00
this . appOptions . canRename = this . editorConfig . canRename && ! ! this . permissions . rename ;
2016-10-05 14:08:53 +00:00
this . appOptions . buildVersion = params . asc _getBuildVersion ( ) ;
2017-04-11 13:40:01 +00:00
this . appOptions . canForcesave = this . appOptions . isEdit && ! this . appOptions . isOffline && ( typeof ( this . editorConfig . customization ) == 'object' && ! ! this . editorConfig . customization . forcesave ) ;
this . appOptions . forcesave = this . appOptions . canForcesave ;
2017-04-11 13:43:31 +00:00
this . appOptions . canEditComments = this . appOptions . isOffline || ! ( typeof ( this . editorConfig . customization ) == 'object' && this . editorConfig . customization . commentAuthorOnly ) ;
2017-10-25 14:36:59 +00:00
this . appOptions . trialMode = params . asc _getLicenseMode ( ) ;
2018-08-01 16:08:24 +00:00
this . appOptions . isSignatureSupport = this . appOptions . isEdit && this . appOptions . isDesktopApp && this . appOptions . isOffline && this . api . asc _isSignaturesSupport ( ) ;
this . appOptions . isPasswordSupport = this . appOptions . isEdit && this . appOptions . isDesktopApp && this . appOptions . isOffline && this . api . asc _isProtectionSupport ( ) ;
this . appOptions . canProtect = ( this . appOptions . isSignatureSupport || this . appOptions . isPasswordSupport ) ;
2018-06-26 12:46:49 +00:00
this . appOptions . canEditContentControl = ( this . permissions . modifyContentControl !== false ) ;
2018-04-19 14:26:42 +00:00
this . appOptions . canHelp = ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . help === false ) ;
2018-08-13 14:04:29 +00:00
this . appOptions . canFillForms = ( ( this . permissions . fillForms === undefined ) ? this . appOptions . isEdit : this . permissions . fillForms ) && ( this . editorConfig . mode !== 'view' ) ;
2018-07-19 14:47:03 +00:00
this . appOptions . isRestrictedEdit = ! this . appOptions . isEdit && ( this . appOptions . canComments || this . appOptions . canFillForms ) ;
if ( this . appOptions . isRestrictedEdit && this . appOptions . canComments && this . appOptions . canFillForms ) // must be one restricted mode, priority for filling forms
this . appOptions . canComments = false ;
2016-03-11 00:48:53 +00:00
2017-03-29 09:01:34 +00:00
if ( this . appOptions . isLightVersion ) {
this . appOptions . canUseHistory =
this . appOptions . canReview =
this . appOptions . isReviewOnly = false ;
}
if ( ! this . appOptions . canCoAuthoring ) {
2017-06-15 13:35:55 +00:00
this . appOptions . canChat = false ;
2017-03-29 09:01:34 +00:00
}
2016-03-11 00:48:53 +00:00
var type = /^(?:(pdf|djvu|xps))$/ . exec ( this . document . fileType ) ;
2017-04-10 13:11:09 +00:00
this . appOptions . canDownloadOrigin = this . permissions . download !== false && ( type && typeof type [ 1 ] === 'string' ) ;
this . appOptions . canDownload = this . permissions . download !== false && ( ! type || typeof type [ 1 ] !== 'string' ) ;
2016-03-11 00:48:53 +00:00
2018-09-12 11:52:13 +00:00
this . appOptions . fileKey = this . document . key ;
2016-12-20 15:40:43 +00:00
this . appOptions . canBranding = ( licType === Asc . c _oLicenseResult . Success ) && ( typeof this . editorConfig . customization == 'object' ) ;
2016-09-19 14:04:56 +00:00
if ( this . appOptions . canBranding )
2017-04-21 13:36:06 +00:00
appHeader . setBranding ( this . editorConfig . customization ) ;
2019-02-07 10:18:56 +00:00
else if ( typeof this . editorConfig . customization == 'object' ) {
this . editorConfig . customization . compactHeader = this . editorConfig . customization . toolbarBreakTabs =
this . editorConfig . customization . toolbarHideFileName = false ;
}
2016-03-11 00:48:53 +00:00
2017-04-21 13:36:06 +00:00
this . appOptions . canRename && appHeader . setCanRename ( true ) ;
2016-10-28 13:38:33 +00:00
2016-11-16 09:38:16 +00:00
this . appOptions . canBrandingExt = params . asc _getCanBranding ( ) && ( typeof this . editorConfig . customization == 'object' || this . editorConfig . plugins ) ;
if ( this . appOptions . canBrandingExt )
this . updatePlugins ( this . plugins , true ) ;
2016-10-28 13:38:33 +00:00
2016-03-11 00:48:53 +00:00
this . applyModeCommonElements ( ) ;
2017-06-14 11:53:29 +00:00
this . applyModeEditorElements ( ) ;
if ( ! this . appOptions . isEdit ) {
2017-04-10 13:39:03 +00:00
Common . NotificationCenter . trigger ( 'app:face' , this . appOptions ) ;
2016-03-11 00:48:53 +00:00
this . hidePreloader ( ) ;
2017-04-10 13:41:07 +00:00
this . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
}
2017-04-10 13:39:03 +00:00
2018-07-19 14:47:03 +00:00
this . api . asc _setViewMode ( ! this . appOptions . isEdit && ! this . appOptions . isRestrictedEdit ) ;
2018-08-13 14:04:29 +00:00
this . appOptions . isRestrictedEdit && this . appOptions . canComments && this . api . asc _setRestriction ( Asc . c _oAscRestrictionType . OnlyComments ) ;
this . appOptions . isRestrictedEdit && this . appOptions . canFillForms && this . api . asc _setRestriction ( Asc . c _oAscRestrictionType . OnlyForms ) ;
2017-04-10 13:39:03 +00:00
this . api . asc _LoadDocument ( ) ;
2016-03-11 00:48:53 +00:00
} ,
applyModeCommonElements : function ( ) {
window . editor _elements _prepared = true ;
var app = this . getApplication ( ) ,
viewport = app . getController ( 'Viewport' ) . getView ( 'Viewport' ) ,
statusbarView = app . getController ( 'Statusbar' ) . getView ( 'Statusbar' ) ,
2018-05-15 12:37:26 +00:00
documentHolder = app . getController ( 'DocumentHolder' ) . getView ( ) ,
toolbarController = app . getController ( 'Toolbar' ) ;
2016-03-11 00:48:53 +00:00
viewport && viewport . setMode ( this . appOptions ) ;
statusbarView && statusbarView . setMode ( this . appOptions ) ;
2018-05-15 12:37:26 +00:00
toolbarController . setMode ( this . appOptions ) ;
2016-03-11 00:48:53 +00:00
documentHolder . setMode ( this . appOptions ) ;
this . api . asc _registerCallback ( 'asc_onSendThemeColors' , _ . bind ( this . onSendThemeColors , this ) ) ;
2017-04-11 11:40:18 +00:00
this . api . asc _registerCallback ( 'asc_onDownloadUrl' , _ . bind ( this . onDownloadUrl , this ) ) ;
2017-08-25 06:39:04 +00:00
this . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( this . onAuthParticipantsChanged , this ) ) ;
this . api . asc _registerCallback ( 'asc_onParticipantsChanged' , _ . bind ( this . onAuthParticipantsChanged , this ) ) ;
2018-07-19 12:31:13 +00:00
this . api . asc _registerCallback ( 'asc_onDocumentModifiedChanged' , _ . bind ( this . onDocumentModifiedChanged , this ) ) ;
2016-03-11 00:48:53 +00:00
} ,
applyModeEditorElements : function ( ) {
2018-12-17 08:37:43 +00:00
/** coauthoring begin **/
this . contComments . setMode ( this . appOptions ) ;
this . contComments . setConfig ( { config : this . editorConfig } , this . api ) ;
/** coauthoring end **/
2018-12-18 14:27:19 +00:00
var me = this ,
application = this . getApplication ( ) ,
reviewController = application . getController ( 'Common.Controllers.ReviewChanges' ) ;
reviewController . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) ;
2019-03-28 08:47:51 +00:00
if ( this . appOptions . isEdit || this . appOptions . isRestrictedEdit ) { // set api events for toolbar in the Restricted Editing mode
var toolbarController = application . getController ( 'Toolbar' ) ;
toolbarController && toolbarController . setApi ( me . api ) ;
if ( this . appOptions . isRestrictedEdit ) return ;
var rightmenuController = application . getController ( 'RightMenu' ) ,
2018-12-18 14:27:19 +00:00
fontsControllers = application . getController ( 'Common.Controllers.Fonts' ) ;
2016-03-11 00:48:53 +00:00
fontsControllers && fontsControllers . setApi ( me . api ) ;
rightmenuController && rightmenuController . setApi ( me . api ) ;
2018-08-01 16:08:24 +00:00
if ( this . appOptions . canProtect )
2017-11-28 12:23:37 +00:00
application . getController ( 'Common.Controllers.Protection' ) . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) ;
2016-03-11 00:48:53 +00:00
var viewport = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Viewport' ) ;
viewport . applyEditorMode ( ) ;
2018-05-15 12:37:26 +00:00
var rightmenuView = rightmenuController . getView ( 'RightMenu' ) ;
if ( rightmenuView ) {
rightmenuView . setApi ( me . api ) ;
rightmenuView . on ( 'editcomplete' , _ . bind ( me . onEditComplete , me ) ) ;
rightmenuView . setMode ( me . appOptions ) ;
}
2016-03-11 00:48:53 +00:00
2018-05-15 12:37:26 +00:00
var toolbarView = ( toolbarController ) ? toolbarController . getView ( ) : null ;
2016-03-11 00:48:53 +00:00
if ( toolbarView ) {
2018-05-15 12:37:26 +00:00
toolbarView . setApi ( me . api ) ;
toolbarView . on ( 'editcomplete' , _ . bind ( me . onEditComplete , me ) ) ;
2016-03-11 00:48:53 +00:00
toolbarView . on ( 'insertimage' , _ . bind ( me . onInsertImage , me ) ) ;
toolbarView . on ( 'inserttable' , _ . bind ( me . onInsertTable , me ) ) ;
toolbarView . on ( 'insertshape' , _ . bind ( me . onInsertShape , me ) ) ;
toolbarView . on ( 'inserttextart' , _ . bind ( me . onInsertTextArt , me ) ) ;
toolbarView . on ( 'insertchart' , _ . bind ( me . onInsertChart , me ) ) ;
}
var value = Common . localStorage . getItem ( 'de-settings-unit' ) ;
2016-04-08 08:55:15 +00:00
value = ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ;
2016-04-06 15:18:40 +00:00
Common . Utils . Metric . setCurrentMetric ( value ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-unit" , value ) ;
2016-04-07 09:17:34 +00:00
me . api . asc _SetDocumentUnits ( ( value == Common . Utils . Metric . c _MetricUnits . inch ) ? Asc . c _oAscDocumentUnits . Inch : ( ( value == Common . Utils . Metric . c _MetricUnits . pt ) ? Asc . c _oAscDocumentUnits . Point : Asc . c _oAscDocumentUnits . Millimeter ) ) ;
2016-03-11 00:48:53 +00:00
2017-04-19 11:22:31 +00:00
me . api . asc _SetViewRulers ( ! Common . localStorage . getBool ( 'de-hidden-rulers' ) ) ;
2016-03-11 00:48:53 +00:00
me . api . asc _registerCallback ( 'asc_onDocumentCanSaveChanged' , _ . bind ( me . onDocumentCanSaveChanged , me ) ) ;
/** coauthoring begin **/
me . api . asc _registerCallback ( 'asc_onCollaborativeChanges' , _ . bind ( me . onCollaborativeChanges , me ) ) ;
me . api . asc _registerCallback ( 'asc_OnTryUndoInFastCollaborative' , _ . bind ( me . onTryUndoInFastCollaborative , me ) ) ;
/** coauthoring end **/
2016-04-05 11:52:34 +00:00
if ( me . stackLongActions . exist ( { id : ApplyEditRights , type : Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] } ) ) {
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , ApplyEditRights ) ;
2016-03-11 00:48:53 +00:00
} else if ( ! this . _isDocReady ) {
2017-03-29 11:19:57 +00:00
Common . NotificationCenter . trigger ( 'app:face' , me . appOptions ) ;
2016-03-11 00:48:53 +00:00
me . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
}
// Message on window close
window . onbeforeunload = _ . bind ( me . onBeforeUnload , me ) ;
window . onunload = _ . bind ( me . onUnload , me ) ;
}
} ,
onExternalMessage : function ( msg ) {
if ( msg && msg . msg ) {
msg . msg = ( msg . msg ) . toString ( ) ;
this . showTips ( [ msg . msg . charAt ( 0 ) . toUpperCase ( ) + msg . msg . substring ( 1 ) ] ) ;
2017-05-16 07:46:04 +00:00
Common . component . Analytics . trackEvent ( 'External Error' ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onError : function ( id , level , errData ) {
2018-10-08 11:21:05 +00:00
if ( id == Asc . c _oAscError . ID . LoadingScriptError ) {
this . showTips ( [ this . scriptLoadError ] ) ;
2018-10-08 14:06:37 +00:00
this . tooltip && this . tooltip . getBSTip ( ) . $tip . css ( 'z-index' , 10000 ) ;
2018-10-08 11:21:05 +00:00
return ;
}
2016-03-11 00:48:53 +00:00
this . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
var config = {
2018-05-03 15:27:05 +00:00
closable : true
2016-03-11 00:48:53 +00:00
} ;
switch ( id )
{
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Unknown :
2016-03-11 00:48:53 +00:00
config . msg = this . unknownErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . ConvertationTimeout :
2016-03-11 00:48:53 +00:00
config . msg = this . convertationTimeoutText ;
break ;
2016-09-13 06:40:44 +00:00
case Asc . c _oAscError . ID . ConvertationOpenError :
config . msg = this . openErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationSaveError :
config . msg = this . saveErrorText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DownloadError :
2016-03-11 00:48:53 +00:00
config . msg = this . downloadErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageSize :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageSizeMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageExt :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageExtMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageFileCount :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageFileCountMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . SplitCellMaxRows :
2016-03-11 00:48:53 +00:00
config . msg = this . splitMaxRowsErrorText . replace ( '%1' , errData . get _Value ( ) ) ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . SplitCellMaxCols :
2016-03-11 00:48:53 +00:00
config . msg = this . splitMaxColsErrorText . replace ( '%1' , errData . get _Value ( ) ) ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . SplitCellRowsDivider :
2016-03-11 00:48:53 +00:00
config . msg = this . splitDividerErrorText . replace ( '%1' , errData . get _Value ( ) ) ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . VKeyEncrypt :
2016-11-28 11:52:03 +00:00
config . msg = this . errorToken ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . KeyExpire :
2016-11-28 11:52:03 +00:00
config . msg = this . errorTokenExpire ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UserCountExceed :
2016-03-11 00:48:53 +00:00
config . msg = this . errorUsersExceed ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . CoAuthoringDisconnect :
2016-10-12 13:32:48 +00:00
config . msg = this . errorViewerDisconnect ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . ConvertationPassword :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFilePassProtect ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . StockChartError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorStockChart ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DataRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorDataRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Database :
2016-03-11 00:48:53 +00:00
config . msg = this . errorDatabaseConnection ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UserDrop :
2016-03-11 00:48:53 +00:00
if ( this . _state . lostEditingRights ) {
this . _state . lostEditingRights = false ;
return ;
}
this . _state . lostEditingRights = true ;
config . msg = this . errorUserDrop ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . MailMergeLoadFile :
2016-03-11 00:48:53 +00:00
config . msg = this . errorMailMergeLoadFile ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . MailMergeSaveFile :
2016-03-11 00:48:53 +00:00
config . msg = this . errorMailMergeSaveFile ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Warning :
2016-03-11 00:48:53 +00:00
config . msg = this . errorConnectToServer ;
2018-05-03 15:27:05 +00:00
config . closable = false ;
2016-03-11 00:48:53 +00:00
break ;
2016-11-28 11:52:03 +00:00
case Asc . c _oAscError . ID . SessionAbsolute :
config . msg = this . errorSessionAbsolute ;
break ;
case Asc . c _oAscError . ID . SessionIdle :
config . msg = this . errorSessionIdle ;
break ;
case Asc . c _oAscError . ID . SessionToken :
config . msg = this . errorSessionToken ;
break ;
case Asc . c _oAscError . ID . AccessDeny :
config . msg = this . errorAccessDeny ;
break ;
2017-04-12 09:49:16 +00:00
case Asc . c _oAscError . ID . UplImageUrl :
config . msg = this . errorBadImageUrl ;
break ;
2018-01-26 12:39:21 +00:00
case Asc . c _oAscError . ID . ForceSaveButton :
config . msg = this . errorForceSave ;
break ;
case Asc . c _oAscError . ID . ForceSaveTimeout :
config . msg = this . errorForceSave ;
console . warn ( config . msg ) ;
break ;
2018-06-28 10:16:35 +00:00
case Asc . c _oAscError . ID . DataEncrypted :
config . msg = this . errorDataEncrypted ;
break ;
2018-10-25 13:19:29 +00:00
case Asc . c _oAscError . ID . EditingError :
config . msg = ( this . appOptions . isDesktopApp && this . appOptions . isOffline ) ? this . errorEditingSaveas : this . errorEditingDownloadas ;
break ;
2019-03-04 08:53:58 +00:00
case Asc . c _oAscError . ID . MailToClientMissing :
config . msg = this . errorEmailClient ;
break ;
2016-03-11 00:48:53 +00:00
default :
2018-03-01 14:37:15 +00:00
config . msg = ( typeof id == 'string' ) ? id : this . errorDefaultMessage . replace ( '%1' , id ) ;
2016-03-11 00:48:53 +00:00
break ;
}
2016-04-05 11:52:34 +00:00
if ( level == Asc . c _oAscError . Level . Critical ) {
2016-03-11 00:48:53 +00:00
// report only critical errors
Common . Gateway . reportError ( id , config . msg ) ;
config . title = this . criticalErrorTitle ;
config . iconCls = 'error' ;
2018-05-03 15:27:05 +00:00
config . closable = false ;
2016-03-11 00:48:53 +00:00
2018-03-01 14:37:15 +00:00
if ( this . appOptions . canBackToFolder && ! this . appOptions . isDesktopApp && typeof id !== 'string' ) {
2016-03-11 00:48:53 +00:00
config . msg += '<br/><br/>' + this . criticalErrorExtText ;
config . callback = function ( btn ) {
if ( btn == 'ok' )
2019-01-10 13:20:27 +00:00
Common . NotificationCenter . trigger ( 'goback' , true ) ;
2016-03-11 00:48:53 +00:00
}
}
2018-06-28 12:56:44 +00:00
if ( id == Asc . c _oAscError . ID . DataEncrypted ) {
this . api . asc _coAuthoringDisconnect ( ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
}
2016-03-11 00:48:53 +00:00
}
else {
2017-10-07 09:20:39 +00:00
Common . Gateway . reportWarning ( id , config . msg ) ;
2016-03-11 00:48:53 +00:00
config . title = this . notcriticalErrorTitle ;
config . iconCls = 'warn' ;
config . buttons = [ 'ok' ] ;
config . callback = _ . bind ( function ( btn ) {
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscError . ID . Warning && btn == 'ok' && ( this . appOptions . canDownload || this . appOptions . canDownloadOrigin ) ) {
2016-03-11 00:48:53 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
if ( this . appOptions . isDesktopApp && this . appOptions . isOffline )
this . api . asc _DownloadAs ( ) ;
else
( this . appOptions . canDownload ) ? this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . showMenu ( 'file:saveas' ) : this . api . asc _DownloadOrigin ( ) ;
2017-08-23 08:02:04 +00:00
} else if ( id == Asc . c _oAscError . ID . SplitCellMaxRows || id == Asc . c _oAscError . ID . SplitCellMaxCols || id == Asc . c _oAscError . ID . SplitCellRowsDivider ) {
var me = this ;
setTimeout ( function ( ) {
( new Common . Views . InsertTableDialog ( {
split : true ,
handler : function ( result , value ) {
if ( result == 'ok' ) {
if ( me . api )
me . api . SplitCell ( value . columns , value . rows ) ;
}
me . onEditComplete ( ) ;
}
} ) ) . show ( ) ;
} , 10 ) ;
2018-10-25 13:19:29 +00:00
} else if ( id == Asc . c _oAscError . ID . EditingError ) {
this . disableEditing ( true ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' , true ) ; // enable download and print
2016-03-11 00:48:53 +00:00
}
this . _state . lostEditingRights = false ;
this . onEditComplete ( ) ;
} , this ) ;
}
2018-01-26 12:39:21 +00:00
if ( id !== Asc . c _oAscError . ID . ForceSaveTimeout )
Common . UI . alert ( config ) ;
2016-03-11 00:48:53 +00:00
Common . component . Analytics . trackEvent ( 'Internal Error' , id . toString ( ) ) ;
} ,
onCoAuthoringDisconnect : function ( ) {
this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Viewport' ) . setMode ( { isDisconnected : true } ) ;
2017-04-21 13:36:06 +00:00
appHeader . setCanRename ( false ) ;
2016-09-27 12:09:32 +00:00
this . appOptions . canRename = false ;
2016-03-11 00:48:53 +00:00
this . _state . isDisconnected = true ;
} ,
showTips : function ( strings ) {
var me = this ;
if ( ! strings . length ) return ;
if ( typeof ( strings ) != 'object' ) strings = [ strings ] ;
function showNextTip ( ) {
var str _tip = strings . shift ( ) ;
if ( str _tip ) {
2016-11-16 10:35:26 +00:00
str _tip += '\n' + me . textCloseTip ;
2016-03-11 00:48:53 +00:00
tooltip . setTitle ( str _tip ) ;
tooltip . show ( ) ;
}
}
if ( ! this . tooltip ) {
this . tooltip = new Common . UI . Tooltip ( {
2017-04-21 13:36:06 +00:00
owner : this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( ) ,
2016-03-11 00:48:53 +00:00
hideonclick : true ,
placement : 'bottom' ,
cls : 'main-info' ,
offset : 30
} ) ;
}
var tooltip = this . tooltip ;
tooltip . on ( 'tooltip:hide' , function ( ) {
setTimeout ( showNextTip , 300 ) ;
} ) ;
showNextTip ( ) ;
} ,
updateWindowTitle : function ( force ) {
var isModified = this . api . isDocumentModified ( ) ;
if ( this . _state . isDocModified !== isModified || force ) {
var title = this . defaultTitleText ;
2017-04-21 13:36:06 +00:00
if ( ! _ . isEmpty ( appHeader . getDocumentCaption ( ) ) )
title = appHeader . getDocumentCaption ( ) + ' - ' + title ;
2016-03-11 00:48:53 +00:00
if ( isModified ) {
2017-04-12 08:55:46 +00:00
clearTimeout ( this . _state . timerCaption ) ;
if ( ! _ . isUndefined ( title ) ) {
2016-03-11 00:48:53 +00:00
title = '* ' + title ;
}
}
if ( window . document . title != title )
window . document . title = title ;
2017-04-12 08:55:46 +00:00
Common . Gateway . setDocumentModified ( isModified ) ;
if ( isModified && ( ! this . _state . fastCoauth || this . _state . usersCount < 2 ) )
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' , true ) ;
2016-03-11 00:48:53 +00:00
this . _state . isDocModified = isModified ;
}
} ,
onDocumentModifiedChanged : function ( ) {
var isModified = this . api . asc _isDocumentCanSave ( ) ;
if ( this . _state . isDocModified !== isModified ) {
Common . Gateway . setDocumentModified ( this . api . isDocumentModified ( ) ) ;
}
this . updateWindowTitle ( ) ;
2017-04-21 13:36:06 +00:00
var toolbarView = this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( ) ;
2018-07-19 12:31:13 +00:00
if ( toolbarView && toolbarView . btnCollabChanges && ! toolbarView . _state . previewmode ) {
2018-04-24 23:43:33 +00:00
var isSyncButton = toolbarView . btnCollabChanges . $icon . hasClass ( 'btn-synch' ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
isDisabled = ! isModified && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
2018-02-15 23:56:17 +00:00
toolbarView . btnSave . setDisabled ( isDisabled ) ;
2016-03-11 00:48:53 +00:00
}
/** coauthoring begin **/
if ( this . contComments . isDummyComment && ! this . dontCloseDummyComment ) {
this . contComments . clearDummyComment ( ) ;
}
/** coauthoring end **/
} ,
onDocumentCanSaveChanged : function ( isCanSave ) {
2018-02-15 23:52:44 +00:00
var toolbarView = this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( ) ;
2016-03-11 00:48:53 +00:00
2017-09-01 14:48:31 +00:00
if ( toolbarView && this . api && ! toolbarView . _state . previewmode ) {
2018-04-25 08:09:47 +00:00
var isSyncButton = toolbarView . btnCollabChanges . $icon . hasClass ( 'btn-synch' ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
isDisabled = ! isCanSave && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
2018-02-15 23:56:17 +00:00
toolbarView . btnSave . setDisabled ( isDisabled ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onContextMenu : function ( event ) {
var canCopyAttr = event . target . getAttribute ( 'data-can-copy' ) ,
isInputEl = ( event . target instanceof HTMLInputElement ) || ( event . target instanceof HTMLTextAreaElement ) ;
if ( ( isInputEl && canCopyAttr === 'false' ) ||
( ! isInputEl && canCopyAttr !== 'true' ) ) {
event . stopPropagation ( ) ;
event . preventDefault ( ) ;
return false ;
}
} ,
onBeforeUnload : function ( ) {
Common . localStorage . save ( ) ;
if ( this . api . isDocumentModified ( ) ) {
var me = this ;
this . api . asc _stopSaving ( ) ;
this . continueSavingTimer = window . setTimeout ( function ( ) {
me . api . asc _continueSaving ( ) ;
} , 500 ) ;
return this . leavePageText ;
}
} ,
onUnload : function ( ) {
if ( this . continueSavingTimer ) clearTimeout ( this . continueSavingTimer ) ;
} ,
hidePreloader : function ( ) {
2016-11-16 09:38:16 +00:00
if ( ! this . _state . customizationDone ) {
this . _state . customizationDone = true ;
2017-04-11 12:24:07 +00:00
if ( this . appOptions . customization ) {
if ( this . appOptions . isDesktopApp )
this . appOptions . customization . about = false ;
else if ( ! this . appOptions . canBrandingExt )
this . appOptions . customization . about = true ;
}
2016-03-11 00:48:53 +00:00
Common . Utils . applyCustomization ( this . appOptions . customization , mapCustomizationElements ) ;
2016-11-16 09:38:16 +00:00
if ( this . appOptions . canBrandingExt ) {
2016-10-28 13:38:33 +00:00
Common . Utils . applyCustomization ( this . appOptions . customization , mapCustomizationExtElements ) ;
2016-11-16 09:38:16 +00:00
Common . Utils . applyCustomizationPlugins ( this . UICustomizePlugins ) ;
}
2016-03-11 00:48:53 +00:00
}
Common . NotificationCenter . trigger ( 'layout:changed' , 'main' ) ;
$ ( '#loading-mask' ) . hide ( ) . remove ( ) ;
2018-04-27 13:32:39 +00:00
Common . Controllers . Desktop . process ( 'preloader:hide' ) ;
2016-03-11 00:48:53 +00:00
} ,
onDownloadUrl : function ( url ) {
2016-09-19 07:41:02 +00:00
if ( this . _state . isFromGatewayDownloadAs )
Common . Gateway . downloadAs ( url ) ;
this . _state . isFromGatewayDownloadAs = false ;
2016-03-11 00:48:53 +00:00
} ,
onUpdateVersion : function ( callback ) {
var me = this ;
me . needToUpdateVersion = true ;
2016-04-05 11:52:34 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
Common . UI . warning ( {
title : me . titleUpdateVersion ,
msg : this . errorUpdateVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
if ( callback ) callback . call ( me ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
} )
}
} ) ;
} ,
2017-04-11 11:37:45 +00:00
onServerVersion : function ( buildVersion ) {
if ( this . changeServerVersion ) return true ;
if ( DocsAPI . DocEditor . version ( ) !== buildVersion && ! window . compareVersions ) {
this . changeServerVersion = true ;
Common . UI . warning ( {
title : this . titleServerVersion ,
msg : this . errorServerVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
} )
}
} ) ;
return true ;
}
return false ;
} ,
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
// fillUserStore: function(users){
// if (!_.isEmpty(users)){
// var userStore = this.getCommonStoreUsersStore();
//
// if (userStore)
// userStore.add(users);
// }
// },
onCollaborativeChanges : function ( ) {
if ( this . _state . hasCollaborativeChanges ) return ;
this . _state . hasCollaborativeChanges = true ;
if ( this . appOptions . isEdit )
2017-04-11 13:40:01 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( this . txtNeedSynchronize , true ) ;
2016-03-11 00:48:53 +00:00
} ,
/** coauthoring end **/
synchronizeChanges : function ( ) {
this . getApplication ( ) . getController ( 'Statusbar' ) . synchronizeChanges ( ) ;
2017-03-29 11:19:57 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . synchronizeChanges ( ) ;
2017-04-03 16:24:24 +00:00
this . getApplication ( ) . getController ( 'DocumentHolder' ) . getView ( ) . hideTips ( ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
2017-04-21 13:36:06 +00:00
this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( ) . synchronizeChanges ( ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
this . _state . hasCollaborativeChanges = false ;
} ,
initNames : function ( ) {
this . shapeGroupNames = [
this . txtBasicShapes ,
this . txtFiguredArrows ,
this . txtMath ,
this . txtCharts ,
this . txtStarsRibbons ,
this . txtCallouts ,
this . txtButtons ,
this . txtRectangles ,
this . txtLines
] ;
} ,
fillAutoShapes : function ( groupNames , shapes ) {
if ( _ . isEmpty ( shapes ) || _ . isEmpty ( groupNames ) || shapes . length != groupNames . length )
return ;
var me = this ,
shapegrouparray = [ ] ,
shapeStore = this . getCollection ( 'ShapeGroups' ) ;
shapeStore . reset ( ) ;
var groupscount = groupNames . length ;
_ . each ( groupNames , function ( groupName , index ) {
var store = new Backbone . Collection ( [ ] , {
model : DE . Models . ShapeModel
} ) ;
var cols = ( shapes [ index ] . length ) > 18 ? 7 : 6 ,
height = Math . ceil ( shapes [ index ] . length / cols ) * 35 + 3 ,
width = 30 * cols ;
_ . each ( shapes [ index ] , function ( shape , idx ) {
store . add ( {
imageUrl : shape . Image ,
data : { shapeType : shape . Type } ,
2019-02-08 12:08:19 +00:00
tip : me [ 'txtShape_' + shape . Type ] || ( me . textShape + ' ' + ( idx + 1 ) ) ,
2016-03-11 00:48:53 +00:00
allowSelected : true ,
selected : false
} ) ;
} ) ;
shapegrouparray . push ( {
groupName : me . shapeGroupNames [ index ] ,
groupStore : store ,
groupWidth : width ,
groupHeight : height
} ) ;
} ) ;
shapeStore . add ( shapegrouparray ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Toolbar' ) . fillAutoShapes ( ) ;
} , 50 ) ;
} ,
fillTextArt : function ( shapes ) {
if ( _ . isEmpty ( shapes ) ) return ;
var me = this , arr = [ ] ,
artStore = this . getCollection ( 'Common.Collections.TextArt' ) ;
_ . each ( shapes , function ( shape , index ) {
arr . push ( {
imageUrl : shape ,
data : index ,
allowSelected : true ,
selected : false
} ) ;
} ) ;
artStore . reset ( arr ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Toolbar' ) . fillTextArt ( ) ;
} , 50 ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'RightMenu' ) . fillTextArt ( ) ;
} , 50 ) ;
} ,
updateThemeColors : function ( ) {
var me = this ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'RightMenu' ) . UpdateThemeColors ( ) ;
} , 50 ) ;
setTimeout ( function ( ) {
2017-04-03 16:24:24 +00:00
me . getApplication ( ) . getController ( 'DocumentHolder' ) . getView ( ) . updateThemeColors ( ) ;
2016-03-11 00:48:53 +00:00
} , 50 ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Toolbar' ) . updateThemeColors ( ) ;
} , 50 ) ;
} ,
onSendThemeColors : function ( colors , standart _colors ) {
Common . Utils . ThemeColor . setColors ( colors , standart _colors ) ;
if ( window . styles _loaded ) {
this . updateThemeColors ( ) ;
this . fillTextArt ( this . api . asc _getTextArtPreviews ( ) ) ;
}
} ,
2017-04-19 08:28:40 +00:00
loadLanguages : function ( apiLangs ) {
2019-01-28 13:51:07 +00:00
var langs = [ ] , info ,
allLangs = Common . util . LanguageInfo . getLanguages ( ) ;
for ( var code in allLangs ) {
if ( allLangs . hasOwnProperty ( code ) ) {
info = allLangs [ code ] ;
info [ 2 ] && langs . push ( {
displayValue : info [ 1 ] ,
value : info [ 0 ] ,
code : parseInt ( code ) ,
spellcheck : _ . indexOf ( apiLangs , code ) > - 1
} ) ;
}
}
2017-02-07 15:16:17 +00:00
langs . sort ( function ( a , b ) {
2019-01-28 13:51:07 +00:00
if ( a . value < b . value ) return - 1 ;
if ( a . value > b . value ) return 1 ;
2017-02-07 15:16:17 +00:00
return 0 ;
} ) ;
2017-04-19 08:28:40 +00:00
this . languages = langs ;
window . styles _loaded && this . setLanguages ( ) ;
} ,
setLanguages : function ( ) {
2019-01-28 13:51:07 +00:00
if ( ! this . languages || this . languages . length < 1 ) {
this . loadLanguages ( [ ] ) ;
}
2017-04-19 08:28:40 +00:00
if ( this . languages && this . languages . length > 0 ) {
this . getApplication ( ) . getController ( 'DocumentHolder' ) . getView ( ) . setLanguages ( this . languages ) ;
this . getApplication ( ) . getController ( 'Statusbar' ) . setLanguages ( this . languages ) ;
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . setLanguages ( this . languages ) ;
}
2016-03-11 00:48:53 +00:00
} ,
onInsertTable : function ( ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . onInsertTable ( ) ;
} ,
onInsertImage : function ( ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . onInsertImage ( ) ;
} ,
onInsertChart : function ( ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . onInsertChart ( ) ;
} ,
onInsertShape : function ( ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . onInsertShape ( ) ;
} ,
onInsertTextArt : function ( ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . onInsertTextArt ( ) ;
} ,
unitsChanged : function ( m ) {
var value = Common . localStorage . getItem ( "de-settings-unit" ) ;
2016-04-08 08:55:15 +00:00
value = ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ;
2016-04-06 15:18:40 +00:00
Common . Utils . Metric . setCurrentMetric ( value ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-unit" , value ) ;
2016-04-07 09:17:34 +00:00
this . api . asc _SetDocumentUnits ( ( value == Common . Utils . Metric . c _MetricUnits . inch ) ? Asc . c _oAscDocumentUnits . Inch : ( ( value == Common . Utils . Metric . c _MetricUnits . pt ) ? Asc . c _oAscDocumentUnits . Point : Asc . c _oAscDocumentUnits . Millimeter ) ) ;
2016-03-11 00:48:53 +00:00
this . getApplication ( ) . getController ( 'RightMenu' ) . updateMetricUnit ( ) ;
2017-04-21 13:36:06 +00:00
this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( ) . updateMetricUnit ( ) ;
2016-03-11 00:48:53 +00:00
} ,
2018-07-25 11:40:51 +00:00
onAdvancedOptions : function ( advOptions , mode ) {
2017-09-08 08:39:07 +00:00
if ( this . _state . openDlg ) return ;
2016-08-10 09:33:08 +00:00
var type = advOptions . asc _getOptionId ( ) ,
2017-09-08 08:39:07 +00:00
me = this ;
2016-04-05 11:52:34 +00:00
if ( type == Asc . c _oAscAdvancedOptionsID . TXT ) {
2017-09-08 08:39:07 +00:00
me . _state . openDlg = new Common . Views . OpenDialog ( {
2018-07-25 11:40:51 +00:00
mode : mode ,
2016-03-11 00:48:53 +00:00
type : type ,
2018-02-09 14:26:34 +00:00
preview : advOptions . asc _getOptions ( ) . asc _getData ( ) ,
2016-03-11 00:48:53 +00:00
codepages : advOptions . asc _getOptions ( ) . asc _getCodePages ( ) ,
settings : advOptions . asc _getOptions ( ) . asc _getRecommendedSettings ( ) ,
2018-02-09 14:26:34 +00:00
api : me . api ,
2018-07-25 11:40:51 +00:00
handler : function ( result , encoding ) {
2016-03-11 00:48:53 +00:00
me . isShowOpenDialog = false ;
2018-07-25 11:40:51 +00:00
if ( result == 'ok' ) {
if ( me && me . api ) {
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CTXTAdvancedOptions ( encoding ) ) ;
me . loadMask && me . loadMask . show ( ) ;
}
2016-03-11 00:48:53 +00:00
}
2017-09-08 08:39:07 +00:00
me . _state . openDlg = null ;
2016-03-11 00:48:53 +00:00
}
} ) ;
2016-08-10 09:33:08 +00:00
} else if ( type == Asc . c _oAscAdvancedOptionsID . DRM ) {
2017-09-08 08:39:07 +00:00
me . _state . openDlg = new Common . Views . OpenDialog ( {
2018-10-31 10:44:18 +00:00
closeFile : me . appOptions . canRequestClose ,
2016-08-10 09:33:08 +00:00
type : type ,
2018-04-28 11:13:52 +00:00
warning : ! ( me . appOptions . isDesktopApp && me . appOptions . isOffline ) ,
2017-09-08 08:44:01 +00:00
validatePwd : ! ! me . _state . isDRM ,
2018-02-06 10:54:40 +00:00
handler : function ( result , value ) {
2016-08-10 09:33:08 +00:00
me . isShowOpenDialog = false ;
2018-02-06 10:54:40 +00:00
if ( result == 'ok' ) {
if ( me . api ) {
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CDRMAdvancedOptions ( value ) ) ;
me . loadMask && me . loadMask . show ( ) ;
}
2018-10-31 09:16:44 +00:00
} else {
2018-02-06 10:54:40 +00:00
Common . Gateway . requestClose ( ) ;
2018-10-31 09:16:44 +00:00
Common . Controllers . Desktop . requestClose ( ) ;
}
2017-09-08 08:39:07 +00:00
me . _state . openDlg = null ;
2016-08-10 09:33:08 +00:00
}
} ) ;
2017-09-08 08:44:01 +00:00
me . _state . isDRM = true ;
2016-08-10 09:33:08 +00:00
}
2017-09-08 08:39:07 +00:00
if ( me . _state . openDlg ) {
2016-03-11 00:48:53 +00:00
this . isShowOpenDialog = true ;
this . loadMask && this . loadMask . hide ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2017-09-08 08:39:07 +00:00
me . _state . openDlg . show ( ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onTryUndoInFastCollaborative : function ( ) {
2017-06-16 11:53:29 +00:00
if ( ! window . localStorage . getBool ( "de-hide-try-undoredo" ) )
2016-03-11 00:48:53 +00:00
Common . UI . info ( {
width : 500 ,
msg : this . textTryUndoRedo ,
iconCls : 'info' ,
buttons : [ 'custom' , 'cancel' ] ,
primary : 'custom' ,
customButtonText : this . textStrict ,
dontshow : true ,
callback : _ . bind ( function ( btn , dontshow ) {
if ( dontshow ) window . localStorage . setItem ( "de-hide-try-undoredo" , 1 ) ;
if ( btn == 'custom' ) {
Common . localStorage . setItem ( "de-settings-coauthmode" , 0 ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-coauthmode" , false ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _SetFastCollaborative ( false ) ;
this . _state . fastCoauth = false ;
Common . localStorage . setItem ( "de-settings-showchanges-strict" , 'last' ) ;
2016-04-05 11:52:34 +00:00
this . api . SetCollaborativeMarksShowType ( Asc . c _oAscCollaborativeMarksShowType . LastChanges ) ;
2018-04-02 10:58:55 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . applySettings ( ) ;
2016-03-11 00:48:53 +00:00
}
2017-08-23 08:02:04 +00:00
this . onEditComplete ( ) ;
2016-03-11 00:48:53 +00:00
} , this )
} ) ;
} ,
onAuthParticipantsChanged : function ( users ) {
var length = 0 ;
_ . each ( users , function ( item ) {
if ( ! item . asc _getView ( ) )
length ++ ;
} ) ;
this . _state . usersCount = length ;
} ,
applySettings : function ( ) {
2016-12-20 14:29:37 +00:00
if ( this . appOptions . isEdit && ! this . appOptions . isOffline && this . appOptions . canCoAuthoring ) {
2017-06-16 11:53:29 +00:00
var oldval = this . _state . fastCoauth ;
this . _state . fastCoauth = Common . localStorage . getBool ( "de-settings-coauthmode" , true ) ;
2016-03-11 00:48:53 +00:00
if ( this . _state . fastCoauth && ! oldval )
this . synchronizeChanges ( ) ;
}
2017-04-11 13:40:01 +00:00
if ( this . appOptions . canForcesave ) {
2017-06-16 11:53:29 +00:00
this . appOptions . forcesave = Common . localStorage . getBool ( "de-settings-forcesave" , this . appOptions . canForcesave ) ;
2017-10-03 11:22:33 +00:00
Common . Utils . InternalSettings . set ( "de-settings-forcesave" , this . appOptions . forcesave ) ;
2017-04-11 13:40:01 +00:00
this . api . asc _setIsForceSaveOnUserSave ( this . appOptions . forcesave ) ;
}
2016-03-11 00:48:53 +00:00
} ,
onDocumentName : function ( name ) {
2017-04-21 13:36:06 +00:00
appHeader . setDocumentCaption ( name ) ;
2016-03-11 00:48:53 +00:00
this . updateWindowTitle ( true ) ;
} ,
2016-09-26 10:54:25 +00:00
onMeta : function ( meta ) {
2017-04-21 13:36:06 +00:00
appHeader . setDocumentCaption ( meta . title ) ;
2016-09-26 10:54:25 +00:00
this . updateWindowTitle ( true ) ;
this . document . title = meta . title ;
2017-04-21 13:36:06 +00:00
var filemenu = this . getApplication ( ) . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . getMenu ( 'file' ) ;
2016-09-26 10:54:25 +00:00
filemenu . loadDocument ( { doc : this . document } ) ;
filemenu . panels [ 'info' ] . updateInfo ( this . document ) ;
Common . Gateway . metaChange ( meta ) ;
} ,
2016-03-11 00:48:53 +00:00
onPrint : function ( ) {
2018-07-25 13:33:46 +00:00
if ( ! this . appOptions . canPrint || this . isModalShowed ) return ;
2016-03-11 00:48:53 +00:00
if ( this . api )
this . api . asc _Print ( Common . Utils . isChrome || Common . Utils . isSafari || Common . Utils . isOpera ) ; // if isChrome or isSafari or isOpera == true use asc_onPrintUrl event
Common . component . Analytics . trackEvent ( 'Print' ) ;
} ,
onPrintUrl : function ( url ) {
2016-06-09 10:22:58 +00:00
if ( this . iframePrint ) {
this . iframePrint . parentNode . removeChild ( this . iframePrint ) ;
this . iframePrint = null ;
}
2016-03-11 00:48:53 +00:00
if ( ! this . iframePrint ) {
var me = this ;
this . iframePrint = document . createElement ( "iframe" ) ;
this . iframePrint . id = "id-print-frame" ;
this . iframePrint . style . display = 'none' ;
this . iframePrint . style . visibility = "hidden" ;
this . iframePrint . style . position = "fixed" ;
this . iframePrint . style . right = "0" ;
this . iframePrint . style . bottom = "0" ;
document . body . appendChild ( this . iframePrint ) ;
this . iframePrint . onload = function ( ) {
me . iframePrint . contentWindow . focus ( ) ;
me . iframePrint . contentWindow . print ( ) ;
2016-06-09 10:22:58 +00:00
me . iframePrint . contentWindow . blur ( ) ;
window . focus ( ) ;
2016-03-11 00:48:53 +00:00
} ;
}
if ( url ) this . iframePrint . src = url ;
} ,
2017-03-01 16:19:42 +00:00
requestPlugins : function ( pluginsPath ) { // request plugins
if ( ! pluginsPath ) return ;
2017-10-11 08:45:42 +00:00
var config _plugins = ( this . plugins && this . plugins . pluginsData && this . plugins . pluginsData . length > 0 ) ? this . updatePlugins ( this . plugins , false ) : null , // return plugins object
request _plugins = this . updatePlugins ( Common . Utils . getConfigJson ( pluginsPath ) , false ) ;
this . updatePluginsList ( {
autostart : ( config _plugins && config _plugins . autostart ? config _plugins . autostart : [ ] ) . concat ( request _plugins && request _plugins . autostart ? request _plugins . autostart : [ ] ) ,
pluginsData : ( config _plugins ? config _plugins . pluginsData : [ ] ) . concat ( request _plugins ? request _plugins . pluginsData : [ ] )
} , false ) ;
2017-03-01 16:19:42 +00:00
} ,
2016-11-16 09:38:16 +00:00
updatePlugins : function ( plugins , uiCustomize ) { // plugins from config
if ( ! plugins ) return ;
var pluginsData = ( uiCustomize ) ? plugins . UIpluginsData : plugins . pluginsData ;
if ( ! pluginsData || pluginsData . length < 1 ) return ;
2016-09-05 13:06:24 +00:00
2017-09-13 11:43:35 +00:00
var arr = [ ] ;
2016-11-16 09:38:16 +00:00
pluginsData . forEach ( function ( item ) {
2017-09-04 14:20:46 +00:00
var value = Common . Utils . getConfigJson ( item ) ;
2017-03-01 16:19:42 +00:00
if ( value ) {
value . baseUrl = item . substring ( 0 , item . lastIndexOf ( "config.json" ) ) ;
arr . push ( value ) ;
}
2016-09-05 13:06:24 +00:00
} ) ;
2017-09-13 11:35:20 +00:00
if ( arr . length > 0 ) {
var autostart = plugins . autostart || plugins . autoStartGuid ;
if ( typeof ( autostart ) == 'string' )
autostart = [ autostart ] ;
plugins . autoStartGuid && console . warn ( "Obsolete: The autoStartGuid parameter is deprecated. Please check the documentation for new plugin connection configuration." ) ;
2017-10-11 08:45:42 +00:00
if ( uiCustomize )
this . updatePluginsList ( {
autostart : autostart ,
pluginsData : arr
} , ! ! uiCustomize ) ;
else return {
2017-09-13 11:35:20 +00:00
autostart : autostart ,
2016-09-05 13:06:24 +00:00
pluginsData : arr
2017-10-11 08:45:42 +00:00
} ;
2017-09-13 11:35:20 +00:00
}
2016-09-05 13:06:24 +00:00
} ,
2016-11-16 09:38:16 +00:00
updatePluginsList : function ( plugins , uiCustomize ) {
2016-05-19 10:59:38 +00:00
var pluginStore = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ,
isEdit = this . appOptions . isEdit ;
2016-11-16 09:38:16 +00:00
if ( plugins ) {
2018-11-02 08:37:10 +00:00
var arr = [ ] , arrUI = [ ] ,
lang = this . appOptions . lang . split ( /[\-\_]/ ) [ 0 ] ;
2016-05-19 09:46:21 +00:00
plugins . pluginsData . forEach ( function ( item ) {
2017-10-13 09:47:39 +00:00
if ( _ . find ( arr , function ( arritem ) {
return ( arritem . get ( 'baseUrl' ) == item . baseUrl || arritem . get ( 'guid' ) == item . guid ) ;
} ) || pluginStore . findWhere ( { baseUrl : item . baseUrl } ) || pluginStore . findWhere ( { guid : item . guid } ) )
return ;
2017-10-11 08:45:42 +00:00
2017-09-11 12:47:36 +00:00
var variationsArr = [ ] ,
pluginVisible = false ;
2017-09-04 14:20:46 +00:00
item . variations . forEach ( function ( itemVar ) {
2019-01-17 11:01:35 +00:00
var visible = ( isEdit || itemVar . isViewer && ( itemVar . isDisplayedInViewer !== false ) ) && _ . contains ( itemVar . EditorsSupport , 'word' ) && ! itemVar . isSystem ;
2017-09-11 12:47:36 +00:00
if ( visible ) pluginVisible = true ;
if ( item . isUICustomizer ) {
visible && arrUI . push ( item . baseUrl + itemVar . url ) ;
} else {
var model = new Common . Models . PluginVariation ( itemVar ) ;
2018-11-02 08:37:10 +00:00
var description = itemVar . description ;
if ( typeof itemVar . descriptionLocale == 'object' )
description = itemVar . descriptionLocale [ lang ] || itemVar . descriptionLocale [ 'en' ] || description || '' ;
2017-09-04 14:20:46 +00:00
2018-12-13 12:01:19 +00:00
_ . each ( itemVar . buttons , function ( b , index ) {
if ( typeof b . textLocale == 'object' )
b . text = b . textLocale [ lang ] || b . textLocale [ 'en' ] || b . text || '' ;
b . visible = ( isEdit || b . isViewer !== false ) ;
} ) ;
2017-09-11 12:47:36 +00:00
model . set ( {
2018-11-02 08:37:10 +00:00
description : description ,
2017-09-11 12:47:36 +00:00
index : variationsArr . length ,
2017-09-13 11:43:35 +00:00
url : itemVar . url ,
icons : itemVar . icons ,
2018-12-13 12:01:19 +00:00
buttons : itemVar . buttons ,
2017-09-11 12:47:36 +00:00
visible : visible
} ) ;
2017-09-04 14:20:46 +00:00
2017-09-11 12:47:36 +00:00
variationsArr . push ( model ) ;
2016-11-16 09:38:16 +00:00
}
2016-05-19 09:46:21 +00:00
} ) ;
2017-09-04 14:20:46 +00:00
2018-11-02 08:37:10 +00:00
if ( variationsArr . length > 0 && ! item . isUICustomizer ) {
var name = item . name ;
if ( typeof item . nameLocale == 'object' )
name = item . nameLocale [ lang ] || item . nameLocale [ 'en' ] || name || '' ;
2016-05-19 10:59:38 +00:00
arr . push ( new Common . Models . Plugin ( {
2018-11-02 08:37:10 +00:00
name : name ,
2016-05-19 10:59:38 +00:00
guid : item . guid ,
2016-05-24 08:48:59 +00:00
baseUrl : item . baseUrl ,
2016-05-19 10:59:38 +00:00
variations : variationsArr ,
2017-09-11 12:47:36 +00:00
currentVariation : 0 ,
2017-12-07 14:46:13 +00:00
visible : pluginVisible ,
groupName : ( item . group ) ? item . group . name : '' ,
groupRank : ( item . group ) ? item . group . rank : 0
2016-05-19 10:59:38 +00:00
} ) ) ;
2018-11-02 08:37:10 +00:00
}
2016-05-17 15:38:54 +00:00
} ) ;
2017-09-04 14:20:46 +00:00
if ( uiCustomize !== false ) // from ui customizer in editor config or desktop event
2016-11-16 09:38:16 +00:00
this . UICustomizePlugins = arrUI ;
2016-05-19 09:46:21 +00:00
2017-12-07 14:46:13 +00:00
if ( ! uiCustomize && pluginStore ) {
arr = pluginStore . models . concat ( arr ) ;
arr . sort ( function ( a , b ) {
var rank _a = a . get ( 'groupRank' ) ,
rank _b = b . get ( 'groupRank' ) ;
if ( rank _a < rank _b )
return ( rank _a == 0 ) ? 1 : - 1 ;
if ( rank _a > rank _b )
return ( rank _b == 0 ) ? - 1 : 1 ;
return 0 ;
} ) ;
pluginStore . reset ( arr ) ;
2017-09-05 09:47:52 +00:00
this . appOptions . canPlugins = ! pluginStore . isEmpty ( ) ;
2016-11-16 09:38:16 +00:00
}
} else if ( ! uiCustomize ) {
2016-05-19 09:46:21 +00:00
this . appOptions . canPlugins = false ;
2016-05-17 15:38:54 +00:00
}
2018-02-19 09:34:15 +00:00
if ( ! uiCustomize ) this . getApplication ( ) . getController ( 'LeftMenu' ) . enablePlugins ( ) ;
2016-10-21 14:09:58 +00:00
if ( this . appOptions . canPlugins ) {
2017-09-13 12:02:34 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.Plugins' ) . setMode ( this . appOptions ) . runAutoStartPlugins ( plugins . autostart ) ;
2016-10-21 14:09:58 +00:00
}
2016-05-17 15:38:54 +00:00
} ,
2017-12-07 12:02:19 +00:00
resetPluginsList : function ( ) {
this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) . reset ( ) ;
} ,
2016-03-11 00:48:53 +00:00
leavePageText : 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.' ,
defaultTitleText : 'ONLYOFFICE Document Editor' ,
criticalErrorTitle : 'Error' ,
notcriticalErrorTitle : 'Warning' ,
errorDefaultMessage : 'Error code: %1' ,
criticalErrorExtText : 'Press "Ok" to back to document list.' ,
openTitleText : 'Opening Document' ,
openTextText : 'Opening document...' ,
loadFontsTitleText : 'Loading Data' ,
loadFontsTextText : 'Loading data...' ,
loadImagesTitleText : 'Loading Images' ,
loadImagesTextText : 'Loading images...' ,
loadFontTitleText : 'Loading Data' ,
loadFontTextText : 'Loading data...' ,
loadImageTitleText : 'Loading Image' ,
loadImageTextText : 'Loading image...' ,
downloadTitleText : 'Downloading Document' ,
downloadTextText : 'Downloading document...' ,
printTitleText : 'Printing Document' ,
printTextText : 'Printing document...' ,
uploadImageTitleText : 'Uploading Image' ,
uploadImageTextText : 'Uploading image...' ,
savePreparingText : 'Preparing to save' ,
savePreparingTitle : 'Preparing to save. Please wait...' ,
uploadImageSizeMessage : 'Maximium image size limit exceeded.' ,
uploadImageExtMessage : 'Unknown image format.' ,
uploadImageFileCountMessage : 'No images uploaded.' ,
reloadButtonText : 'Reload Page' ,
unknownErrorText : 'Unknown error.' ,
convertationTimeoutText : 'Convertation timeout exceeded.' ,
downloadErrorText : 'Download failed.' ,
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
splitMaxRowsErrorText : 'The number of rows must be less than %1' ,
splitMaxColsErrorText : 'The number of columns must be less than %1' ,
splitDividerErrorText : 'The number of rows must be a divisor of %1' ,
requestEditFailedTitleText : 'Access denied' ,
requestEditFailedMessageText : 'Someone is editing this document right now. Please try again later.' ,
txtNeedSynchronize : 'You have an updates' ,
textLoadingDocument : 'Loading document' ,
warnBrowserZoom : 'Your browser\'s current zoom setting is not fully supported. Please reset to the default zoom by pressing Ctrl+0.' ,
warnBrowserIE9 : 'The application has low capabilities on IE9. Use IE10 or higher' ,
applyChangesTitleText : 'Loading Data' ,
applyChangesTextText : 'Loading data...' ,
errorKeyEncrypt : 'Unknown key descriptor' ,
errorKeyExpire : 'Key descriptor expired' ,
errorUsersExceed : 'Count of users was exceed' ,
errorCoAuthoringDisconnect : 'Server connection lost. You can\'t edit anymore.' ,
2018-04-26 10:27:08 +00:00
errorFilePassProtect : 'The file is password protected and cannot be opened.' ,
2016-03-11 00:48:53 +00:00
txtBasicShapes : 'Basic Shapes' ,
txtFiguredArrows : 'Figured Arrows' ,
txtMath : 'Math' ,
txtCharts : 'Charts' ,
txtStarsRibbons : 'Stars & Ribbons' ,
txtCallouts : 'Callouts' ,
txtButtons : 'Buttons' ,
txtRectangles : 'Rectangles' ,
txtLines : 'Lines' ,
txtEditingMode : 'Set editing mode...' ,
textAnonymous : 'Anonymous' ,
2016-07-04 14:41:11 +00:00
loadingDocumentTitleText : 'Loading document' ,
2016-03-11 00:48:53 +00:00
loadingDocumentTextText : 'Loading document...' ,
warnProcessRightsChange : 'You have been denied the right to edit the file.' ,
errorProcessSaveResult : 'Saving is failed.' ,
2016-11-16 10:35:26 +00:00
textCloseTip : 'Click to close the tip.' ,
2016-03-11 00:48:53 +00:00
textShape : 'Shape' ,
errorStockChart : 'Incorrect row order. To build a stock chart place the data on the sheet in the following order:<br> opening price, max price, min price, closing price.' ,
errorDataRange : 'Incorrect data range.' ,
errorDatabaseConnection : 'External error.<br>Database connection error. Please, contact support.' ,
titleUpdateVersion : 'Version changed' ,
errorUpdateVersion : 'The file version has been changed. The page will be reloaded.' ,
errorUserDrop : 'The file cannot be accessed right now.' ,
txtDiagramTitle : 'Chart Title' ,
txtXAxis : 'X Axis' ,
txtYAxis : 'Y Axis' ,
txtSeries : 'Seria' ,
errorMailMergeLoadFile : 'Loading failed' ,
mailMergeLoadFileText : 'Loading Data Source...' ,
mailMergeLoadFileTitle : 'Loading Data Source' ,
errorMailMergeSaveFile : 'Merge failed.' ,
downloadMergeText : 'Downloading...' ,
downloadMergeTitle : 'Downloading' ,
sendMergeTitle : 'Sending Merge' ,
sendMergeText : 'Sending Merge...' ,
txtArt : 'Your text here' ,
errorConnectToServer : ' The document could not be saved. Please check connection settings or contact your administrator.<br>When you click the \'OK\' button, you will be prompted to download the document.<br><br>' +
'Find more information about connecting Document Server <a href=\"https://api.onlyoffice.com/editors/callback\" target=\"_blank\">here</a>' ,
textTryUndoRedo : 'The Undo/Redo functions are disabled for the Fast co-editing mode.<br>Click the \'Strict mode\' button to switch to the Strict co-editing mode to edit the file without other users interference and send your changes only after you save them. You can switch between the co-editing modes using the editor Advanced settings.' ,
textStrict : 'Strict mode' ,
txtErrorLoadHistory : 'Loading history failed' ,
2016-06-23 06:45:41 +00:00
textBuyNow : 'Visit website' ,
2018-09-07 10:22:03 +00:00
textNoLicenseTitle : 'ONLYOFFICE connection limitation' ,
2016-07-25 07:56:39 +00:00
textContactUs : 'Contact sales' ,
2016-10-12 13:32:48 +00:00
errorViewerDisconnect : 'Connection is lost. You can still view the document,<br>but will not be able to download or print until the connection is restored.' ,
2016-08-29 11:46:15 +00:00
warnLicenseExp : 'Your license has expired.<br>Please update your license and refresh the page.' ,
2016-09-13 06:40:44 +00:00
titleLicenseExp : 'License expired' ,
openErrorText : 'An error has occurred while opening the file' ,
2016-11-28 11:52:03 +00:00
saveErrorText : 'An error has occurred while saving the file' ,
errorToken : 'The document security token is not correctly formed.<br>Please contact your Document Server administrator.' ,
errorTokenExpire : 'The document security token has expired.<br>Please contact your Document Server administrator.' ,
errorSessionAbsolute : 'The document editing session has expired. Please reload the page.' ,
errorSessionIdle : 'The document has not been edited for quite a long time. Please reload the page.' ,
errorSessionToken : 'The connection to the server has been interrupted. Please reload the page.' ,
2017-04-11 11:37:45 +00:00
errorAccessDeny : 'You are trying to perform an action you do not have rights for.<br>Please contact your Document Server administrator.' ,
titleServerVersion : 'Editor updated' ,
2017-04-11 13:40:01 +00:00
errorServerVersion : 'The editor version has been updated. The page will be reloaded to apply the changes.' ,
2017-06-27 10:38:19 +00:00
textChangesSaved : 'All changes saved' ,
2017-06-23 13:46:10 +00:00
errorBadImageUrl : 'Image url is incorrect' ,
txtStyle _Normal : 'Normal' ,
txtStyle _No _Spacing : 'No Spacing' ,
txtStyle _Heading _1 : 'Heading 1' ,
txtStyle _Heading _2 : 'Heading 2' ,
txtStyle _Heading _3 : 'Heading 3' ,
txtStyle _Heading _4 : 'Heading 4' ,
txtStyle _Heading _5 : 'Heading 5' ,
txtStyle _Heading _6 : 'Heading 6' ,
txtStyle _Heading _7 : 'Heading 7' ,
txtStyle _Heading _8 : 'Heading 8' ,
txtStyle _Heading _9 : 'Heading 9' ,
txtStyle _Title : 'Title' ,
txtStyle _Subtitle : 'Subtitle' ,
txtStyle _Quote : 'Quote' ,
txtStyle _Intense _Quote : 'Intense Quote' ,
2017-06-28 08:42:58 +00:00
txtStyle _List _Paragraph : 'List Paragraph' ,
2018-03-07 11:54:22 +00:00
txtStyle _footnote _text : 'Footnote Text' ,
2017-06-28 08:42:58 +00:00
saveTextText : 'Saving document...' ,
2017-11-22 12:20:51 +00:00
saveTitleText : 'Saving Document' ,
2017-10-26 13:05:05 +00:00
txtBookmarkError : "Error! Bookmark not defined." ,
txtAbove : "above" ,
txtBelow : "below" ,
txtOnPage : "on page " ,
txtHeader : "Header" ,
txtFooter : "Footer" ,
txtSection : " -Section " ,
txtFirstPage : "First Page " ,
txtEvenPage : "Even Page " ,
txtOddPage : "Odd Page " ,
2017-11-09 09:03:17 +00:00
txtSameAsPrev : "Same as Previous" ,
2017-12-11 10:24:21 +00:00
txtCurrentDocument : "Current Document" ,
2018-01-26 12:39:21 +00:00
txtNoTableOfContents : "No table of contents entries found." ,
2018-03-12 16:48:34 +00:00
txtTableOfContents : "Table of Contents" ,
2018-05-28 10:00:03 +00:00
errorForceSave : "An error occurred while saving the file. Please use the 'Download as' option to save the file to your computer hard drive or try again later." ,
warnNoLicense : 'This version of ONLYOFFICE Editors has certain limitations for concurrent connections to the document server.<br>If you need more please consider purchasing a commercial license.' ,
warnNoLicenseUsers : 'This version of ONLYOFFICE Editors has certain limitations for concurrent users.<br>If you need more please consider purchasing a commercial license.' ,
warnLicenseExceeded : 'The number of concurrent connections to the document server has been exceeded and the document will be opened for viewing only.<br>Please contact your administrator for more information.' ,
2018-06-28 10:16:35 +00:00
warnLicenseUsersExceeded : 'The number of concurrent users has been exceeded and the document will be opened for viewing only.<br>Please contact your administrator for more information.' ,
2018-09-07 10:22:03 +00:00
errorDataEncrypted : 'Encrypted changes have been received, they cannot be deciphered.' ,
textClose : 'Close' ,
textPaidFeature : 'Paid feature' ,
2018-10-30 10:08:21 +00:00
scriptLoadError : 'The connection is too slow, some of the components could not be loaded. Please reload the page.' ,
2018-10-25 13:19:29 +00:00
errorEditingSaveas : 'An error occurred during the work with the document.<br>Use the \'Save as...\' option to save the file backup copy to your computer hard drive.' ,
2019-02-08 12:08:19 +00:00
errorEditingDownloadas : 'An error occurred during the work with the document.<br>Use the \'Download as...\' option to save the file backup copy to your computer hard drive.' ,
txtShape _textRect : 'Text Box' ,
txtShape _rect : 'Rectangle' ,
txtShape _ellipse : 'Ellipse' ,
txtShape _triangle : 'Triangle' ,
txtShape _rtTriangle : 'Right Triangle' ,
txtShape _parallelogram : 'Parallelogram' ,
txtShape _trapezoid : 'Trapezoid' ,
txtShape _diamond : 'Diamond' ,
txtShape _pentagon : 'Pentagon' ,
txtShape _hexagon : 'Hexagon' ,
txtShape _heptagon : 'Heptagon' ,
txtShape _octagon : 'Octagon' ,
txtShape _decagon : 'Decagon' ,
txtShape _dodecagon : 'Dodecagon' ,
txtShape _pie : 'Pie' ,
txtShape _chord : 'Chord' ,
txtShape _teardrop : 'Teardrop' ,
txtShape _frame : 'Frame' ,
txtShape _halfFrame : 'Half Frame' ,
txtShape _corner : 'Corner' ,
txtShape _diagStripe : 'Diagonal Stripe' ,
txtShape _plus : 'Plus' ,
txtShape _plaque : 'Sign' ,
txtShape _can : 'Can' ,
txtShape _cube : 'Cube' ,
txtShape _bevel : 'Bevel' ,
txtShape _donut : 'Donut' ,
txtShape _noSmoking : '"No" Symbol' ,
txtShape _blockArc : 'Block Arc' ,
txtShape _foldedCorner : 'Folded Corner' ,
txtShape _smileyFace : 'Smiley Face' ,
txtShape _heart : 'Heart' ,
txtShape _lightningBolt : 'Lightning Bolt' ,
txtShape _sun : 'Sun' ,
txtShape _moon : 'Moon' ,
txtShape _cloud : 'Cloud' ,
txtShape _arc : 'Arc' ,
txtShape _bracePair : 'Double Brace' ,
txtShape _leftBracket : 'Left Bracket' ,
txtShape _rightBracket : 'Right Bracket' ,
txtShape _leftBrace : 'Left Brace' ,
txtShape _rightBrace : 'Right Brace' ,
txtShape _rightArrow : 'Right Arrow' ,
txtShape _leftArrow : 'Left Arrow' ,
txtShape _upArrow : 'Up Arrow' ,
txtShape _downArrow : 'Down Arrow' ,
txtShape _leftRightArrow : 'Left Right Arrow' ,
txtShape _upDownArrow : 'Up Down Arrow' ,
txtShape _quadArrow : 'Quad Arrow' ,
txtShape _leftRightUpArrow : 'Left Right Up Arrow' ,
txtShape _bentArrow : 'Bent Arrow' ,
txtShape _uturnArrow : 'U-Turn Arrow' ,
txtShape _leftUpArrow : 'Left Up Arrow' ,
txtShape _bentUpArrow : 'Bent Up Arrow' ,
txtShape _curvedRightArrow : 'Curved Right Arrow' ,
txtShape _curvedLeftArrow : 'Curved Left Arrow' ,
txtShape _curvedUpArrow : 'Curved Up Arrow' ,
txtShape _curvedDownArrow : 'Curved Down Arrow' ,
txtShape _stripedRightArrow : 'Striped Right Arrow' ,
txtShape _notchedRightArrow : 'Notched Right Arrow' ,
txtShape _homePlate : 'Pentagon' ,
txtShape _chevron : 'Chevron' ,
txtShape _rightArrowCallout : 'Right Arrow Callout' ,
txtShape _downArrowCallout : 'Down Arrow Callout' ,
txtShape _leftArrowCallout : 'Left Arrow Callout' ,
txtShape _upArrowCallout : 'Up Arrow Callout' ,
txtShape _leftRightArrowCallout : 'Left Right Arrow Callout' ,
txtShape _quadArrowCallout : 'Quad Arrow Callout' ,
txtShape _circularArrow : 'Circular Arrow' ,
txtShape _mathPlus : 'Plus' ,
txtShape _mathMinus : 'Minus' ,
txtShape _mathMultiply : 'Multiply' ,
txtShape _mathDivide : 'Division' ,
txtShape _mathEqual : 'Equal' ,
txtShape _mathNotEqual : 'Not Equal' ,
txtShape _flowChartProcess : 'Flowchart: Process' ,
txtShape _flowChartAlternateProcess : 'Flowchart: Alternate Process' ,
txtShape _flowChartDecision : 'Flowchart: Decision' ,
txtShape _flowChartInputOutput : 'Flowchart: Data' ,
txtShape _flowChartPredefinedProcess : 'Flowchart: Predefined Process' ,
txtShape _flowChartInternalStorage : 'Flowchart: Internal Storage' ,
txtShape _flowChartDocument : 'Flowchart: Document' ,
txtShape _flowChartMultidocument : 'Flowchart: Multidocument ' ,
txtShape _flowChartTerminator : 'Flowchart: Terminator' ,
txtShape _flowChartPreparation : 'Flowchart: Preparation' ,
txtShape _flowChartManualInput : 'Flowchart: Manual Input' ,
txtShape _flowChartManualOperation : 'Flowchart: Manual Operation' ,
txtShape _flowChartConnector : 'Flowchart: Connector' ,
txtShape _flowChartOffpageConnector : 'Flowchart: Off-page Connector' ,
txtShape _flowChartPunchedCard : 'Flowchart: Card' ,
txtShape _flowChartPunchedTape : 'Flowchart: Punched Tape' ,
txtShape _flowChartSummingJunction : 'Flowchart: Summing Junction' ,
txtShape _flowChartOr : 'Flowchart: Or' ,
txtShape _flowChartCollate : 'Flowchart: Collate' ,
txtShape _flowChartSort : 'Flowchart: Sort' ,
txtShape _flowChartExtract : 'Flowchart: Extract' ,
txtShape _flowChartMerge : 'Flowchart: Merge' ,
txtShape _flowChartOnlineStorage : 'Flowchart: Stored Data' ,
txtShape _flowChartDelay : 'Flowchart: Delay' ,
txtShape _flowChartMagneticTape : 'Flowchart: Sequential Access Storage' ,
txtShape _flowChartMagneticDisk : 'Flowchart: Magnetic Disk' ,
txtShape _flowChartMagneticDrum : 'Flowchart: Direct Access Storage' ,
txtShape _flowChartDisplay : 'Flowchart: Display' ,
txtShape _irregularSeal1 : 'Explosion 1' ,
txtShape _irregularSeal2 : 'Explosion 2' ,
txtShape _star4 : '4-Point Star' ,
txtShape _star5 : '5-Point Star' ,
txtShape _star6 : '6-Point Star' ,
txtShape _star7 : '7-Point Star' ,
txtShape _star8 : '8-Point Star' ,
txtShape _star10 : '10-Point Star' ,
txtShape _star12 : '12-Point Star' ,
txtShape _star16 : '16-Point Star' ,
txtShape _star24 : '24-Point Star' ,
txtShape _star32 : '32-Point Star' ,
txtShape _ribbon2 : 'Up Ribbon' ,
txtShape _ribbon : 'Down Ribbon' ,
txtShape _ellipseRibbon2 : 'Curved Up Ribbon' ,
txtShape _ellipseRibbon : 'Curved Down Ribbon' ,
txtShape _verticalScroll : 'Vertical Scroll' ,
txtShape _horizontalScroll : 'Horizontal Scroll' ,
txtShape _wave : 'Wave' ,
txtShape _doubleWave : 'Double Wave' ,
txtShape _wedgeRectCallout : 'Rectangular Callout' ,
txtShape _wedgeRoundRectCallout : 'Rounded Rectangular Callout' ,
txtShape _wedgeEllipseCallout : 'Oval Callout' ,
txtShape _cloudCallout : 'Cloud Callout' ,
txtShape _borderCallout1 : 'Line Callout 1' ,
txtShape _borderCallout2 : 'Line Callout 2' ,
txtShape _borderCallout3 : 'Line Callout 3' ,
txtShape _accentCallout1 : 'Line Callout 1 (Accent Bar)' ,
txtShape _accentCallout2 : 'Line Callout 2 (Accent Bar)' ,
txtShape _accentCallout3 : 'Line Callout 3 (Accent Bar)' ,
txtShape _callout1 : 'Line Callout 1 (No Border)' ,
txtShape _callout2 : 'Line Callout 2 (No Border)' ,
txtShape _callout3 : 'Line Callout 3 (No Border)' ,
txtShape _accentBorderCallout1 : 'Line Callout 1 (Border and Accent Bar)' ,
txtShape _accentBorderCallout2 : 'Line Callout 2 (Border and Accent Bar)' ,
txtShape _accentBorderCallout3 : 'Line Callout 3 (Border and Accent Bar)' ,
txtShape _actionButtonBackPrevious : 'Back or Previous Button' ,
txtShape _actionButtonForwardNext : 'Forward or Next Button' ,
txtShape _actionButtonBeginning : 'Beginning Button' ,
txtShape _actionButtonEnd : 'End Button' ,
txtShape _actionButtonHome : 'Home Button' ,
txtShape _actionButtonInformation : 'Information Button' ,
txtShape _actionButtonReturn : 'Return Button' ,
txtShape _actionButtonMovie : 'Movie Button' ,
txtShape _actionButtonDocument : 'Document Button' ,
txtShape _actionButtonSound : 'Sound Button' ,
txtShape _actionButtonHelp : 'Help Button' ,
txtShape _actionButtonBlank : 'Blank Button' ,
txtShape _roundRect : 'Round Corner Rectangle' ,
txtShape _snip1Rect : 'Snip Single Corner Rectangle' ,
txtShape _snip2SameRect : 'Snip Same Side Corner Rectangle' ,
txtShape _snip2DiagRect : 'Snip Diagonal Corner Rectangle' ,
txtShape _snipRoundRect : 'Snip and Round Single Corner Rectangle' ,
txtShape _round1Rect : 'Round Single Corner Rectangle' ,
txtShape _round2SameRect : 'Round Same Side Corner Rectangle' ,
txtShape _round2DiagRect : 'Round Diagonal Corner Rectangle' ,
txtShape _line : 'Line' ,
txtShape _lineWithArrow : 'Arrow' ,
txtShape _lineWithTwoArrows : 'Double Arrow' ,
txtShape _bentConnector5 : 'Elbow Connector' ,
txtShape _bentConnector5WithArrow : 'Elbow Arrow Connector' ,
txtShape _bentConnector5WithTwoArrows : 'Elbow Double-Arrow Connector' ,
txtShape _curvedConnector3 : 'Curved Connector' ,
txtShape _curvedConnector3WithArrow : 'Curved Arrow Connector' ,
txtShape _curvedConnector3WithTwoArrows : 'Curved Double-Arrow Connector' ,
txtShape _spline : 'Curve' ,
txtShape _polyline1 : 'Scribble' ,
2019-03-06 08:16:21 +00:00
txtShape _polyline2 : 'Freeform' ,
txtSyntaxError : 'Syntax Error' ,
txtMissOperator : 'Missing Operator' ,
txtMissArg : 'Missing Argument' ,
txtTooLarge : 'Number Too Large To Format' ,
txtZeroDivide : 'Zero Divide' ,
txtNotInTable : 'Is Not In Table' ,
txtIndTooLarge : 'Index Too Large' ,
txtFormulaNotInTable : 'The Formula Not In Table' ,
txtTableInd : 'Table Index Cannot be Zero' ,
txtUndefBookmark : 'Undefined Bookmark' ,
2019-03-06 10:04:14 +00:00
txtEndOfFormula : 'Unexpected End of Formula' ,
2019-03-15 10:30:01 +00:00
errorEmailClient : 'No email client could be found' ,
textCustomLoader : 'Please note that according to the terms of the license you are not entitled to change the loader.<br>Please contact our Sales Department to get a quote.'
2016-03-11 00:48:53 +00:00
}
} ) ( ) , DE . Controllers . Main || { } ) )
} ) ;