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-11-18 16:21:25 +00:00
* /
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
/ * *
* Main . js
2016-12-19 08:42:37 +00:00
* Spreadsheet Editor
2016-11-18 16:21:25 +00:00
*
* Created by Maxim Kadushkin on 11 / 15 / 16
2018-03-01 12:16:38 +00:00
* Copyright ( c ) 2018 Ascensio System SIA . All rights reserved .
2016-11-18 16:21:25 +00:00
*
* /
define ( [
'core' ,
2016-12-19 08:42:37 +00:00
'jquery' ,
'underscore' ,
'backbone' ,
2016-11-18 16:21:25 +00:00
'irregularstack' ,
'common/main/lib/util/LocalStorage'
, 'common/main/lib/util/LanguageInfo'
2016-12-19 08:42:37 +00:00
] , function ( core , $ , _ , Backbone ) {
2016-11-18 16:21:25 +00:00
'use strict' ;
SSE . Controllers . Main = Backbone . Controller . extend ( _ . extend ( ( function ( ) {
var ApplyEditRights = - 255 ;
var LoadingDocument = - 256 ;
Common . localStorage . setId ( 'table' ) ;
Common . localStorage . setKeysFilter ( 'sse-,asc.table' ) ;
Common . localStorage . sync ( ) ;
return {
models : [ ] ,
collections : [ ] ,
views : [ ] ,
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
initialize : function ( ) {
//
} ,
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
onLaunch : function ( ) {
var me = this ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
me . 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 ; }
} ) ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
this . _state = {
isDisconnected : false ,
usersCount : 1 ,
fastCoauth : true ,
lostEditingRights : false ,
2018-05-28 10:00:03 +00:00
licenseType : false
2016-11-18 16:21:25 +00:00
} ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
// Initialize viewport
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
// if (!Common.Utils.isBrowserSupported()){
// Common.Utils.showBrowserRestriction();
// Common.Gateway.reportError(undefined, this.unsupportedBrowserErrorText);
// return;
// }
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
// Initialize api
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
// window["flat_desine"] = true;
2016-03-11 00:48:53 +00:00
2017-06-23 13:52:12 +00:00
var styleNames = [ 'Normal' , 'Neutral' , 'Bad' , 'Good' , 'Input' , 'Output' , 'Calculation' , 'Check Cell' , 'Explanatory Text' , 'Note' , 'Linked Cell' , 'Warning Text' ,
'Heading 1' , 'Heading 2' , 'Heading 3' , 'Heading 4' , 'Title' , 'Total' , 'Currency' , 'Percent' , 'Comma' ] ,
translate = {
2017-06-23 13:43:21 +00:00
'Series' : me . txtSeries ,
'Diagram Title' : me . txtDiagramTitle ,
'X Axis' : me . txtXAxis ,
'Y Axis' : me . txtYAxis ,
'Your text here' : me . txtArt
2017-06-23 13:52:12 +00:00
} ;
styleNames . forEach ( function ( item ) {
translate [ item ] = me [ 'txtStyle_' + item . replace ( / /g , '_' ) ] || item ;
} ) ;
translate [ 'Currency [0]' ] = me . txtStyle _Currency + ' [0]' ;
translate [ 'Comma [0]' ] = me . txtStyle _Comma + ' [0]' ;
for ( var i = 1 ; i < 7 ; i ++ ) {
translate [ 'Accent' + i ] = me . txtAccent + i ;
translate [ '20% - Accent' + i ] = '20% - ' + me . txtAccent + i ;
translate [ '40% - Accent' + i ] = '40% - ' + me . txtAccent + i ;
translate [ '60% - Accent' + i ] = '60% - ' + me . txtAccent + i ;
}
me . api = new Asc . spreadsheet _api ( {
'id-view' : 'editor_sdk' ,
'id-input' : 'ce-cell-content'
, 'mobile' : true ,
'translate' : translate
2016-11-18 16:21:25 +00:00
} ) ;
2016-03-11 00:48:53 +00:00
2019-07-22 14:09:53 +00:00
2017-01-23 14:38:53 +00:00
// Localization uiApp params
uiApp . params . modalButtonOk = me . textOK ;
uiApp . params . modalButtonCancel = me . textCancel ;
uiApp . params . modalPreloaderTitle = me . textPreloader ;
uiApp . params . modalUsernamePlaceholder = me . textUsername ;
uiApp . params . modalPasswordPlaceholder = me . textPassword ;
uiApp . params . smartSelectBackText = me . textBack ;
uiApp . params . smartSelectPopupCloseText = me . textClose ;
uiApp . params . smartSelectPickerCloseText = me . textDone ;
uiApp . params . notificationCloseButtonText = me . textClose ;
2016-11-18 16:21:25 +00:00
if ( me . api ) {
var value = Common . localStorage . getItem ( "sse-settings-fontrender" ) ;
if ( value === null ) value = window . devicePixelRatio > 1 ? '1' : '3' ;
me . api . asc _setFontRenderingMode ( parseInt ( value ) ) ;
Common . Utils . Metric . setCurrentMetric ( 1 ) ; //pt
me . api . asc _registerCallback ( 'asc_onError' , _ . bind ( me . onError , me ) ) ;
me . api . asc _registerCallback ( 'asc_onOpenDocumentProgress' , _ . bind ( me . onOpenDocument , me ) ) ;
me . api . asc _registerCallback ( 'asc_onAdvancedOptions' , _ . bind ( me . onAdvancedOptions , me ) ) ;
me . api . asc _registerCallback ( 'asc_onDocumentUpdateVersion' , _ . bind ( me . onUpdateVersion , me ) ) ;
2017-04-11 11:05:56 +00:00
me . api . asc _registerCallback ( 'asc_onServerVersion' , _ . bind ( me . onServerVersion , me ) ) ;
2016-11-18 16:21:25 +00:00
me . api . asc _registerCallback ( 'asc_onPrintUrl' , _ . bind ( me . onPrintUrl , me ) ) ;
me . api . asc _registerCallback ( 'asc_onDocumentName' , _ . bind ( me . onDocumentName , me ) ) ;
me . api . asc _registerCallback ( 'asc_onEndAction' , _ . bind ( me . onLongActionEnd , me ) ) ;
/**/
// this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(this.onCoAuthoringDisconnect, this));
// this.api.asc_registerCallback('asc_onPrintUrl', _.bind(this.onPrintUrl, this));
// this.api.asc_registerCallback('asc_onMeta', _.bind(this.onMeta, this));
/**/
Common . NotificationCenter . on ( 'api:disconnect' , _ . bind ( me . onCoAuthoringDisconnect , me ) ) ;
Common . NotificationCenter . on ( 'goback' , _ . bind ( me . goBack , me ) ) ;
2019-07-30 11:44:59 +00:00
Common . NotificationCenter . on ( 'download:advanced' , _ . bind ( me . onAdvancedOptions , me ) ) ;
2016-11-18 16:21:25 +00:00
// Initialize descendants
_ . each ( me . getApplication ( ) . controllers , function ( controller ) {
if ( controller && _ . isFunction ( controller . setApi ) ) {
controller . setApi ( me . api ) ;
}
} ) ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
// Initialize api gateway
me . editorConfig = { } ;
me . appOptions = { } ;
me . plugins = undefined ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
Common . Gateway . on ( 'init' , _ . bind ( me . loadConfig , me ) ) ;
Common . Gateway . on ( 'showmessage' , _ . bind ( me . onExternalMessage , me ) ) ;
Common . Gateway . on ( 'opendocument' , _ . bind ( me . loadDocument , me ) ) ;
2017-09-20 11:32:18 +00:00
Common . Gateway . appReady ( ) ;
2018-06-25 08:17:31 +00:00
Common . Gateway . on ( 'internalcommand' , function ( data ) {
if ( data . command == 'hardBack' ) {
if ( $ ( '.modal-in' ) . length > 0 ) {
if ( ! $ ( me . loadMask ) . hasClass ( 'modal-in' ) )
uiApp . closeModal ( ) ;
Common . Gateway . internalMessage ( 'hardBack' , false ) ;
} else
Common . Gateway . internalMessage ( 'hardBack' , true ) ;
}
} ) ;
Common . Gateway . internalMessage ( 'listenHardBack' ) ;
2016-11-18 16:21:25 +00:00
}
2019-02-26 17:57:23 +00:00
2019-08-02 08:47:28 +00:00
me . defaultTitleText = '{{APP_TITLE_TEXT}}' ;
2020-07-14 09:46:15 +00:00
me . warnNoLicense = me . warnNoLicense . replace ( /%1/g , '{{COMPANY_NAME}}' ) ;
me . warnNoLicenseUsers = me . warnNoLicenseUsers . replace ( /%1/g , '{{COMPANY_NAME}}' ) ;
me . textNoLicenseTitle = me . textNoLicenseTitle . replace ( /%1/g , '{{COMPANY_NAME}}' ) ;
me . warnLicenseExceeded = me . warnLicenseExceeded . replace ( /%1/g , '{{COMPANY_NAME}}' ) ;
me . warnLicenseUsersExceeded = me . warnLicenseUsersExceeded . replace ( /%1/g , '{{COMPANY_NAME}}' ) ;
2016-11-18 16:21:25 +00:00
} ,
loadConfig : function ( data ) {
2016-12-19 08:42:37 +00:00
var me = this ;
me . editorConfig = $ . extend ( me . editorConfig , data . config ) ;
me . editorConfig . user =
me . appOptions . user = Common . Utils . fillUserInfo ( me . editorConfig . user , me . editorConfig . lang , me . textAnonymous ) ;
me . appOptions . isDesktopApp = me . editorConfig . targetApp == 'desktop' ;
me . appOptions . canCreateNew = ! _ . isEmpty ( me . editorConfig . createUrl ) && ! me . appOptions . isDesktopApp ;
2019-07-15 08:01:29 +00:00
me . appOptions . canOpenRecent = me . editorConfig . recent !== undefined && ! me . appOptions . isDesktopApp ;
2016-12-19 08:42:37 +00:00
me . appOptions . templates = me . editorConfig . templates ;
me . appOptions . recent = me . editorConfig . recent ;
me . appOptions . createUrl = me . editorConfig . createUrl ;
me . appOptions . lang = me . editorConfig . lang ;
me . appOptions . location = ( typeof ( me . editorConfig . location ) == 'string' ) ? me . editorConfig . location . toLowerCase ( ) : '' ;
2019-07-31 11:55:02 +00:00
me . appOptions . region = ( typeof ( me . editorConfig . region ) == 'string' ) ? this . editorConfig . region . toLowerCase ( ) : this . editorConfig . region ;
2016-12-19 08:42:37 +00:00
me . appOptions . sharingSettingsUrl = me . editorConfig . sharingSettingsUrl ;
me . appOptions . fileChoiceUrl = me . editorConfig . fileChoiceUrl ;
me . appOptions . mergeFolderUrl = me . editorConfig . mergeFolderUrl ;
me . appOptions . canAnalytics = false ;
2019-11-27 07:22:25 +00:00
me . appOptions . canRequestClose = me . editorConfig . canRequestClose ;
2016-12-19 08:42:37 +00:00
me . appOptions . customization = me . editorConfig . customization ;
2019-11-27 07:22:25 +00:00
me . appOptions . canBackToFolder = ( me . editorConfig . canBackToFolder !== false ) && ( typeof ( me . editorConfig . customization ) == 'object' ) && ( typeof ( me . editorConfig . customization . goback ) == 'object' )
&& ( ! _ . isEmpty ( me . editorConfig . customization . goback . url ) || me . editorConfig . customization . goback . requestClose && me . appOptions . canRequestClose ) ;
2019-07-15 08:01:29 +00:00
me . appOptions . canBack = me . appOptions . canBackToFolder === true ;
2016-12-19 08:42:37 +00:00
me . appOptions . canPlugins = false ;
me . plugins = me . editorConfig . plugins ;
2019-06-21 12:26:39 +00:00
var value = Common . localStorage . getItem ( "sse-settings-regional" ) ;
if ( value !== null )
this . api . asc _setLocale ( parseInt ( value ) ) ;
else {
2019-07-31 11:55:02 +00:00
value = me . appOptions . region ;
value = Common . util . LanguageInfo . getLanguages ( ) . hasOwnProperty ( value ) ? value : Common . util . LanguageInfo . getLocalLanguageCode ( value ) ;
if ( value !== null )
value = parseInt ( value ) ;
else
value = ( this . editorConfig . lang ) ? parseInt ( Common . util . LanguageInfo . getLocalLanguageCode ( me . editorConfig . lang ) ) : 0x0409 ;
this . api . asc _setLocale ( value ) ;
2019-06-21 12:26:39 +00:00
}
2016-12-19 08:42:37 +00:00
if ( me . appOptions . location == 'us' || me . appOptions . location == 'ca' )
2016-11-18 16:21:25 +00:00
Common . Utils . Metric . setDefaultMetric ( Common . Utils . Metric . c _MetricUnits . inch ) ;
2019-09-13 08:39:50 +00:00
if ( ! me . editorConfig . customization || ! ( me . editorConfig . customization . loaderName || me . editorConfig . customization . loaderLogo ) )
$ ( '#editor_sdk' ) . append ( '<div class="doc-placeholder">' + '<div class="columns"></div>' . repeat ( 2 ) + '</div>' ) ;
2020-06-01 14:55:54 +00:00
var value = Common . localStorage . getItem ( "sse-mobile-macros-mode" ) ;
if ( value === null ) {
value = this . editorConfig . customization ? this . editorConfig . customization . macrosMode : 'warn' ;
value = ( value == 'enable' ) ? 1 : ( value == 'disable' ? 2 : 0 ) ;
} else
value = parseInt ( value ) ;
Common . Utils . InternalSettings . set ( "sse-mobile-macros-mode" , value ) ;
2016-11-18 16:21:25 +00:00
} ,
loadDocument : function ( data ) {
this . appOptions . spreadsheet = data . doc ;
this . permissions = { } ;
var docInfo = { } ;
if ( data . doc ) {
this . permissions = $ . extend ( this . permissions , data . doc . permissions ) ;
2017-10-30 11:50:59 +00:00
var _permissions = $ . extend ( { } , data . doc . permissions ) ,
_user = new Asc . asc _CUserInfo ( ) ;
2016-11-18 16:21:25 +00:00
_user . put _Id ( this . appOptions . user . id ) ;
_user . put _FullName ( this . appOptions . user . fullname ) ;
docInfo = new Asc . asc _CDocInfo ( ) ;
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 ) ;
docInfo . put _Options ( data . doc . options ) ;
docInfo . put _UserInfo ( _user ) ;
docInfo . put _CallbackUrl ( this . editorConfig . callbackUrl ) ;
2016-11-24 13:56:12 +00:00
docInfo . put _Token ( data . doc . token ) ;
2017-10-30 11:50:59 +00:00
docInfo . put _Permissions ( _permissions ) ;
2020-05-08 08:58:31 +00:00
docInfo . put _EncryptedInfo ( this . editorConfig . encryptionKeys ) ;
2020-05-22 15:38:03 +00:00
var enable = ! this . editorConfig . customization || ( this . editorConfig . customization . macros !== false ) ;
docInfo . asc _putIsEnabledMacroses ( ! ! enable ) ;
enable = ! this . editorConfig . customization || ( this . editorConfig . customization . plugins !== false ) ;
docInfo . asc _putIsEnabledPlugins ( ! ! enable ) ;
2016-11-18 16:21:25 +00:00
}
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
this . api . asc _registerCallback ( 'asc_onGetEditorPermissions' , _ . bind ( this . onEditorPermissions , this ) ) ;
2017-11-23 09:16:04 +00:00
this . api . asc _registerCallback ( 'asc_onLicenseChanged' , _ . bind ( this . onLicenseChanged , this ) ) ;
2020-05-22 15:38:03 +00:00
this . api . asc _registerCallback ( 'asc_onRunAutostartMacroses' , _ . bind ( this . onRunAutostartMacroses , this ) ) ;
2016-11-18 16:21:25 +00:00
this . api . asc _setDocInfo ( docInfo ) ;
this . api . asc _getEditorPermissions ( this . editorConfig . licenseUrl , this . editorConfig . customerId ) ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
Common . SharedSettings . set ( 'document' , data . doc ) ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
if ( data . doc ) {
2016-12-19 08:42:37 +00:00
SSE . getController ( 'Toolbar' ) . setDocumentTitle ( data . doc . title ) ;
2019-07-30 09:05:48 +00:00
if ( data . doc . info ) {
data . doc . info . author && console . log ( "Obsolete: The 'author' parameter of the document 'info' section is deprecated. Please use 'owner' instead." ) ;
data . doc . info . created && console . log ( "Obsolete: The 'created' parameter of the document 'info' section is deprecated. Please use 'uploaded' instead." ) ;
}
2016-11-18 16:21:25 +00:00
}
} ,
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
setMode : function ( mode ) {
var me = this ;
2016-03-11 00:48:53 +00:00
2017-05-25 09:55:29 +00:00
Common . SharedSettings . set ( 'mode' , mode . isEdit ? 'edit' : 'view' ) ;
2016-03-11 00:48:53 +00:00
2016-11-18 16:21:25 +00:00
if ( me . api ) {
2017-05-25 09:55:29 +00:00
me . api . asc _enableKeyEvents ( mode . isEdit ) ;
me . api . asc _setViewMode ( ! mode . isEdit ) ;
2016-11-18 16:21:25 +00:00
}
} ,
onProcessSaveResult : function ( data ) {
this . api . asc _OnSaveEnd ( data . result ) ;
2016-12-19 08:42:37 +00:00
2016-11-18 16:21:25 +00:00
if ( data && data . result === false ) {
uiApp . alert (
_ . isEmpty ( data . message ) ? this . errorProcessSaveResult : data . message ,
this . criticalErrorTitle
) ;
}
} ,
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 ( ) ;
2018-05-23 11:43:30 +00:00
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
2016-11-18 16:21:25 +00:00
if ( ! old _rights ) {
uiApp . alert (
_ . isEmpty ( data . message ) ? this . warnProcessRightsChange : data . message ,
this . notcriticalErrorTitle ,
function ( ) {
me . _state . lostEditingRights = false ;
}
) ;
}
}
} ,
onDownloadAs : function ( ) {
2019-01-10 14:20:59 +00:00
if ( ! this . appOptions . canDownload ) {
Common . Gateway . reportError ( Asc . c _oAscError . ID . AccessDeny , this . errorAccessDeny ) ;
return ;
}
this . _state . isFromGatewayDownloadAs = true ;
2019-07-24 08:36:13 +00:00
this . api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( Asc . c _oAscFileType . XLSX , true ) ) ;
2016-11-18 16:21:25 +00:00
} ,
2019-01-10 13:20:27 +00:00
goBack : function ( current ) {
2019-11-27 07:22:25 +00:00
if ( this . appOptions . customization . goback . requestClose && this . appOptions . canRequestClose ) {
Common . Gateway . requestClose ( ) ;
2016-11-18 16:21:25 +00:00
} else {
2019-11-27 07:22:25 +00:00
var href = this . appOptions . customization . goback . url ;
if ( ! current && this . appOptions . customization . goback . blank !== false ) {
window . open ( href , "_blank" ) ;
} else {
parent . location . href = href ;
}
2016-11-18 16:21:25 +00:00
}
} ,
onLongActionBegin : function ( type , id ) {
var action = { id : id , type : type } ;
this . stackLongActions . push ( action ) ;
this . setLongActionView ( action ) ;
} ,
onLongActionEnd : function ( type , id ) {
var me = this ,
action = { id : id , type : type } ;
2016-12-19 08:42:37 +00:00
me . stackLongActions . pop ( action ) ;
2016-11-18 16:21:25 +00:00
2016-12-19 08:42:37 +00:00
me . updateWindowTitle ( true ) ;
2016-11-18 16:21:25 +00:00
if ( type === Asc . c _oAscAsyncActionType . BlockInteraction && id == Asc . c _oAscAsyncAction . Open ) {
Common . Gateway . internalMessage ( 'documentReady' , { } ) ;
2016-12-23 12:07:54 +00:00
Common . NotificationCenter . trigger ( 'document:ready' ) ;
2016-12-19 08:42:37 +00:00
me . onDocumentContentReady ( ) ;
2016-11-18 16:21:25 +00:00
}
2016-03-11 00:48:53 +00:00
2016-12-19 08:42:37 +00:00
action = me . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . Information } ) ;
2018-05-23 10:14:51 +00:00
action && me . setLongActionView ( action ) ;
2016-03-11 00:48:53 +00:00
2016-12-19 08:42:37 +00:00
action = me . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ;
2016-11-18 16:21:25 +00:00
if ( action ) {
2016-12-19 08:42:37 +00:00
me . setLongActionView ( action )
2016-11-18 16:21:25 +00:00
} else {
_ . delay ( function ( ) {
$ ( me . loadMask ) . hasClass ( 'modal-in' ) && uiApp . closeModal ( me . loadMask ) ;
2016-12-25 13:45:53 +00:00
} , 300 ) ;
2016-11-18 16:21:25 +00:00
}
2016-12-19 08:42:37 +00:00
if ( id == Asc . c _oAscAsyncAction [ 'Save' ] && ( ! me . _state . fastCoauth || me . _state . usersCount < 2 ) ) {
2016-11-18 16:21:25 +00:00
this . synchronizeChanges ( ) ;
}
} ,
setLongActionView : function ( action ) {
2016-12-25 13:45:53 +00:00
var me = this ,
title = '' ,
2016-12-19 08:42:37 +00:00
text = '' ;
2016-11-18 16:21:25 +00:00
switch ( action . id ) {
case Asc . c _oAscAsyncAction [ 'Open' ] :
2016-12-25 13:45:53 +00:00
title = me . openTitleText ;
text = me . openTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'Save' ] :
2017-04-11 11:05:56 +00:00
// clearTimeout(me._state.timerSave);
2016-12-25 13:45:53 +00:00
title = me . saveTitleText ;
text = me . saveTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'LoadDocumentFonts' ] :
2016-12-25 13:45:53 +00:00
title = me . loadFontsTitleText ;
text = me . loadFontsTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'LoadDocumentImages' ] :
2016-12-25 13:45:53 +00:00
title = me . loadImagesTitleText ;
text = me . loadImagesTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'LoadFont' ] :
2016-12-25 13:45:53 +00:00
title = me . loadFontTitleText ;
text = me . loadFontTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'LoadImage' ] :
2016-12-25 13:45:53 +00:00
title = me . loadImageTitleText ;
text = me . loadImageTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'DownloadAs' ] :
2016-12-25 13:45:53 +00:00
title = me . downloadTitleText ;
text = me . downloadTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'Print' ] :
2016-12-25 13:45:53 +00:00
title = me . printTitleText ;
text = me . printTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'UploadImage' ] :
2016-12-25 13:45:53 +00:00
title = me . uploadImageTitleText ;
text = me . uploadImageTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'ApplyChanges' ] :
2016-12-25 13:45:53 +00:00
title = me . applyChangesTitleText ;
text = me . applyChangesTextText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'PrepareToSave' ] :
2016-12-25 13:45:53 +00:00
title = me . savePreparingText ;
text = me . savePreparingTitle ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'MailMergeLoadFile' ] :
2016-12-25 13:45:53 +00:00
title = me . mailMergeLoadFileText ;
text = me . mailMergeLoadFileTitle ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'DownloadMerge' ] :
2016-12-25 13:45:53 +00:00
title = me . downloadMergeTitle ;
text = me . downloadMergeText ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscAsyncAction [ 'SendMailMerge' ] :
2016-12-25 13:45:53 +00:00
title = me . sendMergeTitle ;
text = me . sendMergeText ;
2016-11-18 16:21:25 +00:00
break ;
2019-05-08 11:52:35 +00:00
case Asc . c _oAscAsyncAction [ 'Waiting' ] :
title = me . waitText ;
text = me . waitText ;
break ;
2016-11-18 16:21:25 +00:00
case ApplyEditRights :
2016-12-25 13:45:53 +00:00
title = me . txtEditingMode ;
text = me . txtEditingMode ;
2016-11-18 16:21:25 +00:00
break ;
case LoadingDocument :
2016-12-25 13:45:53 +00:00
title = me . loadingDocumentTitleText ;
text = me . loadingDocumentTextText ;
2016-11-18 16:21:25 +00:00
break ;
2018-02-05 09:22:03 +00:00
default :
if ( typeof action . id == 'string' ) {
title = action . id ;
text = action . id ;
}
break ;
2016-11-18 16:21:25 +00:00
}
2016-12-25 13:45:53 +00:00
if ( action . type == Asc . c _oAscAsyncActionType . BlockInteraction ) {
if ( me . loadMask && $ ( me . loadMask ) . hasClass ( 'modal-in' ) ) {
$$ ( me . loadMask ) . find ( '.modal-title' ) . text ( title ) ;
2018-05-24 10:57:08 +00:00
} else if ( $$ ( '.modal.modal-in' ) . length < 1 ) {
2016-12-25 13:45:53 +00:00
me . loadMask = uiApp . showPreloader ( title ) ;
}
2016-11-18 16:21:25 +00:00
}
else {
2016-12-25 13:45:53 +00:00
// me.getApplication().getController('Statusbar').setStatusCaption(text);
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:21:25 +00:00
} ,
onDocumentContentReady : function ( ) {
if ( this . _isDocReady )
return ;
2017-09-08 10:41:04 +00:00
if ( this . _state . openDlg )
uiApp . closeModal ( this . _state . openDlg ) ;
2016-11-18 16:21:25 +00:00
var me = this ,
value ;
me . _isDocReady = true ;
var worksheetsCount = this . api . asc _getWorksheetsCount ( ) ;
var i = me . api . asc _getActiveWorksheetIndex ( ) ;
me . api . asc _showWorksheet ( i ) ;
me . api . asc _Resize ( ) ;
// me.api.asc_cleanSelection();
me . hidePreloader ( ) ;
2016-12-25 13:45:53 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +00:00
value = ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram ) ? 100 : Common . localStorage . getItem ( "sse-settings-zoom" ) ;
var zf = ( value !== null ) ? parseInt ( value ) / 100 : ( this . appOptions . customization && this . appOptions . customization . zoom ? parseInt ( this . appOptions . customization . zoom ) / 100 : 1 ) ;
this . api . asc _setZoom ( zf > 0 ? zf : 1 ) ;
2016-12-19 08:42:37 +00:00
/** coauthoring begin **/
2020-05-06 12:46:12 +00:00
this . isLiveCommenting = Common . localStorage . getBool ( "sse-mobile-settings-livecomment" , true ) ;
2019-07-18 14:32:15 +00:00
var resolved = Common . localStorage . getBool ( "sse-settings-resolvedcomment" , true ) ;
this . isLiveCommenting ? this . api . asc _showComments ( resolved ) : this . api . asc _hideComments ( ) ;
2016-11-18 16:21:25 +00:00
2016-12-19 08:42:37 +00:00
if ( this . appOptions . isEdit && this . appOptions . canLicense && ! this . appOptions . isOffline && this . appOptions . canCoAuthoring ) {
2019-04-24 10:06:38 +00:00
// Force ON fast co-authoring mode
me . _state . fastCoauth = true ;
2016-12-19 08:42:37 +00:00
} else
this . _state . fastCoauth = false ;
this . api . asc _SetFastCollaborative ( this . _state . fastCoauth ) ;
/** coauthoring end **/
2016-11-18 16:21:25 +00:00
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 ) ) ;
me . updateWindowTitle ( true ) ;
2016-12-19 08:42:37 +00:00
if ( me . appOptions . isEdit ) {
if ( me . appOptions . canAutosave ) {
value = Common . localStorage . getItem ( "sse-settings-autosave" ) ;
if ( value === null && me . appOptions . customization && me . appOptions . customization . autosave === false ) {
value = 0 ;
}
// value = (!me._state.fastCoauth && value!==null) ? parseInt(value) : (me.appOptions.canCoAuthoring ? 1 : 0);
value = 1 ; // FORCE AUTOSAVE
} else {
value = 0 ;
}
2016-12-23 11:31:28 +00:00
me . api . asc _setAutoSaveGap ( value ) ;
2016-11-18 16:21:25 +00:00
2016-12-19 08:42:37 +00:00
if ( me . needToUpdateVersion ) {
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
}
}
2016-11-18 16:21:25 +00:00
2016-12-19 08:42:37 +00:00
if ( me . appOptions . canAnalytics && false ) {
Common . component . Analytics . initialize ( 'UA-12442749-13' , 'Spreadsheet Editor' ) ;
}
2016-11-18 16:21:25 +00:00
Common . Gateway . on ( 'processsaveresult' , _ . bind ( me . onProcessSaveResult , me ) ) ;
Common . Gateway . on ( 'processrightschange' , _ . bind ( me . onProcessRightsChange , me ) ) ;
Common . Gateway . on ( 'downloadas' , _ . bind ( me . onDownloadAs , me ) ) ;
Common . Gateway . sendInfo ( {
2016-12-19 08:42:37 +00:00
mode : me . appOptions . isEdit ? 'edit' : 'view'
2016-03-11 00:48:53 +00:00
} ) ;
2017-11-23 09:16:04 +00:00
me . applyLicense ( ) ;
2016-12-19 08:42:37 +00:00
2017-11-23 09:16:04 +00:00
$ ( '.view-main' ) . on ( 'click' , function ( e ) {
uiApp . closeModal ( '.document-menu.modal-in' ) ;
2018-06-22 10:22:57 +00:00
} ) ;
2019-06-13 14:16:46 +00:00
//R1C1 reference style
2019-06-21 12:46:31 +00:00
value = Common . localStorage . getBool ( 'sse-settings-r1c1' , false ) ;
this . api . asc _setR1C1Mode ( value ) ;
2019-06-13 14:16:46 +00:00
2018-06-22 10:22:57 +00:00
$ ( document ) . on ( 'contextmenu' , _ . bind ( me . onContextMenu , me ) ) ;
2019-01-10 08:20:53 +00:00
Common . Gateway . documentReady ( ) ;
2019-07-22 14:09:53 +00:00
$ ( '.doc-placeholder' ) . remove ( ) ;
2017-11-23 09:16:04 +00:00
} ,
onLicenseChanged : function ( params ) {
if ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) return ;
var licType = params . asc _getLicenseType ( ) ;
2018-05-28 10:00:03 +00:00
if ( licType !== undefined && this . appOptions . canEdit && this . editorConfig . mode !== 'view' &&
2020-11-09 11:52:21 +00:00
( licType === Asc . c _oLicenseResult . Connections || licType === Asc . c _oLicenseResult . UsersCount || licType === Asc . c _oLicenseResult . ConnectionsOS || licType === Asc . c _oLicenseResult . UsersCountOS
2020-11-10 10:44:46 +00:00
|| ( licType === Asc . c _oLicenseResult . SuccessLimit || licType === Asc . c _oLicenseResult . ExpiredLimited ) && ( this . appOptions . trialMode & Asc . c _oLicenseMode . Limited ) !== 0 ) )
2018-05-28 10:00:03 +00:00
this . _state . licenseType = licType ;
2017-11-23 09:16:04 +00:00
2018-05-28 10:00:03 +00:00
if ( this . _isDocReady && this . _state . licenseType )
2017-11-23 09:16:04 +00:00
this . applyLicense ( ) ;
} ,
applyLicense : function ( ) {
var me = this ;
2020-02-10 16:26:27 +00:00
if ( this . editorConfig . mode !== 'view' && ! this . isSupportEditFeature ( ) ) {
var value = Common . localStorage . getItem ( "sse-opensource-warning" ) ;
value = ( value !== null ) ? parseInt ( value ) : 0 ;
var now = ( new Date ) . getTime ( ) ;
if ( now - value > 86400000 ) {
Common . localStorage . setItem ( "sse-opensource-warning" , now ) ;
uiApp . modal ( {
title : me . notcriticalErrorTitle ,
text : me . errorOpensource ,
buttons : [ { text : 'OK' } ]
} ) ;
}
SSE . getController ( 'Toolbar' ) . activateControls ( ) ;
return ;
}
2020-11-10 10:44:46 +00:00
if ( this . _state . licenseType ) {
2018-05-28 10:00:03 +00:00
var license = this . _state . licenseType ,
buttons = [ { text : 'OK' } ] ;
2020-11-09 11:52:21 +00:00
if ( ( this . appOptions . trialMode & Asc . c _oLicenseMode . Limited ) !== 0 ) {
license = ( license === Asc . c _oLicenseResult . ExpiredLimited ) ? this . warnLicenseLimitedNoAccess : this . warnLicenseLimitedRenewed ;
} else if ( license === Asc . c _oLicenseResult . Connections || license === Asc . c _oLicenseResult . UsersCount ) {
2018-05-28 10:00:03 +00:00
license = ( license === Asc . c _oLicenseResult . Connections ) ? this . warnLicenseExceeded : this . warnLicenseUsersExceeded ;
} else {
license = ( license === Asc . c _oLicenseResult . ConnectionsOS ) ? this . warnNoLicense : this . warnNoLicenseUsers ;
buttons = [ {
text : me . textBuyNow ,
bold : true ,
onClick : function ( ) {
2019-02-22 12:52:33 +00:00
window . open ( '{{PUBLISHER_URL}}' , "_blank" ) ;
2018-05-28 10:00:03 +00:00
}
} ,
{
text : me . textContactUs ,
onClick : function ( ) {
2019-02-22 12:52:33 +00:00
window . open ( 'mailto:{{SALES_EMAIL}}' , "_blank" ) ;
2018-05-28 10:00:03 +00:00
}
} ] ;
}
2020-11-10 10:44:46 +00:00
if ( this . _state . licenseType === Asc . c _oLicenseResult . SuccessLimit ) {
SSE . getController ( 'Toolbar' ) . activateControls ( ) ;
} else {
SSE . getController ( 'Toolbar' ) . activateViewControls ( ) ;
SSE . getController ( 'Toolbar' ) . deactivateEditControls ( ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
}
2017-11-23 09:16:04 +00:00
var value = Common . localStorage . getItem ( "sse-license-warning" ) ;
2016-12-19 08:42:37 +00:00
value = ( value !== null ) ? parseInt ( value ) : 0 ;
var now = ( new Date ) . getTime ( ) ;
if ( now - value > 86400000 ) {
Common . localStorage . setItem ( "sse-license-warning" , now ) ;
uiApp . modal ( {
title : me . textNoLicenseTitle ,
2018-05-28 10:00:03 +00:00
text : license ,
buttons : buttons
2016-12-19 08:42:37 +00:00
} ) ;
}
2019-03-15 10:30:01 +00:00
} else {
if ( ! me . appOptions . isDesktopApp && ! me . appOptions . canBrandingExt &&
me . editorConfig && me . editorConfig . customization && ( me . editorConfig . customization . loaderName || me . editorConfig . customization . loaderLogo ) ) {
uiApp . modal ( {
title : me . textPaidFeature ,
text : me . textCustomLoader ,
buttons : [ {
text : me . textContactUs ,
bold : true ,
onClick : function ( ) {
2019-06-10 08:56:27 +00:00
window . open ( 'mailto:{{SALES_EMAIL}}' , "_blank" ) ;
2019-03-15 10:30:01 +00:00
}
} ,
{ text : me . textClose } ]
} ) ;
}
2017-11-23 09:16:04 +00:00
SSE . getController ( 'Toolbar' ) . activateControls ( ) ;
2019-03-15 10:30:01 +00:00
}
2016-11-18 16:21:25 +00:00
} ,
onOpenDocument : function ( progress ) {
if ( this . loadMask ) {
var $title = $$ ( this . loadMask ) . find ( '.modal-title' ) ,
proc = ( progress . asc _getCurrentFont ( ) + progress . asc _getCurrentImage ( ) ) / ( progress . asc _getFontsCount ( ) + progress . asc _getImagesCount ( ) ) ;
$title . text ( this . textLoadingDocument + ': ' + Math . min ( Math . round ( proc * 100 ) , 100 ) + '%' ) ;
}
} ,
onEditorPermissions : function ( params ) {
var me = this ,
2016-12-19 08:42:37 +00:00
licType = params ? params . asc _getLicenseType ( ) : Asc . c _oLicenseResult . Error ;
if ( params && ! ( me . appOptions . isEditDiagram || me . appOptions . isEditMailMerge ) ) {
if ( Asc . c _oLicenseResult . Expired === licType ||
Asc . c _oLicenseResult . Error === licType ||
Asc . c _oLicenseResult . ExpiredTrial === licType ) {
uiApp . modal ( {
title : me . titleLicenseExp ,
text : me . warnLicenseExp
} ) ;
return ;
}
2017-04-11 11:05:56 +00:00
if ( me . onServerVersion ( params . asc _getBuildVersion ( ) ) ) return ;
2016-12-19 08:42:37 +00:00
if ( params . asc _getRights ( ) !== Asc . c _oRights . Edit ) {
me . permissions . edit = false ;
}
me . appOptions . canAutosave = true ;
me . appOptions . canAnalytics = params . asc _getIsAnalyticsEnable ( ) ;
me . appOptions . isOffline = me . api . asc _isOffline ( ) ;
2017-04-21 08:44:23 +00:00
me . appOptions . canLicense = ( licType === Asc . c _oLicenseResult . Success || licType === Asc . c _oLicenseResult . SuccessLimit ) ;
2016-12-19 08:42:37 +00:00
me . appOptions . isLightVersion = params . asc _getIsLight ( ) ;
/** coauthoring begin **/
me . appOptions . canCoAuthoring = ! me . appOptions . isLightVersion ;
/** coauthoring end **/
2020-04-14 16:28:37 +00:00
me . appOptions . canComments = me . appOptions . canLicense && ( me . permissions . comment === undefined ? me . appOptions . isEdit : me . permissions . comment ) && ( me . editorConfig . mode !== 'view' ) ;
me . appOptions . canComments = me . appOptions . canComments && ! ( ( typeof ( me . editorConfig . customization ) == 'object' ) && me . editorConfig . customization . comments === false ) ;
me . appOptions . canViewComments = me . appOptions . canComments || ! ( ( typeof ( me . editorConfig . customization ) == 'object' ) && me . editorConfig . customization . comments === false ) ;
me . appOptions . canEditComments = me . appOptions . isOffline || ! ( typeof ( me . editorConfig . customization ) == 'object' && me . editorConfig . customization . commentAuthorOnly ) ;
2016-12-19 08:42:37 +00:00
me . appOptions . canChat = me . appOptions . canLicense && ! me . appOptions . isOffline && ! ( ( typeof ( me . editorConfig . customization ) == 'object' ) && me . editorConfig . customization . chat === false ) ;
2020-11-09 11:52:21 +00:00
me . appOptions . trialMode = params . asc _getLicenseMode ( ) ;
2016-12-19 08:42:37 +00:00
2019-04-18 09:18:14 +00:00
me . appOptions . canBranding = params . asc _getCustomization ( ) ;
2016-12-19 08:42:37 +00:00
me . appOptions . canBrandingExt = params . asc _getCanBranding ( ) && ( typeof me . editorConfig . customization == 'object' ) ;
2020-08-05 13:36:35 +00:00
me . appOptions . canUseReviewPermissions = me . appOptions . canLicense && me . editorConfig . customization && me . editorConfig . customization . reviewPermissions && ( typeof ( me . editorConfig . customization . reviewPermissions ) == 'object' ) ;
Common . Utils . UserInfoParser . setParser ( me . appOptions . canUseReviewPermissions ) ;
2016-11-18 16:21:25 +00:00
}
me . appOptions . canRequestEditRights = me . editorConfig . canRequestEditRights ;
2016-12-19 08:42:37 +00:00
me . appOptions . canEdit = me . permissions . edit !== false && // can edit
2020-02-10 16:26:27 +00:00
( me . editorConfig . canRequestEditRights || me . editorConfig . mode !== 'view' ) && // if mode=="view" -> canRequestEditRights must be defined
me . isSupportEditFeature ( ) ;
me . appOptions . isEdit = ( me . appOptions . canLicense || me . appOptions . isEditDiagram || me . appOptions . isEditMailMerge ) && me . permissions . edit !== false && me . editorConfig . mode !== 'view' && me . isSupportEditFeature ( ) ;
2019-07-15 08:01:29 +00:00
me . appOptions . canDownload = ( me . permissions . download !== false ) ;
2016-12-19 08:42:37 +00:00
me . appOptions . canPrint = ( me . permissions . print !== false ) ;
2016-11-18 16:21:25 +00:00
me . applyModeCommonElements ( ) ;
me . applyModeEditorElements ( ) ;
2016-12-19 08:42:37 +00:00
me . api . asc _setViewMode ( ! me . appOptions . isEdit ) ;
2017-10-26 12:09:58 +00:00
me . api . asc _LoadDocument ( ) ;
2016-11-18 16:21:25 +00:00
if ( ! me . appOptions . isEdit ) {
me . hidePreloader ( ) ;
2016-12-19 08:42:37 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +00:00
}
2020-01-16 08:08:38 +00:00
if ( me . appOptions . canBrandingExt && ( me . editorConfig . customization && ( me . editorConfig . customization . loaderName || me . editorConfig . customization . loaderLogo ) ) ) {
$ ( '#editor-navbar #navbar-logo' ) . hide ( ) ;
$ ( '#editor-navbar' ) . removeClass ( 'logo-navbar' ) ;
2020-01-17 09:33:03 +00:00
$ ( '.page.editor' ) . removeClass ( 'with-logo' ) ;
2020-01-16 08:08:38 +00:00
}
2016-11-18 16:21:25 +00:00
} ,
applyModeCommonElements : function ( ) {
var me = this ;
window . editor _elements _prepared = true ;
_ . each ( me . getApplication ( ) . controllers , function ( controller ) {
if ( controller && _ . isFunction ( controller . setMode ) ) {
2017-05-25 09:55:29 +00:00
controller . setMode ( me . appOptions ) ;
2016-11-18 16:21:25 +00:00
}
} ) ;
2016-12-19 08:42:37 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram ) {
me . api . asc _registerCallback ( 'asc_onSendThemeColors' , _ . bind ( me . onSendThemeColors , me ) ) ;
2017-04-11 11:05:56 +00:00
me . api . asc _registerCallback ( 'asc_onDownloadUrl' , _ . bind ( me . onDownloadUrl , me ) ) ;
2016-12-19 08:42:37 +00:00
}
2019-06-07 07:29:43 +00:00
me . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_onParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
2016-11-18 16:21:25 +00:00
} ,
applyModeEditorElements : function ( ) {
if ( this . appOptions . isEdit ) {
var me = this ;
2016-12-19 08:42:37 +00:00
2019-12-16 11:02:22 +00:00
var value = Common . localStorage . getItem ( 'se-mobile-settings-unit' ) ;
2019-12-16 12:01:09 +00:00
value = ( value !== null ) ? parseInt ( value ) : ( me . appOptions . customization && me . appOptions . customization . unit ? Common . Utils . Metric . c _MetricUnits [ me . appOptions . customization . unit . toLocaleLowerCase ( ) ] : Common . Utils . Metric . getDefaultMetric ( ) ) ;
2019-12-16 11:02:22 +00:00
( value === undefined ) && ( value = Common . Utils . Metric . getDefaultMetric ( ) ) ;
Common . Utils . Metric . setCurrentMetric ( value ) ;
2016-11-18 16:21:25 +00:00
me . api . asc _registerCallback ( 'asc_onDocumentModifiedChanged' , _ . bind ( me . onDocumentModifiedChanged , me ) ) ;
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-12-19 08:42:37 +00:00
if ( me . appOptions . isEditDiagram )
me . api . asc _registerCallback ( 'asc_onSelectionChanged' , _ . bind ( me . onSelectionChanged , me ) ) ;
2016-11-18 16:21:25 +00:00
2016-12-25 13:45:53 +00:00
if ( me . stackLongActions . exist ( { id : ApplyEditRights , type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ) {
me . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , ApplyEditRights ) ;
2016-11-18 16:21:25 +00:00
} else if ( ! this . _isDocReady ) {
me . hidePreloader ( ) ;
2016-12-25 13:45:53 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +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 ( ) ;
uiApp . addNotification ( {
2019-02-26 17:57:23 +00:00
title : uiApp . params . modalTitle ,
2016-11-18 16:21:25 +00:00
message : [ msg . msg . charAt ( 0 ) . toUpperCase ( ) + msg . msg . substring ( 1 ) ]
} ) ;
2017-05-16 07:46:04 +00:00
Common . component . Analytics . trackEvent ( 'External Error' ) ;
2016-11-18 16:21:25 +00:00
}
} ,
onError : function ( id , level , errData ) {
2018-10-08 14:06:37 +00:00
if ( id == Asc . c _oAscError . ID . LoadingScriptError ) {
uiApp . addNotification ( {
title : this . criticalErrorTitle ,
message : this . scriptLoadError
} ) ;
return ;
}
2016-11-18 16:21:25 +00:00
this . hidePreloader ( ) ;
2016-12-25 13:45:53 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +00:00
var config = {
closable : false
} ;
2016-12-19 08:42:37 +00:00
switch ( id ) {
2016-11-18 16:21:25 +00:00
case Asc . c _oAscError . ID . Unknown :
config . msg = this . unknownErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationTimeout :
config . msg = this . convertationTimeoutText ;
break ;
case Asc . c _oAscError . ID . ConvertationOpenError :
config . msg = this . openErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationSaveError :
config . msg = this . saveErrorText ;
break ;
case Asc . c _oAscError . ID . DownloadError :
config . msg = this . downloadErrorText ;
break ;
case Asc . c _oAscError . ID . UplImageSize :
config . msg = this . uploadImageSizeMessage ;
break ;
case Asc . c _oAscError . ID . UplImageExt :
config . msg = this . uploadImageExtMessage ;
break ;
case Asc . c _oAscError . ID . UplImageFileCount :
config . msg = this . uploadImageFileCountMessage ;
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . PastInMergeAreaError :
config . msg = this . pastInMergeAreaError ;
break ;
case Asc . c _oAscError . ID . FrmlWrongCountParentheses :
config . msg = this . errorWrongBracketsCount ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . FrmlWrongOperator :
config . msg = this . errorWrongOperator ;
config . closable = true ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . FrmlWrongMaxArgument :
config . msg = this . errorCountArgExceed ;
config . closable = true ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . FrmlWrongCountArgument :
config . msg = this . errorCountArg ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . FrmlWrongFunctionName :
config . msg = this . errorFormulaName ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . FrmlAnotherParsingError :
config . msg = this . errorFormulaParsing ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . FrmlWrongArgumentRange :
config . msg = this . errorArgsRange ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . UnexpectedGuid :
config . msg = this . errorUnexpectedGuid ;
break ;
case Asc . c _oAscError . ID . Database :
config . msg = this . errorDatabaseConnection ;
break ;
case Asc . c _oAscError . ID . FileRequest :
config . msg = this . errorFileRequest ;
break ;
case Asc . c _oAscError . ID . FileVKey :
config . msg = this . errorFileVKey ;
break ;
case Asc . c _oAscError . ID . StockChartError :
config . msg = this . errorStockChart ;
break ;
case Asc . c _oAscError . ID . DataRangeError :
config . msg = this . errorDataRange ;
break ;
2018-02-27 07:58:30 +00:00
case Asc . c _oAscError . ID . MaxDataPointsError :
config . msg = this . errorMaxPoints ;
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . FrmlOperandExpected :
config . msg = this . errorOperandExpected ;
2017-04-11 11:05:56 +00:00
config . closable = true ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . VKeyEncrypt :
2016-12-19 08:42:37 +00:00
config . msg = this . errorToken ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . KeyExpire :
2016-12-19 08:42:37 +00:00
config . msg = this . errorTokenExpire ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . UserCountExceed :
config . msg = this . errorUsersExceed ;
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . CannotMoveRange :
config . msg = this . errorMoveRange ;
break ;
case Asc . c _oAscError . ID . UplImageUrl :
config . msg = this . errorBadImageUrl ;
break ;
2016-11-18 16:21:25 +00:00
case Asc . c _oAscError . ID . CoAuthoringDisconnect :
2016-12-19 08:42:37 +00:00
config . msg = this . errorViewerDisconnect ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . ConvertationPassword :
config . msg = this . errorFilePassProtect ;
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . AutoFilterDataRangeError :
config . msg = this . errorAutoFilterDataRange ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . AutoFilterChangeFormatTableError :
config . msg = this . errorAutoFilterChangeFormatTable ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . AutoFilterChangeError :
config . msg = this . errorAutoFilterChange ;
break ;
case Asc . c _oAscError . ID . AutoFilterMoveToHiddenRangeError :
config . msg = this . errorAutoFilterHiddenRange ;
break ;
case Asc . c _oAscError . ID . CannotFillRange :
config . msg = this . errorFillRange ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . UserDrop :
if ( this . _state . lostEditingRights ) {
this . _state . lostEditingRights = false ;
return ;
}
this . _state . lostEditingRights = true ;
config . msg = this . errorUserDrop ;
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . InvalidReferenceOrName :
config . msg = this . errorInvalidRef ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . LockCreateDefName :
config . msg = this . errorCreateDefName ;
break ;
case Asc . c _oAscError . ID . PasteMaxRangeError :
config . msg = this . errorPasteMaxRange ;
break ;
case Asc . c _oAscError . ID . LockedAllError :
config . msg = this . errorLockedAll ;
2016-11-18 16:21:25 +00:00
break ;
case Asc . c _oAscError . ID . Warning :
2019-11-01 14:43:24 +00:00
config . msg = this . errorConnectToServer ;
2016-11-18 16:21:25 +00:00
break ;
2016-12-19 08:42:37 +00:00
case Asc . c _oAscError . ID . LockedWorksheetRename :
config . msg = this . errorLockedWorksheetRename ;
break ;
case Asc . c _oAscError . ID . OpenWarning :
config . msg = this . errorOpenWarning ;
break ;
case Asc . c _oAscError . ID . FrmlWrongReferences :
config . msg = this . errorFrmlWrongReferences ;
2017-04-11 11:05:56 +00:00
config . closable = true ;
2016-12-19 08:42:37 +00:00
break ;
case Asc . c _oAscError . ID . CopyMultiselectAreaError :
config . msg = this . errorCopyMultiselectArea ;
break ;
case Asc . c _oAscError . ID . PrintMaxPagesCount :
config . msg = this . errorPrintMaxPagesCount ;
break ;
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 ;
2018-06-28 10:16:35 +00:00
case Asc . c _oAscError . ID . DataEncrypted :
config . msg = this . errorDataEncrypted ;
break ;
2019-02-14 13:53:39 +00:00
case Asc . c _oAscError . ID . CannotChangeFormulaArray :
config . msg = this . errorChangeArray ;
break ;
2019-02-15 13:43:42 +00:00
case Asc . c _oAscError . ID . EditingError :
config . msg = this . errorEditingDownloadas ;
break ;
2019-02-19 13:33:15 +00:00
case Asc . c _oAscError . ID . MultiCellsInTablesFormulaArray :
config . msg = this . errorMultiCellFormula ;
break ;
2019-06-06 08:32:00 +00:00
case Asc . c _oAscError . ID . FrmlMaxTextLength :
config . msg = this . errorFrmlMaxTextLength ;
break ;
2019-08-28 14:29:39 +00:00
case Asc . c _oAscError . ID . ConvertationOpenLimitError :
config . msg = this . errorFileSizeExceed ;
break ;
2019-11-13 11:14:41 +00:00
case Asc . c _oAscError . ID . UpdateVersion :
config . msg = this . errorUpdateVersionOnDisconnect ;
break ;
2020-08-07 08:37:14 +00:00
case Asc . c _oAscError . ID . FrmlMaxLength :
config . msg = this . errorFrmlMaxLength ;
break ;
2020-08-12 07:50:46 +00:00
case Asc . c _oAscError . ID . FrmlMaxReference :
config . msg = this . errorFrmlMaxReference ;
break ;
2016-11-18 16:21:25 +00:00
default :
config . msg = this . errorDefaultMessage . replace ( '%1' , id ) ;
break ;
}
if ( level == Asc . c _oAscError . Level . Critical ) {
// report only critical errors
Common . Gateway . reportError ( id , config . msg ) ;
config . title = this . criticalErrorTitle ;
// config.iconCls = 'error';
2018-02-07 09:21:10 +00:00
if ( this . appOptions . canBackToFolder && ! this . appOptions . isDesktopApp ) {
2016-11-18 16:21:25 +00:00
config . msg += '</br></br>' + this . criticalErrorExtText ;
config . callback = function ( ) {
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-11-18 16:21:25 +00:00
}
else {
2017-10-07 09:20:39 +00:00
Common . Gateway . reportWarning ( id , config . msg ) ;
2016-11-18 16:21:25 +00:00
config . title = this . notcriticalErrorTitle ;
// config.iconCls = 'warn';
// config.buttons = ['ok'];
config . callback = _ . bind ( function ( btn ) {
if ( id == Asc . c _oAscError . ID . Warning && btn == 'ok' && ( this . appOptions . canDownload || this . appOptions . canDownloadOrigin ) ) {
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 ( ) ;
}
this . _state . lostEditingRights = false ;
} , this ) ;
}
// Common.UI.alert(config);
uiApp . modal ( {
title : config . title ,
text : config . msg ,
buttons : [
{
text : 'OK' ,
onClick : config . callback
}
]
2016-03-11 00:48:53 +00:00
} ) ;
2016-11-18 16:21:25 +00:00
Common . component . Analytics . trackEvent ( 'Internal Error' , id . toString ( ) ) ;
} ,
onCoAuthoringDisconnect : function ( ) {
this . _state . isDisconnected = true ;
} ,
updateWindowTitle : function ( force ) {
var isModified = this . api . asc _isDocumentModified ( ) ;
if ( this . _state . isDocModified !== isModified || force ) {
var title = this . defaultTitleText ;
if ( window . document . title != title )
window . document . title = title ;
2017-04-11 11:05:56 +00:00
Common . Gateway . setDocumentModified ( isModified ) ;
2016-11-18 16:21:25 +00:00
this . _state . isDocModified = isModified ;
}
} ,
onDocumentModifiedChanged : function ( ) {
var isModified = this . api . asc _isDocumentCanSave ( ) ;
if ( this . _state . isDocModified !== isModified ) {
Common . Gateway . setDocumentModified ( this . api . asc _isDocumentModified ( ) ) ;
}
this . updateWindowTitle ( ) ;
} ,
onDocumentCanSaveChanged : function ( isCanSave ) {
2016-12-19 08:42:37 +00:00
//
2016-11-18 16:21:25 +00:00
} ,
onBeforeUnload : function ( ) {
Common . localStorage . save ( ) ;
2016-12-19 08:42:37 +00:00
var isEdit = this . permissions . edit !== false && this . editorConfig . mode !== 'view' && this . editorConfig . mode !== 'editdiagram' ;
if ( isEdit && this . api . asc _isDocumentModified ( ) ) {
2016-11-18 16:21:25 +00:00
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 ( ) {
$ ( '#loading-mask' ) . hide ( ) . remove ( ) ;
} ,
onDownloadUrl : function ( url ) {
if ( this . _state . isFromGatewayDownloadAs ) {
Common . Gateway . downloadAs ( url ) ;
}
this . _state . isFromGatewayDownloadAs = false ;
} ,
onUpdateVersion : function ( callback ) {
var me = this ;
me . needToUpdateVersion = true ;
2016-12-25 13:45:53 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +00:00
uiApp . alert (
me . errorUpdateVersion ,
me . titleUpdateVersion ,
function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
if ( callback ) {
callback . call ( me ) ;
}
2016-12-25 13:45:53 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-11-18 16:21:25 +00:00
} )
} ) ;
} ,
2017-04-11 11:05:56 +00:00
onServerVersion : function ( buildVersion ) {
var me = this ;
if ( me . changeServerVersion ) return true ;
if ( DocsAPI . DocEditor . version ( ) !== buildVersion && ! window . compareVersions ) {
me . changeServerVersion = true ;
uiApp . alert (
me . errorServerVersion ,
me . titleServerVersion ,
function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
} )
} ) ;
return true ;
}
return false ;
} ,
2016-11-18 16:21:25 +00:00
onCollaborativeChanges : function ( ) {
2016-12-19 08:42:37 +00:00
//
2016-11-18 16:21:25 +00:00
} ,
/** coauthoring end **/
synchronizeChanges : function ( ) {
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
] ;
} ,
updateThemeColors : function ( ) {
2016-12-19 08:42:37 +00:00
//
2016-11-18 16:21:25 +00:00
} ,
onSendThemeColors : function ( colors , standart _colors ) {
} ,
2019-07-30 11:44:59 +00:00
onAdvancedOptions : function ( type , advOptions , mode , formatOptions ) {
2017-09-08 10:41:04 +00:00
if ( this . _state . openDlg ) return ;
2019-07-25 07:14:45 +00:00
var me = this ;
2016-12-19 08:42:37 +00:00
if ( type == Asc . c _oAscAdvancedOptionsID . CSV ) {
2016-12-25 13:45:53 +00:00
var picker ,
pages = [ ] ,
pagesName = [ ] ;
2019-07-25 07:14:45 +00:00
_ . each ( advOptions . asc _getCodePages ( ) , function ( page ) {
2016-12-25 13:45:53 +00:00
pages . push ( page . asc _getCodePage ( ) ) ;
pagesName . push ( page . asc _getCodePageName ( ) ) ;
} ) ;
$ ( me . loadMask ) . hasClass ( 'modal-in' ) && uiApp . closeModal ( me . loadMask ) ;
me . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2019-07-30 14:14:25 +00:00
var buttons = [ ] ;
if ( mode === 2 ) {
buttons . push ( {
text : me . textCancel ,
onClick : function ( ) {
me . _state . openDlg = null ;
}
} ) ;
}
buttons . push ( {
text : 'OK' ,
bold : true ,
onClick : function ( ) {
var encoding = picker . cols [ 0 ] . value ,
delimiter = picker . cols [ 1 ] . value ;
if ( me . api ) {
if ( mode == 2 ) {
formatOptions && formatOptions . asc _setAdvancedOptions ( new Asc . asc _CTextOptions ( encoding , delimiter ) ) ;
me . api . asc _DownloadAs ( formatOptions ) ;
} else {
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CTextOptions ( encoding , delimiter ) ) ;
}
if ( ! me . _isDocReady ) {
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
}
}
me . _state . openDlg = null ;
}
} ) ;
2017-09-08 10:41:04 +00:00
me . _state . openDlg = uiApp . modal ( {
2016-12-25 13:45:53 +00:00
title : me . advCSVOptions ,
text : '' ,
afterText :
'<div class="content-block small-picker" style="padding: 0; margin: 20px 0 0;">' +
'<div class="row">' +
'<div class="col-50" style="text-align: left;">' + me . txtEncoding + '</div>' +
'<div class="col-50" style="text-align: right;">' + me . txtDelimiter + '</div>' +
'</div>' +
'<div id="txt-encoding" class="small"></div>' +
'</div>' ,
2019-07-30 14:14:25 +00:00
buttons : buttons
2016-12-25 13:45:53 +00:00
} ) ;
2019-07-25 07:14:45 +00:00
var recommendedSettings = advOptions . asc _getRecommendedSettings ( ) ;
2016-12-25 13:45:53 +00:00
picker = uiApp . picker ( {
container : '#txt-encoding' ,
toolbar : false ,
rotateEffect : true ,
value : [
recommendedSettings && recommendedSettings . asc _getCodePage ( ) ,
( recommendedSettings && recommendedSettings . asc _getDelimiter ( ) ) ? recommendedSettings . asc _getDelimiter ( ) : 4
] ,
cols : [ {
textAlign : 'left' ,
values : pages ,
displayValues : pagesName
} , {
textAlign : 'right' ,
width : 120 ,
values : [ 4 , 2 , 3 , 1 , 5 ] ,
displayValues : [ ',' , ';' , ':' , this . txtTab , this . txtSpace ]
} ]
} ) ;
// Vertical align
2017-09-08 10:41:04 +00:00
$$ ( me . _state . openDlg ) . css ( {
marginTop : - Math . round ( $$ ( me . _state . openDlg ) . outerHeight ( ) / 2 ) + 'px'
2016-12-25 13:45:53 +00:00
} ) ;
2016-12-19 08:42:37 +00:00
} else if ( type == Asc . c _oAscAdvancedOptionsID . DRM ) {
2017-09-08 09:06:17 +00:00
$ ( me . loadMask ) . hasClass ( 'modal-in' ) && uiApp . closeModal ( me . loadMask ) ;
me . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2018-05-25 08:32:48 +00:00
var buttons = [ {
text : 'OK' ,
bold : true ,
onClick : function ( ) {
var password = $ ( me . _state . openDlg ) . find ( '.modal-text-input[name="modal-password"]' ) . val ( ) ;
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CDRMAdvancedOptions ( password ) ) ;
if ( ! me . _isDocReady ) {
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
}
me . _state . openDlg = null ;
}
} ] ;
if ( me . appOptions . canRequestClose )
buttons . push ( {
text : me . closeButtonText ,
onClick : function ( ) {
Common . Gateway . requestClose ( ) ;
me . _state . openDlg = null ;
}
} ) ;
2017-09-08 10:41:04 +00:00
me . _state . openDlg = uiApp . modal ( {
2016-12-19 08:42:37 +00:00
title : me . advDRMOptions ,
2018-04-27 13:05:38 +00:00
text : me . txtProtected ,
2016-12-19 08:42:37 +00:00
afterText : '<div class="input-field"><input type="password" name="modal-password" placeholder="' + me . advDRMPassword + '" class="modal-text-input"></div>' ,
2018-05-25 08:32:48 +00:00
buttons : buttons
2016-12-19 08:42:37 +00:00
} ) ;
2017-09-08 09:06:17 +00:00
// Vertical align
2017-09-08 10:41:04 +00:00
$$ ( me . _state . openDlg ) . css ( {
marginTop : - Math . round ( $$ ( me . _state . openDlg ) . outerHeight ( ) / 2 ) + 'px'
2017-09-08 09:06:17 +00:00
} ) ;
2016-12-19 08:42:37 +00:00
}
2016-11-18 16:21:25 +00:00
} ,
onTryUndoInFastCollaborative : function ( ) {
2016-12-19 08:42:37 +00:00
uiApp . alert (
this . textTryUndoRedo ,
this . notcriticalErrorTitle
) ;
2016-11-18 16:21:25 +00:00
} ,
onAuthParticipantsChanged : function ( users ) {
var length = 0 ;
_ . each ( users , function ( item ) {
if ( ! item . asc _getView ( ) )
length ++ ;
} ) ;
this . _state . usersCount = length ;
} ,
applySettings : function ( ) {
if ( this . appOptions . isEdit && this . appOptions . canLicense && ! this . appOptions . isOffline && this . appOptions . canCoAuthoring ) {
2016-12-19 08:42:37 +00:00
var value = Common . localStorage . getItem ( "sse-settings-coauthmode" ) ,
2016-11-18 16:21:25 +00:00
oldval = this . _state . fastCoauth ;
this . _state . fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
if ( this . _state . fastCoauth && ! oldval )
this . synchronizeChanges ( ) ;
}
} ,
onDocumentName : function ( name ) {
this . updateWindowTitle ( true ) ;
} ,
onPrint : function ( ) {
if ( ! this . appOptions . canPrint ) return ;
if ( this . api )
2019-02-13 12:21:31 +00:00
this . api . asc _Print ( ) ;
2016-11-18 16:21:25 +00:00
Common . component . Analytics . trackEvent ( 'Print' ) ;
} ,
onPrintUrl : function ( url ) {
if ( this . iframePrint ) {
this . iframePrint . parentNode . removeChild ( this . iframePrint ) ;
this . iframePrint = null ;
}
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 ( ) ;
me . iframePrint . contentWindow . blur ( ) ;
window . focus ( ) ;
} ;
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:21:25 +00:00
if ( url ) this . iframePrint . src = url ;
} ,
2018-06-22 10:22:57 +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 ;
}
} ,
2020-02-10 16:26:27 +00:00
isSupportEditFeature : function ( ) {
return false ;
} ,
2020-05-22 15:38:03 +00:00
onRunAutostartMacroses : function ( ) {
2020-06-01 14:55:54 +00:00
var me = this ,
enable = ! this . editorConfig . customization || ( this . editorConfig . customization . macros !== false ) ;
if ( enable ) {
var value = Common . Utils . InternalSettings . get ( "sse-mobile-macros-mode" ) ;
if ( value == 1 )
this . api . asc _runAutostartMacroses ( ) ;
else if ( value === 0 ) {
uiApp . modal ( {
title : this . notcriticalErrorTitle ,
text : this . textHasMacros ,
afterText : '<label class="label-checkbox item-content no-ripple">' +
'<input type="checkbox" name="checkbox-show-macros">' +
'<div class="item-media" style="margin-top: 10px; display: flex; align-items: center;">' +
'<i class="icon icon-form-checkbox"></i><span style="margin-left: 10px;">' + this . textRemember + '</span>' +
'</div>' +
'</label>' ,
buttons : [ {
text : this . textYes ,
onClick : function ( ) {
var dontshow = $ ( 'input[name="checkbox-show-macros"]' ) . prop ( 'checked' ) ;
if ( dontshow ) {
Common . Utils . InternalSettings . set ( "sse-mobile-macros-mode" , 1 ) ;
Common . localStorage . setItem ( "sse-mobile-macros-mode" , 1 ) ;
}
setTimeout ( function ( ) {
me . api . asc _runAutostartMacroses ( ) ;
} , 1 ) ;
}
} ,
{
text : this . textNo ,
onClick : function ( ) {
var dontshow = $ ( 'input[name="checkbox-show-macros"]' ) . prop ( 'checked' ) ;
if ( dontshow ) {
Common . Utils . InternalSettings . set ( "sse-mobile-macros-mode" , 2 ) ;
Common . localStorage . setItem ( "sse-mobile-macros-mode" , 2 ) ;
}
}
} ]
} ) ;
}
}
2020-05-22 15:38:03 +00:00
} ,
2016-12-25 14:07:46 +00:00
leavePageText : 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.' ,
2016-11-18 16:21:25 +00:00
criticalErrorTitle : 'Error' ,
notcriticalErrorTitle : 'Warning' ,
errorDefaultMessage : 'Error code: %1' ,
2019-04-29 11:42:58 +00:00
criticalErrorExtText : 'Press "OK" to back to document list.' ,
2016-11-18 16:21:25 +00:00
openTitleText : 'Opening Document' ,
openTextText : 'Opening document...' ,
saveTitleText : 'Saving Document' ,
saveTextText : 'Saving 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...' ,
2016-12-25 14:07:46 +00:00
uploadImageSizeMessage : 'Maximum image size limit exceeded.' ,
2016-11-18 16:21:25 +00:00
uploadImageExtMessage : 'Unknown image format.' ,
uploadImageFileCountMessage : 'No images uploaded.' ,
reloadButtonText : 'Reload Page' ,
unknownErrorText : 'Unknown error.' ,
convertationTimeoutText : 'Convertation timeout exceeded.' ,
downloadErrorText : 'Download failed.' ,
2019-04-29 11:02:52 +00:00
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
2016-11-18 16:21:25 +00:00
requestEditFailedTitleText : 'Access denied' ,
requestEditFailedMessageText : 'Someone is editing this document right now. Please try again later.' ,
2018-06-15 09:00:55 +00:00
textLoadingDocument : 'Loading spreadsheet' ,
2016-11-18 16:21:25 +00:00
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-11-18 16:21:25 +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' ,
2018-06-15 09:00:55 +00:00
loadingDocumentTitleText : 'Loading spreadsheet' ,
loadingDocumentTextText : 'Loading spreadsheet...' ,
2016-11-18 16:21:25 +00:00
warnProcessRightsChange : 'You have been denied the right to edit the file.' ,
errorProcessSaveResult : 'Saving is failed.' ,
textCloseTip : '\nClick to close the tip.' ,
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' ,
2016-12-25 14:07:46 +00:00
txtSeries : 'Series' ,
2016-11-18 16:21:25 +00:00
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' ,
2019-11-01 14:43:24 +00:00
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.' ,
2016-11-18 16:21:25 +00:00
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' ,
textBuyNow : 'Visit website' ,
2020-07-14 09:46:15 +00:00
textNoLicenseTitle : 'License limit reached' ,
2016-11-18 16:21:25 +00:00
textContactUs : 'Contact sales' ,
2019-10-30 14:27:57 +00:00
errorViewerDisconnect : 'Connection is lost. You can still view the document,<br>but will not be able to download until the connection is restored and page is reloaded.' ,
2016-11-18 16:21:25 +00:00
warnLicenseExp : 'Your license has expired.<br>Please update your license and refresh the page.' ,
titleLicenseExp : 'License expired' ,
openErrorText : 'An error has occurred while opening the file' ,
2016-12-25 13:45:53 +00:00
saveErrorText : 'An error has occurred while saving the file' ,
2016-12-25 14:07:46 +00:00
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.' ,
errorAccessDeny : 'You are trying to perform an action you do not have rights for.<br>Please contact your Document Server administrator.' ,
2016-12-25 13:45:53 +00:00
txtEncoding : 'Encoding' ,
txtDelimiter : 'Delimiter' ,
txtSpace : 'Space' ,
txtTab : 'Tab' ,
advCSVOptions : 'Choose CSV Options' ,
advDRMOptions : 'Protected File' ,
advDRMEnterPassword : 'You password please:' ,
2017-01-23 14:38:53 +00:00
advDRMPassword : 'Password' ,
textOK : 'OK' ,
textCancel : 'Cancel' ,
textPreloader : 'Loading... ' ,
textUsername : 'Username' ,
textPassword : 'Password' ,
textBack : 'Back' ,
textClose : 'Close' ,
2017-04-11 11:05:56 +00:00
textDone : 'Done' ,
titleServerVersion : 'Editor updated' ,
2017-06-23 13:52:12 +00:00
errorServerVersion : 'The editor version has been updated. The page will be reloaded to apply the changes.' ,
txtAccent : 'Accent' ,
txtStyle _Normal : 'Normal' ,
txtStyle _Heading _1 : 'Heading 1' ,
txtStyle _Heading _2 : 'Heading 2' ,
txtStyle _Heading _3 : 'Heading 3' ,
txtStyle _Heading _4 : 'Heading 4' ,
txtStyle _Title : 'Title' ,
txtStyle _Neutral : 'Neutral' ,
txtStyle _Bad : 'Bad' ,
txtStyle _Good : 'Good' ,
txtStyle _Input : 'Input' ,
txtStyle _Output : 'Output' ,
txtStyle _Calculation : 'Calculation' ,
txtStyle _Check _Cell : 'Check Cell' ,
txtStyle _Explanatory _Text : 'Explanatory Text' ,
txtStyle _Note : 'Note' ,
txtStyle _Linked _Cell : 'Linked Cell' ,
txtStyle _Warning _Text : 'Warning Text' ,
txtStyle _Total : 'Total' ,
txtStyle _Currency : 'Currency' ,
txtStyle _Percent : 'Percent' ,
2017-11-23 09:16:04 +00:00
txtStyle _Comma : 'Comma' ,
2018-04-27 13:05:38 +00:00
errorMaxPoints : 'The maximum number of points in series per chart is 4096.' ,
2018-05-28 10:00:03 +00:00
txtProtected : 'Once you enter the password and open the file, the current password to the file will be reset' ,
2020-07-14 09:46:15 +00:00
warnNoLicense : "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.<br>Contact %1 sales team for personal upgrade terms." ,
warnNoLicenseUsers : "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms." ,
warnLicenseExceeded : "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.<br>Contact your administrator to learn more." ,
warnLicenseUsersExceeded : "You've reached the user limit for %1 editors. Contact your administrator to learn more." ,
2018-07-18 07:03:33 +00:00
errorDataEncrypted : 'Encrypted changes have been received, they cannot be deciphered.' ,
2018-05-23 10:14:51 +00:00
pastInMergeAreaError : 'Cannot change part of a merged cell' ,
errorWrongBracketsCount : 'Found an error in the formula entered.<br>Wrong cout of brackets.' ,
errorWrongOperator : 'An error in the entered formula. Wrong operator is used.<br>Please correct the error or use the Esc button to cancel the formula editing.' ,
errorCountArgExceed : 'Found an error in the formula entered.<br>Count of arguments exceeded.' ,
errorCountArg : 'Found an error in the formula entered.<br>Invalid number of arguments.' ,
errorFormulaName : 'Found an error in the formula entered.<br>Incorrect formula name.' ,
errorFormulaParsing : 'Internal error while the formula parsing.' ,
errorArgsRange : 'Found an error in the formula entered.<br>Incorrect arguments range.' ,
errorUnexpectedGuid : 'External error.<br>Unexpected Guid. Please, contact support.' ,
errorFileRequest : 'External error.<br>File Request. Please, contact support.' ,
errorFileVKey : 'External error.<br>Incorrect securety key. Please, contact support.' ,
errorOperandExpected : 'The entered function syntax is not correct. Please check if you are missing one of the parentheses - \'(\' or \')\'.' ,
errorMoveRange : 'Cann\'t change a part of merged cell' ,
errorBadImageUrl : 'Image url is incorrect' ,
errorAutoFilterDataRange : 'The operation could not be done for the selected range of cells.<br>Select a uniform data range inside or outside the table and try again.' ,
errorAutoFilterChangeFormatTable : 'The operation could not be done for the selected cells as you cannot move a part of the table.<br>Select another data range so that the whole table was shifted and try again.' ,
errorAutoFilterHiddenRange : 'The operation cannot be performed because the area contains filtered cells.<br>Please unhide the filtered elements and try again.' ,
errorAutoFilterChange : 'The operation is not allowed, as it is attempting to shift cells in a table on your worksheet.' ,
errorFillRange : 'Could not fill the selected range of cells.<br>All the merged cells need to be the same size.' ,
errorInvalidRef : 'Enter a correct name for the selection or a valid reference to go to.' ,
errorCreateDefName : 'The existing named ranges cannot be edited and the new ones cannot be created<br>at the moment as some of them are being edited.' ,
errorPasteMaxRange : 'The copy and paste area does not match. Please select an area with the same size or click the first cell in a row to paste the copied cells.' ,
errorLockedAll : 'The operation could not be done as the sheet has been locked by another user.' ,
errorLockedWorksheetRename : 'The sheet cannot be renamed at the moment as it is being renamed by another user' ,
errorOpenWarning : 'The length of one of the formulas in the file exceeded<br>the allowed number of characters and it was removed.' ,
errorFrmlWrongReferences : 'The function refers to a sheet that does not exist.<br>Please check the data and try again.' ,
errorCopyMultiselectArea : 'This command cannot be used with multiple selections.<br>Select a single range and try again.' ,
2018-05-25 08:32:48 +00:00
errorPrintMaxPagesCount : 'Unfortunately, it’ s not possible to print more than 1500 pages at once in the current version of the program.<br>This restriction will be eliminated in upcoming releases.' ,
2018-10-08 14:06:37 +00:00
closeButtonText : 'Close File' ,
2019-02-14 13:53:39 +00:00
scriptLoadError : 'The connection is too slow, some of the components could not be loaded. Please reload the page.' ,
2019-02-15 13:43:42 +00:00
errorChangeArray : 'You cannot change part of an array.' ,
2019-02-19 13:33:15 +00:00
errorEditingDownloadas : 'An error occurred during the work with the document.<br>Use the \'Download\' option to save the file backup copy to your computer hard drive.' ,
2019-03-15 10:30:01 +00:00
errorMultiCellFormula : 'Multi-cell array formulas are not allowed in tables.' ,
textPaidFeature : 'Paid feature' ,
2019-05-08 11:52:35 +00:00
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.' ,
2019-06-06 08:32:00 +00:00
errorFrmlMaxTextLength : 'Text values in formulas are limited to 255 characters.<br>Use the CONCATENATE function or concatenation operator (&)' ,
2019-08-28 14:29:39 +00:00
waitText : 'Please, wait...' ,
2019-11-13 11:14:41 +00:00
errorFileSizeExceed : 'The file size exceeds the limitation set for your server.<br>Please contact your Document Server administrator for details.' ,
2020-02-10 16:26:27 +00:00
errorUpdateVersionOnDisconnect : 'Internet connection has been restored, and the file version has been changed.<br>Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.' ,
2020-07-28 19:15:23 +00:00
errorOpensource : 'Using the free Community version you can open documents for viewing only. To access mobile web editors, a commercial license is required.' ,
2020-06-01 14:55:54 +00:00
textHasMacros : 'The file contains automatic macros.<br>Do you want to run macros?' ,
textRemember : 'Remember my choice' ,
textYes : 'Yes' ,
2020-08-07 08:37:14 +00:00
textNo : 'No' ,
2020-08-12 07:50:46 +00:00
errorFrmlMaxLength : 'You cannot add this formula as its length exceeded the allowed number of characters.<br>Please edit it and try again.' ,
2020-11-09 11:52:21 +00:00
errorFrmlMaxReference : 'You cannot enter this formula because it has too many values,<br>cell references, and/or names.' ,
warnLicenseLimitedRenewed : 'License needs to be renewed.<br>You have a limited access to document editing functionality.<br>Please contact your administrator to get full access' ,
warnLicenseLimitedNoAccess : 'License expired.<br>You have no access to document editing functionality.<br>Please contact your administrator.'
2016-03-11 00:48:53 +00:00
}
2016-11-18 16:21:25 +00:00
} ) ( ) , SSE . Controllers . Main || { } ) )
2016-03-11 00:48:53 +00:00
} ) ;