2016-04-01 13:17:09 +00:00
/ *
*
2017-01-23 09:59:54 +00:00
* ( c ) Copyright Ascensio System Limited 2010 - 2017
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
*
* You can contact Ascensio System SIA at Lubanas st . 125 a - 25 , Riga , Latvia ,
* EU , LV - 1021.
*
* 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
* Copyright ( c ) 2016 Ascensio System SIA . All rights reserved .
*
* /
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 ,
licenseWarning : false
} ;
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
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 ) ) ;
// 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 ( ) ;
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 . nativeApp = me . editorConfig . nativeApp === true ;
me . appOptions . isDesktopApp = me . editorConfig . targetApp == 'desktop' ;
me . appOptions . canCreateNew = ! _ . isEmpty ( me . editorConfig . createUrl ) && ! me . appOptions . isDesktopApp ;
me . appOptions . canOpenRecent = me . editorConfig . nativeApp !== true && me . editorConfig . recent !== undefined && ! me . appOptions . isDesktopApp ;
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 ( ) : '' ;
me . appOptions . sharingSettingsUrl = me . editorConfig . sharingSettingsUrl ;
me . appOptions . fileChoiceUrl = me . editorConfig . fileChoiceUrl ;
me . appOptions . mergeFolderUrl = me . editorConfig . mergeFolderUrl ;
me . appOptions . canAnalytics = false ;
me . appOptions . customization = me . editorConfig . customization ;
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 . appOptions . canBack = me . editorConfig . nativeApp !== true && me . appOptions . canBackToFolder === true ;
me . appOptions . canPlugins = false ;
me . plugins = me . editorConfig . plugins ;
if ( me . editorConfig . lang )
me . api . asc _setLocale ( ( me . editorConfig . lang ) ? parseInt ( Common . util . LanguageInfo . getLocalLanguageCode ( me . editorConfig . lang ) ) : 0x0409 ) ;
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 ) ;
} ,
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 ) ;
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 ) ) ;
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 ) ;
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 ( ) ;
if ( ! old _rights ) {
uiApp . alert (
_ . isEmpty ( data . message ) ? this . warnProcessRightsChange : data . message ,
this . notcriticalErrorTitle ,
function ( ) {
me . _state . lostEditingRights = false ;
}
) ;
}
}
} ,
onDownloadAs : function ( ) {
2016-12-19 08:42:37 +00:00
this . api . asc _DownloadAs ( Asc . c _oAscFileType . XLSX , true ) ;
2016-11-18 16:21:25 +00:00
} ,
goBack : function ( blank ) {
var href = this . appOptions . customization . goback . url ;
if ( blank ) {
window . open ( href , "_blank" ) ;
} else {
parent . location . href = href ;
}
} ,
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 } ) ;
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 {
2016-12-19 08:42:37 +00:00
if ( me . _state . fastCoauth && me . _state . usersCount > 1 && id == Asc . c _oAscAsyncAction [ 'Save' ] ) {
2017-04-11 11:05:56 +00:00
// me._state.timerSave = setTimeout(function () {
//console.debug('End long action');
// }, 500);
2016-11-18 16:21:25 +00:00
} else {
2016-12-19 15:12:18 +00:00
// console.debug('End long action');
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 . 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 ;
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 ) ;
} else {
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-20 11:32:18 +00:00
Common . Gateway . documentReady ( ) ;
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 **/
value = Common . localStorage . getItem ( "sse-settings-livecomment" ) ;
this . isLiveCommenting = ! ( value !== null && parseInt ( value ) == 0 ) ;
2017-06-06 08:31:30 +00:00
this . isLiveCommenting ? this . api . asc _showComments ( true ) : 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 ) {
value = Common . localStorage . getItem ( "sse-settings-coauthmode" ) ;
if ( value === null && Common . localStorage . getItem ( "sse-settings-autosave" ) === null &&
this . appOptions . customization && this . appOptions . customization . autosave === false ) {
value = 0 ; // use customization.autosave only when sse-settings-coauthmode and sse-settings-autosave are null
}
this . _state . fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
} 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' ) ;
} )
} ,
onLicenseChanged : function ( params ) {
if ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) return ;
var licType = params . asc _getLicenseType ( ) ;
2017-12-07 10:36:57 +00:00
if ( licType !== undefined && ( licType === Asc . c _oLicenseResult . Connections || licType === Asc . c _oLicenseResult . UsersCount ) && this . appOptions . canEdit && this . editorConfig . mode !== 'view' ) {
2017-11-23 09:16:04 +00:00
this . _state . licenseWarning = ( licType === Asc . c _oLicenseResult . Connections ) ? this . warnNoLicense : this . warnNoLicenseUsers ;
}
if ( this . _isDocReady && this . _state . licenseWarning )
this . applyLicense ( ) ;
} ,
applyLicense : function ( ) {
var me = this ;
2016-12-19 08:42:37 +00:00
if ( me . _state . licenseWarning ) {
2017-11-23 09:16:04 +00:00
SSE . getController ( 'Toolbar' ) . activateViewControls ( ) ;
SSE . getController ( 'Toolbar' ) . deactivateEditControls ( ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
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 ,
2017-11-23 09:16:04 +00:00
text : me . _state . licenseWarning ,
2016-12-19 08:42:37 +00:00
buttons : [
{
text : me . textBuyNow ,
bold : true ,
onClick : function ( ) {
2017-10-18 12:08:11 +00:00
window . open ( 'https://www.onlyoffice.com' , "_blank" ) ;
2016-12-19 08:42:37 +00:00
}
} ,
{
text : me . textContactUs ,
onClick : function ( ) {
window . open ( 'mailto:sales@onlyoffice.com' , "_blank" ) ;
}
}
2017-11-23 09:16:04 +00:00
]
2016-12-19 08:42:37 +00:00
} ) ;
}
2017-11-23 09:16:04 +00:00
} else
SSE . getController ( 'Toolbar' ) . activateControls ( ) ;
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 **/
me . appOptions . canComments = me . appOptions . canLicense && ! ( ( typeof ( me . editorConfig . customization ) == 'object' ) && me . editorConfig . customization . comments === false ) ;
me . appOptions . canChat = me . appOptions . canLicense && ! me . appOptions . isOffline && ! ( ( typeof ( me . editorConfig . customization ) == 'object' ) && me . editorConfig . customization . chat === false ) ;
me . appOptions . canRename = ! ! me . permissions . rename ;
2017-04-21 08:44:23 +00:00
me . appOptions . canBranding = ( licType === Asc . c _oLicenseResult . Success ) && ( typeof me . editorConfig . customization == 'object' ) ;
2016-12-19 08:42:37 +00:00
me . appOptions . canBrandingExt = params . asc _getCanBranding ( ) && ( typeof me . editorConfig . customization == 'object' ) ;
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
( me . editorConfig . canRequestEditRights || me . editorConfig . mode !== 'view' ) ; // if mode=="view" -> canRequestEditRights must be defined
me . appOptions . isEdit = ( me . appOptions . canLicense || me . appOptions . isEditDiagram || me . appOptions . isEditMailMerge ) && me . permissions . edit !== false && me . editorConfig . mode !== 'view' ;
me . appOptions . canDownload = ! me . appOptions . nativeApp && ( me . permissions . download !== false ) ;
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
}
} ,
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
}
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
var value = Common . localStorage . getItem ( 'sse-settings-unit' ) ;
Common . Utils . Metric . setCurrentMetric ( ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ) ;
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 ) ) ;
me . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_onParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , 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 ( {
title : 'ONLYOFFICE' ,
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 ) {
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 ;
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 :
config . msg = this . errorConnectToServer ;
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 ;
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 ( ) {
Common . NotificationCenter . trigger ( 'goback' ) ;
2016-03-11 00:48:53 +00:00
}
}
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 ) {
Common . Utils . ThemeColor . setColors ( colors , standart _colors ) ;
} ,
onAdvancedOptions : function ( advOptions ) {
2017-09-08 10:41:04 +00:00
if ( this . _state . openDlg ) return ;
2016-12-19 08:42:37 +00:00
var type = advOptions . asc _getOptionId ( ) ,
2017-09-08 10:41:04 +00:00
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 = [ ] ;
_ . each ( advOptions . asc _getOptions ( ) . asc _getCodePages ( ) , function ( page ) {
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 ) ;
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>' ,
buttons : [
{
text : 'OK' ,
bold : true ,
onClick : function ( ) {
var encoding = picker . cols [ 0 ] . value ,
delimiter = picker . cols [ 1 ] . value ;
if ( me . api ) {
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CCSVAdvancedOptions ( encoding , delimiter ) ) ;
if ( ! me . _isDocReady ) {
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
}
}
2017-09-08 10:41:04 +00:00
me . _state . openDlg = null ;
2016-12-25 13:45:53 +00:00
}
}
]
} ) ;
var recommendedSettings = advOptions . asc _getOptions ( ) . asc _getRecommendedSettings ( ) ;
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 ) ;
2017-09-08 10:41:04 +00:00
me . _state . openDlg = uiApp . modal ( {
2016-12-19 08:42:37 +00:00
title : me . advDRMOptions ,
text : me . advDRMEnterPassword ,
afterText : '<div class="input-field"><input type="password" name="modal-password" placeholder="' + me . advDRMPassword + '" class="modal-text-input"></div>' ,
buttons : [
{
text : 'OK' ,
bold : true ,
onClick : function ( ) {
2017-09-08 10:41:04 +00:00
var password = $ ( me . _state . openDlg ) . find ( '.modal-text-input[name="modal-password"]' ) . val ( ) ;
2016-12-19 08:42:37 +00:00
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CDRMAdvancedOptions ( password ) ) ;
if ( ! me . _isDocReady ) {
2016-12-25 13:45:53 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-12-19 08:42:37 +00:00
}
2017-09-08 10:41:04 +00:00
me . _state . openDlg = null ;
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 )
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 ) {
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 ;
} ,
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-12-14 12:38:22 +00:00
defaultTitleText : 'ONLYOFFICE Spreadsheet Editor' ,
2016-11-18 16:21:25 +00:00
criticalErrorTitle : 'Error' ,
notcriticalErrorTitle : 'Warning' ,
errorDefaultMessage : 'Error code: %1' ,
criticalErrorExtText : 'Press "Ok" to back to document list.' ,
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.' ,
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
requestEditFailedTitleText : 'Access denied' ,
requestEditFailedMessageText : 'Someone is editing this document right now. Please try again later.' ,
textLoadingDocument : 'Loading document' ,
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.' ,
errorFilePassProtect : 'The document is password protected.' ,
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' ,
loadingDocumentTitleText : 'Loading document' ,
loadingDocumentTextText : 'Loading document...' ,
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' ,
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' ,
textBuyNow : 'Visit website' ,
textNoLicenseTitle : 'ONLYOFFICE open source version' ,
2017-11-23 11:00:02 +00:00
warnNoLicense : 'This version of ONLYOFFICE Editors has certain limitations for concurrent connections to the document server.<br>If you need more please consider upgrading your current license or purchasing a commercial one.' ,
2016-11-18 16:21:25 +00:00
textContactUs : 'Contact sales' ,
errorViewerDisconnect : 'Connection is lost. You can still view the document,<br>but will not be able to download until the connection is restored.' ,
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' ,
2017-11-23 11:00:02 +00:00
warnNoLicenseUsers : 'This version of ONLYOFFICE Editors has certain limitations for concurrent users.<br>If you need more please consider upgrading your current license or purchasing a commercial one.'
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
} ) ;