2016-04-01 13:17:09 +00:00
/ *
*
2019-01-17 13:05:03 +00:00
* ( c ) Copyright Ascensio System SIA 2010 - 2019
2016-04-01 13:17:09 +00:00
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
2019-01-17 13:00:34 +00:00
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
2016-04-01 13:17:09 +00:00
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
2016-03-11 00:48:53 +00:00
/ * *
* Main . js
*
* Main controller
*
* Created by Maxim Kadushkin on 24 March 2014
2018-03-01 12:16:38 +00:00
* Copyright ( c ) 2018 Ascensio System SIA . All rights reserved .
2016-03-11 00:48:53 +00:00
*
* /
define ( [
'core' ,
'irregularstack' ,
'common/main/lib/component/Window' ,
'common/main/lib/component/LoadMask' ,
'common/main/lib/component/Tooltip' ,
'common/main/lib/controller/Fonts' ,
'common/main/lib/collection/TextArt' ,
'common/main/lib/view/OpenDialog' ,
2020-12-18 10:23:14 +00:00
'common/main/lib/view/UserNameDialog' ,
2016-03-11 00:48:53 +00:00
'common/main/lib/util/LanguageInfo' ,
2017-01-13 15:32:45 +00:00
'common/main/lib/util/LocalStorage' ,
2016-03-11 00:48:53 +00:00
'spreadsheeteditor/main/app/collection/ShapeGroups' ,
'spreadsheeteditor/main/app/collection/TableTemplates' ,
2016-10-21 09:33:49 +00:00
'spreadsheeteditor/main/app/collection/EquationGroups' ,
2021-02-25 15:45:24 +00:00
'spreadsheeteditor/main/app/collection/ConditionalFormatIcons' ,
2021-06-07 18:00:13 +00:00
'spreadsheeteditor/main/app/controller/FormulaDialog' ,
2021-11-08 15:55:38 +00:00
'common/main/lib/controller/FocusManager' ,
'common/main/lib/controller/HintManager' ,
'common/main/lib/controller/LayoutManager'
2016-03-11 00:48:53 +00:00
] , function ( ) {
'use strict' ;
SSE . Controllers . Main = Backbone . Controller . extend ( _ . extend ( ( function ( ) {
var InitApplication = - 254 ;
var ApplyEditRights = - 255 ;
var LoadingDocument = - 256 ;
var mapCustomizationElements = {
about : 'button#left-btn-about' ,
feedback : 'button#left-btn-support' ,
2016-10-28 13:38:33 +00:00
goback : '#fm-btn-back > a, #header-back > div'
} ;
var mapCustomizationExtElements = {
2016-10-21 13:47:46 +00:00
toolbar : '#viewport #toolbar' ,
2016-10-28 13:38:33 +00:00
leftMenu : '#viewport #left-menu, #viewport #id-toolbar-full-placeholder-btn-settings, #viewport #id-toolbar-short-placeholder-btn-settings' ,
rightMenu : '#viewport #right-menu' ,
2017-04-11 11:05:56 +00:00
statusBar : '#statusbar'
2016-03-11 00:48:53 +00:00
} ;
Common . localStorage . setId ( 'table' ) ;
Common . localStorage . setKeysFilter ( 'sse-,asc.table' ) ;
Common . localStorage . sync ( ) ;
return {
models : [ ] ,
collections : [
'ShapeGroups' ,
2016-10-24 10:58:34 +00:00
'EquationGroups' ,
2016-03-11 00:48:53 +00:00
'TableTemplates' ,
2021-02-25 15:45:24 +00:00
'ConditionalFormatIcons' ,
2021-03-02 21:30:04 +00:00
'ConditionalFormatIconsPresets' ,
2021-06-28 17:18:53 +00:00
'Common.Collections.TextArt' ,
'Common.Collections.HistoryUsers'
2016-03-11 00:48:53 +00:00
] ,
views : [ ] ,
initialize : function ( ) {
this . addListeners ( {
'FileMenu' : {
'settings:apply' : _ . bind ( this . applySettings , this )
2017-11-24 06:31:34 +00:00
} ,
'Common.Views.ReviewChanges' : {
'settings:apply' : _ . bind ( this . applySettings , this )
2016-03-11 00:48:53 +00:00
}
} ) ;
2019-07-17 10:36:37 +00:00
var me = this ,
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 = {
'Series' : this . txtSeries ,
'Diagram Title' : this . txtDiagramTitle ,
'X Axis' : this . txtXAxis ,
'Y Axis' : this . txtYAxis ,
'Your text here' : this . txtArt ,
'Table' : this . txtTable ,
2019-08-05 12:25:44 +00:00
'Print_Area' : this . txtPrintArea ,
'Confidential' : this . txtConfidential ,
2019-08-07 11:29:15 +00:00
'Prepared by ' : this . txtPreparedBy + ' ' ,
'Page' : this . txtPage ,
2019-08-07 14:36:41 +00:00
'Page %1 of %2' : this . txtPageOf ,
'Pages' : this . txtPages ,
'Date' : this . txtDate ,
'Time' : this . txtTime ,
'Tab' : this . txtTab ,
2019-11-01 13:31:14 +00:00
'File' : this . txtFile ,
'Column' : this . txtColumn ,
2020-03-12 12:54:57 +00:00
'Row' : this . txtRow ,
'%1 of %2' : this . txtByField ,
'(All)' : this . txtAll ,
'Values' : this . txtValues ,
'Grand Total' : this . txtGrandTotal ,
'Row Labels' : this . txtRowLbls ,
2020-05-28 10:58:38 +00:00
'Column Labels' : this . txtColLbls ,
'Multi-Select (Alt+S)' : this . txtMultiSelect ,
2020-05-28 14:15:53 +00:00
'Clear Filter (Alt+C)' : this . txtClearFilter ,
2021-03-04 21:56:20 +00:00
'(blank)' : this . txtBlank ,
'Group' : this . txtGroup ,
'Seconds' : this . txtSeconds ,
'Minutes' : this . txtMinutes ,
'Hours' : this . txtHours ,
'Days' : this . txtDays ,
'Months' : this . txtMonths ,
'Quarters' : this . txtQuarters ,
2021-04-29 17:12:12 +00:00
'Years' : this . txtYears ,
'%1 or %2' : this . txtOr ,
2021-09-23 10:27:45 +00:00
'Qtr' : this . txtQuarter
2019-07-17 10:36:37 +00:00
} ;
2021-03-04 21:56:20 +00:00
2019-07-17 10:36:37 +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 . translationTable = translate ;
2016-03-11 00:48:53 +00:00
} ,
onLaunch : function ( ) {
// $(document.body).css('position', 'absolute');
2017-06-23 13:52:12 +00:00
var me = this ;
2016-03-11 00:48:53 +00:00
2021-03-09 14:06:44 +00:00
this . _state = { isDisconnected : false , usersCount : 1 , fastCoauth : true , lostEditingRights : false , licenseType : false , isDocModified : false } ;
2016-03-11 00:48:53 +00:00
if ( ! Common . Utils . isBrowserSupported ( ) ) {
Common . Utils . showBrowserRestriction ( ) ;
Common . Gateway . reportError ( undefined , this . unsupportedBrowserErrorText ) ;
return ;
} else {
// this.getViewport().getEl().on('keypress', this.lockEscapeKey, this);
// viewport.applicationUI.setVisible(true);
}
// Initialize api
2019-07-17 10:36:37 +00:00
this . api = this . getApplication ( ) . getController ( 'Viewport' ) . getApi ( ) ;
2020-02-17 13:43:02 +00:00
2020-11-06 09:00:43 +00:00
Common . UI . FocusManager . init ( ) ;
2021-07-12 16:33:05 +00:00
Common . UI . HintManager . init ( this . api ) ;
2021-02-06 10:03:46 +00:00
Common . UI . Themes . init ( this . api ) ;
2020-02-17 13:43:02 +00:00
var value = Common . localStorage . getBool ( "sse-settings-cachemode" , true ) ;
Common . Utils . InternalSettings . set ( "sse-settings-cachemode" , value ) ;
this . api . asc _setDefaultBlitMode ( ! ! value ) ;
value = Common . localStorage . getItem ( "sse-settings-fontrender" ) ;
if ( value === null ) value = '3' ;
Common . Utils . InternalSettings . set ( "sse-settings-fontrender" , value ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _setFontRenderingMode ( parseInt ( value ) ) ;
this . api . asc _registerCallback ( 'asc_onOpenDocumentProgress' , _ . bind ( this . onOpenDocument , this ) ) ;
this . api . asc _registerCallback ( 'asc_onEndAction' , _ . bind ( this . onLongActionEnd , this ) ) ;
this . api . asc _registerCallback ( 'asc_onError' , _ . bind ( this . onError , this ) ) ;
this . api . asc _registerCallback ( 'asc_onCoAuthoringDisconnect' , _ . bind ( this . onCoAuthoringDisconnect , this ) ) ;
this . api . asc _registerCallback ( 'asc_onAdvancedOptions' , _ . bind ( this . onAdvancedOptions , this ) ) ;
this . api . asc _registerCallback ( 'asc_onDocumentUpdateVersion' , _ . bind ( this . onUpdateVersion , this ) ) ;
2017-04-11 11:05:56 +00:00
this . api . asc _registerCallback ( 'asc_onServerVersion' , _ . bind ( this . onServerVersion , this ) ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _registerCallback ( 'asc_onDocumentName' , _ . bind ( this . onDocumentName , this ) ) ;
this . api . asc _registerCallback ( 'asc_onPrintUrl' , _ . bind ( this . onPrintUrl , this ) ) ;
2016-09-26 10:54:25 +00:00
this . api . asc _registerCallback ( 'asc_onMeta' , _ . bind ( this . onMeta , this ) ) ;
2019-08-05 13:37:09 +00:00
this . api . asc _registerCallback ( 'asc_onSpellCheckInit' , _ . bind ( this . loadLanguages , this ) ) ;
2022-08-10 14:51:32 +00:00
this . api . asc _registerCallback ( 'asc_onOleEditorReady' , _ . bind ( this . onOleEditorReady , this ) ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . on ( 'api:disconnect' , _ . bind ( this . onCoAuthoringDisconnect , this ) ) ;
Common . NotificationCenter . on ( 'goback' , _ . bind ( this . goBack , this ) ) ;
Common . NotificationCenter . on ( 'namedrange:locked' , _ . bind ( this . onNamedRangeLocked , this ) ) ;
2019-01-10 11:00:30 +00:00
Common . NotificationCenter . on ( 'download:cancel' , _ . bind ( this . onDownloadCancel , this ) ) ;
2019-07-24 14:33:29 +00:00
Common . NotificationCenter . on ( 'download:advanced' , _ . bind ( this . onAdvancedOptions , this ) ) ;
2019-10-03 13:10:06 +00:00
Common . NotificationCenter . on ( 'showmessage' , _ . bind ( this . onExternalMessage , this ) ) ;
2021-07-01 21:54:55 +00:00
Common . NotificationCenter . on ( 'markfavorite' , _ . bind ( this . markFavorite , this ) ) ;
2021-07-19 20:50:45 +00:00
Common . NotificationCenter . on ( 'protect:check' , _ . bind ( this . checkProtectedRange , this ) ) ;
2021-07-01 21:54:55 +00:00
Common . NotificationCenter . on ( 'editing:disable' , _ . bind ( this . onEditingDisable , this ) ) ;
2021-08-10 14:49:40 +00:00
Common . NotificationCenter . on ( 'showerror' , _ . bind ( this . onError , this ) ) ;
2016-03-11 00:48:53 +00:00
this . stackLongActions = new Common . IrregularStack ( {
strongCompare : this . _compareActionStrong ,
weakCompare : this . _compareActionWeak
} ) ;
2016-04-05 11:52:34 +00:00
this . stackLongActions . push ( { id : InitApplication , type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ;
2016-03-11 00:48:53 +00:00
2021-07-01 21:54:55 +00:00
this . stackDisableActions = new Common . IrregularStack ( {
strongCompare : this . _compareActionWeak ,
weakCompare : this . _compareActionWeak
} ) ;
2022-05-20 10:24:17 +00:00
this . stackMacrosRequests = [ ] ;
2016-03-11 00:48:53 +00:00
this . isShowOpenDialog = false ;
// Initialize api gateway
this . editorConfig = { } ;
Common . Gateway . on ( 'init' , _ . bind ( this . loadConfig , this ) ) ;
Common . Gateway . on ( 'showmessage' , _ . bind ( this . onExternalMessage , this ) ) ;
Common . Gateway . on ( 'opendocument' , _ . bind ( this . loadDocument , this ) ) ;
Common . Gateway . on ( 'internalcommand' , _ . bind ( this . onInternalCommand , this ) ) ;
2021-05-06 11:37:46 +00:00
Common . Gateway . on ( 'grabfocus' , _ . bind ( this . onGrabFocus , this ) ) ;
2017-09-20 11:32:18 +00:00
Common . Gateway . appReady ( ) ;
2016-03-11 00:48:53 +00:00
this . getApplication ( ) . getController ( 'Viewport' ) . setApi ( this . api ) ;
// Syncronize focus with api
$ ( document . body ) . on ( 'focus' , 'input, textarea:not(#ce-cell-content)' , function ( e ) {
2016-12-05 14:08:58 +00:00
if ( me . isAppDisabled === true ) return ;
2016-06-21 09:10:37 +00:00
if ( e && e . target && ! /area_id/ . test ( e . target . id ) ) {
if ( /msg-reply/ . test ( e . target . className ) )
me . dontCloseDummyComment = true ;
2020-04-15 12:17:51 +00:00
else if ( /textarea-control/ . test ( e . target . className ) )
me . inTextareaControl = true ;
2020-04-22 09:35:55 +00:00
else if ( ! Common . Utils . ModalWindow . isVisible ( ) && /form-control/ . test ( e . target . className ) )
2018-03-15 11:38:53 +00:00
me . inFormControl = true ;
2016-06-21 09:10:37 +00:00
}
2016-03-11 00:48:53 +00:00
} ) ;
$ ( document . body ) . on ( 'blur' , 'input, textarea' , function ( e ) {
2016-12-05 14:08:58 +00:00
if ( me . isAppDisabled === true || me . isFrameClosed ) return ;
2020-04-22 09:35:55 +00:00
if ( ( ! Common . Utils . ModalWindow . isVisible ( ) || $ ( '.asc-window.enable-key-events:visible' ) . length > 0 ) && ! ( me . loadMask && me . loadMask . isVisible ( ) ) ) {
2018-03-26 13:50:15 +00:00
if ( /form-control/ . test ( e . target . className ) )
me . inFormControl = false ;
2022-03-10 13:38:08 +00:00
if ( me . getApplication ( ) . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . getMenu ( 'file' ) . isVisible ( ) && $ ( '.asc-window.enable-key-events:visible' ) . length === 0 )
2019-09-11 10:38:02 +00:00
return ;
2016-10-14 13:58:57 +00:00
if ( ! e . relatedTarget ||
2019-04-25 11:58:48 +00:00
! /area_id/ . test ( e . target . id )
&& ! ( e . target . localName == 'input' && $ ( e . target ) . parent ( ) . find ( e . relatedTarget ) . length > 0 ) /* Check if focus in combobox goes from input to it's menu button or menu items, or from comment editing area to Ok/Cancel button */
2019-09-25 13:15:09 +00:00
&& ! ( e . target . localName == 'textarea' && $ ( e . target ) . closest ( '.asc-window' ) . find ( '.dropdown-menu' ) . find ( e . relatedTarget ) . length > 0 ) /* Check if focus in comment goes from textarea to it's email menu */
2016-10-14 13:58:57 +00:00
&& ( e . relatedTarget . localName != 'input' || ! /form-control/ . test ( e . relatedTarget . className ) ) /* Check if focus goes to text input with class "form-control" */
&& ( e . relatedTarget . localName != 'textarea' || /area_id/ . test ( e . relatedTarget . id ) ) ) /* Check if focus goes to textarea, but not to "area_id" */ {
2017-12-13 09:11:27 +00:00
if ( Common . Utils . isIE && e . originalEvent && e . originalEvent . target && /area_id/ . test ( e . originalEvent . target . id ) && ( e . originalEvent . target === e . originalEvent . srcElement ) )
return ;
2016-10-14 13:58:57 +00:00
me . api . asc _enableKeyEvents ( true ) ;
if ( /msg-reply/ . test ( e . target . className ) )
me . dontCloseDummyComment = false ;
2020-04-15 12:17:51 +00:00
else if ( /textarea-control/ . test ( e . target . className ) )
me . inTextareaControl = false ;
2016-10-14 13:58:57 +00:00
}
2016-03-11 00:48:53 +00:00
}
} ) . on ( 'dragover' , function ( e ) {
var event = e . originalEvent ;
2020-02-19 16:38:39 +00:00
if ( event . target && $ ( event . target ) . closest ( '#editor_sdk' ) . length < 1 && ! ( $ ( event . target ) . is ( '#statusbar_bottom' ) || $ . contains ( $ ( '#statusbar_bottom' ) , $ ( event . target ) ) ) ) {
2016-03-11 00:48:53 +00:00
event . preventDefault ( ) ;
event . dataTransfer . dropEffect = "none" ;
return false ;
}
2019-02-21 10:40:03 +00:00
} ) . on ( 'dragstart' , function ( e ) {
var event = e . originalEvent ;
if ( event . target ) {
var target = $ ( event . target ) ;
if ( target . closest ( '.combobox' ) . length > 0 || target . closest ( '.dropdown-menu' ) . length > 0 ||
target . closest ( '.ribtab' ) . length > 0 || target . closest ( '.combo-dataview' ) . length > 0 ) {
event . preventDefault ( ) ;
}
}
2016-03-11 00:48:53 +00:00
} ) ;
2022-02-13 13:40:08 +00:00
Common . Utils . isChrome && $ ( document . body ) . on ( 'keydown' , 'textarea' , function ( e ) { // chromium bug890248 (Bug 39614)
if ( e . keyCode === Common . UI . Keys . PAGEUP || e . keyCode === Common . UI . Keys . PAGEDOWN ) {
setTimeout ( function ( ) {
$ ( '#viewport' ) . scrollLeft ( 0 ) ;
$ ( '#viewport' ) . scrollTop ( 0 ) ;
} , 0 ) ;
}
} ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . on ( {
'modal:show' : function ( e ) {
2020-04-22 09:35:55 +00:00
Common . Utils . ModalWindow . show ( ) ;
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( false ) ;
} ,
'modal:close' : function ( dlg ) {
2020-04-22 09:35:55 +00:00
Common . Utils . ModalWindow . close ( ) ;
if ( ! Common . Utils . ModalWindow . isVisible ( ) )
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( true ) ;
} ,
'modal:hide' : function ( dlg ) {
2020-04-22 09:35:55 +00:00
Common . Utils . ModalWindow . close ( ) ;
if ( ! Common . Utils . ModalWindow . isVisible ( ) )
2016-03-11 00:48:53 +00:00
me . api . asc _enableKeyEvents ( true ) ;
} ,
'dataview:focus' : function ( e ) {
} ,
'dataview:blur' : function ( e ) {
2020-04-22 09:35:55 +00:00
if ( ! Common . Utils . ModalWindow . isVisible ( ) ) {
2016-07-08 09:25:30 +00:00
me . api . asc _enableKeyEvents ( true ) ;
2016-03-11 00:48:53 +00:00
}
} ,
2016-06-23 07:50:10 +00:00
'menu:show' : function ( e ) {
} ,
2017-04-11 11:05:56 +00:00
'menu:hide' : function ( menu , isFromInputControl ) {
2020-04-22 09:35:55 +00:00
if ( ! Common . Utils . ModalWindow . isVisible ( ) && ( ! menu || ! menu . cmpEl . hasClass ( 'from-cell-edit' ) ) && ! isFromInputControl ) {
2016-07-22 14:16:08 +00:00
me . api . asc _InputClearKeyboardElement ( ) ;
2016-07-08 09:25:30 +00:00
me . api . asc _enableKeyEvents ( true ) ;
2016-07-22 14:16:08 +00:00
}
2016-06-23 07:50:10 +00:00
} ,
2016-03-11 00:48:53 +00:00
'edit:complete' : _ . bind ( this . onEditComplete , this ) ,
'settings:unitschanged' : _ . bind ( this . unitsChanged , this )
} ) ;
this . initNames ( ) ;
// this.recognizeBrowser();
Common . util . Shortcuts . delegateShortcuts ( {
shortcuts : {
2018-07-26 14:14:41 +00:00
'command+s,ctrl+s,command+p,ctrl+p,command+k,ctrl+k,command+d,ctrl+d' : _ . bind ( function ( e ) {
2018-07-25 13:33:46 +00:00
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
2016-03-11 00:48:53 +00:00
} , this )
}
} ) ;
2019-02-26 17:57:23 +00:00
2019-08-02 08:48:36 +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-03-11 00:48:53 +00:00
} ,
loadConfig : function ( data ) {
this . editorConfig = $ . extend ( this . editorConfig , data . config ) ;
this . appOptions = { } ;
2020-12-29 20:48:47 +00:00
this . appOptions . customization = this . editorConfig . customization ;
this . appOptions . canRenameAnonymous = ! ( ( typeof ( this . appOptions . customization ) == 'object' ) && ( typeof ( this . appOptions . customization . anonymous ) == 'object' ) && ( this . appOptions . customization . anonymous . request === false ) ) ;
this . appOptions . guestName = ( typeof ( this . appOptions . customization ) == 'object' ) && ( typeof ( this . appOptions . customization . anonymous ) == 'object' ) &&
( typeof ( this . appOptions . customization . anonymous . label ) == 'string' ) && this . appOptions . customization . anonymous . label . trim ( ) !== '' ?
Common . Utils . String . htmlEncode ( this . appOptions . customization . anonymous . label ) : this . textGuest ;
var value ;
if ( this . appOptions . canRenameAnonymous ) {
value = Common . localStorage . getItem ( "guest-username" ) ;
Common . Utils . InternalSettings . set ( "guest-username" , value ) ;
Common . Utils . InternalSettings . set ( "save-guest-username" , ! ! value ) ;
}
2016-03-11 00:48:53 +00:00
this . editorConfig . user =
2021-05-25 13:39:12 +00:00
this . appOptions . user = Common . Utils . fillUserInfo ( this . editorConfig . user , this . editorConfig . lang , value ? ( value + ' (' + this . appOptions . guestName + ')' ) : this . textAnonymous ,
Common . localStorage . getItem ( "guest-id" ) || ( 'uid-' + Date . now ( ) ) ) ;
this . appOptions . user . anonymous && Common . localStorage . setItem ( "guest-id" , this . appOptions . user . id ) ;
2022-04-29 11:49:28 +00:00
this . appOptions . isDesktopApp = this . editorConfig . targetApp == 'desktop' || Common . Controllers . Desktop . isActive ( ) ;
2021-08-24 15:30:55 +00:00
this . appOptions . canCreateNew = this . editorConfig . canRequestCreateNew || ! _ . isEmpty ( this . editorConfig . createUrl ) || this . editorConfig . templates && this . editorConfig . templates . length ;
2019-07-15 08:01:29 +00:00
this . appOptions . canOpenRecent = this . editorConfig . recent !== undefined && ! this . appOptions . isDesktopApp ;
2016-03-11 00:48:53 +00:00
this . appOptions . templates = this . editorConfig . templates ;
this . appOptions . recent = this . editorConfig . recent ;
this . appOptions . createUrl = this . editorConfig . createUrl ;
2020-06-15 17:05:19 +00:00
this . appOptions . canRequestCreateNew = this . editorConfig . canRequestCreateNew ;
2016-03-11 00:48:53 +00:00
this . appOptions . lang = this . editorConfig . lang ;
2016-04-08 08:55:15 +00:00
this . appOptions . location = ( typeof ( this . editorConfig . location ) == 'string' ) ? this . editorConfig . location . toLowerCase ( ) : '' ;
2019-07-31 10:19:00 +00:00
this . appOptions . region = ( typeof ( this . editorConfig . region ) == 'string' ) ? this . editorConfig . region . toLowerCase ( ) : this . editorConfig . region ;
2016-03-25 07:48:19 +00:00
this . appOptions . canAutosave = false ;
2016-03-11 00:48:53 +00:00
this . appOptions . canAnalytics = false ;
this . appOptions . sharingSettingsUrl = this . editorConfig . sharingSettingsUrl ;
2018-09-27 12:25:15 +00:00
this . appOptions . saveAsUrl = this . editorConfig . saveAsUrl ;
2018-10-03 11:00:08 +00:00
this . appOptions . fileChoiceUrl = this . editorConfig . fileChoiceUrl ;
2016-03-11 00:48:53 +00:00
this . appOptions . isEditDiagram = this . editorConfig . mode == 'editdiagram' ;
this . appOptions . isEditMailMerge = this . editorConfig . mode == 'editmerge' ;
2022-03-11 10:58:15 +00:00
this . appOptions . isEditOle = this . editorConfig . mode == 'editole' ;
2019-11-27 07:22:25 +00:00
this . appOptions . canRequestClose = this . editorConfig . canRequestClose ;
this . appOptions . canBackToFolder = ( this . editorConfig . canBackToFolder !== false ) && ( typeof ( this . editorConfig . customization ) == 'object' ) && ( typeof ( this . editorConfig . customization . goback ) == 'object' )
&& ( ! _ . isEmpty ( this . editorConfig . customization . goback . url ) || this . editorConfig . customization . goback . requestClose && this . appOptions . canRequestClose ) ;
2019-07-15 08:01:29 +00:00
this . appOptions . canBack = this . appOptions . canBackToFolder === true ;
2016-07-05 12:21:26 +00:00
this . appOptions . canPlugins = false ;
2019-04-25 11:58:48 +00:00
this . appOptions . canRequestUsers = this . editorConfig . canRequestUsers ;
2019-06-26 11:04:02 +00:00
this . appOptions . canRequestSendNotify = this . editorConfig . canRequestSendNotify ;
2019-07-26 09:54:20 +00:00
this . appOptions . canRequestSaveAs = this . editorConfig . canRequestSaveAs ;
2019-07-26 11:49:53 +00:00
this . appOptions . canRequestInsertImage = this . editorConfig . canRequestInsertImage ;
2019-11-01 07:36:21 +00:00
this . appOptions . compatibleFeatures = ( typeof ( this . appOptions . customization ) == 'object' ) && ! ! this . appOptions . customization . compatibleFeatures ;
2019-11-28 13:54:14 +00:00
this . appOptions . canRequestSharingSettings = this . editorConfig . canRequestSharingSettings ;
2019-12-23 12:51:00 +00:00
this . appOptions . mentionShare = ! ( ( typeof ( this . appOptions . customization ) == 'object' ) && ( this . appOptions . customization . mentionShare == false ) ) ;
2020-03-20 12:29:47 +00:00
this . appOptions . canMakeActionLink = this . editorConfig . canMakeActionLink ;
2020-09-11 16:30:34 +00:00
this . appOptions . canFeaturePivot = true ;
2021-12-09 10:50:52 +00:00
this . appOptions . canFeatureViews = true ;
2022-06-07 20:59:50 +00:00
this . appOptions . canRequestReferenceData = this . editorConfig . canRequestReferenceData ;
2016-03-11 00:48:53 +00:00
2022-03-11 10:58:15 +00:00
if ( this . appOptions . user . guest && this . appOptions . canRenameAnonymous && ! this . appOptions . isEditDiagram && ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditOle )
2021-01-13 09:32:38 +00:00
Common . NotificationCenter . on ( 'user:rename' , _ . bind ( this . showRenameUserDialog , this ) ) ;
2020-12-18 10:23:14 +00:00
2016-03-11 00:48:53 +00:00
this . headerView = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) ;
2020-08-04 19:20:20 +00:00
this . headerView . setCanBack ( this . appOptions . canBackToFolder === true , ( this . appOptions . canBackToFolder ) ? this . editorConfig . customization . goback . text : '' ) ;
2016-03-11 00:48:53 +00:00
2019-11-29 08:29:13 +00:00
var reg = Common . localStorage . getItem ( "sse-settings-reg-settings" ) ,
2019-12-06 13:46:11 +00:00
isUseBaseSeparator = Common . localStorage . getBool ( "sse-settings-use-base-separator" , true ) ,
2019-12-09 11:53:06 +00:00
decimal = undefined ,
group = undefined ;
2019-12-06 13:46:11 +00:00
Common . Utils . InternalSettings . set ( "sse-settings-use-base-separator" , isUseBaseSeparator ) ;
2019-12-09 11:53:06 +00:00
if ( ! isUseBaseSeparator ) {
decimal = Common . localStorage . getItem ( "sse-settings-decimal-separator" ) ;
group = Common . localStorage . getItem ( "sse-settings-group-separator" ) ;
}
2019-11-29 08:29:13 +00:00
if ( reg !== null )
this . api . asc _setLocale ( parseInt ( reg ) , decimal , group ) ;
2016-03-11 00:48:53 +00:00
else {
2019-11-29 08:29:13 +00:00
reg = this . appOptions . region ;
reg = Common . util . LanguageInfo . getLanguages ( ) . hasOwnProperty ( reg ) ? reg : Common . util . LanguageInfo . getLocalLanguageCode ( reg ) ;
if ( reg !== null )
reg = parseInt ( reg ) ;
2019-07-31 10:19:00 +00:00
else
2019-11-29 08:29:13 +00:00
reg = ( this . editorConfig . lang ) ? parseInt ( Common . util . LanguageInfo . getLocalLanguageCode ( this . editorConfig . lang ) ) : 0x0409 ;
this . api . asc _setLocale ( reg , decimal , group ) ;
2016-03-11 00:48:53 +00:00
}
2020-12-07 19:20:22 +00:00
Common . Utils . InternalSettings . set ( "sse-config-lang" , this . editorConfig . lang ) ;
2016-03-11 00:48:53 +00:00
2020-12-18 10:23:14 +00:00
value = Common . localStorage . getBool ( "sse-settings-r1c1" ) ;
2018-11-14 15:11:36 +00:00
Common . Utils . InternalSettings . set ( "sse-settings-r1c1" , value ) ;
this . api . asc _setR1C1Mode ( value ) ;
2016-04-08 08:55:15 +00:00
if ( this . appOptions . location == 'us' || this . appOptions . location == 'ca' )
Common . Utils . Metric . setDefaultMetric ( Common . Utils . Metric . c _MetricUnits . inch ) ;
2016-12-05 14:08:58 +00:00
2019-10-04 07:36:10 +00:00
if ( ! ( this . editorConfig . customization && ( this . editorConfig . customization . toolbarNoTabs ||
( this . editorConfig . targetApp !== 'desktop' ) && ( this . editorConfig . customization . loaderName || this . editorConfig . customization . loaderLogo ) ) ) ) {
2019-09-12 14:12:06 +00:00
$ ( '#editor_sdk' ) . append ( '<div class="doc-placeholder">' + '<div class="columns"></div>' . repeat ( 2 ) + '</div>' ) ;
2019-10-04 07:36:10 +00:00
}
2019-09-12 14:12:06 +00:00
2020-05-22 14:55:35 +00:00
var value = Common . localStorage . getItem ( "sse-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-macros-mode" , value ) ;
2022-05-20 10:24:17 +00:00
value = Common . localStorage . getItem ( "sse-allow-macros-request" ) ;
Common . Utils . InternalSettings . set ( "sse-allow-macros-request" , ( value !== null ) ? parseInt ( value ) : 0 ) ;
2021-05-12 16:04:14 +00:00
this . appOptions . wopi = this . editorConfig . wopi ;
2022-03-11 10:58:15 +00:00
this . isFrameClosed = ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) ;
2018-02-21 23:23:32 +00:00
Common . Controllers . Desktop . init ( this . appOptions ) ;
2021-11-18 17:07:13 +00:00
2022-03-16 11:17:25 +00:00
if ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) {
2021-11-18 17:07:13 +00:00
Common . UI . HintManager . setMode ( this . appOptions ) ;
}
2016-03-11 00:48:53 +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 ) ;
2022-05-16 16:53:13 +00:00
var _options = $ . extend ( { } , data . doc . options , this . editorConfig . actionLink || { } ) ;
2019-03-12 12:47:05 +00:00
var _user = new Asc . asc _CUserInfo ( ) ;
2016-03-11 00:48:53 +00:00
_user . put _Id ( this . appOptions . user . id ) ;
_user . put _FullName ( this . appOptions . user . fullname ) ;
2021-05-25 13:57:56 +00:00
_user . put _IsAnonymousUser ( ! ! this . appOptions . user . anonymous ) ;
2016-03-11 00:48:53 +00:00
2016-04-18 12:21:15 +00:00
docInfo = new Asc . asc _CDocInfo ( ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _Id ( data . doc . key ) ;
docInfo . put _Url ( data . doc . url ) ;
2022-07-29 10:44:00 +00:00
docInfo . put _DirectUrl ( data . doc . directUrl ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _Title ( data . doc . title ) ;
docInfo . put _Format ( data . doc . fileType ) ;
docInfo . put _VKey ( data . doc . vkey ) ;
2019-03-12 12:47:05 +00:00
docInfo . put _Options ( _options ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _UserInfo ( _user ) ;
docInfo . put _CallbackUrl ( this . editorConfig . callbackUrl ) ;
2016-11-24 13:44:54 +00:00
docInfo . put _Token ( data . doc . token ) ;
2022-05-16 16:53:13 +00:00
docInfo . put _Permissions ( data . doc . permissions ) ;
2020-05-08 08:58:31 +00:00
docInfo . put _EncryptedInfo ( this . editorConfig . encryptionKeys ) ;
2021-08-31 13:12:30 +00:00
docInfo . put _Lang ( this . editorConfig . lang ) ;
docInfo . put _Mode ( this . editorConfig . mode ) ;
2022-06-07 14:43:17 +00:00
docInfo . put _ReferenceData ( data . doc . referenceData ) ;
2022-04-19 15:59:18 +00:00
2022-05-11 20:16:07 +00:00
var coEditMode = ! ( this . editorConfig . coEditing && typeof this . editorConfig . coEditing == 'object' ) ? 'fast' : // fast by default
this . editorConfig . mode === 'view' && this . editorConfig . coEditing . change !== false ? 'fast' : // if can change mode in viewer - set fast for using live viewer
this . editorConfig . coEditing . mode || 'fast' ;
docInfo . put _CoEditingMode ( coEditMode ) ;
2022-02-28 17:21:25 +00:00
2020-05-22 14:55:35 +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 ) ;
2019-09-18 08:08:01 +00:00
this . headerView && this . headerView . setDocumentCaption ( data . doc . title ) ;
2020-01-24 11:26:16 +00:00
Common . Utils . InternalSettings . set ( "sse-doc-info-key" , data . doc . key ) ;
2016-03-11 00:48:53 +00:00
}
this . api . asc _registerCallback ( 'asc_onGetEditorPermissions' , _ . bind ( this . onEditorPermissions , this ) ) ;
2017-11-23 10:40:45 +00:00
this . api . asc _registerCallback ( 'asc_onLicenseChanged' , _ . bind ( this . onLicenseChanged , this ) ) ;
2022-05-19 14:54:49 +00:00
this . api . asc _registerCallback ( 'asc_onMacrosPermissionRequest' , _ . bind ( this . onMacrosPermissionRequest , this ) ) ;
2020-05-22 14:55:35 +00:00
this . api . asc _registerCallback ( 'asc_onRunAutostartMacroses' , _ . bind ( this . onRunAutostartMacroses , this ) ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _setDocInfo ( docInfo ) ;
this . api . asc _getEditorPermissions ( this . editorConfig . licenseUrl , this . editorConfig . customerId ) ;
} ,
onProcessSaveResult : function ( data ) {
this . api . asc _OnSaveEnd ( data . result ) ;
if ( data && data . result === false ) {
Common . UI . error ( {
title : this . criticalErrorTitle ,
msg : _ . isEmpty ( data . message ) ? this . errorProcessSaveResult : data . message
} ) ;
}
} ,
onProcessRightsChange : function ( data ) {
if ( data && data . enabled === false ) {
var me = this ,
old _rights = this . _state . lostEditingRights ;
this . _state . lostEditingRights = ! this . _state . lostEditingRights ;
this . api . asc _coAuthoringDisconnect ( ) ;
2019-04-08 15:40:08 +00:00
Common . NotificationCenter . trigger ( 'collaboration:sharingdeny' ) ;
2016-11-10 12:38:26 +00:00
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
2016-03-11 00:48:53 +00:00
if ( ! old _rights )
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
2016-08-09 09:25:34 +00:00
maxwidth : 600 ,
2016-03-11 00:48:53 +00:00
msg : _ . isEmpty ( data . message ) ? this . warnProcessRightsChange : data . message ,
callback : function ( ) {
me . _state . lostEditingRights = false ;
me . onEditComplete ( ) ;
}
} ) ;
}
} ,
2017-10-24 11:23:15 +00:00
onDownloadAs : function ( format ) {
2019-01-10 14:20:59 +00:00
if ( ! this . appOptions . canDownload ) {
Common . Gateway . reportError ( Asc . c _oAscError . ID . AccessDeny , this . errorAccessDeny ) ;
return ;
}
2019-01-10 11:00:30 +00:00
this . _state . isFromGatewayDownloadAs = true ;
2017-10-24 11:23:15 +00:00
var _format = ( format && ( typeof format == 'string' ) ) ? Asc . c _oAscFileType [ format . toUpperCase ( ) ] : null ,
_supported = [
Asc . c _oAscFileType . XLSX ,
Asc . c _oAscFileType . ODS ,
Asc . c _oAscFileType . CSV ,
2018-07-18 11:07:24 +00:00
Asc . c _oAscFileType . PDF ,
2019-02-21 13:10:37 +00:00
Asc . c _oAscFileType . PDFA ,
Asc . c _oAscFileType . XLTX ,
2021-07-29 15:52:37 +00:00
Asc . c _oAscFileType . OTS ,
Asc . c _oAscFileType . XLSM
2017-10-24 11:23:15 +00:00
] ;
if ( ! _format || _supported . indexOf ( _format ) < 0 )
_format = Asc . c _oAscFileType . XLSX ;
2018-07-18 11:07:24 +00:00
if ( _format == Asc . c _oAscFileType . PDF || _format == Asc . c _oAscFileType . PDFA )
Common . NotificationCenter . trigger ( 'download:settings' , this , _format , true ) ;
2018-04-05 11:29:37 +00:00
else
2019-07-24 08:36:13 +00:00
this . api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( _format , true ) ) ;
2016-03-11 00:48:53 +00:00
} ,
onProcessMouse : function ( data ) {
if ( data . type == 'mouseup' ) {
var editor = document . getElementById ( 'editor_sdk' ) ;
if ( editor ) {
var rect = editor . getBoundingClientRect ( ) ;
2017-04-11 11:05:56 +00:00
var event = data . event || { } ;
2016-03-11 00:48:53 +00:00
this . api . asc _onMouseUp ( event , data . x - rect . left , data . y - rect . top ) ;
}
}
} ,
2021-03-29 11:30:31 +00:00
onRequestClose : function ( ) {
var me = this ;
if ( this . api . asc _isDocumentModified ( ) ) {
this . api . asc _stopSaving ( ) ;
Common . UI . warning ( {
closable : false ,
width : 500 ,
title : this . notcriticalErrorTitle ,
msg : this . leavePageTextOnClose ,
buttons : [ 'ok' , 'cancel' ] ,
primary : 'ok' ,
callback : function ( btn ) {
if ( btn == 'ok' ) {
me . api . asc _undoAllChanges ( ) ;
2021-03-29 13:41:49 +00:00
me . api . asc _continueSaving ( ) ;
2021-03-29 11:30:31 +00:00
Common . Gateway . requestClose ( ) ;
// Common.Controllers.Desktop.requestClose();
} else
me . api . asc _continueSaving ( ) ;
}
} ) ;
} else {
Common . Gateway . requestClose ( ) ;
// Common.Controllers.Desktop.requestClose();
}
} ,
2019-01-10 13:20:27 +00:00
goBack : function ( current ) {
2018-02-13 08:23:53 +00:00
var me = this ;
2018-02-21 23:23:32 +00:00
if ( ! Common . Controllers . Desktop . process ( 'goback' ) ) {
2019-11-27 07:22:25 +00:00
if ( me . appOptions . customization . goback . requestClose && me . appOptions . canRequestClose ) {
2021-03-29 11:30:31 +00:00
me . onRequestClose ( ) ;
2018-02-13 08:23:53 +00:00
} else {
2019-11-27 07:22:25 +00:00
var href = me . appOptions . customization . goback . url ;
if ( ! current && me . appOptions . customization . goback . blank !== false ) {
window . open ( href , "_blank" ) ;
} else {
parent . location . href = href ;
}
2018-02-13 08:23:53 +00:00
}
2016-03-11 00:48:53 +00:00
}
} ,
2020-12-14 19:45:30 +00:00
markFavorite : function ( favorite ) {
if ( ! Common . Controllers . Desktop . process ( 'markfavorite' ) ) {
Common . Gateway . metaChange ( {
favorite : favorite
} ) ;
}
} ,
onSetFavorite : function ( favorite ) {
this . appOptions . canFavorite && this . headerView && this . headerView . setFavorite ( ! ! favorite ) ;
} ,
2016-03-11 00:48:53 +00:00
onEditComplete : function ( cmp , opts ) {
if ( opts && opts . restorefocus && this . api . isCEditorFocused ) {
this . formulaInput . blur ( ) ;
this . formulaInput . focus ( ) ;
} else {
this . getApplication ( ) . getController ( 'DocumentHolder' ) . getView ( 'DocumentHolder' ) . focus ( ) ;
this . api . isCEditorFocused = false ;
}
2021-07-12 16:33:05 +00:00
Common . UI . HintManager . clearHints ( true ) ;
2016-03-11 00:48:53 +00:00
} ,
2016-08-18 08:34:00 +00:00
onSelectionChanged : function ( info ) {
2020-05-14 08:39:04 +00:00
if ( ! this . _isChartDataReady && info . asc _getSelectionType ( ) == Asc . c _oAscSelectionType . RangeChart ) {
2016-08-18 08:34:00 +00:00
this . _isChartDataReady = true ;
Common . Gateway . internalMessage ( 'chartDataReady' ) ;
}
} ,
2016-03-11 00:48:53 +00:00
onLongActionBegin : function ( type , id ) {
var action = { id : id , type : type } ;
this . stackLongActions . push ( action ) ;
this . setLongActionView ( action ) ;
} ,
onLongActionEnd : function ( type , id ) {
var action = { id : id , type : type } ;
this . stackLongActions . pop ( action ) ;
2019-09-18 07:32:29 +00:00
this . headerView && this . headerView . setDocumentCaption ( this . api . asc _getDocumentName ( ) ) ;
2016-03-11 00:48:53 +00:00
this . updateWindowTitle ( this . api . asc _isDocumentModified ( ) , true ) ;
2016-04-05 11:52:34 +00:00
if ( type === Asc . c _oAscAsyncActionType . BlockInteraction && id == Asc . c _oAscAsyncAction . Open ) {
2016-03-11 00:48:53 +00:00
Common . Gateway . internalMessage ( 'documentReady' , { } ) ;
2019-04-25 12:22:39 +00:00
this . onDocumentContentReady ( ) ;
2016-03-11 00:48:53 +00:00
}
2016-04-05 11:52:34 +00:00
action = this . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . Information } ) ;
2021-07-28 16:49:34 +00:00
if ( action ) {
this . setLongActionView ( action ) ;
} else {
var me = this ;
if ( ( id == Asc . c _oAscAsyncAction [ 'Save' ] || id == Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] ) && ! this . appOptions . isOffline ) {
if ( this . _state . fastCoauth && this . _state . usersCount > 1 ) {
me . _state . timerSave = setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( me . textChangesSaved , false , 3000 ) ;
} , 500 ) ;
} else
me . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( me . textChangesSaved , false , 3000 ) ;
} else
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' ) ;
}
2016-03-11 00:48:53 +00:00
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscAsyncAction . Save ) {
2021-07-28 16:49:34 +00:00
this . synchronizeChanges ( ) ;
2016-03-11 00:48:53 +00:00
}
2016-04-05 11:52:34 +00:00
action = this . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ;
2016-03-11 00:48:53 +00:00
if ( action ) {
this . setLongActionView ( action ) ;
} else {
if ( this . loadMask ) {
2020-04-22 09:35:55 +00:00
if ( this . loadMask . isVisible ( ) && ! this . dontCloseDummyComment && ! this . inTextareaControl && ! Common . Utils . ModalWindow . isVisible ( ) && ! this . inFormControl )
2016-03-11 00:48:53 +00:00
this . api . asc _enableKeyEvents ( true ) ;
this . loadMask . hide ( ) ;
}
2020-04-22 09:35:55 +00:00
if ( type == Asc . c _oAscAsyncActionType . BlockInteraction && ! ( ( id == Asc . c _oAscAsyncAction [ 'LoadDocumentFonts' ] || id == Asc . c _oAscAsyncAction [ 'ApplyChanges' ] ) && ( this . dontCloseDummyComment || this . inTextareaControl || Common . Utils . ModalWindow . isVisible ( ) || this . inFormControl ) ) )
2016-03-11 00:48:53 +00:00
this . onEditComplete ( this . loadMask , { restorefocus : true } ) ;
}
2021-07-01 21:54:55 +00:00
if ( id == Asc . c _oAscAsyncAction [ 'Disconnect' ] ) {
2022-03-11 18:40:53 +00:00
this . _state . timerDisconnect && clearTimeout ( this . _state . timerDisconnect ) ;
2021-07-01 21:54:55 +00:00
this . disableEditing ( false , true ) ;
2021-12-13 16:20:55 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . hideDisconnectTip ( ) ;
2021-12-13 21:37:33 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( this . textReconnect ) ;
2021-07-01 21:54:55 +00:00
}
2016-03-11 00:48:53 +00:00
} ,
setLongActionView : function ( action ) {
2021-07-28 16:49:34 +00:00
var title = '' , text = '' , force = false ;
2021-12-13 21:07:24 +00:00
var statusCallback = null ; // call after showing status
2016-03-11 00:48:53 +00:00
switch ( action . id ) {
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . Open :
2016-03-11 00:48:53 +00:00
title = this . openTitleText ;
2021-07-28 16:49:34 +00:00
text = this . openTextText ;
2016-03-11 00:48:53 +00:00
break ;
2021-07-28 16:49:34 +00:00
case Asc . c _oAscAsyncAction [ 'Save' ] :
case Asc . c _oAscAsyncAction [ 'ForceSaveButton' ] :
2017-04-11 11:05:56 +00:00
case Asc . c _oAscAsyncAction . ForceSaveTimeout :
2021-07-28 16:49:34 +00:00
clearTimeout ( this . _state . timerSave ) ;
force = true ;
2021-12-07 14:09:44 +00:00
title = this . saveTitleText ;
2021-07-28 16:49:34 +00:00
text = ( ! this . appOptions . isOffline ) ? this . saveTextText : '' ;
2017-04-11 11:05:56 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . LoadDocumentFonts :
2016-03-11 00:48:53 +00:00
title = this . loadFontsTitleText ;
2021-07-28 16:49:34 +00:00
text = this . loadFontsTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . LoadDocumentImages :
2016-03-11 00:48:53 +00:00
title = this . loadImagesTitleText ;
2021-07-28 16:49:34 +00:00
text = this . loadImagesTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . LoadFont :
2016-03-11 00:48:53 +00:00
title = this . loadFontTitleText ;
2021-07-28 16:49:34 +00:00
text = this . loadFontTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . LoadImage :
2016-03-11 00:48:53 +00:00
title = this . loadImageTitleText ;
2021-07-28 16:49:34 +00:00
text = this . loadImageTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . DownloadAs :
2016-03-11 00:48:53 +00:00
title = this . downloadTitleText ;
2021-07-28 16:49:34 +00:00
text = this . downloadTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . Print :
2016-03-11 00:48:53 +00:00
title = this . printTitleText ;
2021-07-28 16:49:34 +00:00
text = this . printTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . UploadImage :
2016-03-11 00:48:53 +00:00
title = this . uploadImageTitleText ;
2021-07-28 16:49:34 +00:00
text = this . uploadImageTextText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . SlowOperation :
2016-03-11 00:48:53 +00:00
title = this . textPleaseWait ;
2021-07-28 16:49:34 +00:00
text = this . textPleaseWait ;
2016-03-11 00:48:53 +00:00
break ;
2019-05-08 11:52:35 +00:00
case Asc . c _oAscAsyncAction [ 'Waiting' ] :
title = this . waitText ;
2021-07-28 16:49:34 +00:00
text = this . waitText ;
2019-05-08 11:52:35 +00:00
break ;
2016-03-11 00:48:53 +00:00
case ApplyEditRights :
title = this . txtEditingMode ;
2021-07-28 16:49:34 +00:00
text = this . waitText ;
2016-03-11 00:48:53 +00:00
break ;
case LoadingDocument :
2021-06-18 13:53:50 +00:00
title = this . loadingDocumentTitleText + ' ' ;
2021-07-28 16:49:34 +00:00
text = this . loadingDocumentTitleText ;
2016-03-11 00:48:53 +00:00
break ;
2021-07-01 21:54:55 +00:00
case Asc . c _oAscAsyncAction [ 'Disconnect' ] :
title = this . textDisconnect ;
2021-07-28 16:49:34 +00:00
text = this . textDisconnect ;
2021-07-01 21:54:55 +00:00
this . disableEditing ( true , true ) ;
2021-12-13 21:07:24 +00:00
var me = this ;
statusCallback = function ( ) {
2022-03-11 18:40:53 +00:00
me . _state . timerDisconnect = setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Statusbar' ) . showDisconnectTip ( ) ;
} , me . _state . unloadTimer || 0 ) ;
2021-12-13 21:07:24 +00:00
} ;
2021-07-01 21:54:55 +00:00
break ;
2018-02-05 09:22:03 +00:00
default :
if ( typeof action . id == 'string' ) {
title = action . id ;
2021-07-28 16:49:34 +00:00
text = action . id ;
2018-02-05 09:22:03 +00:00
}
break ;
2016-03-11 00:48:53 +00:00
}
2016-04-05 11:52:34 +00:00
if ( action . type == Asc . c _oAscAsyncActionType . BlockInteraction ) {
2016-03-11 00:48:53 +00:00
! this . loadMask && ( this . loadMask = new Common . UI . LoadMask ( { owner : $ ( '#viewport' ) } ) ) ;
this . loadMask . setTitle ( title ) ;
if ( ! this . isShowOpenDialog ) {
this . api . asc _enableKeyEvents ( false ) ;
this . loadMask . show ( ) ;
}
2021-07-28 16:49:34 +00:00
} else {
2021-12-13 21:07:24 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( text , force , 0 , statusCallback ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onApplyEditRights : function ( data ) {
2021-07-28 16:49:34 +00:00
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' ) ;
2017-04-11 11:05:56 +00:00
if ( data && ! data . allowed ) {
Common . UI . info ( {
title : this . requestEditFailedTitleText ,
msg : data . message || this . requestEditFailedMessageText
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
2019-04-25 12:22:39 +00:00
onDocumentContentReady : function ( ) {
2016-03-11 00:48:53 +00:00
if ( this . _isDocReady )
return ;
2017-09-08 08:39:07 +00:00
if ( this . _state . openDlg )
this . _state . openDlg . close ( ) ;
2016-03-11 00:48:53 +00:00
var me = this ,
2016-04-11 08:05:14 +00:00
value ;
2016-03-11 00:48:53 +00:00
me . _isDocReady = true ;
2017-04-27 15:40:27 +00:00
Common . NotificationCenter . trigger ( 'app:ready' , this . appOptions ) ;
2016-03-11 00:48:53 +00:00
me . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
2022-03-11 10:58:15 +00:00
value = ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram || this . appOptions . isEditOle ) ? 100 : Common . localStorage . getItem ( "sse-settings-zoom" ) ;
2017-10-04 15:44:01 +00:00
Common . Utils . InternalSettings . set ( "sse-settings-zoom" , value ) ;
2016-09-13 08:28:21 +00:00
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-03-11 00:48:53 +00:00
2022-10-03 13:01:19 +00:00
value = Common . localStorage . getBool ( "sse-settings-show-alt-hints" , Common . Utils . isMac ? false : true ) ;
Common . Utils . InternalSettings . set ( "sse-settings-show-alt-hints" , value ) ;
2022-05-17 15:55:18 +00:00
2016-03-11 00:48:53 +00:00
/** coauthoring begin **/
2017-10-04 15:44:01 +00:00
this . isLiveCommenting = Common . localStorage . getBool ( "sse-settings-livecomment" , true ) ;
Common . Utils . InternalSettings . set ( "sse-settings-livecomment" , this . isLiveCommenting ) ;
2018-04-26 12:17:02 +00:00
value = Common . localStorage . getBool ( "sse-settings-resolvedcomment" ) ;
2017-10-04 15:44:01 +00:00
Common . Utils . InternalSettings . set ( "sse-settings-resolvedcomment" , value ) ;
this . isLiveCommenting ? this . api . asc _showComments ( value ) : this . api . asc _hideComments ( ) ;
2016-03-11 00:48:53 +00:00
2021-04-02 19:36:08 +00:00
this . _state . fastCoauth = Common . Utils . InternalSettings . get ( "sse-settings-coauthmode" ) ;
this . api . asc _SetFastCollaborative ( me . _state . fastCoauth ) ;
this . api . asc _setAutoSaveGap ( Common . Utils . InternalSettings . get ( "sse-settings-autosave" ) ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
2021-11-02 12:56:37 +00:00
// spellcheck
if ( Common . UI . FeaturesManager . canChange ( 'spellcheck' ) ) { // get from local storage
/** spellcheck settings begin **/
var ignoreUppercase = Common . localStorage . getBool ( "sse-spellcheck-ignore-uppercase-words" , true ) ;
Common . Utils . InternalSettings . set ( "sse-spellcheck-ignore-uppercase-words" , ignoreUppercase ) ;
this . api . asc _ignoreUppercase ( ignoreUppercase ) ;
var ignoreNumbers = Common . localStorage . getBool ( "sse-spellcheck-ignore-numbers-words" , true ) ;
Common . Utils . InternalSettings . set ( "sse-spellcheck-ignore-numbers-words" , ignoreNumbers ) ;
this . api . asc _ignoreNumbers ( ignoreNumbers ) ;
/** spellcheck settings end **/
}
2019-11-27 12:55:39 +00:00
2016-03-11 00:48:53 +00:00
me . api . asc _registerCallback ( 'asc_onStartAction' , _ . bind ( me . onLongActionBegin , me ) ) ;
me . api . asc _registerCallback ( 'asc_onConfirmAction' , _ . bind ( me . onConfirmAction , me ) ) ;
me . api . asc _registerCallback ( 'asc_onActiveSheetChanged' , _ . bind ( me . onActiveSheetChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_onPrint' , _ . bind ( me . onPrint , me ) ) ;
var application = me . getApplication ( ) ;
me . headerView . setDocumentCaption ( me . api . asc _getDocumentName ( ) ) ;
me . updateWindowTitle ( me . api . asc _isDocumentModified ( ) , true ) ;
var toolbarController = application . getController ( 'Toolbar' ) ,
statusbarController = application . getController ( 'Statusbar' ) ,
documentHolderController = application . getController ( 'DocumentHolder' ) ,
// fontsController = application.getController('Common.Controllers.Fonts'),
rightmenuController = application . getController ( 'RightMenu' ) ,
leftmenuController = application . getController ( 'LeftMenu' ) ,
celleditorController = application . getController ( 'CellEditor' ) ,
statusbarView = statusbarController . getView ( 'Statusbar' ) ,
leftMenuView = leftmenuController . getView ( 'LeftMenu' ) ,
documentHolderView = documentHolderController . getView ( 'DocumentHolder' ) ,
2016-07-05 12:21:26 +00:00
chatController = application . getController ( 'Common.Controllers.Chat' ) ,
2019-08-05 08:55:24 +00:00
pluginsController = application . getController ( 'Common.Controllers.Plugins' ) ,
spellcheckController = application . getController ( 'Spellcheck' ) ;
2016-03-11 00:48:53 +00:00
leftMenuView . getMenu ( 'file' ) . loadDocument ( { doc : me . appOptions . spreadsheet } ) ;
leftmenuController . setMode ( me . appOptions ) . createDelayedElements ( ) . setApi ( me . api ) ;
2016-07-05 12:21:26 +00:00
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle ) {
2020-07-29 15:32:52 +00:00
pluginsController . setApi ( me . api ) ;
2020-07-29 16:03:29 +00:00
this . api && this . api . asc _setFrozenPaneBorderType ( Common . localStorage . getBool ( 'sse-freeze-shadow' , true ) ? Asc . c _oAscFrozenPaneBorderType . shadow : Asc . c _oAscFrozenPaneBorderType . line ) ;
2022-03-28 16:41:59 +00:00
application . getController ( 'Common.Controllers.ExternalOleEditor' ) . setApi ( this . api ) . loadConfig ( { config : this . editorConfig , customization : this . editorConfig . customization } ) ;
2017-12-07 12:02:19 +00:00
}
2016-07-05 12:21:26 +00:00
2016-03-11 00:48:53 +00:00
leftMenuView . disableMenu ( 'all' , false ) ;
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle && me . appOptions . canBranding ) {
2016-03-11 00:48:53 +00:00
me . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'about' ) . setLicInfo ( me . editorConfig . customization ) ;
}
documentHolderController . setApi ( me . api ) . loadConfig ( { config : me . editorConfig } ) ;
chatController . setApi ( this . api ) . setMode ( this . appOptions ) ;
statusbarController . createDelayedElements ( ) ;
statusbarController . setApi ( me . api ) ;
documentHolderView . setApi ( me . api ) ;
statusbarView . update ( ) ;
this . formulaInput = celleditorController . getView ( 'CellEditor' ) . $el . find ( 'textarea' ) ;
if ( me . appOptions . isEdit ) {
2021-11-02 12:56:37 +00:00
Common . UI . FeaturesManager . canChange ( 'spellcheck' ) && spellcheckController . setApi ( me . api ) . setMode ( me . appOptions ) ;
2019-08-06 11:27:47 +00:00
2017-04-11 11:05:56 +00:00
if ( me . appOptions . canForcesave ) { // use asc_setIsForceSaveOnUserSave only when customization->forcesave = true
2017-10-04 15:44:01 +00:00
me . appOptions . forcesave = Common . localStorage . getBool ( "sse-settings-forcesave" , me . appOptions . canForcesave ) ;
Common . Utils . InternalSettings . set ( "sse-settings-forcesave" , me . appOptions . forcesave ) ;
2017-04-11 11:05:56 +00:00
me . api . asc _setIsForceSaveOnUserSave ( me . appOptions . forcesave ) ;
}
2020-06-03 17:49:54 +00:00
value = Common . localStorage . getItem ( "sse-settings-paste-button" ) ;
if ( value === null ) value = '1' ;
Common . Utils . InternalSettings . set ( "sse-settings-paste-button" , parseInt ( value ) ) ;
me . api . asc _setVisiblePasteButton ( ! ! parseInt ( value ) ) ;
2020-08-12 17:30:25 +00:00
me . loadAutoCorrectSettings ( ) ;
2020-08-11 11:35:15 +00:00
2016-03-11 00:48:53 +00:00
if ( me . needToUpdateVersion ) {
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
toolbarController . onApiCoAuthoringDisconnect ( ) ;
}
var timer _sl = setInterval ( function ( ) {
2022-03-11 10:58:15 +00:00
if ( window . styles _loaded || me . appOptions . isEditDiagram || me . appOptions . isEditMailMerge || me . appOptions . isEditOle ) {
2016-03-11 00:48:53 +00:00
clearInterval ( timer _sl ) ;
2018-11-16 13:44:11 +00:00
Common . NotificationCenter . trigger ( 'comments:updatefilter' , [ 'doc' , 'sheet' + me . api . asc _getActiveWorksheetId ( ) ] ) ;
2016-03-11 00:48:53 +00:00
documentHolderView . createDelayedElements ( ) ;
toolbarController . createDelayedElements ( ) ;
2019-08-05 13:37:09 +00:00
me . setLanguages ( ) ;
2016-03-11 00:48:53 +00:00
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle ) {
2016-05-10 13:46:51 +00:00
var shapes = me . api . asc _getPropertyEditorShapes ( ) ;
if ( shapes )
me . fillAutoShapes ( shapes [ 0 ] , shapes [ 1 ] ) ;
2016-03-11 00:48:53 +00:00
me . updateThemeColors ( ) ;
2018-09-25 13:19:33 +00:00
toolbarController . activateControls ( ) ;
2022-03-18 18:41:25 +00:00
} else if ( me . appOptions . isEditOle ) {
me . updateThemeColors ( ) ;
2016-03-11 00:48:53 +00:00
}
2016-10-12 15:38:10 +00:00
rightmenuController . createDelayedElements ( ) ;
2016-03-11 00:48:53 +00:00
me . api . asc _registerCallback ( 'asc_onDocumentCanSaveChanged' , _ . bind ( me . onDocumentCanSaveChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_OnTryUndoInFastCollaborative' , _ . bind ( me . onTryUndoInFastCollaborative , me ) ) ;
me . onDocumentModifiedChanged ( me . api . asc _isDocumentModified ( ) ) ;
var formulasDlgController = application . getController ( 'FormulaDialog' ) ;
if ( formulasDlgController ) {
2016-04-28 15:31:14 +00:00
formulasDlgController . setMode ( me . appOptions ) . setApi ( me . api ) ;
2016-03-11 00:48:53 +00:00
}
if ( me . needToUpdateVersion )
toolbarController . onApiCoAuthoringDisconnect ( ) ;
2016-11-16 09:38:16 +00:00
2017-11-28 11:25:08 +00:00
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
2017-11-23 10:40:45 +00:00
me . applyLicense ( ) ;
2016-03-11 00:48:53 +00:00
}
} , 50 ) ;
2017-06-06 08:04:04 +00:00
} else {
2022-06-21 19:05:31 +00:00
var formulasDlgController = application . getController ( 'FormulaDialog' ) ;
formulasDlgController && formulasDlgController . setMode ( me . appOptions ) . setApi ( me . api ) ;
2017-06-06 08:04:04 +00:00
documentHolderView . createDelayedElementsViewer ( ) ;
2017-11-28 11:25:08 +00:00
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
2022-04-19 15:59:18 +00:00
me . applyLicense ( ) ;
2017-06-06 08:04:04 +00:00
}
2020-01-31 13:39:24 +00:00
// TODO bug 43960
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle ) {
2020-01-31 13:39:24 +00:00
var dummyClass = ~ ~ ( 1e6 * Math . random ( ) ) ;
$ ( '.toolbar' ) . prepend ( Common . Utils . String . format ( '<div class="lazy-{0} x-huge"><div class="toolbar__icon" style="position: absolute; width: 1px; height: 1px;"></div>' , dummyClass ) ) ;
setTimeout ( function ( ) { $ ( Common . Utils . String . format ( '.toolbar .lazy-{0}' , dummyClass ) ) . remove ( ) ; } , 10 ) ;
}
2016-03-11 00:48:53 +00:00
if ( me . appOptions . canAnalytics && false )
Common . component . Analytics . initialize ( 'UA-12442749-13' , 'Spreadsheet Editor' ) ;
Common . Gateway . on ( 'applyeditrights' , _ . bind ( me . onApplyEditRights , me ) ) ;
Common . Gateway . on ( 'processsaveresult' , _ . bind ( me . onProcessSaveResult , me ) ) ;
Common . Gateway . on ( 'processrightschange' , _ . bind ( me . onProcessRightsChange , me ) ) ;
Common . Gateway . on ( 'processmouse' , _ . bind ( me . onProcessMouse , me ) ) ;
Common . Gateway . on ( 'downloadas' , _ . bind ( me . onDownloadAs , me ) ) ;
2020-12-14 19:45:30 +00:00
Common . Gateway . on ( 'setfavorite' , _ . bind ( me . onSetFavorite , me ) ) ;
2021-03-29 11:30:31 +00:00
Common . Gateway . on ( 'requestclose' , _ . bind ( me . onRequestClose , me ) ) ;
2021-06-28 17:18:53 +00:00
Common . Gateway . on ( 'refreshhistory' , _ . bind ( me . onRefreshHistory , me ) ) ;
2016-03-11 00:48:53 +00:00
Common . Gateway . sendInfo ( { mode : me . appOptions . isEdit ? 'edit' : 'view' } ) ;
$ ( document ) . on ( 'contextmenu' , _ . bind ( me . onContextMenu , me ) ) ;
// me.getViewport().getEl().un('keypress', me.lockEscapeKey, me);
2016-04-11 08:05:14 +00:00
function checkWarns ( ) {
if ( ! window [ 'AscDesktopEditor' ] ) {
var tips = [ ] ;
Common . Utils . isIE9m && tips . push ( me . warnBrowserIE9 ) ;
2016-03-11 00:48:53 +00:00
2016-04-11 08:05:14 +00:00
if ( tips . length ) me . showTips ( tips ) ;
}
document . removeEventListener ( 'visibilitychange' , checkWarns ) ;
2016-03-11 00:48:53 +00:00
}
2016-04-11 08:05:14 +00:00
if ( typeof document . hidden !== 'undefined' && document . hidden ) {
document . addEventListener ( 'visibilitychange' , checkWarns ) ;
} else checkWarns ( ) ;
2019-01-10 08:20:53 +00:00
Common . Gateway . documentReady ( ) ;
2022-03-11 10:58:15 +00:00
if ( this . appOptions . user . guest && this . appOptions . canRenameAnonymous && ! this . appOptions . isEditDiagram && ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditOle && ( Common . Utils . InternalSettings . get ( "guest-username" ) === null ) )
2021-01-13 09:32:38 +00:00
this . showRenameUserDialog ( ) ;
2017-11-23 10:40:45 +00:00
} ,
onLicenseChanged : function ( params ) {
2022-03-11 10:58:15 +00:00
if ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) return ;
2017-11-23 10:40:45 +00:00
var licType = params . asc _getLicenseType ( ) ;
2022-01-17 15:59:46 +00:00
if ( licType !== undefined && ( this . appOptions . canEdit || this . appOptions . isRestrictedEdit ) && 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-24 11:54:41 +00:00
|| licType === Asc . c _oLicenseResult . SuccessLimit && ( this . appOptions . trialMode & Asc . c _oLicenseMode . Limited ) !== 0 ) )
2018-05-28 10:00:03 +00:00
this . _state . licenseType = licType ;
2022-04-19 15:59:18 +00:00
2022-07-29 10:01:05 +00:00
if ( licType !== undefined && this . appOptions . canLiveView && ( licType === Asc . c _oLicenseResult . ConnectionsLive || licType === Asc . c _oLicenseResult . ConnectionsLiveOS ||
licType === Asc . c _oLicenseResult . UsersViewCount || licType === Asc . c _oLicenseResult . UsersViewCountOS ) )
2022-04-19 15:59:18 +00:00
this . _state . licenseType = licType ;
2017-11-23 10:40:45 +00:00
if ( this . _isDocReady )
this . applyLicense ( ) ;
} ,
2016-04-11 08:05:14 +00:00
2017-11-23 10:40:45 +00:00
applyLicense : function ( ) {
2022-04-19 15:59:18 +00:00
if ( this . editorConfig . mode === 'view' ) {
2022-07-29 10:01:05 +00:00
if ( this . appOptions . canLiveView && ( this . _state . licenseType === Asc . c _oLicenseResult . ConnectionsLive || this . _state . licenseType === Asc . c _oLicenseResult . ConnectionsLiveOS ||
this . _state . licenseType === Asc . c _oLicenseResult . UsersViewCount || this . _state . licenseType === Asc . c _oLicenseResult . UsersViewCountOS ) ) {
2022-04-19 15:59:18 +00:00
// show warning or write to log if Common.Utils.InternalSettings.get("sse-settings-coauthmode") was true ???
this . disableLiveViewing ( true ) ;
}
} else if ( this . _state . licenseType ) {
2018-05-28 10:00:03 +00:00
var license = this . _state . licenseType ,
buttons = [ 'ok' ] ,
primary = 'ok' ;
2020-11-25 14:27:53 +00:00
if ( ( this . appOptions . trialMode & Asc . c _oLicenseMode . Limited ) !== 0 &&
( license === Asc . c _oLicenseResult . SuccessLimit || license === Asc . c _oLicenseResult . ExpiredLimited || this . appOptions . permissionsLicense === Asc . c _oLicenseResult . SuccessLimit ) ) {
2020-11-09 11:52:21 +00:00
( license === Asc . c _oLicenseResult . ExpiredLimited ) && this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . setLimitMode ( ) ; // show limited hint
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 = [ { value : 'buynow' , caption : this . textBuyNow } , { value : 'contact' , caption : this . textContactUs } ] ;
primary = 'buynow' ;
}
2022-01-17 15:59:46 +00:00
if ( this . _state . licenseType !== Asc . c _oLicenseResult . SuccessLimit && ( this . appOptions . isEdit || this . appOptions . isRestrictedEdit ) ) {
2020-11-09 11:52:21 +00:00
this . disableEditing ( true ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
}
2017-11-23 10:40:45 +00:00
var value = Common . localStorage . getItem ( "sse-license-warning" ) ;
2016-03-11 00:48:53 +00:00
value = ( value !== null ) ? parseInt ( value ) : 0 ;
var now = ( new Date ) . getTime ( ) ;
if ( now - value > 86400000 ) {
Common . UI . info ( {
2020-11-09 11:52:21 +00:00
maxwidth : 500 ,
2016-03-11 00:48:53 +00:00
title : this . textNoLicenseTitle ,
2018-05-28 10:00:03 +00:00
msg : license ,
buttons : buttons ,
primary : primary ,
2016-03-11 00:48:53 +00:00
callback : function ( btn ) {
2019-02-12 07:59:32 +00:00
Common . localStorage . setItem ( "sse-license-warning" , now ) ;
2016-04-13 12:40:58 +00:00
if ( btn == 'buynow' )
2019-02-22 12:52:33 +00:00
window . open ( '{{PUBLISHER_URL}}' , "_blank" ) ;
2016-04-13 12:40:58 +00:00
else if ( btn == 'contact' )
2019-02-22 12:52:33 +00:00
window . open ( 'mailto:{{SALES_EMAIL}}' , "_blank" ) ;
2016-03-11 00:48:53 +00:00
}
} ) ;
}
2022-03-11 10:58:15 +00:00
} else if ( ! this . appOptions . isDesktopApp && ! this . appOptions . canBrandingExt && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) &&
2019-03-15 10:30:01 +00:00
this . editorConfig && this . editorConfig . customization && ( this . editorConfig . customization . loaderName || this . editorConfig . customization . loaderLogo ) ) {
Common . UI . warning ( {
title : this . textPaidFeature ,
msg : this . textCustomLoader ,
buttons : [ { value : 'contact' , caption : this . textContactUs } , { value : 'close' , caption : this . textClose } ] ,
primary : 'contact' ,
callback : function ( btn ) {
if ( btn == 'contact' )
2019-06-07 15:23:33 +00:00
window . open ( 'mailto:{{SALES_EMAIL}}' , "_blank" ) ;
2019-03-15 10:30:01 +00:00
}
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
2021-07-01 21:54:55 +00:00
disableEditing : function ( disable , temp ) {
Common . NotificationCenter . trigger ( 'editing:disable' , disable , {
viewMode : disable ,
allowSignature : false ,
allowProtect : false ,
2022-08-31 16:29:44 +00:00
rightMenu : { clear : ! temp , disable : true } ,
2021-07-01 21:54:55 +00:00
statusBar : true ,
leftMenu : { disable : true , previewMode : true } ,
fileMenu : { protect : true , history : temp } ,
comments : { disable : ! temp , previewMode : true } ,
chat : true ,
review : true ,
viewport : true ,
documentHolder : true ,
toolbar : true ,
celleditor : { previewMode : true }
} , temp ? 'reconnect' : 'disconnect' ) ;
} ,
onEditingDisable : function ( disable , options , type ) {
2017-11-23 10:40:45 +00:00
var app = this . getApplication ( ) ;
2021-07-01 21:54:55 +00:00
var action = { type : type , disable : disable , options : options } ;
if ( disable && ! this . stackDisableActions . get ( { type : type } ) )
this . stackDisableActions . push ( action ) ;
! disable && this . stackDisableActions . pop ( { type : type } ) ;
var prev _options = ! disable && ( this . stackDisableActions . length ( ) > 0 ) ? this . stackDisableActions . get ( this . stackDisableActions . length ( ) - 1 ) : null ;
if ( options . rightMenu && app . getController ( 'RightMenu' ) ) {
options . rightMenu . clear && app . getController ( 'RightMenu' ) . getView ( 'RightMenu' ) . clearSelection ( ) ;
options . rightMenu . disable && app . getController ( 'RightMenu' ) . SetDisabled ( disable , options . allowSignature ) ;
}
if ( options . statusBar ) {
2021-06-28 17:12:31 +00:00
app . getController ( 'Statusbar' ) . SetDisabled ( disable ) ;
2017-11-23 10:40:45 +00:00
}
2021-07-01 21:54:55 +00:00
if ( options . review ) {
app . getController ( 'Common.Controllers.ReviewChanges' ) . SetDisabled ( disable ) ;
}
if ( options . viewport ) {
app . getController ( 'Viewport' ) . SetDisabled ( disable ) ;
}
if ( options . toolbar ) {
app . getController ( 'Toolbar' ) . DisableToolbar ( disable , options . viewMode ) ;
}
if ( options . documentHolder ) {
app . getController ( 'DocumentHolder' ) . SetDisabled ( disable , options . allowProtect ) ;
}
if ( options . leftMenu ) {
if ( options . leftMenu . disable )
app . getController ( 'LeftMenu' ) . SetDisabled ( disable , options ) ;
if ( options . leftMenu . previewMode )
app . getController ( 'LeftMenu' ) . setPreviewMode ( disable ) ;
}
if ( options . fileMenu ) {
app . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'file' ) . SetDisabled ( disable , options . fileMenu ) ;
if ( options . leftMenu . disable )
app . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'file' ) . applyMode ( ) ;
}
if ( options . comments ) {
var comments = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( comments && options . comments . previewMode )
comments . setPreviewMode ( disable ) ;
}
if ( options . celleditor && options . celleditor . previewMode ) {
app . getController ( 'CellEditor' ) . setPreviewMode ( disable ) ;
}
if ( prev _options ) {
this . onEditingDisable ( prev _options . disable , prev _options . options , prev _options . type ) ;
2017-11-23 10:40:45 +00:00
}
} ,
2022-04-19 15:59:18 +00:00
disableLiveViewing : function ( disable ) {
this . appOptions . canLiveView = ! disable ;
this . api . asc _SetFastCollaborative ( ! disable ) ;
Common . Utils . InternalSettings . set ( "sse-settings-coauthmode" , ! disable ) ;
} ,
2016-03-11 00:48:53 +00:00
onOpenDocument : function ( progress ) {
var elem = document . getElementById ( 'loadmask-text' ) ;
var proc = ( progress . asc _getCurrentFont ( ) + progress . asc _getCurrentImage ( ) ) / ( progress . asc _getFontsCount ( ) + progress . asc _getImagesCount ( ) ) ;
2021-06-18 13:53:50 +00:00
proc = this . textLoadingDocument + ': ' + Common . Utils . String . fixedDigits ( Math . min ( Math . round ( proc * 100 ) , 100 ) , 3 , " " ) + "%" ;
2018-11-07 13:32:22 +00:00
elem ? elem . innerHTML = proc : this . loadMask && this . loadMask . setTitle ( proc ) ;
2016-03-11 00:48:53 +00:00
} ,
onEditorPermissions : function ( params ) {
2016-08-30 07:00:29 +00:00
var licType = params ? params . asc _getLicenseType ( ) : Asc . c _oLicenseResult . Error ;
2022-03-11 10:58:15 +00:00
if ( params && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) ) {
2016-08-30 10:30:11 +00:00
if ( Asc . c _oLicenseResult . Expired === licType || Asc . c _oLicenseResult . Error === licType || Asc . c _oLicenseResult . ExpiredTrial === licType ) {
2016-08-30 07:00:29 +00:00
Common . UI . warning ( {
title : this . titleLicenseExp ,
msg : this . warnLicenseExp ,
buttons : [ ] ,
closable : false
} ) ;
return ;
}
2020-11-24 11:54:41 +00:00
if ( Asc . c _oLicenseResult . ExpiredLimited === licType )
this . _state . licenseType = licType ;
2016-08-29 11:46:15 +00:00
2021-05-12 09:33:10 +00:00
if ( this . onServerVersion ( params . asc _getBuildVersion ( ) ) || ! this . onLanguageLoaded ( ) ) return ;
2017-04-11 11:05:56 +00:00
2016-10-20 07:22:16 +00:00
if ( params . asc _getRights ( ) !== Asc . c _oRights . Edit )
this . permissions . edit = false ;
2020-11-25 14:27:53 +00:00
this . appOptions . permissionsLicense = licType ;
2016-03-25 07:48:19 +00:00
this . appOptions . canAutosave = true ;
2016-03-11 00:48:53 +00:00
this . appOptions . canAnalytics = params . asc _getIsAnalyticsEnable ( ) ;
this . appOptions . isOffline = this . api . asc _isOffline ( ) ;
2020-06-08 11:02:48 +00:00
this . appOptions . isCrypted = this . api . asc _isCrypto ( ) ;
2016-12-20 15:40:43 +00:00
this . appOptions . canLicense = ( licType === Asc . c _oLicenseResult . Success || licType === Asc . c _oLicenseResult . SuccessLimit ) ;
2016-06-30 09:38:54 +00:00
this . appOptions . isLightVersion = params . asc _getIsLight ( ) ;
2016-07-06 14:17:28 +00:00
/** coauthoring begin **/
this . appOptions . canCoAuthoring = ! this . appOptions . isLightVersion ;
/** coauthoring end **/
2018-08-13 14:04:29 +00:00
this . appOptions . canComments = this . appOptions . canLicense && ( this . permissions . comment === undefined ? ( this . permissions . edit !== false ) : this . permissions . comment ) && ( this . editorConfig . mode !== 'view' ) ;
2017-06-14 11:53:29 +00:00
this . appOptions . canComments = this . appOptions . canComments && ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . comments === false ) ;
2018-12-17 08:37:43 +00:00
this . appOptions . canViewComments = this . appOptions . canComments || ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . comments === false ) ;
2021-11-19 19:41:44 +00:00
this . appOptions . canChat = this . appOptions . canLicense && ! this . appOptions . isOffline && ! ( this . permissions . chat === false || ( this . permissions . chat === undefined ) &&
( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . chat === false ) ;
if ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . chat !== undefined ) {
console . log ( "Obsolete: The 'chat' parameter of the 'customization' section is deprecated. Please use 'chat' parameter in the permissions instead." ) ;
}
2020-09-11 08:26:19 +00:00
this . appOptions . canRename = this . editorConfig . canRename ;
2020-11-02 20:26:17 +00:00
this . appOptions . buildVersion = params . asc _getBuildVersion ( ) ;
2017-10-25 14:36:59 +00:00
this . appOptions . trialMode = params . asc _getLicenseMode ( ) ;
2020-11-02 20:26:17 +00:00
this . appOptions . isBeta = params . asc _getIsBeta ( ) ;
2017-10-19 10:14:12 +00:00
this . appOptions . canModifyFilter = ( this . permissions . modifyFilter !== false ) ;
2019-04-18 09:18:14 +00:00
this . appOptions . canBranding = params . asc _getCustomization ( ) ;
2016-09-19 14:04:56 +00:00
if ( this . appOptions . canBranding )
2016-03-11 00:48:53 +00:00
this . headerView . setBranding ( this . editorConfig . customization ) ;
2016-09-19 14:04:56 +00:00
2020-12-21 11:07:00 +00:00
this . appOptions . canFavorite = this . appOptions . spreadsheet . info && ( this . appOptions . spreadsheet . info . favorite !== undefined && this . appOptions . spreadsheet . info . favorite !== null ) ;
this . appOptions . canFavorite && this . headerView && this . headerView . setFavorite ( this . appOptions . spreadsheet . info . favorite ) ;
2016-09-27 12:09:32 +00:00
this . appOptions . canRename && this . headerView . setCanRename ( true ) ;
2021-02-11 16:26:06 +00:00
this . appOptions . canUseReviewPermissions = this . appOptions . canLicense && ( ! ! this . permissions . reviewGroups ||
2021-02-05 10:51:37 +00:00
this . appOptions . canLicense && this . editorConfig . customization && this . editorConfig . customization . reviewPermissions && ( typeof ( this . editorConfig . customization . reviewPermissions ) == 'object' ) ) ;
2021-03-17 09:02:06 +00:00
this . appOptions . canUseCommentPermissions = this . appOptions . canLicense && ! ! this . permissions . commentGroups ;
2022-02-09 15:14:19 +00:00
this . appOptions . canUseUserInfoPermissions = this . appOptions . canLicense && ! ! this . permissions . userInfoGroups ;
2021-06-30 18:04:25 +00:00
AscCommon . UserInfoParser . setParser ( true ) ;
2021-03-26 11:29:16 +00:00
AscCommon . UserInfoParser . setCurrentName ( this . appOptions . user . fullname ) ;
this . appOptions . canUseReviewPermissions && AscCommon . UserInfoParser . setReviewPermissions ( this . permissions . reviewGroups , this . editorConfig . customization . reviewPermissions ) ;
this . appOptions . canUseCommentPermissions && AscCommon . UserInfoParser . setCommentPermissions ( this . permissions . commentGroups ) ;
2022-02-09 15:14:19 +00:00
this . appOptions . canUseUserInfoPermissions && AscCommon . UserInfoParser . setUserInfoPermissions ( this . permissions . userInfoGroups ) ;
2021-03-26 11:29:16 +00:00
this . headerView . setUserName ( AscCommon . UserInfoParser . getParsedName ( AscCommon . UserInfoParser . getCurrentName ( ) ) ) ;
2017-10-19 10:14:12 +00:00
} else
this . appOptions . canModifyFilter = true ;
2016-03-11 00:48:53 +00:00
2016-06-16 13:09:26 +00:00
this . appOptions . canRequestEditRights = this . editorConfig . canRequestEditRights ;
2016-03-11 00:48:53 +00:00
this . appOptions . canEdit = this . permissions . edit !== false && // can edit
( this . editorConfig . canRequestEditRights || this . editorConfig . mode !== 'view' ) ; // if mode=="view" -> canRequestEditRights must be defined
2022-03-11 10:58:15 +00:00
this . appOptions . isEdit = ( this . appOptions . canLicense || this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) && this . permissions . edit !== false && this . editorConfig . mode !== 'view' ;
2019-07-15 08:01:29 +00:00
this . appOptions . canDownload = ( this . permissions . download !== false ) ;
2016-03-11 00:48:53 +00:00
this . appOptions . canPrint = ( this . permissions . print !== false ) ;
2022-03-11 10:58:15 +00:00
this . appOptions . canForcesave = this . appOptions . isEdit && ! this . appOptions . isOffline && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) &&
2017-04-11 11:05:56 +00:00
( typeof ( this . editorConfig . customization ) == 'object' && ! ! this . editorConfig . customization . forcesave ) ;
this . appOptions . forcesave = this . appOptions . canForcesave ;
2021-02-04 09:39:56 +00:00
this . appOptions . canEditComments = this . appOptions . isOffline || ! this . permissions . editCommentAuthorOnly ;
this . appOptions . canDeleteComments = this . appOptions . isOffline || ! this . permissions . deleteCommentAuthorOnly ;
if ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . commentAuthorOnly === true ) {
console . log ( "Obsolete: The 'commentAuthorOnly' parameter of the 'customization' section is deprecated. Please use 'editCommentAuthorOnly' and 'deleteCommentAuthorOnly' parameters in the permissions instead." ) ;
if ( this . permissions . editCommentAuthorOnly === undefined && this . permissions . deleteCommentAuthorOnly === undefined )
this . appOptions . canEditComments = this . appOptions . canDeleteComments = this . appOptions . isOffline ;
}
2021-09-09 16:15:29 +00:00
this . appOptions . isSignatureSupport = this . appOptions . isEdit && this . appOptions . isDesktopApp && this . appOptions . isOffline && this . api . asc _isSignaturesSupport ( ) && ( this . permissions . protect !== false )
2022-03-11 10:58:15 +00:00
&& ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) ;
2021-09-09 16:15:29 +00:00
this . appOptions . isPasswordSupport = this . appOptions . isEdit && this . api . asc _isProtectionSupport ( ) && ( this . permissions . protect !== false )
2022-03-11 10:58:15 +00:00
&& ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) ;
2018-08-01 16:08:24 +00:00
this . appOptions . canProtect = ( this . appOptions . isSignatureSupport || this . appOptions . isPasswordSupport ) ;
2018-04-19 14:26:42 +00:00
this . appOptions . canHelp = ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . help === false ) ;
2018-08-13 14:04:29 +00:00
this . appOptions . isRestrictedEdit = ! this . appOptions . isEdit && this . appOptions . canComments ;
2016-03-11 00:48:53 +00:00
2022-05-11 20:16:07 +00:00
// change = true by default in editor
this . appOptions . canLiveView = ! ! params . asc _getLiveViewerSupport ( ) && ( this . editorConfig . mode === 'view' ) ; // viewer: change=false when no flag canLiveViewer (i.g. old license), change=true by default when canLiveViewer==true
2022-03-11 10:58:15 +00:00
this . appOptions . canChangeCoAuthoring = this . appOptions . isEdit && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) && this . appOptions . canCoAuthoring &&
2022-05-11 20:16:07 +00:00
! ( this . editorConfig . coEditing && typeof this . editorConfig . coEditing == 'object' && this . editorConfig . coEditing . change === false ) ||
this . appOptions . canLiveView && ! ( this . editorConfig . coEditing && typeof this . editorConfig . coEditing == 'object' && this . editorConfig . coEditing . change === false ) ;
2021-04-02 19:36:08 +00:00
2022-03-11 10:58:15 +00:00
if ( ! this . appOptions . isEditDiagram && ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditOle ) {
2018-07-25 08:22:43 +00:00
this . appOptions . canBrandingExt = params . asc _getCanBranding ( ) && ( typeof this . editorConfig . customization == 'object' || this . editorConfig . plugins ) ;
2019-05-21 10:02:55 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.Plugins' ) . setMode ( this . appOptions ) ;
2021-10-08 10:24:56 +00:00
this . appOptions . canBrandingExt && this . editorConfig . customization && Common . UI . LayoutManager . init ( this . editorConfig . customization . layout ) ;
2022-02-17 09:40:10 +00:00
this . editorConfig . customization && Common . UI . FeaturesManager . init ( this . editorConfig . customization . features , this . appOptions . canBrandingExt ) ;
2018-07-25 08:22:43 +00:00
}
2021-06-28 17:18:53 +00:00
this . appOptions . canUseHistory = this . appOptions . canLicense && this . editorConfig . canUseHistory && this . appOptions . canCoAuthoring && ! this . appOptions . isOffline ;
this . appOptions . canHistoryClose = this . editorConfig . canHistoryClose ;
this . appOptions . canHistoryRestore = this . editorConfig . canHistoryRestore ;
if ( this . appOptions . isLightVersion ) {
this . appOptions . canUseHistory = false ;
}
2021-04-02 19:36:08 +00:00
this . loadCoAuthSettings ( ) ;
2016-03-11 00:48:53 +00:00
this . applyModeCommonElements ( ) ;
2017-06-14 11:53:29 +00:00
this . applyModeEditorElements ( ) ;
if ( ! this . appOptions . isEdit ) {
2017-04-27 15:40:27 +00:00
Common . NotificationCenter . trigger ( 'app:face' , this . appOptions ) ;
2016-03-11 00:48:53 +00:00
this . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionBegin ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
}
2017-04-27 15:40:27 +00:00
2018-08-13 14:04:29 +00:00
this . api . asc _setViewMode ( ! this . appOptions . isEdit && ! this . appOptions . isRestrictedEdit ) ;
( this . appOptions . isRestrictedEdit && this . appOptions . canComments ) && this . api . asc _setRestriction ( Asc . c _oAscRestrictionType . OnlyComments ) ;
2017-10-26 12:09:58 +00:00
this . api . asc _LoadDocument ( ) ;
2016-03-11 00:48:53 +00:00
} ,
2021-04-02 19:36:08 +00:00
loadCoAuthSettings : function ( ) {
var fastCoauth = true ,
autosave = 1 ,
value ;
if ( this . appOptions . isEdit && ! this . appOptions . isOffline && this . appOptions . canCoAuthoring ) {
2021-04-07 21:48:16 +00:00
if ( ! this . appOptions . canChangeCoAuthoring ) { //can't change co-auth. mode. Use coEditing.mode or 'fast' by default
value = ( this . editorConfig . coEditing && this . editorConfig . coEditing . mode !== undefined ) ? ( this . editorConfig . coEditing . mode === 'strict' ? 0 : 1 ) : null ;
2021-04-02 19:36:08 +00:00
if ( value === null && this . appOptions . customization && this . appOptions . customization . autosave === false ) {
2021-04-07 21:48:16 +00:00
value = 0 ; // use customization.autosave only when coEditing.mode is null
2021-04-02 19:36:08 +00:00
}
} else {
value = Common . localStorage . getItem ( "sse-settings-coauthmode" ) ;
if ( value === null ) {
2021-04-07 21:48:16 +00:00
value = ( this . editorConfig . coEditing && this . editorConfig . coEditing . mode !== undefined ) ? ( this . editorConfig . coEditing . mode === 'strict' ? 0 : 1 ) : null ;
2021-04-02 19:36:08 +00:00
if ( value === null && ! Common . localStorage . itemExists ( "sse-settings-autosave" ) &&
this . appOptions . customization && this . appOptions . customization . autosave === false ) {
value = 0 ; // use customization.autosave only when de-settings-coauthmode and de-settings-autosave are null
}
}
}
fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
} else if ( ! this . appOptions . isEdit && this . appOptions . isRestrictedEdit ) {
fastCoauth = true ;
2022-04-19 15:59:18 +00:00
} else if ( this . appOptions . canLiveView && ! this . appOptions . isOffline ) { // viewer
2022-04-13 09:23:17 +00:00
value = Common . localStorage . getItem ( "sse-settings-view-coauthmode" ) ;
2022-04-19 15:59:18 +00:00
if ( ! this . appOptions . canChangeCoAuthoring || value === null ) { // Use coEditing.mode or 'fast' by default
value = this . editorConfig . coEditing && this . editorConfig . coEditing . mode === 'strict' ? 0 : 1 ;
2022-04-05 19:36:00 +00:00
}
fastCoauth = ( parseInt ( value ) == 1 ) ;
2021-04-02 19:36:08 +00:00
} else {
fastCoauth = false ;
autosave = 0 ;
}
if ( this . appOptions . isEdit && this . appOptions . canAutosave ) {
value = Common . localStorage . getItem ( "sse-settings-autosave" ) ;
if ( value === null && this . appOptions . customization && this . appOptions . customization . autosave === false )
value = 0 ;
autosave = ( ! fastCoauth && value !== null ) ? parseInt ( value ) : ( this . appOptions . canCoAuthoring ? 1 : 0 ) ;
}
Common . Utils . InternalSettings . set ( "sse-settings-coauthmode" , fastCoauth ) ;
Common . Utils . InternalSettings . set ( "sse-settings-autosave" , autosave ) ;
} ,
2016-03-11 00:48:53 +00:00
applyModeCommonElements : function ( ) {
window . editor _elements _prepared = true ;
var app = this . getApplication ( ) ,
viewport = app . getController ( 'Viewport' ) . getView ( 'Viewport' ) ,
statusbarView = app . getController ( 'Statusbar' ) . getView ( 'Statusbar' ) ;
if ( this . headerView ) {
2022-03-11 10:58:15 +00:00
this . headerView . setVisible ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isDesktopApp && ! this . appOptions . isEditDiagram && ! this . appOptions . isEditOle ) ;
2016-03-11 00:48:53 +00:00
}
viewport && viewport . setMode ( this . appOptions , true ) ;
statusbarView && statusbarView . setMode ( this . appOptions ) ;
// this.getStatusInfo().setDisabled(false);
// this.getCellInfo().setMode(this.appOptions);
2018-05-15 14:32:10 +00:00
app . getController ( 'Toolbar' ) . setMode ( this . appOptions ) ;
2016-03-11 00:48:53 +00:00
app . getController ( 'DocumentHolder' ) . setMode ( this . appOptions ) ;
if ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram ) {
statusbarView . hide ( ) ;
2022-03-11 10:58:15 +00:00
}
if ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram || this . appOptions . isEditOle ) {
2016-03-11 00:48:53 +00:00
app . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . hide ( ) ;
$ ( window )
. mouseup ( function ( e ) {
Common . Gateway . internalMessage ( 'processMouse' , { event : 'mouse:up' } ) ;
} )
. mousemove ( $ . proxy ( function ( e ) {
2022-04-01 13:12:20 +00:00
if ( this . isDiagramDrag || this . isDiagramResize ) {
2016-08-19 13:41:48 +00:00
Common . Gateway . internalMessage ( 'processMouse' , { event : 'mouse:move' , pagex : e . pageX * Common . Utils . zoom ( ) , pagey : e . pageY * Common . Utils . zoom ( ) } ) ;
2016-03-11 00:48:53 +00:00
}
} , this ) ) ;
}
2022-03-11 10:58:15 +00:00
if ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram && ! this . appOptions . isEditOle ) {
2016-03-11 00:48:53 +00:00
this . api . asc _registerCallback ( 'asc_onSendThemeColors' , _ . bind ( this . onSendThemeColors , this ) ) ;
2017-04-11 11:05:56 +00:00
this . api . asc _registerCallback ( 'asc_onDownloadUrl' , _ . bind ( this . onDownloadUrl , this ) ) ;
2018-07-19 12:31:13 +00:00
this . api . asc _registerCallback ( 'asc_onDocumentModifiedChanged' , _ . bind ( this . onDocumentModifiedChanged , this ) ) ;
2016-04-04 08:17:21 +00:00
var printController = app . getController ( 'Print' ) ;
2022-06-07 07:27:50 +00:00
printController && this . api && printController . setApi ( this . api ) . setMode ( this . appOptions ) ;
2022-09-08 14:20:13 +00:00
} else {
this . api . asc _registerCallback ( 'asc_sendFromFrameToGeneralEditor' , _ . bind ( this . onSendFromFrameToGeneralEditor , this ) ) ;
if ( this . appOptions . isEditOle )
this . api . asc _registerCallback ( 'asc_onSendThemeColors' , _ . bind ( this . onSendThemeColors , this ) ) ;
}
2016-03-11 00:48:53 +00:00
var celleditorController = this . getApplication ( ) . getController ( 'CellEditor' ) ;
celleditorController && celleditorController . setApi ( this . api ) . setMode ( this . appOptions ) ;
} ,
applyModeEditorElements : function ( prevmode ) {
2018-12-17 08:37:43 +00:00
/** coauthoring begin **/
var commentsController = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( commentsController ) {
commentsController . setMode ( this . appOptions ) ;
commentsController . setConfig ( {
config : this . editorConfig ,
sdkviewname : '#ws-canvas-outer' ,
hintmode : true } ,
this . api ) ;
2017-06-14 11:53:29 +00:00
}
2018-12-17 08:37:43 +00:00
/** coauthoring end **/
2019-10-09 10:23:40 +00:00
var me = this ,
application = this . getApplication ( ) ,
reviewController = application . getController ( 'Common.Controllers.ReviewChanges' ) ;
reviewController . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) . loadDocument ( { doc : me . appOptions . spreadsheet } ) ;
2017-06-14 11:53:29 +00:00
2020-12-23 13:47:13 +00:00
var value = Common . localStorage . getItem ( 'sse-settings-unit' ) ;
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 ( ) ) ;
( value === undefined ) && ( value = Common . Utils . Metric . getDefaultMetric ( ) ) ;
Common . Utils . Metric . setCurrentMetric ( value ) ;
Common . Utils . InternalSettings . set ( "sse-settings-unit" , value ) ;
2022-02-08 10:01:04 +00:00
var toolbarController = application . getController ( 'Toolbar' ) ;
toolbarController && toolbarController . setApi ( me . api ) ;
2021-09-06 23:02:15 +00:00
if ( this . appOptions . isRestrictedEdit ) {
application . getController ( 'WBProtection' ) . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) ;
} else if ( this . appOptions . isEdit ) { // set api events for toolbar in the Restricted Editing mode
2019-11-15 11:01:08 +00:00
var statusbarController = application . getController ( 'Statusbar' ) ,
2016-03-11 00:48:53 +00:00
rightmenuController = application . getController ( 'RightMenu' ) ,
2019-10-09 10:23:40 +00:00
fontsControllers = application . getController ( 'Common.Controllers.Fonts' ) ;
2016-03-11 00:48:53 +00:00
fontsControllers && fontsControllers . setApi ( me . api ) ;
// statusbarController && statusbarController.setApi(me.api);
rightmenuController && rightmenuController . setApi ( me . api ) ;
2021-06-21 15:00:20 +00:00
application . getController ( 'Common.Controllers.Protection' ) . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) ;
application . getController ( 'WBProtection' ) . setMode ( me . appOptions ) . setConfig ( { config : me . editorConfig } , me . api ) ;
2017-11-28 12:48:24 +00:00
2016-03-11 00:48:53 +00:00
if ( statusbarController ) {
2022-03-16 11:17:25 +00:00
statusbarController . getView ( 'Statusbar' ) . changeViewMode ( me . appOptions ) ;
2022-03-11 10:58:15 +00:00
me . appOptions . isEditOle && statusbarController . onChangeViewMode ( null , true , true ) ; // set compact status bar for ole editing mode
2016-03-11 00:48:53 +00:00
}
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle && me . appOptions . canFeaturePivot )
2020-09-23 18:15:45 +00:00
application . getController ( 'PivotTable' ) . setMode ( me . appOptions ) ;
2017-06-30 14:49:58 +00:00
2016-03-11 00:48:53 +00:00
var viewport = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Viewport' ) ;
viewport . applyEditorMode ( ) ;
2017-04-27 15:40:27 +00:00
rightmenuController . getView ( 'RightMenu' ) . setMode ( me . appOptions ) . setApi ( me . api ) ;
2016-03-11 00:48:53 +00:00
this . toolbarView = toolbarController . getView ( 'Toolbar' ) ;
2022-03-11 10:58:15 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && ! me . appOptions . isEditOle ) {
2016-03-11 00:48:53 +00:00
var options = { } ;
JSON . parse ( Common . localStorage . getItem ( 'sse-hidden-formula' ) ) && ( options . formula = true ) ;
application . getController ( 'Toolbar' ) . hideElements ( options ) ;
} else
rightmenuController . getView ( 'RightMenu' ) . hide ( ) ;
/** coauthoring begin **/
2021-07-28 16:49:34 +00:00
me . api . asc _registerCallback ( 'asc_onCollaborativeChanges' , _ . bind ( me . onCollaborativeChanges , me ) ) ;
2016-03-11 00:48:53 +00:00
me . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_onParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
2020-12-20 09:22:46 +00:00
me . api . asc _registerCallback ( 'asc_onConnectionStateChanged' , _ . bind ( me . onUserConnection , me ) ) ;
2020-08-25 16:09:31 +00:00
me . api . asc _registerCallback ( 'asc_onConvertEquationToMath' , _ . bind ( me . onConvertEquationToMath , me ) ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
2016-08-18 08:34:00 +00:00
if ( me . appOptions . isEditDiagram )
me . api . asc _registerCallback ( 'asc_onSelectionChanged' , _ . bind ( me . onSelectionChanged , me ) ) ;
2016-03-11 00:48:53 +00:00
2017-11-17 14:35:40 +00:00
me . api . asc _setFilteringMode && me . api . asc _setFilteringMode ( me . appOptions . canModifyFilter ) ;
2017-10-19 10:14:12 +00:00
2016-04-05 11:52:34 +00:00
if ( me . stackLongActions . exist ( { id : ApplyEditRights , type : Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] } ) ) {
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , ApplyEditRights ) ;
2016-03-11 00:48:53 +00:00
} else if ( ! this . _isDocReady ) {
2017-04-27 15:40:27 +00:00
Common . NotificationCenter . trigger ( 'app:face' , this . appOptions ) ;
2016-03-11 00:48:53 +00:00
me . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
}
// Message on window close
window . onbeforeunload = _ . bind ( me . onBeforeUnload , me ) ;
window . onunload = _ . bind ( me . onUnload , me ) ;
}
} ,
2022-06-15 19:09:53 +00:00
onExternalMessage : function ( msg , options ) {
2016-03-11 00:48:53 +00:00
if ( msg && msg . msg ) {
msg . msg = ( msg . msg ) . toString ( ) ;
2022-06-15 19:09:53 +00:00
this . showTips ( [ msg . msg . charAt ( 0 ) . toUpperCase ( ) + msg . msg . substring ( 1 ) ] , options ) ;
2016-03-11 00:48:53 +00:00
2017-05-16 07:46:04 +00:00
Common . component . Analytics . trackEvent ( 'External Error' ) ;
2016-03-11 00:48:53 +00:00
}
} ,
2021-12-04 17:39:09 +00:00
onError : function ( id , level , errData , callback ) {
2022-07-28 21:10:57 +00:00
if ( this . isFrameClosed ) {
this . lastFrameError = { id : id , level : level , errData : errData , callback : callback } ;
return ;
}
2018-10-08 14:06:37 +00:00
if ( id == Asc . c _oAscError . ID . LoadingScriptError ) {
this . showTips ( [ this . scriptLoadError ] ) ;
this . tooltip && this . tooltip . getBSTip ( ) . $tip . css ( 'z-index' , 10000 ) ;
return ;
}
2016-03-11 00:48:53 +00:00
this . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
2018-05-03 15:27:05 +00:00
var config = { closable : true } ;
2016-03-11 00:48:53 +00:00
switch ( id ) {
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Unknown :
2016-03-11 00:48:53 +00:00
config . msg = this . unknownErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . ConvertationTimeout :
2016-03-11 00:48:53 +00:00
config . msg = this . convertationTimeoutText ;
break ;
2016-09-13 06:40:44 +00:00
case Asc . c _oAscError . ID . ConvertationOpenError :
config . msg = this . openErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationSaveError :
2020-11-24 12:31:51 +00:00
config . msg = ( this . appOptions . isDesktopApp && this . appOptions . isOffline ) ? this . saveErrorTextDesktop : this . saveErrorText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DownloadError :
2016-03-11 00:48:53 +00:00
config . msg = this . downloadErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageSize :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageSizeMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageExt :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageExtMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageFileCount :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageFileCountMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . PastInMergeAreaError :
2016-03-11 00:48:53 +00:00
config . msg = this . pastInMergeAreaError ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongCountParentheses :
2016-03-11 00:48:53 +00:00
config . msg = this . errorWrongBracketsCount ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongOperator :
2016-03-11 00:48:53 +00:00
config . msg = this . errorWrongOperator ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongMaxArgument :
2016-03-11 00:48:53 +00:00
config . msg = this . errorCountArgExceed ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongCountArgument :
2016-03-11 00:48:53 +00:00
config . msg = this . errorCountArg ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongFunctionName :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFormulaName ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlAnotherParsingError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFormulaParsing ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FrmlWrongArgumentRange :
2016-03-11 00:48:53 +00:00
config . msg = this . errorArgsRange ;
break ;
2017-04-11 11:05:56 +00:00
case Asc . c _oAscError . ID . FrmlOperandExpected :
config . msg = this . errorOperandExpected ;
break ;
case Asc . c _oAscError . ID . FrmlWrongReferences :
config . msg = this . errorFrmlWrongReferences ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UnexpectedGuid :
2016-03-11 00:48:53 +00:00
config . msg = this . errorUnexpectedGuid ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Database :
2016-03-11 00:48:53 +00:00
config . msg = this . errorDatabaseConnection ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FileRequest :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFileRequest ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . FileVKey :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFileVKey ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . StockChartError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorStockChart ;
break ;
2021-05-06 13:43:46 +00:00
case Asc . c _oAscError . ID . MaxDataSeriesError :
config . msg = this . getApplication ( ) . getController ( 'Toolbar' ) . errorMaxRows ;
break ;
case Asc . c _oAscError . ID . ComboSeriesError :
config . msg = this . getApplication ( ) . getController ( 'Toolbar' ) . errorComboSeries ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DataRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorDataRange ;
break ;
2018-02-27 07:58:30 +00:00
case Asc . c _oAscError . ID . MaxDataPointsError :
config . msg = this . errorMaxPoints ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . VKeyEncrypt :
2016-11-28 11:52:03 +00:00
config . msg = this . errorToken ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . KeyExpire :
2016-11-28 11:52:03 +00:00
config . msg = this . errorTokenExpire ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UserCountExceed :
2016-03-11 00:48:53 +00:00
config . msg = this . errorUsersExceed ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . CannotMoveRange :
2016-03-11 00:48:53 +00:00
config . msg = this . errorMoveRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageUrl :
2016-03-11 00:48:53 +00:00
config . msg = this . errorBadImageUrl ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . CoAuthoringDisconnect :
2016-10-12 13:32:48 +00:00
config . msg = this . errorViewerDisconnect ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . ConvertationPassword :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFilePassProtect ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . AutoFilterDataRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorAutoFilterDataRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . AutoFilterChangeFormatTableError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorAutoFilterChangeFormatTable ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . AutoFilterChangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorAutoFilterChange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . AutoFilterMoveToHiddenRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorAutoFilterHiddenRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . CannotFillRange :
2016-03-11 00:48:53 +00:00
config . msg = this . errorFillRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UserDrop :
2016-03-11 00:48:53 +00:00
if ( this . _state . lostEditingRights ) {
this . _state . lostEditingRights = false ;
return ;
}
this . _state . lostEditingRights = true ;
config . msg = this . errorUserDrop ;
2019-04-08 15:40:08 +00:00
Common . NotificationCenter . trigger ( 'collaboration:sharingdeny' ) ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . InvalidReferenceOrName :
2016-03-11 00:48:53 +00:00
config . msg = this . errorInvalidRef ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . LockCreateDefName :
2016-03-11 00:48:53 +00:00
config . msg = this . errorCreateDefName ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . PasteMaxRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorPasteMaxRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . LockedAllError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorLockedAll ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Warning :
2019-11-01 14:43:24 +00:00
config . msg = this . errorConnectToServer ;
2018-05-03 15:27:05 +00:00
config . closable = false ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . LockedWorksheetRename :
2016-03-11 00:48:53 +00:00
config . msg = this . errorLockedWorksheetRename ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . OpenWarning :
2016-03-11 00:48:53 +00:00
config . msg = this . errorOpenWarning ;
break ;
2016-10-13 10:45:06 +00:00
case Asc . c _oAscError . ID . CopyMultiselectAreaError :
config . msg = this . errorCopyMultiselectArea ;
break ;
2016-11-09 11:07:49 +00:00
case Asc . c _oAscError . ID . PrintMaxPagesCount :
config . msg = this . errorPrintMaxPagesCount ;
break ;
2016-11-28 11:52:03 +00:00
case Asc . c _oAscError . ID . SessionAbsolute :
config . msg = this . errorSessionAbsolute ;
break ;
case Asc . c _oAscError . ID . SessionIdle :
config . msg = this . errorSessionIdle ;
break ;
case Asc . c _oAscError . ID . SessionToken :
config . msg = this . errorSessionToken ;
break ;
case Asc . c _oAscError . ID . AccessDeny :
config . msg = this . errorAccessDeny ;
break ;
2017-04-25 12:19:25 +00:00
case Asc . c _oAscError . ID . LockedCellPivot :
config . msg = this . errorLockedCellPivot ;
break ;
2019-10-04 14:55:01 +00:00
case Asc . c _oAscError . ID . PivotLabledColumns :
config . msg = this . errorLabledColumnsPivot ;
break ;
2019-10-11 10:07:17 +00:00
case Asc . c _oAscError . ID . PivotOverlap :
config . msg = this . errorPivotOverlap ;
break ;
2018-01-26 12:39:21 +00:00
case Asc . c _oAscError . ID . ForceSaveButton :
case Asc . c _oAscError . ID . ForceSaveTimeout :
config . msg = this . errorForceSave ;
2021-04-08 09:59:44 +00:00
config . maxwidth = 600 ;
2018-01-26 12:39:21 +00:00
break ;
2018-06-28 10:16:35 +00:00
case Asc . c _oAscError . ID . DataEncrypted :
config . msg = this . errorDataEncrypted ;
break ;
2018-10-25 13:19:29 +00:00
case Asc . c _oAscError . ID . EditingError :
config . msg = ( this . appOptions . isDesktopApp && this . appOptions . isOffline ) ? this . errorEditingSaveas : this . errorEditingDownloadas ;
break ;
2019-02-14 13:53:39 +00:00
case Asc . c _oAscError . ID . CannotChangeFormulaArray :
config . msg = this . errorChangeArray ;
break ;
2019-02-19 13:33:15 +00:00
case Asc . c _oAscError . ID . MultiCellsInTablesFormulaArray :
config . msg = this . errorMultiCellFormula ;
break ;
2019-03-04 08:53:58 +00:00
case Asc . c _oAscError . ID . MailToClientMissing :
config . msg = this . errorEmailClient ;
break ;
2019-04-18 08:39:58 +00:00
case Asc . c _oAscError . ID . NoDataToParse :
config . msg = this . errorNoDataToParse ;
break ;
2019-06-05 12:26:29 +00:00
case Asc . c _oAscError . ID . CannotUngroupError :
config . msg = this . errorCannotUngroup ;
break ;
2019-06-06 08:32:00 +00:00
case Asc . c _oAscError . ID . FrmlMaxTextLength :
config . msg = this . errorFrmlMaxTextLength ;
break ;
2020-08-12 07:50:46 +00:00
case Asc . c _oAscError . ID . FrmlMaxReference :
config . msg = this . errorFrmlMaxReference ;
break ;
2019-07-31 08:21:02 +00:00
case Asc . c _oAscError . ID . DataValidate :
2019-08-02 08:48:36 +00:00
var icon = errData ? errData . asc _getErrorStyle ( ) : undefined ;
if ( icon !== undefined ) {
2019-07-31 08:21:02 +00:00
config . iconCls = ( icon == Asc . c _oAscEDataValidationErrorStyle . Stop ) ? 'error' : ( ( icon == Asc . c _oAscEDataValidationErrorStyle . Information ) ? 'info' : 'warn' ) ;
}
2020-04-10 10:14:55 +00:00
errData && errData . asc _getErrorTitle ( ) && ( config . title = Common . Utils . String . htmlEncode ( errData . asc _getErrorTitle ( ) ) ) ;
2019-07-31 08:21:02 +00:00
config . buttons = [ 'ok' , 'cancel' ] ;
2020-04-10 10:14:55 +00:00
config . msg = errData && errData . asc _getError ( ) ? Common . Utils . String . htmlEncode ( errData . asc _getError ( ) ) : this . errorDataValidate ;
2019-07-31 08:21:02 +00:00
config . maxwidth = 600 ;
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 ;
2019-11-15 14:11:59 +00:00
config . maxwidth = 600 ;
2019-11-13 11:14:41 +00:00
break ;
2020-02-05 14:37:46 +00:00
case Asc . c _oAscError . ID . FTChangeTableRangeError :
config . msg = this . errorFTChangeTableRangeError ;
break ;
case Asc . c _oAscError . ID . FTRangeIncludedOtherTables :
config . msg = this . errorFTRangeIncludedOtherTables ;
break ;
2020-06-05 09:11:14 +00:00
case Asc . c _oAscError . ID . PasteSlicerError :
config . msg = this . errorPasteSlicerError ;
break ;
2020-04-07 14:06:29 +00:00
case Asc . c _oAscError . ID . RemoveDuplicates :
config . iconCls = 'info' ;
config . title = Common . UI . Window . prototype . textInformation ;
config . buttons = [ 'ok' ] ;
2020-04-08 08:51:55 +00:00
config . msg = ( errData . asc _getDuplicateValues ( ) !== null && errData . asc _getUniqueValues ( ) !== null ) ? Common . Utils . String . format ( this . errRemDuplicates , errData . asc _getDuplicateValues ( ) , errData . asc _getUniqueValues ( ) ) : this . errNoDuplicates ;
2020-04-07 14:06:29 +00:00
config . maxwidth = 600 ;
break ;
2020-08-07 08:37:14 +00:00
case Asc . c _oAscError . ID . FrmlMaxLength :
config . msg = this . errorFrmlMaxLength ;
config . maxwidth = 600 ;
break ;
2020-09-07 15:13:39 +00:00
case Asc . c _oAscError . ID . MoveSlicerError :
config . msg = this . errorMoveSlicerError ;
break ;
2020-09-18 10:15:00 +00:00
case Asc . c _oAscError . ID . LockedEditView :
config . msg = this . errorEditView ;
break ;
2020-10-14 12:15:20 +00:00
case Asc . c _oAscError . ID . ChangeFilteredRangeError :
config . msg = this . errorChangeFilteredRange ;
break ;
2020-12-11 12:26:52 +00:00
case Asc . c _oAscError . ID . Password :
2020-12-10 14:25:39 +00:00
config . msg = this . errorSetPassword ;
break ;
2021-04-02 13:45:04 +00:00
case Asc . c _oAscError . ID . PivotGroup :
2021-03-04 20:20:12 +00:00
config . msg = this . errorPivotGroup ;
break ;
2021-04-02 13:45:04 +00:00
case Asc . c _oAscError . ID . PasteMultiSelectError :
config . msg = this . errorPasteMultiSelect ;
break ;
2021-04-07 09:41:48 +00:00
case Asc . c _oAscError . ID . PivotWithoutUnderlyingData :
config . msg = this . errorPivotWithoutUnderlying ;
break ;
2021-06-22 13:15:15 +00:00
case Asc . c _oAscError . ID . ChangeOnProtectedSheet :
config . msg = this . errorChangeOnProtectedSheet ;
2021-08-05 16:04:14 +00:00
break ;
2021-08-05 10:49:29 +00:00
2021-07-20 13:24:05 +00:00
case Asc . c _oAscError . ID . SingleColumnOrRowError :
config . msg = this . errorSingleColumnOrRowError ;
break ;
case Asc . c _oAscError . ID . LocationOrDataRangeError :
config . msg = this . errorLocationOrDataRangeError ;
2021-06-22 13:15:15 +00:00
break ;
2021-08-08 20:10:52 +00:00
case Asc . c _oAscError . ID . PasswordIsNotCorrect :
config . msg = this . errorPasswordIsNotCorrect ;
break ;
2021-08-13 09:14:08 +00:00
case Asc . c _oAscError . ID . UplDocumentSize :
config . msg = this . uploadDocSizeMessage ;
break ;
2021-08-08 20:10:52 +00:00
case Asc . c _oAscError . ID . DeleteColumnContainsLockedCell :
config . msg = this . errorDeleteColumnContainsLockedCell ;
break ;
2021-08-13 09:14:08 +00:00
case Asc . c _oAscError . ID . UplDocumentExt :
config . msg = this . uploadDocExtMessage ;
break ;
2021-08-08 20:10:52 +00:00
case Asc . c _oAscError . ID . DeleteRowContainsLockedCell :
config . msg = this . errorDeleteRowContainsLockedCell ;
break ;
2021-08-13 09:14:08 +00:00
case Asc . c _oAscError . ID . UplDocumentFileCount :
config . msg = this . uploadDocFileCountMessage ;
break ;
2021-08-19 17:58:59 +00:00
case Asc . c _oAscError . ID . LoadingFontError :
config . msg = this . errorLoadingFont ;
break ;
2021-12-04 17:39:09 +00:00
case Asc . c _oAscError . ID . FillAllRowsWarning :
2021-12-06 07:26:05 +00:00
var fill = errData [ 0 ] ,
have = errData [ 1 ] ,
2022-08-11 21:41:22 +00:00
lang = ( this . appOptions . lang || 'en' ) . replace ( '_' , '-' ) . toLowerCase ( ) ,
fillWithSeparator ;
try {
fillWithSeparator = fill . toLocaleString ( lang ) ;
} catch ( e ) {
lang = 'en' ;
fillWithSeparator = fill . toLocaleString ( lang ) ;
}
2021-12-04 17:39:09 +00:00
if ( this . appOptions . isDesktopApp && this . appOptions . isOffline ) {
config . msg = fill > have ? Common . Utils . String . format ( this . textFormulaFilledAllRowsWithEmpty , fillWithSeparator ) : Common . Utils . String . format ( this . textFormulaFilledAllRows , fillWithSeparator ) ;
config . buttons = [ { caption : this . textFillOtherRows , primary : true , value : 'fillOther' } , 'close' ] ;
} else {
2022-08-11 21:41:22 +00:00
config . msg = fill >= have ? Common . Utils . String . format ( this . textFormulaFilledFirstRowsOtherIsEmpty , fillWithSeparator ) : Common . Utils . String . format ( this . textFormulaFilledFirstRowsOtherHaveData , fillWithSeparator , ( have - fill ) . toLocaleString ( lang ) ) ;
2021-12-04 17:39:09 +00:00
config . buttons = [ 'ok' ] ;
}
config . maxwidth = 400 ;
break ;
2022-01-10 12:03:47 +00:00
case Asc . c _oAscError . ID . CannotUseCommandProtectedSheet :
config . msg = this . errorCannotUseCommandProtectedSheet ;
break ;
2022-09-23 14:38:45 +00:00
case Asc . c _oAscError . ID . DirectUrl :
config . msg = this . errorDirectUrl ;
break ;
2016-03-11 00:48:53 +00:00
default :
2018-03-01 14:37:15 +00:00
config . msg = ( typeof id == 'string' ) ? id : this . errorDefaultMessage . replace ( '%1' , id ) ;
2016-03-11 00:48:53 +00:00
break ;
}
2016-04-05 11:52:34 +00:00
if ( level == Asc . c _oAscError . Level . Critical ) {
2016-03-11 00:48:53 +00:00
Common . Gateway . reportError ( id , config . msg ) ;
config . title = this . criticalErrorTitle ;
config . iconCls = 'error' ;
2018-05-03 15:27:05 +00:00
config . closable = false ;
2016-03-11 00:48:53 +00:00
2018-03-01 14:37:15 +00:00
if ( this . appOptions . canBackToFolder && ! this . appOptions . isDesktopApp && typeof id !== 'string' ) {
2020-06-05 17:34:50 +00:00
config . msg += '<br><br>' + this . criticalErrorExtText ;
2016-03-11 00:48:53 +00:00
config . callback = function ( btn ) {
if ( btn == 'ok' ) {
2019-01-10 13:20:27 +00:00
Common . NotificationCenter . trigger ( 'goback' , true ) ;
2016-03-11 00:48:53 +00:00
}
}
}
2021-09-14 20:17:43 +00:00
if ( id == Asc . c _oAscError . ID . DataEncrypted || id == Asc . c _oAscError . ID . ConvertationOpenLimitError ) {
2018-06-28 12:56:44 +00:00
this . api . asc _coAuthoringDisconnect ( ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
}
2016-03-11 00:48:53 +00:00
} else {
2017-10-07 09:20:39 +00:00
Common . Gateway . reportWarning ( id , config . msg ) ;
2019-07-31 08:21:02 +00:00
config . title = config . title || this . notcriticalErrorTitle ;
config . iconCls = config . iconCls || 'warn' ;
config . buttons = config . buttons || [ 'ok' ] ;
2016-03-11 00:48:53 +00:00
config . callback = _ . bind ( function ( btn ) {
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscError . ID . Warning && btn == 'ok' && this . appOptions . canDownload ) {
2016-03-11 00:48:53 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
( this . appOptions . isDesktopApp && this . appOptions . isOffline ) ? this . api . asc _DownloadAs ( ) : this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . showMenu ( 'file:saveas' ) ;
2018-10-25 13:19:29 +00:00
} else if ( id == Asc . c _oAscError . ID . EditingError ) {
this . disableEditing ( true ) ;
Common . NotificationCenter . trigger ( 'api:disconnect' , true ) ; // enable download and print
2019-07-31 08:21:02 +00:00
} else if ( id == Asc . c _oAscError . ID . DataValidate && btn !== 'ok' ) {
2019-08-02 08:48:36 +00:00
this . api . asc _closeCellEditor ( true ) ;
2021-12-04 17:39:09 +00:00
} else if ( id == Asc . c _oAscError . ID . FillAllRowsWarning && btn === 'fillOther' && _ . isFunction ( callback ) ) {
callback ( ) ;
2016-03-11 00:48:53 +00:00
}
this . _state . lostEditingRights = false ;
this . onEditComplete ( ) ;
} , this ) ;
}
2021-04-08 09:59:44 +00:00
if ( ! Common . Utils . ModalWindow . isVisible ( ) || $ ( '.asc-window.modal.alert[data-value=' + id + ']' ) . length < 1 )
2021-06-18 10:50:43 +00:00
setTimeout ( function ( ) { Common . UI . alert ( config ) . $window . attr ( 'data-value' , id ) ; } , 1 ) ;
2020-05-08 18:48:46 +00:00
( id !== undefined ) && Common . component . Analytics . trackEvent ( 'Internal Error' , id . toString ( ) ) ;
2016-03-11 00:48:53 +00:00
} ,
onCoAuthoringDisconnect : function ( ) {
this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Viewport' ) . setMode ( { isDisconnected : true } ) ;
2016-09-26 10:54:25 +00:00
this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) . setCanRename ( false ) ;
2016-09-27 12:09:32 +00:00
this . appOptions . canRename = false ;
2016-09-26 10:54:25 +00:00
this . _state . isDisconnected = true ;
2016-03-11 00:48:53 +00:00
} ,
2022-06-15 19:09:53 +00:00
showTips : function ( strings , options ) {
2016-03-11 00:48:53 +00:00
var me = this ;
if ( ! strings . length ) return ;
if ( typeof ( strings ) != 'object' ) strings = [ strings ] ;
2022-06-15 19:09:53 +00:00
function closeTip ( cmp ) {
me . tipTimeout && clearTimeout ( me . tipTimeout ) ;
setTimeout ( showNextTip , 300 ) ;
}
2016-03-11 00:48:53 +00:00
function showNextTip ( ) {
var str _tip = strings . shift ( ) ;
if ( str _tip ) {
2022-06-15 19:09:53 +00:00
if ( ! ( options && options . hideCloseTip ) )
str _tip += '\n' + me . textCloseTip ;
me . tooltip . setTitle ( str _tip ) ;
me . tooltip . show ( ) ;
me . tipTimeout && clearTimeout ( me . tipTimeout ) ;
if ( options && options . timeout ) {
me . tipTimeout = setTimeout ( function ( ) {
me . tooltip . hide ( ) ;
closeTip ( ) ;
} , options . timeout ) ;
}
2016-03-11 00:48:53 +00:00
}
}
if ( ! this . tooltip ) {
this . tooltip = new Common . UI . Tooltip ( {
owner : this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( 'Toolbar' ) ,
hideonclick : true ,
placement : 'bottom' ,
cls : 'main-info' ,
offset : 30
} ) ;
2022-06-15 19:09:53 +00:00
this . tooltip . on ( 'tooltip:hideonclick' , closeTip ) ;
2016-03-11 00:48:53 +00:00
}
showNextTip ( ) ;
} ,
updateWindowTitle : function ( change , force ) {
if ( this . _state . isDocModified !== change || force ) {
2019-09-18 08:08:01 +00:00
if ( this . headerView ) {
var title = this . defaultTitleText ;
2016-03-11 00:48:53 +00:00
2019-09-18 08:08:01 +00:00
if ( ! _ . isEmpty ( this . headerView . getDocumentCaption ( ) ) )
title = this . headerView . getDocumentCaption ( ) + ' - ' + title ;
2016-03-11 00:48:53 +00:00
2019-09-18 08:08:01 +00:00
if ( change ) {
clearTimeout ( this . _state . timerCaption ) ;
if ( ! _ . isUndefined ( title ) ) {
title = '* ' + title ;
this . headerView . setDocumentCaption ( this . headerView . getDocumentCaption ( ) , true ) ;
}
} else {
if ( this . _state . fastCoauth && this . _state . usersCount > 1 ) {
var me = this ;
this . _state . timerCaption = setTimeout ( function ( ) {
me . headerView . setDocumentCaption ( me . headerView . getDocumentCaption ( ) , false ) ;
} , 500 ) ;
} else
this . headerView . setDocumentCaption ( this . headerView . getDocumentCaption ( ) , false ) ;
2016-03-11 00:48:53 +00:00
}
2019-09-18 08:08:01 +00:00
if ( window . document . title != title )
window . document . title = title ;
2016-03-11 00:48:53 +00:00
}
2021-03-09 14:06:44 +00:00
this . _isDocReady && ( this . _state . isDocModified !== change ) && Common . Gateway . setDocumentModified ( change ) ;
2021-07-28 16:49:34 +00:00
if ( change && ( ! this . _state . fastCoauth || this . _state . usersCount < 2 ) )
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( '' , true ) ;
2017-04-11 11:05:56 +00:00
2016-03-11 00:48:53 +00:00
this . _state . isDocModified = change ;
}
} ,
onDocumentChanged : function ( ) {
} ,
onDocumentModifiedChanged : function ( change ) {
this . updateWindowTitle ( change ) ;
2021-03-09 14:06:44 +00:00
if ( this . _state . isDocModified !== change ) {
this . _isDocReady && Common . Gateway . setDocumentModified ( change ) ;
}
2018-04-25 08:09:47 +00:00
if ( this . toolbarView && this . toolbarView . btnCollabChanges && this . api ) {
2019-11-20 09:42:39 +00:00
var isSyncButton = this . toolbarView . btnCollabChanges . cmpEl . hasClass ( 'notify' ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
cansave = this . api . asc _isDocumentCanSave ( ) ,
isDisabled = ! cansave && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
2018-02-15 23:56:17 +00:00
this . toolbarView . btnSave . setDisabled ( isDisabled ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onDocumentCanSaveChanged : function ( isCanSave ) {
2018-04-25 08:09:47 +00:00
if ( this . toolbarView && this . toolbarView . btnCollabChanges ) {
2019-11-20 09:42:39 +00:00
var isSyncButton = this . toolbarView . btnCollabChanges . cmpEl . hasClass ( 'notify' ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
isDisabled = ! isCanSave && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
2018-02-15 23:56:17 +00:00
this . toolbarView . btnSave . setDisabled ( isDisabled ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onBeforeUnload : function ( ) {
Common . localStorage . save ( ) ;
2022-03-11 10:58:15 +00:00
var isEdit = this . permissions . edit !== false && this . editorConfig . mode !== 'view' && this . editorConfig . mode !== 'editdiagram' && this . editorConfig . mode !== 'editmerge' && this . editorConfig . mode !== 'editole' ;
2016-03-11 00:48:53 +00:00
if ( isEdit && this . api . asc _isDocumentModified ( ) ) {
var me = this ;
this . api . asc _stopSaving ( ) ;
2022-03-11 18:40:53 +00:00
this . _state . unloadTimer = 1000 ;
2016-03-11 00:48:53 +00:00
this . continueSavingTimer = window . setTimeout ( function ( ) {
me . api . asc _continueSaving ( ) ;
2022-03-11 18:40:53 +00:00
me . _state . unloadTimer = 0 ;
2016-03-11 00:48:53 +00:00
} , 500 ) ;
return this . leavePageText ;
2022-03-11 18:40:53 +00:00
} else
this . _state . unloadTimer = 10000 ;
2016-03-11 00:48:53 +00:00
} ,
onUnload : function ( ) {
if ( this . continueSavingTimer ) clearTimeout ( this . continueSavingTimer ) ;
} ,
hidePreloader : function ( ) {
2019-05-23 14:25:44 +00:00
var promise ;
2016-11-16 09:38:16 +00:00
if ( ! this . _state . customizationDone ) {
this . _state . customizationDone = true ;
2017-04-11 11:05:56 +00:00
if ( this . appOptions . customization ) {
if ( this . appOptions . isDesktopApp )
this . appOptions . customization . about = false ;
else if ( ! this . appOptions . canBrandingExt )
this . appOptions . customization . about = true ;
}
2016-03-11 00:48:53 +00:00
Common . Utils . applyCustomization ( this . appOptions . customization , mapCustomizationElements ) ;
2016-11-16 09:38:16 +00:00
if ( this . appOptions . canBrandingExt ) {
2016-10-28 13:38:33 +00:00
Common . Utils . applyCustomization ( this . appOptions . customization , mapCustomizationExtElements ) ;
2021-10-08 10:24:56 +00:00
Common . UI . LayoutManager . applyCustomization ( ) ;
2021-11-01 22:07:29 +00:00
if ( this . appOptions . customization && ( typeof ( this . appOptions . customization ) == 'object' ) ) {
if ( this . appOptions . customization . leftMenu !== undefined )
console . log ( "Obsolete: The 'leftMenu' parameter of the 'customization' section is deprecated. Please use 'leftMenu' parameter in the 'customization.layout' section instead." ) ;
if ( this . appOptions . customization . rightMenu !== undefined )
console . log ( "Obsolete: The 'rightMenu' parameter of the 'customization' section is deprecated. Please use 'rightMenu' parameter in the 'customization.layout' section instead." ) ;
2022-01-11 19:59:57 +00:00
if ( this . appOptions . customization . statusBar !== undefined )
console . log ( "Obsolete: The 'statusBar' parameter of the 'customization' section is deprecated. Please use 'statusBar' parameter in the 'customization.layout' section instead." ) ;
if ( this . appOptions . customization . toolbar !== undefined )
console . log ( "Obsolete: The 'toolbar' parameter of the 'customization' section is deprecated. Please use 'toolbar' parameter in the 'customization.layout' section instead." ) ;
2021-11-01 22:07:29 +00:00
}
2019-05-23 14:25:44 +00:00
promise = this . getApplication ( ) . getController ( 'Common.Controllers.Plugins' ) . applyUICustomization ( ) ;
2016-11-16 09:38:16 +00:00
}
2016-03-11 00:48:53 +00:00
}
2016-04-05 11:52:34 +00:00
this . stackLongActions . pop ( { id : InitApplication , type : Asc . c _oAscAsyncActionType . BlockInteraction } ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . trigger ( 'layout:changed' , 'main' ) ;
2019-05-23 14:25:44 +00:00
( promise || ( new Promise ( function ( resolve , reject ) {
resolve ( ) ;
} ) ) ) . then ( function ( ) {
$ ( '#loading-mask' ) . hide ( ) . remove ( ) ;
Common . Controllers . Desktop . process ( 'preloader:hide' ) ;
} ) ;
2016-03-11 00:48:53 +00:00
} ,
2021-07-29 22:01:33 +00:00
onDownloadUrl : function ( url , fileType ) {
if ( this . _state . isFromGatewayDownloadAs ) {
Common . Gateway . downloadAs ( url , fileType ) ;
}
2019-01-10 11:00:30 +00:00
this . _state . isFromGatewayDownloadAs = false ;
} ,
onDownloadCancel : function ( ) {
this . _state . isFromGatewayDownloadAs = false ;
2016-03-11 00:48:53 +00:00
} ,
onUpdateVersion : function ( callback ) {
var me = this ;
me . needToUpdateVersion = true ;
2016-04-05 11:52:34 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2021-11-24 13:36:01 +00:00
Common . UI . warning ( {
2016-03-11 00:48:53 +00:00
msg : this . errorUpdateVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
if ( callback ) callback . call ( me ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
} )
}
} ) ;
} ,
2017-04-11 11:05:56 +00:00
onServerVersion : function ( buildVersion ) {
if ( this . changeServerVersion ) return true ;
if ( DocsAPI . DocEditor . version ( ) !== buildVersion && ! window . compareVersions ) {
this . changeServerVersion = true ;
Common . UI . warning ( {
title : this . titleServerVersion ,
msg : this . errorServerVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
} )
}
} ) ;
return true ;
}
return false ;
} ,
2019-07-25 07:14:45 +00:00
onAdvancedOptions : function ( type , advOptions , mode , formatOptions ) {
2017-09-08 08:39:07 +00:00
if ( this . _state . openDlg ) return ;
2019-07-25 07:14:45 +00:00
var me = this ;
2016-04-05 11:52:34 +00:00
if ( type == Asc . c _oAscAdvancedOptionsID . CSV ) {
2017-09-08 08:39:07 +00:00
me . _state . openDlg = new Common . Views . OpenDialog ( {
2019-04-17 09:01:20 +00:00
title : Common . Views . OpenDialog . prototype . txtTitle . replace ( '%1' , 'CSV' ) ,
closable : ( mode == 2 ) , // if save settings
type : Common . Utils . importTextType . CSV ,
2019-07-25 07:14:45 +00:00
preview : advOptions . asc _getData ( ) ,
codepages : advOptions . asc _getCodePages ( ) ,
settings : advOptions . asc _getRecommendedSettings ( ) ,
2018-02-09 14:26:34 +00:00
api : me . api ,
2021-03-23 13:55:20 +00:00
handler : function ( result , settings ) {
2016-03-11 00:48:53 +00:00
me . isShowOpenDialog = false ;
2018-07-25 11:40:51 +00:00
if ( result == 'ok' ) {
if ( me && me . api ) {
2019-07-24 14:33:29 +00:00
if ( mode == 2 ) {
2021-03-23 13:55:20 +00:00
formatOptions && formatOptions . asc _setAdvancedOptions ( settings . textOptions ) ;
2019-07-24 14:33:29 +00:00
me . api . asc _DownloadAs ( formatOptions ) ;
} else
2021-03-23 13:55:20 +00:00
me . api . asc _setAdvancedOptions ( type , settings . textOptions ) ;
2018-07-25 11:40:51 +00:00
me . loadMask && me . loadMask . show ( ) ;
}
2016-03-11 00:48:53 +00:00
}
2017-09-08 08:39:07 +00:00
me . _state . openDlg = null ;
2016-03-11 00:48:53 +00:00
}
} ) ;
2016-08-10 09:33:08 +00:00
} else if ( type == Asc . c _oAscAdvancedOptionsID . DRM ) {
2017-09-08 08:39:07 +00:00
me . _state . openDlg = new Common . Views . OpenDialog ( {
2019-04-17 09:01:20 +00:00
title : Common . Views . OpenDialog . prototype . txtTitleProtected ,
2018-10-31 10:44:18 +00:00
closeFile : me . appOptions . canRequestClose ,
2019-04-17 09:01:20 +00:00
type : Common . Utils . importTextType . DRM ,
2021-01-20 16:32:42 +00:00
warning : ! ( me . appOptions . isDesktopApp && me . appOptions . isOffline ) && ( typeof advOptions == 'string' ) ,
2020-12-14 11:47:48 +00:00
warningMsg : advOptions ,
2017-09-08 08:44:01 +00:00
validatePwd : ! ! me . _state . isDRM ,
2018-02-06 10:54:40 +00:00
handler : function ( result , value ) {
2016-08-10 09:33:08 +00:00
me . isShowOpenDialog = false ;
2018-02-06 10:54:40 +00:00
if ( result == 'ok' ) {
if ( me && me . api ) {
2021-03-23 13:55:20 +00:00
me . api . asc _setAdvancedOptions ( type , value . drmOptions ) ;
2018-02-06 10:54:40 +00:00
me . loadMask && me . loadMask . show ( ) ;
}
2018-10-31 09:16:44 +00:00
} else {
2018-02-06 10:54:40 +00:00
Common . Gateway . requestClose ( ) ;
2018-10-31 09:16:44 +00:00
Common . Controllers . Desktop . requestClose ( ) ;
}
2017-09-08 08:39:07 +00:00
me . _state . openDlg = null ;
2016-08-10 09:33:08 +00:00
}
} ) ;
2017-09-08 08:44:01 +00:00
me . _state . isDRM = true ;
2016-08-10 09:33:08 +00:00
}
2017-09-08 08:39:07 +00:00
if ( me . _state . openDlg ) {
2016-03-11 00:48:53 +00:00
this . isShowOpenDialog = true ;
this . loadMask && this . loadMask . hide ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2017-09-08 08:39:07 +00:00
me . _state . openDlg . show ( ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onActiveSheetChanged : function ( index ) {
if ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram && window . editor _elements _prepared ) {
this . application . getController ( 'Statusbar' ) . selectTab ( index ) ;
2022-03-11 10:58:15 +00:00
if ( ! this . appOptions . isEditOle && this . appOptions . canViewComments && ! this . dontCloseDummyComment ) {
2018-11-16 13:44:11 +00:00
Common . NotificationCenter . trigger ( 'comments:updatefilter' , [ 'doc' , 'sheet' + this . api . asc _getWorksheetId ( index ) ] , false ) ; // hide popover
2016-03-11 00:48:53 +00:00
}
}
} ,
2021-06-23 15:49:47 +00:00
onConfirmAction : function ( id , apiCallback , data ) {
2016-04-29 11:53:15 +00:00
var me = this ;
2021-05-27 13:59:39 +00:00
if ( id == Asc . c _oAscConfirm . ConfirmReplaceRange || id == Asc . c _oAscConfirm . ConfirmReplaceFormulaInTable ) {
2016-03-11 00:48:53 +00:00
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
2021-05-27 13:59:39 +00:00
msg : id == Asc . c _oAscConfirm . ConfirmReplaceRange ? this . confirmMoveCellRange : this . confirmReplaceFormulaInTable ,
2016-03-11 00:48:53 +00:00
buttons : [ 'yes' , 'no' ] ,
primary : 'yes' ,
callback : _ . bind ( function ( btn ) {
if ( apiCallback ) {
apiCallback ( btn === 'yes' ) ;
}
if ( btn == 'yes' ) {
me . onEditComplete ( me . application . getController ( 'DocumentHolder' ) . getView ( 'DocumentHolder' ) ) ;
}
} , this )
} ) ;
2016-04-29 11:53:15 +00:00
} else if ( id == Asc . c _oAscConfirm . ConfirmPutMergeRange ) {
Common . UI . warning ( {
closable : false ,
title : this . notcriticalErrorTitle ,
msg : this . confirmPutMergeRange ,
buttons : [ 'ok' ] ,
primary : 'ok' ,
callback : _ . bind ( function ( btn ) {
if ( apiCallback ) {
apiCallback ( ) ;
}
me . onEditComplete ( me . application . getController ( 'DocumentHolder' ) . getView ( 'DocumentHolder' ) ) ;
} , this )
} ) ;
2021-06-23 15:49:47 +00:00
} else if ( id == Asc . c _oAscConfirm . ConfirmChangeProtectRange ) {
var win = new Common . Views . OpenDialog ( {
title : this . txtUnlockRange ,
closable : true ,
type : Common . Utils . importTextType . DRM ,
warning : true ,
warningMsg : this . txtUnlockRangeWarning ,
txtOpenFile : this . txtUnlockRangeDescription ,
validatePwd : false ,
handler : function ( result , value ) {
2021-08-05 15:53:04 +00:00
if ( me . api && apiCallback ) {
2021-11-16 09:06:23 +00:00
if ( result == 'ok' ) {
me . api . asc _checkProtectedRangesPassword ( value . drmOptions . asc _getPassword ( ) , data , function ( res ) {
apiCallback ( res , false ) ;
} ) ;
} else
apiCallback ( false , true ) ;
2021-06-23 15:49:47 +00:00
}
2021-08-05 15:53:04 +00:00
me . onEditComplete ( me . application . getController ( 'DocumentHolder' ) . getView ( 'DocumentHolder' ) ) ;
2021-06-23 15:49:47 +00:00
}
} ) ;
win . show ( ) ;
2022-06-29 13:42:12 +00:00
} else if ( id == Asc . c _oAscConfirm . ConfirmAddCellWatches ) {
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
2022-06-29 15:21:21 +00:00
msg : ( data > Asc . c _nAscMaxAddCellWatchesCount ) ? Common . Utils . String . format ( this . confirmAddCellWatchesMax , Asc . c _nAscMaxAddCellWatchesCount ) : Common . Utils . String . format ( this . confirmAddCellWatches , data ) ,
2022-06-29 13:42:12 +00:00
buttons : [ 'yes' , 'no' ] ,
primary : 'yes' ,
callback : _ . bind ( function ( btn ) {
if ( apiCallback ) {
apiCallback ( btn === 'yes' ) ;
}
} , this )
} ) ;
2022-10-04 18:53:31 +00:00
} else if ( id == Asc . c _oAscConfirm . ConfirmMaxChangesSize ) {
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
msg : this . confirmMaxChangesSize ,
buttons : [ { value : 'ok' , caption : this . textUndo , primary : true } , { value : 'cancel' , caption : this . textContinue } ] ,
maxwidth : 600 ,
callback : _ . bind ( function ( btn ) {
if ( apiCallback ) {
apiCallback ( btn === 'ok' ) ;
}
me . onEditComplete ( me . application . getController ( 'DocumentHolder' ) . getView ( 'DocumentHolder' ) ) ;
} , this )
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
2021-07-19 20:50:45 +00:00
checkProtectedRange : function ( callback , scope , args ) {
2021-11-22 14:24:55 +00:00
var result = this . api . asc _isProtectedSheet ( ) && this . api . asc _checkLockedCells ( ) ? this . api . asc _checkProtectedRange ( ) : false ;
2021-07-19 20:50:45 +00:00
if ( result === null ) {
this . onError ( Asc . c _oAscError . ID . ChangeOnProtectedSheet , Asc . c _oAscError . Level . NoCritical ) ;
return ;
}
if ( result ) {
var me = this ;
var win = new Common . Views . OpenDialog ( {
title : this . txtUnlockRange ,
closable : true ,
type : Common . Utils . importTextType . DRM ,
warning : true ,
warningMsg : this . txtUnlockRangeWarning ,
txtOpenFile : this . txtUnlockRangeDescription ,
validatePwd : false ,
handler : function ( result , value ) {
if ( result == 'ok' ) {
if ( me . api ) {
2021-11-22 16:44:20 +00:00
me . api . asc _checkActiveCellPassword ( value . drmOptions . asc _getPassword ( ) , function ( res ) {
if ( res ) {
callback && setTimeout ( function ( ) {
callback . apply ( scope , args ) ;
} , 1 ) ;
} else {
Common . UI . warning ( {
msg : me . errorWrongPassword ,
callback : function ( ) {
Common . NotificationCenter . trigger ( 'edit:complete' , me . toolbar ) ;
}
} ) ;
}
} ) ;
2021-07-19 20:50:45 +00:00
}
}
Common . NotificationCenter . trigger ( 'edit:complete' , me . toolbar ) ;
}
} ) ;
win . show ( ) ;
} else {
callback && setTimeout ( function ( ) {
callback . apply ( scope , args ) ;
} , 1 ) ;
2016-03-11 00:48:53 +00:00
}
} ,
initNames : function ( ) {
this . shapeGroupNames = [
this . txtBasicShapes ,
this . txtFiguredArrows ,
this . txtMath ,
this . txtCharts ,
this . txtStarsRibbons ,
this . txtCallouts ,
this . txtButtons ,
this . txtRectangles ,
this . txtLines
] ;
} ,
fillAutoShapes : function ( groupNames , shapes ) {
if ( _ . isEmpty ( shapes ) || _ . isEmpty ( groupNames ) || shapes . length != groupNames . length )
return ;
var me = this ,
shapegrouparray = [ ] ,
2022-01-17 19:45:48 +00:00
shapeStore = this . getCollection ( 'ShapeGroups' ) ,
name _arr = { } ;
2016-03-11 00:48:53 +00:00
shapeStore . reset ( ) ;
_ . each ( groupNames , function ( groupName , index ) {
var store = new Backbone . Collection ( [ ] , {
model : SSE . Models . ShapeModel
2019-08-20 08:05:52 +00:00
} ) ,
arr = [ ] ;
2016-03-11 00:48:53 +00:00
var cols = ( shapes [ index ] . length ) > 18 ? 7 : 6 ,
height = Math . ceil ( shapes [ index ] . length / cols ) * 35 + 3 ,
width = 30 * cols ;
_ . each ( shapes [ index ] , function ( shape , idx ) {
2022-01-17 19:45:48 +00:00
var name = me [ 'txtShape_' + shape . Type ] ;
2019-08-20 08:05:52 +00:00
arr . push ( {
2016-03-11 00:48:53 +00:00
data : { shapeType : shape . Type } ,
2022-01-17 19:45:48 +00:00
tip : name || ( me . textShape + ' ' + ( idx + 1 ) ) ,
2016-03-11 00:48:53 +00:00
allowSelected : true ,
selected : false
} ) ;
2022-01-17 19:45:48 +00:00
if ( name )
name _arr [ shape . Type ] = name ;
2016-03-11 00:48:53 +00:00
} ) ;
2019-08-20 08:05:52 +00:00
store . add ( arr ) ;
2016-03-11 00:48:53 +00:00
shapegrouparray . push ( {
groupName : me . shapeGroupNames [ index ] ,
groupStore : store ,
groupWidth : width ,
groupHeight : height
} ) ;
} ) ;
shapeStore . add ( shapegrouparray ) ;
setTimeout ( function ( ) {
2019-08-20 11:05:13 +00:00
me . getApplication ( ) . getController ( 'Toolbar' ) . onApiAutoShapes ( ) ;
2016-03-11 00:48:53 +00:00
} , 50 ) ;
2022-01-17 19:45:48 +00:00
this . api . asc _setShapeNames ( name _arr ) ;
2016-03-11 00:48:53 +00:00
} ,
fillTextArt : function ( shapes ) {
2019-09-03 10:52:52 +00:00
var arr = [ ] ,
2016-03-11 00:48:53 +00:00
artStore = this . getCollection ( 'Common.Collections.TextArt' ) ;
2019-09-03 10:52:52 +00:00
if ( ! shapes && artStore . length > 0 ) { // shapes == undefined when update textart collection (from asc_onSendThemeColors)
shapes = this . api . asc _getTextArtPreviews ( ) ;
}
if ( _ . isEmpty ( shapes ) ) return ;
2016-03-11 00:48:53 +00:00
_ . each ( shapes , function ( shape , index ) {
arr . push ( {
imageUrl : shape ,
data : index ,
allowSelected : true ,
selected : false
} ) ;
} ) ;
artStore . reset ( arr ) ;
} ,
2021-02-25 15:45:24 +00:00
2021-03-02 21:30:04 +00:00
fillCondFormatIcons : function ( icons ) {
if ( _ . isEmpty ( icons ) ) return ;
2021-02-25 15:45:24 +00:00
var arr = [ ] ,
store = this . getCollection ( 'ConditionalFormatIcons' ) ;
2021-03-02 21:30:04 +00:00
_ . each ( icons , function ( icon , index ) {
arr . push ( {
icon : icon ,
index : index
} ) ;
} ) ;
store . reset ( arr ) ;
} ,
fillCondFormatIconsPresets : function ( iconSets ) {
if ( _ . isEmpty ( iconSets ) ) return ;
var arr = [ ] ,
store = this . getCollection ( 'ConditionalFormatIconsPresets' ) ;
2021-02-25 15:45:24 +00:00
_ . each ( iconSets , function ( iconSet , index ) {
arr . push ( {
icons : iconSet ,
data : index
} ) ;
} ) ;
store . reset ( arr ) ;
} ,
2016-03-11 00:48:53 +00:00
updateThemeColors : function ( ) {
var me = this ;
2022-03-18 18:41:25 +00:00
! me . appOptions . isEditOle && setTimeout ( function ( ) {
2016-03-11 00:48:53 +00:00
me . getApplication ( ) . getController ( 'RightMenu' ) . UpdateThemeColors ( ) ;
} , 50 ) ;
2022-05-31 08:34:43 +00:00
setTimeout ( function ( ) {
2016-03-11 00:48:53 +00:00
me . getApplication ( ) . getController ( 'Toolbar' ) . updateThemeColors ( ) ;
} , 50 ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Statusbar' ) . updateThemeColors ( ) ;
} , 50 ) ;
} ,
onSendThemeColors : function ( colors , standart _colors ) {
Common . Utils . ThemeColor . setColors ( colors , standart _colors ) ;
2022-03-18 18:41:25 +00:00
if ( window . styles _loaded ) {
if ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram )
this . updateThemeColors ( ) ;
if ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram && ! this . appOptions . isEditOle ) {
var me = this ;
setTimeout ( function ( ) {
me . fillTextArt ( ) ;
} , 1 ) ;
}
2016-03-11 00:48:53 +00:00
}
} ,
2019-08-05 13:37:09 +00:00
loadLanguages : function ( apiLangs ) {
this . languages = apiLangs ;
window . styles _loaded && this . setLanguages ( ) ;
} ,
setLanguages : function ( ) {
this . getApplication ( ) . getController ( 'Spellcheck' ) . setLanguages ( this . languages ) ;
} ,
2016-03-11 00:48:53 +00:00
onInternalCommand : function ( data ) {
if ( data ) {
switch ( data . command ) {
case 'setChartData' : this . setChartData ( data . data ) ; break ;
case 'getChartData' : this . getChartData ( ) ; break ;
case 'clearChartData' : this . clearChartData ( ) ; break ;
case 'setMergeData' : this . setMergeData ( data . data ) ; break ;
case 'getMergeData' : this . getMergeData ( ) ; break ;
2022-03-10 16:21:29 +00:00
case 'setOleData' : this . setOleData ( data . data ) ; break ;
case 'getOleData' : this . getOleData ( ) ; break ;
2016-03-11 00:48:53 +00:00
case 'setAppDisabled' :
2019-03-19 12:54:20 +00:00
if ( this . isAppDisabled === undefined && ! data . data ) { // first editor opening
2018-07-16 11:58:03 +00:00
Common . NotificationCenter . trigger ( 'layout:changed' , 'main' ) ;
2019-03-19 12:54:20 +00:00
this . loadMask && this . loadMask . isVisible ( ) && this . loadMask . updatePosition ( ) ;
}
2016-03-11 00:48:53 +00:00
this . isAppDisabled = data . data ;
break ;
case 'queryClose' :
2020-04-22 09:57:00 +00:00
if ( ! Common . Utils . ModalWindow . isVisible ( ) ) {
2016-12-05 14:08:58 +00:00
this . isFrameClosed = true ;
2016-06-20 08:59:34 +00:00
this . api . asc _closeCellEditor ( ) ;
2022-06-01 11:11:02 +00:00
this . appOptions . isEditOle && Common . NotificationCenter . trigger ( 'oleedit:close' ) ;
2017-11-02 08:17:48 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
2016-03-11 00:48:53 +00:00
Common . Gateway . internalMessage ( 'canClose' , { mr : data . data . mr , answer : true } ) ;
2018-02-08 15:22:32 +00:00
} else
Common . Gateway . internalMessage ( 'canClose' , { answer : false } ) ;
2016-03-11 00:48:53 +00:00
break ;
case 'window:drag' :
this . isDiagramDrag = data . data ;
break ;
2022-04-01 13:12:20 +00:00
case 'window:resize' :
this . isDiagramResize = data . data ;
break ;
2016-03-11 00:48:53 +00:00
case 'processmouse' :
this . onProcessMouse ( data . data ) ;
break ;
2021-02-02 12:37:00 +00:00
case 'theme:change' :
document . documentElement . className =
document . documentElement . className . replace ( /theme-\w+\s?/ , data . data ) ;
this . api . asc _setSkin ( data . data == "theme-dark" ? 'flatDark' : "flat" ) ;
break ;
2022-09-08 14:20:13 +00:00
case 'generalToFrameData' :
this . api . asc _getInformationBetweenFrameAndGeneralEditor ( data . data ) ;
break ;
2016-03-11 00:48:53 +00:00
}
}
} ,
setChartData : function ( chart ) {
if ( typeof chart === 'object' && this . api ) {
this . api . asc _addChartDrawingObject ( chart ) ;
2016-12-05 14:08:58 +00:00
this . isFrameClosed = false ;
2022-07-28 21:10:57 +00:00
if ( this . lastFrameError ) {
this . onError ( this . lastFrameError . id , this . lastFrameError . level , this . lastFrameError . errData , this . lastFrameError . callback ) ;
this . lastFrameError = undefined ;
}
2016-03-11 00:48:53 +00:00
}
} ,
getChartData : function ( ) {
if ( this . api ) {
var chartData = this . api . asc _getWordChartObject ( ) ;
if ( typeof chartData === 'object' ) {
Common . Gateway . internalMessage ( 'chartData' , {
data : chartData
} ) ;
}
}
} ,
clearChartData : function ( ) {
this . api && this . api . asc _closeCellEditor ( ) ;
} ,
2022-03-10 16:21:29 +00:00
setOleData : function ( obj ) {
2022-04-01 14:49:24 +00:00
if ( ( typeof obj === 'object' || obj === "empty" ) && this . api ) {
this . api . asc _addTableOleObjectInOleEditor ( typeof obj === 'object' ? obj : undefined ) ;
2022-03-10 16:21:29 +00:00
this . isFrameClosed = false ;
2022-07-28 21:10:57 +00:00
if ( this . lastFrameError ) {
this . onError ( this . lastFrameError . id , this . lastFrameError . level , this . lastFrameError . errData , this . lastFrameError . callback ) ;
this . lastFrameError = undefined ;
}
2022-03-10 16:21:29 +00:00
}
} ,
getOleData : function ( ) {
if ( this . api ) {
var oleData = this . api . asc _getBinaryInfoOleObject ( ) ;
if ( typeof oleData === 'object' ) {
Common . Gateway . internalMessage ( 'oleData' , {
data : oleData
} ) ;
}
}
} ,
2022-08-10 14:51:32 +00:00
onOleEditorReady : function ( ) {
Common . Gateway . internalMessage ( 'oleEditorReady' , { } ) ;
} ,
2016-03-11 00:48:53 +00:00
setMergeData : function ( merge ) {
if ( typeof merge === 'object' && this . api ) {
this . api . asc _setData ( merge ) ;
2016-12-05 14:08:58 +00:00
this . isFrameClosed = false ;
2022-07-28 21:10:57 +00:00
if ( this . lastFrameError ) {
this . onError ( this . lastFrameError . id , this . lastFrameError . level , this . lastFrameError . errData , this . lastFrameError . callback ) ;
this . lastFrameError = undefined ;
}
2016-03-11 00:48:53 +00:00
}
} ,
getMergeData : function ( ) {
if ( this . api ) {
var mergeData = this . api . asc _getData ( ) ;
if ( typeof mergeData === 'object' ) {
Common . Gateway . internalMessage ( 'mergeData' , {
data : mergeData
} ) ;
}
}
} ,
2022-09-08 14:20:13 +00:00
onSendFromFrameToGeneralEditor : function ( data ) {
2022-09-08 15:07:45 +00:00
Common . Gateway . internalMessage ( 'frameToGeneralData' , data ) ;
2022-09-08 14:20:13 +00:00
} ,
2016-03-11 00:48:53 +00:00
unitsChanged : function ( m ) {
var value = Common . localStorage . getItem ( "sse-settings-unit" ) ;
2017-10-04 15:44:01 +00:00
value = ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ;
Common . Utils . Metric . setCurrentMetric ( value ) ;
Common . Utils . InternalSettings . set ( "sse-settings-unit" , value ) ;
2020-12-23 13:47:13 +00:00
if ( this . appOptions . isEdit ) {
this . getApplication ( ) . getController ( 'RightMenu' ) . updateMetricUnit ( ) ;
this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( 'Toolbar' ) . updateMetricUnit ( ) ;
}
2021-10-19 16:03:31 +00:00
this . getApplication ( ) . getController ( 'Print' ) . getView ( 'PrintWithPreview' ) . updateMetricUnit ( ) ;
2016-03-11 00:48:53 +00:00
} ,
_compareActionStrong : function ( obj1 , obj2 ) {
return obj1 . id === obj2 . id && obj1 . type === obj2 . type ;
} ,
_compareActionWeak : function ( obj1 , obj2 ) {
return obj1 . type === obj2 . type ;
} ,
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 ;
}
} ,
onNamedRangeLocked : function ( ) {
if ( $ ( '.asc-window.modal.alert:visible' ) . length < 1 ) {
Common . UI . alert ( {
msg : this . errorCreateDefName ,
title : this . notcriticalErrorTitle ,
iconCls : 'warn' ,
buttons : [ 'ok' ] ,
callback : _ . bind ( function ( btn ) {
this . onEditComplete ( ) ;
} , this )
} ) ;
}
} ,
onTryUndoInFastCollaborative : function ( ) {
var val = window . localStorage . getItem ( "sse-hide-try-undoredo" ) ;
if ( ! ( val && parseInt ( val ) == 1 ) )
Common . UI . info ( {
width : 500 ,
2021-04-02 19:36:08 +00:00
msg : this . appOptions . canChangeCoAuthoring ? this . textTryUndoRedo : this . textTryUndoRedoWarn ,
2016-03-11 00:48:53 +00:00
iconCls : 'info' ,
2021-04-02 19:36:08 +00:00
buttons : this . appOptions . canChangeCoAuthoring ? [ 'custom' , 'cancel' ] : [ 'ok' ] ,
primary : this . appOptions . canChangeCoAuthoring ? 'custom' : 'ok' ,
2016-03-11 00:48:53 +00:00
customButtonText : this . textStrict ,
dontshow : true ,
callback : _ . bind ( function ( btn , dontshow ) {
if ( dontshow ) window . localStorage . setItem ( "sse-hide-try-undoredo" , 1 ) ;
if ( btn == 'custom' ) {
Common . localStorage . setItem ( "sse-settings-coauthmode" , 0 ) ;
this . api . asc _SetFastCollaborative ( false ) ;
2017-10-04 15:44:01 +00:00
Common . Utils . InternalSettings . set ( "sse-settings-coauthmode" , false ) ;
2018-04-02 10:58:55 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.ReviewChanges' ) . applySettings ( ) ;
2016-03-11 00:48:53 +00:00
this . _state . fastCoauth = false ;
}
this . onEditComplete ( ) ;
} , this )
} ) ;
} ,
onAuthParticipantsChanged : function ( users ) {
var length = 0 ;
_ . each ( users , function ( item ) {
if ( ! item . asc _getView ( ) )
length ++ ;
} ) ;
this . _state . usersCount = length ;
} ,
2020-12-20 09:22:46 +00:00
onUserConnection : function ( change ) {
2020-12-29 20:48:47 +00:00
if ( change && this . appOptions . user . guest && this . appOptions . canRenameAnonymous && ( change . asc _getIdOriginal ( ) == this . appOptions . user . id ) ) { // change name of the current user
2020-12-20 09:22:46 +00:00
var name = change . asc _getUserName ( ) ;
2021-03-26 11:29:16 +00:00
if ( name && name !== AscCommon . UserInfoParser . getCurrentName ( ) ) {
2021-01-20 20:49:01 +00:00
this . _renameDialog && this . _renameDialog . close ( ) ;
2021-03-26 11:29:16 +00:00
AscCommon . UserInfoParser . setCurrentName ( name ) ;
this . headerView . setUserName ( AscCommon . UserInfoParser . getParsedName ( name ) ) ;
2020-12-20 09:22:46 +00:00
var idx1 = name . lastIndexOf ( '(' ) ,
idx2 = name . lastIndexOf ( ')' ) ,
str = ( idx1 > 0 ) && ( idx1 < idx2 ) ? name . substring ( 0 , idx1 - 1 ) : '' ;
if ( Common . localStorage . getItem ( "guest-username" ) !== null ) {
Common . localStorage . setItem ( "guest-username" , str ) ;
}
Common . Utils . InternalSettings . set ( "guest-username" , str ) ;
}
}
} ,
2016-03-11 00:48:53 +00:00
applySettings : function ( ) {
2016-12-20 14:29:37 +00:00
if ( this . appOptions . isEdit && ! this . appOptions . isOffline && this . appOptions . canCoAuthoring ) {
2016-03-11 00:48:53 +00:00
var value = Common . localStorage . getItem ( "sse-settings-coauthmode" ) ,
oldval = this . _state . fastCoauth ;
this . _state . fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
if ( this . _state . fastCoauth && ! oldval )
2021-07-28 16:49:34 +00:00
this . synchronizeChanges ( ) ;
2016-03-11 00:48:53 +00:00
}
2017-04-11 11:05:56 +00:00
if ( this . appOptions . canForcesave ) {
2017-10-04 15:44:01 +00:00
this . appOptions . forcesave = Common . localStorage . getBool ( "sse-settings-forcesave" , this . appOptions . canForcesave ) ;
Common . Utils . InternalSettings . set ( "sse-settings-forcesave" , this . appOptions . forcesave ) ;
2017-04-11 11:05:56 +00:00
this . api . asc _setIsForceSaveOnUserSave ( this . appOptions . forcesave ) ;
}
2016-03-11 00:48:53 +00:00
} ,
onDocumentName : function ( name ) {
this . headerView . setDocumentCaption ( name ) ;
this . updateWindowTitle ( this . api . asc _isDocumentModified ( ) , true ) ;
} ,
2016-09-26 10:54:25 +00:00
onMeta : function ( meta ) {
var app = this . getApplication ( ) ,
filemenu = app . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . getMenu ( 'file' ) ;
app . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) . setDocumentCaption ( meta . title ) ;
2016-10-10 13:13:38 +00:00
this . updateWindowTitle ( this . api . asc _isDocumentModified ( ) , true ) ;
2016-09-26 10:54:25 +00:00
this . appOptions . spreadsheet . title = meta . title ;
filemenu . loadDocument ( { doc : this . appOptions . spreadsheet } ) ;
2019-10-08 14:35:47 +00:00
filemenu . panels && filemenu . panels [ 'info' ] && filemenu . panels [ 'info' ] . updateInfo ( this . appOptions . spreadsheet ) ;
2019-10-09 10:23:40 +00:00
app . getController ( 'Common.Controllers.ReviewChanges' ) . loadDocument ( { doc : this . appOptions . spreadsheet } ) ;
2016-09-26 10:54:25 +00:00
Common . Gateway . metaChange ( meta ) ;
2021-05-12 16:04:14 +00:00
if ( this . appOptions . wopi ) {
var idx = meta . title . lastIndexOf ( '.' ) ;
Common . Gateway . requestRename ( idx > 0 ? meta . title . substring ( 0 , idx ) : meta . title ) ;
}
2016-09-26 10:54:25 +00:00
} ,
2016-03-11 00:48:53 +00:00
onPrint : function ( ) {
2020-04-22 09:35:55 +00:00
if ( ! this . appOptions . canPrint || Common . Utils . ModalWindow . isVisible ( ) ) return ;
2021-10-21 13:01:30 +00:00
Common . NotificationCenter . trigger ( 'file:print' , this ) ;
2016-03-11 00:48:53 +00:00
} ,
onPrintUrl : function ( url ) {
2016-06-09 10:22:58 +00:00
if ( this . iframePrint ) {
this . iframePrint . parentNode . removeChild ( this . iframePrint ) ;
this . iframePrint = null ;
}
2016-03-11 00:48:53 +00:00
if ( ! this . iframePrint ) {
var me = this ;
this . iframePrint = document . createElement ( "iframe" ) ;
this . iframePrint . id = "id-print-frame" ;
this . iframePrint . style . display = 'none' ;
this . iframePrint . style . visibility = "hidden" ;
this . iframePrint . style . position = "fixed" ;
this . iframePrint . style . right = "0" ;
this . iframePrint . style . bottom = "0" ;
document . body . appendChild ( this . iframePrint ) ;
this . iframePrint . onload = function ( ) {
2019-07-23 12:07:51 +00:00
try {
2016-03-11 00:48:53 +00:00
me . iframePrint . contentWindow . focus ( ) ;
me . iframePrint . contentWindow . print ( ) ;
2016-06-09 10:22:58 +00:00
me . iframePrint . contentWindow . blur ( ) ;
window . focus ( ) ;
2019-07-23 12:07:51 +00:00
} catch ( e ) {
2019-07-24 08:36:13 +00:00
var opts = new Asc . asc _CDownloadOptions ( Asc . c _oAscFileType . PDF ) ;
2019-07-25 10:17:33 +00:00
opts . asc _setAdvancedOptions ( me . getApplication ( ) . getController ( 'Print' ) . getPrintParams ( ) ) ;
2019-07-24 08:36:13 +00:00
me . api . asc _DownloadAs ( opts ) ;
2019-07-23 12:07:51 +00:00
}
2016-03-11 00:48:53 +00:00
} ;
}
if ( url ) this . iframePrint . src = url ;
} ,
2020-04-29 17:54:48 +00:00
warningDocumentIsLocked : function ( ) {
var me = this ;
Common . Utils . warningDocumentIsLocked ( {
disablefunc : function ( disable ) {
2021-07-01 21:54:55 +00:00
me . disableEditing ( disable , true ) ;
2020-04-29 17:54:48 +00:00
} } ) ;
} ,
2020-05-22 14:55:35 +00:00
onRunAutostartMacroses : function ( ) {
var me = this ,
enable = ! this . editorConfig . customization || ( this . editorConfig . customization . macros !== false ) ;
if ( enable ) {
var value = Common . Utils . InternalSettings . get ( "sse-macros-mode" ) ;
if ( value == 1 )
this . api . asc _runAutostartMacroses ( ) ;
else if ( value === 0 ) {
Common . UI . warning ( {
msg : this . textHasMacros + '<br>' ,
buttons : [ 'yes' , 'no' ] ,
primary : 'yes' ,
dontshow : true ,
textDontShow : this . textRemember ,
callback : function ( btn , dontshow ) {
if ( dontshow ) {
Common . Utils . InternalSettings . set ( "sse-macros-mode" , ( btn == 'yes' ) ? 1 : 2 ) ;
Common . localStorage . setItem ( "sse-macros-mode" , ( btn == 'yes' ) ? 1 : 2 ) ;
}
if ( btn == 'yes' ) {
setTimeout ( function ( ) {
me . api . asc _runAutostartMacroses ( ) ;
} , 1 ) ;
}
}
} ) ;
}
}
} ,
2022-05-19 14:54:49 +00:00
onMacrosPermissionRequest : function ( url , callback ) {
2022-05-20 10:24:17 +00:00
if ( url && callback ) {
this . stackMacrosRequests . push ( { url : url , callback : callback } ) ;
if ( this . stackMacrosRequests . length > 1 ) {
return ;
2022-05-19 14:54:49 +00:00
}
2022-05-20 10:24:17 +00:00
} else if ( this . stackMacrosRequests . length > 0 ) {
url = this . stackMacrosRequests [ 0 ] . url ;
callback = this . stackMacrosRequests [ 0 ] . callback ;
} else
return ;
var me = this ;
var value = Common . Utils . InternalSettings . get ( "sse-allow-macros-request" ) ;
if ( value > 0 ) {
callback && callback ( value === 1 ) ;
this . stackMacrosRequests . shift ( ) ;
this . onMacrosPermissionRequest ( ) ;
} else {
Common . UI . warning ( {
msg : this . textRequestMacros . replace ( '%1' , url ) ,
buttons : [ 'yes' , 'no' ] ,
primary : 'yes' ,
dontshow : true ,
textDontShow : this . textRememberMacros ,
maxwidth : 600 ,
callback : function ( btn , dontshow ) {
if ( dontshow ) {
Common . Utils . InternalSettings . set ( "sse-allow-macros-request" , ( btn == 'yes' ) ? 1 : 2 ) ;
Common . localStorage . setItem ( "sse-allow-macros-request" , ( btn == 'yes' ) ? 1 : 2 ) ;
}
setTimeout ( function ( ) {
if ( callback ) callback ( btn == 'yes' ) ;
me . stackMacrosRequests . shift ( ) ;
me . onMacrosPermissionRequest ( ) ;
} , 1 ) ;
}
} ) ;
}
2022-05-19 14:54:49 +00:00
} ,
2020-08-12 17:30:25 +00:00
loadAutoCorrectSettings : function ( ) {
// autocorrection
var me = this ;
var value = Common . localStorage . getItem ( "sse-settings-math-correct-add" ) ;
Common . Utils . InternalSettings . set ( "sse-settings-math-correct-add" , value ) ;
var arrAdd = value ? JSON . parse ( value ) : [ ] ;
value = Common . localStorage . getItem ( "sse-settings-math-correct-rem" ) ;
Common . Utils . InternalSettings . set ( "sse-settings-math-correct-rem" , value ) ;
var arrRem = value ? JSON . parse ( value ) : [ ] ;
value = Common . localStorage . getBool ( "sse-settings-math-correct-replace-type" , true ) ; // replace on type
Common . Utils . InternalSettings . set ( "sse-settings-math-correct-replace-type" , value ) ;
me . api . asc _refreshOnStartAutoCorrectMathSymbols ( arrRem , arrAdd , value ) ;
value = Common . localStorage . getItem ( "sse-settings-rec-functions-add" ) ;
Common . Utils . InternalSettings . set ( "sse-settings-rec-functions-add" , value ) ;
arrAdd = value ? JSON . parse ( value ) : [ ] ;
value = Common . localStorage . getItem ( "sse-settings-rec-functions-rem" ) ;
Common . Utils . InternalSettings . set ( "sse-settings-rec-functions-rem" , value ) ;
arrRem = value ? JSON . parse ( value ) : [ ] ;
me . api . asc _refreshOnStartAutoCorrectMathFunctions ( arrRem , arrAdd ) ;
2020-09-07 20:18:16 +00:00
value = Common . localStorage . getBool ( "sse-settings-autoformat-new-rows" , true ) ;
Common . Utils . InternalSettings . set ( "sse-settings-autoformat-new-rows" , value ) ;
me . api . asc _setIncludeNewRowColTable ( value ) ;
2021-05-19 17:53:49 +00:00
2021-05-20 15:37:42 +00:00
value = Common . localStorage . getBool ( "sse-settings-autoformat-hyperlink" , true ) ;
Common . Utils . InternalSettings . set ( "sse-settings-autoformat-hyperlink" , value ) ;
2021-08-31 16:08:04 +00:00
me . api . asc _SetAutoCorrectHyperlinks ( value ) ;
2020-08-12 17:30:25 +00:00
} ,
2020-12-18 10:23:14 +00:00
showRenameUserDialog : function ( ) {
if ( this . _renameDialog ) return ;
var me = this ;
this . _renameDialog = new Common . Views . UserNameDialog ( {
label : this . textRenameLabel ,
error : this . textRenameError ,
2020-12-20 09:22:46 +00:00
value : Common . Utils . InternalSettings . get ( "guest-username" ) || '' ,
check : Common . Utils . InternalSettings . get ( "save-guest-username" ) || false ,
2020-12-18 10:23:14 +00:00
validation : function ( value ) {
return value . length < 128 ? true : me . textLongName ;
} ,
2020-12-18 16:20:31 +00:00
handler : function ( result , settings ) {
2020-12-18 10:23:14 +00:00
if ( result == 'ok' ) {
2020-12-18 16:20:31 +00:00
var name = settings . input ? settings . input + ' (' + me . textGuest + ')' : me . textAnonymous ;
2020-12-18 10:23:14 +00:00
var _user = new Asc . asc _CUserInfo ( ) ;
_user . put _FullName ( name ) ;
var docInfo = new Asc . asc _CDocInfo ( ) ;
docInfo . put _UserInfo ( _user ) ;
me . api . asc _changeDocInfo ( docInfo ) ;
2020-12-18 16:20:31 +00:00
settings . checkbox ? Common . localStorage . setItem ( "guest-username" , settings . input ) : Common . localStorage . removeItem ( "guest-username" ) ;
Common . Utils . InternalSettings . set ( "guest-username" , settings . input ) ;
2020-12-20 09:22:46 +00:00
Common . Utils . InternalSettings . set ( "save-guest-username" , settings . checkbox ) ;
2020-12-18 10:23:14 +00:00
}
}
} ) ;
this . _renameDialog . on ( 'close' , function ( ) {
me . _renameDialog = undefined ;
} ) ;
this . _renameDialog . show ( Common . Utils . innerWidth ( ) - this . _renameDialog . options . width - 15 , 30 ) ;
} ,
2021-06-28 17:18:53 +00:00
onRefreshHistory : function ( opts ) {
if ( ! this . appOptions . canUseHistory ) return ;
this . loadMask && this . loadMask . hide ( ) ;
if ( opts . data . error || ! opts . data . history ) {
var historyStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' ) ;
if ( historyStore && historyStore . size ( ) > 0 ) {
historyStore . each ( function ( item ) {
item . set ( 'canRestore' , false ) ;
} ) ;
}
Common . UI . alert ( {
title : this . notcriticalErrorTitle ,
msg : ( opts . data . error ) ? opts . data . error : this . txtErrorLoadHistory ,
iconCls : 'warn' ,
buttons : [ 'ok' ] ,
callback : _ . bind ( function ( btn ) {
this . onEditComplete ( ) ;
} , this )
} ) ;
} else {
this . api . asc _coAuthoringDisconnect ( ) ;
this . headerView . setCanRename ( false ) ;
this . headerView . getButton ( 'users' ) && this . headerView . getButton ( 'users' ) . hide ( ) ;
2022-02-06 11:50:17 +00:00
this . headerView . getButton ( 'share' ) && this . headerView . getButton ( 'share' ) . setVisible ( false ) ;
2021-06-28 17:18:53 +00:00
this . getApplication ( ) . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . showHistory ( ) ;
this . disableEditing ( true ) ;
this . _renameDialog && this . _renameDialog . close ( ) ;
var versions = opts . data . history ,
historyStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryVersions' ) ,
currentVersion = null ;
if ( historyStore ) {
var arrVersions = [ ] , ver , version , group = - 1 , prev _ver = - 1 , arrColors = [ ] , docIdPrev = '' ,
usersStore = this . getApplication ( ) . getCollection ( 'Common.Collections.HistoryUsers' ) , user = null , usersCnt = 0 ;
for ( ver = versions . length - 1 ; ver >= 0 ; ver -- ) {
version = versions [ ver ] ;
if ( version . versionGroup === undefined || version . versionGroup === null )
version . versionGroup = version . version ;
if ( version ) {
if ( ! version . user ) version . user = { } ;
docIdPrev = ( ver > 0 && versions [ ver - 1 ] ) ? versions [ ver - 1 ] . key : version . key + '0' ;
user = usersStore . findUser ( version . user . id ) ;
if ( ! user ) {
user = new Common . Models . User ( {
id : version . user . id ,
username : version . user . name ,
colorval : Asc . c _oAscArrUserColors [ usersCnt ] ,
color : this . generateUserColor ( Asc . c _oAscArrUserColors [ usersCnt ++ ] )
} ) ;
usersStore . add ( user ) ;
}
arrVersions . push ( new Common . Models . HistoryVersion ( {
version : version . versionGroup ,
revision : version . version ,
userid : version . user . id ,
username : version . user . name ,
usercolor : user . get ( 'color' ) ,
created : version . created ,
docId : version . key ,
markedAsVersion : ( group !== version . versionGroup ) ,
selected : ( opts . data . currentVersion == version . version ) ,
canRestore : this . appOptions . canHistoryRestore && ( ver < versions . length - 1 ) ,
isExpanded : true ,
2021-07-27 21:06:52 +00:00
serverVersion : version . serverVersion ,
fileType : 'xslx'
2021-06-28 17:18:53 +00:00
} ) ) ;
if ( opts . data . currentVersion == version . version ) {
currentVersion = arrVersions [ arrVersions . length - 1 ] ;
}
group = version . versionGroup ;
if ( prev _ver !== version . version ) {
prev _ver = version . version ;
arrColors . reverse ( ) ;
for ( i = 0 ; i < arrColors . length ; i ++ ) {
arrVersions [ arrVersions . length - i - 2 ] . set ( 'arrColors' , arrColors ) ;
}
arrColors = [ ] ;
}
arrColors . push ( user . get ( 'colorval' ) ) ;
var changes = version . changes , change , i ;
if ( changes && changes . length > 0 ) {
arrVersions [ arrVersions . length - 1 ] . set ( 'docIdPrev' , docIdPrev ) ;
if ( ! _ . isEmpty ( version . serverVersion ) && version . serverVersion == this . appOptions . buildVersion ) {
arrVersions [ arrVersions . length - 1 ] . set ( 'changeid' , changes . length - 1 ) ;
arrVersions [ arrVersions . length - 1 ] . set ( 'hasChanges' , changes . length > 1 ) ;
for ( i = changes . length - 2 ; i >= 0 ; i -- ) {
change = changes [ i ] ;
user = usersStore . findUser ( change . user . id ) ;
if ( ! user ) {
user = new Common . Models . User ( {
id : change . user . id ,
username : change . user . name ,
colorval : Asc . c _oAscArrUserColors [ usersCnt ] ,
color : this . generateUserColor ( Asc . c _oAscArrUserColors [ usersCnt ++ ] )
} ) ;
usersStore . add ( user ) ;
}
arrVersions . push ( new Common . Models . HistoryVersion ( {
version : version . versionGroup ,
revision : version . version ,
changeid : i ,
userid : change . user . id ,
username : change . user . name ,
usercolor : user . get ( 'color' ) ,
created : change . created ,
docId : version . key ,
docIdPrev : docIdPrev ,
selected : false ,
canRestore : this . appOptions . canHistoryRestore && this . appOptions . canDownload ,
isRevision : false ,
isVisible : true ,
2021-07-27 21:06:52 +00:00
serverVersion : version . serverVersion ,
fileType : 'xslx'
2021-06-28 17:18:53 +00:00
} ) ) ;
arrColors . push ( user . get ( 'colorval' ) ) ;
}
}
} else if ( ver == 0 && versions . length == 1 ) {
arrVersions [ arrVersions . length - 1 ] . set ( 'docId' , version . key + '1' ) ;
}
}
}
if ( arrColors . length > 0 ) {
arrColors . reverse ( ) ;
for ( i = 0 ; i < arrColors . length ; i ++ ) {
arrVersions [ arrVersions . length - i - 1 ] . set ( 'arrColors' , arrColors ) ;
}
arrColors = [ ] ;
}
historyStore . reset ( arrVersions ) ;
if ( currentVersion === null && historyStore . size ( ) > 0 ) {
currentVersion = historyStore . at ( 0 ) ;
currentVersion . set ( 'selected' , true ) ;
}
// if (currentVersion)
// this.getApplication().getController('Common.Controllers.History').onSelectRevision(null, null, currentVersion);
}
}
} ,
DisableVersionHistory : function ( ) {
this . editorConfig . canUseHistory = false ;
this . appOptions . canUseHistory = false ;
} ,
generateUserColor : function ( color ) {
return "#" + ( "000000" + color . toString ( 16 ) ) . substr ( - 6 ) ;
} ,
2021-05-06 11:37:46 +00:00
onGrabFocus : function ( ) {
this . getApplication ( ) . getController ( 'DocumentHolder' ) . getView ( ) . focus ( ) ;
} ,
2021-05-12 09:33:10 +00:00
onLanguageLoaded : function ( ) {
if ( ! Common . Locale . getCurrentLanguage ( ) ) {
Common . UI . warning ( {
msg : this . errorLang ,
2021-05-12 11:36:24 +00:00
buttons : [ ] ,
closable : false
2021-05-12 09:33:10 +00:00
} ) ;
return false ;
}
return true ;
} ,
2021-07-28 16:49:34 +00:00
onCollaborativeChanges : function ( ) {
if ( this . _state . hasCollaborativeChanges ) return ;
this . _state . hasCollaborativeChanges = true ;
if ( this . appOptions . isEdit )
this . getApplication ( ) . getController ( 'Statusbar' ) . setStatusCaption ( this . textNeedSynchronize , true ) ;
} ,
synchronizeChanges : function ( ) {
this . toolbarView && this . toolbarView . synchronizeChanges ( ) ;
this . _state . hasCollaborativeChanges = false ;
2021-08-18 16:46:55 +00:00
} ,
2020-08-25 16:09:31 +00:00
onConvertEquationToMath : function ( equation ) {
var me = this ,
win ;
var msg = this . textConvertEquation + '<br><br><a id="id-equation-convert-help" style="cursor: pointer;">' + this . textLearnMore + '</a>' ;
win = Common . UI . warning ( {
width : 500 ,
msg : msg ,
buttons : [ 'yes' , 'cancel' ] ,
primary : 'yes' ,
dontshow : true ,
textDontShow : this . textApplyAll ,
callback : _ . bind ( function ( btn , dontshow ) {
if ( btn == 'yes' ) {
this . api . asc _ConvertEquationToMath ( equation , dontshow ) ;
}
this . onEditComplete ( ) ;
} , this )
} ) ;
win . $window . find ( '#id-equation-convert-help' ) . on ( 'click' , function ( e ) {
win && win . close ( ) ;
me . getApplication ( ) . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . showMenu ( 'file:help' , 'UsageInstructions\/InsertEquation.htm#convertequation' ) ;
} )
2021-07-28 16:49:34 +00:00
} ,
2016-03-11 00:48:53 +00:00
leavePageText : 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.' ,
criticalErrorTitle : 'Error' ,
notcriticalErrorTitle : 'Warning' ,
errorDefaultMessage : 'Error code: %1' ,
2019-04-29 11:42:58 +00:00
criticalErrorExtText : 'Press "OK" to to back to document list.' ,
2016-03-11 00:48:53 +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...' ,
2016-07-04 14:41:11 +00:00
loadingDocumentTitleText : 'Loading spreadsheet' ,
2016-03-11 00:48:53 +00:00
uploadImageSizeMessage : 'Maximium image size limit exceeded.' ,
uploadImageExtMessage : 'Unknown image format.' ,
uploadImageFileCountMessage : 'No images uploaded.' ,
reloadButtonText : 'Reload Page' ,
unknownErrorText : 'Unknown error.' ,
convertationTimeoutText : 'Convertation timeout exceeded.' ,
downloadErrorText : 'Download failed.' ,
2019-04-29 11:02:52 +00:00
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
2016-03-11 00:48:53 +00:00
requestEditFailedTitleText : 'Access denied' ,
requestEditFailedMessageText : 'Someone is editing this document right now. Please try again later.' ,
warnBrowserZoom : 'Your browser\'s current zoom setting is not fully supported. Please reset to the default zoom by pressing Ctrl+0.' ,
warnBrowserIE9 : 'The application has low capabilities on IE9. Use IE10 or higher' ,
pastInMergeAreaError : 'Cannot change part of a merged cell' ,
textPleaseWait : 'It\'s working hard. Please wait...' ,
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.' ,
errorDatabaseConnection : 'External error.<br>Database connection error. Please, contact support.' ,
errorFileRequest : 'External error.<br>File Request. Please, contact support.' ,
errorFileVKey : 'External error.<br>Incorrect securety key. Please, contact support.' ,
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.' ,
2017-04-11 11:05:56 +00:00
errorOperandExpected : 'The entered function syntax is not correct. Please check if you are missing one of the parentheses - \'(\' or \')\'.' ,
2016-03-11 00:48:53 +00:00
errorKeyEncrypt : 'Unknown key descriptor' ,
errorKeyExpire : 'Key descriptor expired' ,
errorUsersExceed : 'Count of users was exceed' ,
errorMoveRange : 'Cann\'t change a part of merged cell' ,
errorBadImageUrl : 'Image url is incorrect' ,
errorCoAuthoringDisconnect : 'Server connection lost. You can\'t edit anymore.' ,
2018-04-26 10:27:08 +00:00
errorFilePassProtect : 'The file is password protected and cannot be opened.' ,
2016-03-11 00:48:53 +00:00
errorLockedAll : 'The operation could not be done as the sheet has been locked by another user.' ,
txtEditingMode : 'Set editing mode...' ,
2016-07-04 14:41:11 +00:00
textLoadingDocument : 'Loading spreadsheet' ,
2016-03-11 00:48:53 +00:00
textConfirm : 'Confirmation' ,
confirmMoveCellRange : 'The destination cell\'s range can contain data. Continue the operation?' ,
textYes : 'Yes' ,
textNo : 'No' ,
textAnonymous : 'Anonymous' ,
txtBasicShapes : 'Basic Shapes' ,
txtFiguredArrows : 'Figured Arrows' ,
txtMath : 'Math' ,
txtCharts : 'Charts' ,
txtStarsRibbons : 'Stars & Ribbons' ,
txtCallouts : 'Callouts' ,
txtButtons : 'Buttons' ,
txtRectangles : 'Rectangles' ,
txtLines : 'Lines' ,
txtDiagramTitle : 'Chart Title' ,
txtXAxis : 'X Axis' ,
txtYAxis : 'Y Axis' ,
txtSeries : 'Seria' ,
warnProcessRightsChange : 'You have been denied the right to edit the file.' ,
errorProcessSaveResult : 'Saving is failed.' ,
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.' ,
2016-11-16 10:35:26 +00:00
textCloseTip : 'Click to close the tip.' ,
2016-03-11 00:48:53 +00:00
textShape : 'Shape' ,
errorFillRange : 'Could not fill the selected range of cells.<br>All the merged cells need to be the same size.' ,
errorUpdateVersion : 'The file version has been changed. The page will be reloaded.' ,
errorUserDrop : 'The file cannot be accessed right now.' ,
txtArt : 'Your text here' ,
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.' ,
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-03-11 00:48:53 +00:00
errorLockedWorksheetRename : 'The sheet cannot be renamed at the moment as it is being renamed by another user' ,
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' ,
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.' ,
2016-06-23 06:45:41 +00:00
textBuyNow : 'Visit website' ,
2020-07-14 09:46:15 +00:00
textNoLicenseTitle : 'License limit reached' ,
2016-06-23 06:45:41 +00:00
textContactUs : 'Contact sales' ,
2016-07-25 07:56:39 +00:00
confirmPutMergeRange : 'The source data contains merged cells.<br>They will be unmerged before they are pasted into the table.' ,
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 or print until the connection is restored and page is reloaded.' ,
2016-08-29 11:46:15 +00:00
warnLicenseExp : 'Your license has expired.<br>Please update your license and refresh the page.' ,
2016-09-13 06:40:44 +00:00
titleLicenseExp : 'License expired' ,
openErrorText : 'An error has occurred while opening the file' ,
2016-10-13 10:45:06 +00:00
saveErrorText : 'An error has occurred while saving the file' ,
2016-11-09 11:07:49 +00:00
errorCopyMultiselectArea : 'This command cannot be used with multiple selections.<br>Select a single range and try again.' ,
2016-11-28 11:52:03 +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.' ,
errorToken : 'The document security token is not correctly formed.<br>Please contact your Document Server administrator.' ,
errorTokenExpire : 'The document security token has expired.<br>Please contact your Document Server administrator.' ,
errorSessionAbsolute : 'The document editing session has expired. Please reload the page.' ,
errorSessionIdle : 'The document has not been edited for quite a long time. Please reload the page.' ,
errorSessionToken : 'The connection to the server has been interrupted. Please reload the page.' ,
2017-04-11 11:05:56 +00:00
errorAccessDeny : 'You are trying to perform an action you do not have rights for.<br>Please contact your Document Server administrator.' ,
titleServerVersion : 'Editor updated' ,
2017-06-23 13:52:12 +00:00
errorServerVersion : 'The editor version has been updated. The page will be reloaded to apply the changes.' ,
2017-04-25 12:19:25 +00:00
errorLockedCellPivot : 'You cannot change data inside a pivot table.' ,
2017-06-23 13:52:12 +00:00
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 10:40:45 +00:00
txtStyle _Comma : 'Comma' ,
2018-02-27 07:58:30 +00:00
errorForceSave : "An error occurred while saving the file. Please use the 'Download as' option to save the file to your computer hard drive or try again later." ,
2018-05-28 10:00:03 +00:00
errorMaxPoints : "The maximum number of points in series per chart is 4096." ,
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-09-07 10:22:03 +00:00
errorDataEncrypted : 'Encrypted changes have been received, they cannot be deciphered.' ,
textClose : 'Close' ,
textPaidFeature : 'Paid feature' ,
2018-10-30 10:08:21 +00:00
scriptLoadError : 'The connection is too slow, some of the components could not be loaded. Please reload the page.' ,
2018-10-25 13:19:29 +00:00
errorEditingSaveas : 'An error occurred during the work with the document.<br>Use the \'Save as...\' option to save the file backup copy to your computer hard drive.' ,
2019-02-08 12:08:19 +00:00
errorEditingDownloadas : 'An error occurred during the work with the document.<br>Use the \'Download as...\' option to save the file backup copy to your computer hard drive.' ,
txtShape _textRect : 'Text Box' ,
txtShape _rect : 'Rectangle' ,
txtShape _ellipse : 'Ellipse' ,
txtShape _triangle : 'Triangle' ,
txtShape _rtTriangle : 'Right Triangle' ,
txtShape _parallelogram : 'Parallelogram' ,
txtShape _trapezoid : 'Trapezoid' ,
txtShape _diamond : 'Diamond' ,
txtShape _pentagon : 'Pentagon' ,
txtShape _hexagon : 'Hexagon' ,
txtShape _heptagon : 'Heptagon' ,
txtShape _octagon : 'Octagon' ,
txtShape _decagon : 'Decagon' ,
txtShape _dodecagon : 'Dodecagon' ,
txtShape _pie : 'Pie' ,
txtShape _chord : 'Chord' ,
txtShape _teardrop : 'Teardrop' ,
txtShape _frame : 'Frame' ,
txtShape _halfFrame : 'Half Frame' ,
txtShape _corner : 'Corner' ,
txtShape _diagStripe : 'Diagonal Stripe' ,
txtShape _plus : 'Plus' ,
txtShape _plaque : 'Sign' ,
txtShape _can : 'Can' ,
txtShape _cube : 'Cube' ,
txtShape _bevel : 'Bevel' ,
txtShape _donut : 'Donut' ,
txtShape _noSmoking : '"No" Symbol' ,
txtShape _blockArc : 'Block Arc' ,
txtShape _foldedCorner : 'Folded Corner' ,
txtShape _smileyFace : 'Smiley Face' ,
txtShape _heart : 'Heart' ,
txtShape _lightningBolt : 'Lightning Bolt' ,
txtShape _sun : 'Sun' ,
txtShape _moon : 'Moon' ,
txtShape _cloud : 'Cloud' ,
txtShape _arc : 'Arc' ,
txtShape _bracePair : 'Double Brace' ,
txtShape _leftBracket : 'Left Bracket' ,
txtShape _rightBracket : 'Right Bracket' ,
txtShape _leftBrace : 'Left Brace' ,
txtShape _rightBrace : 'Right Brace' ,
txtShape _rightArrow : 'Right Arrow' ,
txtShape _leftArrow : 'Left Arrow' ,
txtShape _upArrow : 'Up Arrow' ,
txtShape _downArrow : 'Down Arrow' ,
txtShape _leftRightArrow : 'Left Right Arrow' ,
txtShape _upDownArrow : 'Up Down Arrow' ,
txtShape _quadArrow : 'Quad Arrow' ,
txtShape _leftRightUpArrow : 'Left Right Up Arrow' ,
txtShape _bentArrow : 'Bent Arrow' ,
txtShape _uturnArrow : 'U-Turn Arrow' ,
txtShape _leftUpArrow : 'Left Up Arrow' ,
txtShape _bentUpArrow : 'Bent Up Arrow' ,
txtShape _curvedRightArrow : 'Curved Right Arrow' ,
txtShape _curvedLeftArrow : 'Curved Left Arrow' ,
txtShape _curvedUpArrow : 'Curved Up Arrow' ,
txtShape _curvedDownArrow : 'Curved Down Arrow' ,
txtShape _stripedRightArrow : 'Striped Right Arrow' ,
txtShape _notchedRightArrow : 'Notched Right Arrow' ,
txtShape _homePlate : 'Pentagon' ,
txtShape _chevron : 'Chevron' ,
txtShape _rightArrowCallout : 'Right Arrow Callout' ,
txtShape _downArrowCallout : 'Down Arrow Callout' ,
txtShape _leftArrowCallout : 'Left Arrow Callout' ,
txtShape _upArrowCallout : 'Up Arrow Callout' ,
txtShape _leftRightArrowCallout : 'Left Right Arrow Callout' ,
txtShape _quadArrowCallout : 'Quad Arrow Callout' ,
txtShape _circularArrow : 'Circular Arrow' ,
txtShape _mathPlus : 'Plus' ,
txtShape _mathMinus : 'Minus' ,
txtShape _mathMultiply : 'Multiply' ,
txtShape _mathDivide : 'Division' ,
txtShape _mathEqual : 'Equal' ,
txtShape _mathNotEqual : 'Not Equal' ,
txtShape _flowChartProcess : 'Flowchart: Process' ,
txtShape _flowChartAlternateProcess : 'Flowchart: Alternate Process' ,
txtShape _flowChartDecision : 'Flowchart: Decision' ,
txtShape _flowChartInputOutput : 'Flowchart: Data' ,
txtShape _flowChartPredefinedProcess : 'Flowchart: Predefined Process' ,
txtShape _flowChartInternalStorage : 'Flowchart: Internal Storage' ,
txtShape _flowChartDocument : 'Flowchart: Document' ,
txtShape _flowChartMultidocument : 'Flowchart: Multidocument ' ,
txtShape _flowChartTerminator : 'Flowchart: Terminator' ,
txtShape _flowChartPreparation : 'Flowchart: Preparation' ,
txtShape _flowChartManualInput : 'Flowchart: Manual Input' ,
txtShape _flowChartManualOperation : 'Flowchart: Manual Operation' ,
txtShape _flowChartConnector : 'Flowchart: Connector' ,
txtShape _flowChartOffpageConnector : 'Flowchart: Off-page Connector' ,
txtShape _flowChartPunchedCard : 'Flowchart: Card' ,
txtShape _flowChartPunchedTape : 'Flowchart: Punched Tape' ,
txtShape _flowChartSummingJunction : 'Flowchart: Summing Junction' ,
txtShape _flowChartOr : 'Flowchart: Or' ,
txtShape _flowChartCollate : 'Flowchart: Collate' ,
txtShape _flowChartSort : 'Flowchart: Sort' ,
txtShape _flowChartExtract : 'Flowchart: Extract' ,
txtShape _flowChartMerge : 'Flowchart: Merge' ,
txtShape _flowChartOnlineStorage : 'Flowchart: Stored Data' ,
txtShape _flowChartDelay : 'Flowchart: Delay' ,
txtShape _flowChartMagneticTape : 'Flowchart: Sequential Access Storage' ,
txtShape _flowChartMagneticDisk : 'Flowchart: Magnetic Disk' ,
txtShape _flowChartMagneticDrum : 'Flowchart: Direct Access Storage' ,
txtShape _flowChartDisplay : 'Flowchart: Display' ,
txtShape _irregularSeal1 : 'Explosion 1' ,
txtShape _irregularSeal2 : 'Explosion 2' ,
txtShape _star4 : '4-Point Star' ,
txtShape _star5 : '5-Point Star' ,
txtShape _star6 : '6-Point Star' ,
txtShape _star7 : '7-Point Star' ,
txtShape _star8 : '8-Point Star' ,
txtShape _star10 : '10-Point Star' ,
txtShape _star12 : '12-Point Star' ,
txtShape _star16 : '16-Point Star' ,
txtShape _star24 : '24-Point Star' ,
txtShape _star32 : '32-Point Star' ,
txtShape _ribbon2 : 'Up Ribbon' ,
txtShape _ribbon : 'Down Ribbon' ,
txtShape _ellipseRibbon2 : 'Curved Up Ribbon' ,
txtShape _ellipseRibbon : 'Curved Down Ribbon' ,
txtShape _verticalScroll : 'Vertical Scroll' ,
txtShape _horizontalScroll : 'Horizontal Scroll' ,
txtShape _wave : 'Wave' ,
txtShape _doubleWave : 'Double Wave' ,
txtShape _wedgeRectCallout : 'Rectangular Callout' ,
txtShape _wedgeRoundRectCallout : 'Rounded Rectangular Callout' ,
txtShape _wedgeEllipseCallout : 'Oval Callout' ,
txtShape _cloudCallout : 'Cloud Callout' ,
txtShape _borderCallout1 : 'Line Callout 1' ,
txtShape _borderCallout2 : 'Line Callout 2' ,
txtShape _borderCallout3 : 'Line Callout 3' ,
txtShape _accentCallout1 : 'Line Callout 1 (Accent Bar)' ,
txtShape _accentCallout2 : 'Line Callout 2 (Accent Bar)' ,
txtShape _accentCallout3 : 'Line Callout 3 (Accent Bar)' ,
txtShape _callout1 : 'Line Callout 1 (No Border)' ,
txtShape _callout2 : 'Line Callout 2 (No Border)' ,
txtShape _callout3 : 'Line Callout 3 (No Border)' ,
txtShape _accentBorderCallout1 : 'Line Callout 1 (Border and Accent Bar)' ,
txtShape _accentBorderCallout2 : 'Line Callout 2 (Border and Accent Bar)' ,
txtShape _accentBorderCallout3 : 'Line Callout 3 (Border and Accent Bar)' ,
txtShape _actionButtonBackPrevious : 'Back or Previous Button' ,
txtShape _actionButtonForwardNext : 'Forward or Next Button' ,
txtShape _actionButtonBeginning : 'Beginning Button' ,
txtShape _actionButtonEnd : 'End Button' ,
txtShape _actionButtonHome : 'Home Button' ,
txtShape _actionButtonInformation : 'Information Button' ,
txtShape _actionButtonReturn : 'Return Button' ,
txtShape _actionButtonMovie : 'Movie Button' ,
txtShape _actionButtonDocument : 'Document Button' ,
txtShape _actionButtonSound : 'Sound Button' ,
txtShape _actionButtonHelp : 'Help Button' ,
txtShape _actionButtonBlank : 'Blank Button' ,
txtShape _roundRect : 'Round Corner Rectangle' ,
txtShape _snip1Rect : 'Snip Single Corner Rectangle' ,
txtShape _snip2SameRect : 'Snip Same Side Corner Rectangle' ,
txtShape _snip2DiagRect : 'Snip Diagonal Corner Rectangle' ,
txtShape _snipRoundRect : 'Snip and Round Single Corner Rectangle' ,
txtShape _round1Rect : 'Round Single Corner Rectangle' ,
txtShape _round2SameRect : 'Round Same Side Corner Rectangle' ,
txtShape _round2DiagRect : 'Round Diagonal Corner Rectangle' ,
txtShape _line : 'Line' ,
txtShape _lineWithArrow : 'Arrow' ,
txtShape _lineWithTwoArrows : 'Double Arrow' ,
txtShape _bentConnector5 : 'Elbow Connector' ,
txtShape _bentConnector5WithArrow : 'Elbow Arrow Connector' ,
txtShape _bentConnector5WithTwoArrows : 'Elbow Double-Arrow Connector' ,
txtShape _curvedConnector3 : 'Curved Connector' ,
txtShape _curvedConnector3WithArrow : 'Curved Arrow Connector' ,
txtShape _curvedConnector3WithTwoArrows : 'Curved Double-Arrow Connector' ,
txtShape _spline : 'Curve' ,
txtShape _polyline1 : 'Scribble' ,
2019-02-14 13:53:39 +00:00
txtShape _polyline2 : 'Freeform' ,
2019-02-19 13:33:15 +00:00
errorChangeArray : 'You cannot change part of an array.' ,
2019-03-04 08:53:58 +00:00
errorMultiCellFormula : 'Multi-cell array formulas are not allowed in tables.' ,
2019-03-05 09:04:47 +00:00
errorEmailClient : 'No email client could be found' ,
txtPrintArea : 'Print_Area' ,
2019-03-15 10:30:01 +00:00
txtTable : 'Table' ,
2019-04-18 08:39:58 +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-05-08 11:52:35 +00:00
errorNoDataToParse : 'No data was selected to parse.' ,
2019-06-05 12:26:29 +00:00
errorCannotUngroup : 'Cannot ungroup. To start an outline, select the detail rows or columns and group them.' ,
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-07-31 08:21:02 +00:00
waitText : 'Please, wait...' ,
2019-08-05 12:25:44 +00:00
errorDataValidate : 'The value you entered is not valid.<br>A user has restricted values that can be entered into this cell.' ,
txtConfidential : 'Confidential' ,
txtPreparedBy : 'Prepared by' ,
2019-08-07 11:29:15 +00:00
txtPage : 'Page' ,
2019-08-07 14:36:41 +00:00
txtPageOf : 'Page %1 of %2' ,
txtPages : 'Pages' ,
txtDate : 'Date' ,
txtTime : 'Time' ,
txtTab : 'Tab' ,
2019-08-28 14:29:39 +00:00
txtFile : 'File' ,
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.' ,
2019-10-11 10:07:17 +00:00
errorLabledColumnsPivot : 'To create a pivot table report, you must use data that is organized as a list with labeled columns.' ,
2019-12-06 12:28:39 +00:00
errorPivotOverlap : 'A pivot table report cannot overlap a table.' ,
2019-11-01 13:31:14 +00:00
txtColumn : 'Column' ,
2019-11-27 08:45:21 +00:00
txtRow : 'Row' ,
2020-02-05 14:37:46 +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.' ,
errorFTChangeTableRangeError : 'Operation could not be completed for the selected cell range.<br>Select a range so that the first table row was on the same row<br>and the resulting table overlapped the current one.' ,
2020-03-12 12:54:57 +00:00
errorFTRangeIncludedOtherTables : 'Operation could not be completed for the selected cell range.<br>Select a range which does not include other tables.' ,
txtByField : '%1 of %2' ,
txtAll : '(All)' ,
txtValues : 'Values' ,
txtGrandTotal : 'Grand Total' ,
txtRowLbls : 'Row Labels' ,
2020-04-07 14:06:29 +00:00
txtColLbls : 'Column Labels' ,
errNoDuplicates : 'No duplicate values found.' ,
2020-05-28 10:58:38 +00:00
errRemDuplicates : 'Duplicate values found and deleted: {0}, unique values left: {1}.' ,
txtMultiSelect : 'Multi-Select (Alt+S)' ,
2020-05-28 14:15:53 +00:00
txtClearFilter : 'Clear Filter (Alt+C)' ,
2020-06-04 15:27:08 +00:00
txtBlank : '(blank)' ,
2020-05-22 14:55:35 +00:00
textHasMacros : 'The file contains automatic macros.<br>Do you want to run macros?' ,
2020-06-05 09:11:14 +00:00
textRemember : 'Remember my choice' ,
2020-08-31 09:45:25 +00:00
errorPasteSlicerError : 'Table slicers cannot be copied from one workbook to another.' ,
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-09-07 15:13:39 +00:00
errorFrmlMaxReference : 'You cannot enter this formula because it has too many values,<br>cell references, and/or names.' ,
2020-09-18 10:15:00 +00:00
errorMoveSlicerError : 'Table slicers cannot be copied from one workbook to another.<br>Try again by selecting the entire table and the slicers.' ,
2020-10-14 12:15:20 +00:00
errorEditView : 'The existing sheet view cannot be edited and the new ones cannot be created at the moment as some of them are being edited.' ,
2020-11-19 20:36:48 +00:00
errorChangeFilteredRange : 'This will change a filtered range on your worksheet.<br>To complete this task, please remove AutoFilters.' ,
2020-11-09 11:52:21 +00:00
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' ,
2020-11-24 12:31:51 +00:00
warnLicenseLimitedNoAccess : 'License expired.<br>You have no access to document editing functionality.<br>Please contact your administrator.' ,
2020-12-10 14:25:39 +00:00
saveErrorTextDesktop : 'This file cannot be saved or created.<br>Possible reasons are: <br>1. The file is read-only. <br>2. The file is being edited by other users. <br>3. The disk is full or corrupted.' ,
2020-12-30 08:24:02 +00:00
errorSetPassword : 'Password could not be set.' ,
2020-12-18 10:23:14 +00:00
textRenameLabel : 'Enter a name to be used for collaboration' ,
textRenameError : 'User name must not be empty.' ,
textLongName : 'Enter a name that is less than 128 characters.' ,
2021-03-04 21:56:20 +00:00
textGuest : 'Guest' ,
txtGroup : 'Group' ,
txtSeconds : 'Seconds' ,
txtMinutes : 'Minutes' ,
txtHours : 'Hours' ,
txtDays : 'Days' ,
txtMonths : 'Months' ,
txtQuarters : 'Quarters' ,
2021-03-09 21:11:29 +00:00
txtYears : 'Years' ,
2021-03-28 20:59:55 +00:00
errorPivotGroup : 'Cannot group that selection.' ,
2021-04-02 14:33:33 +00:00
leavePageTextOnClose : 'All unsaved changes in this document will be lost.<br> Click \'Cancel\' then \'Save\' to save them. Click \'OK\' to discard all the unsaved changes.' ,
2021-04-08 11:36:13 +00:00
errorPasteMultiSelect : 'This action cannot be done on a multiple range selection.<br>Select a single range and try again.' ,
2021-04-15 08:18:07 +00:00
textTryUndoRedoWarn : 'The Undo/Redo functions are disabled for the Fast co-editing mode.' ,
2021-04-29 17:12:12 +00:00
errorPivotWithoutUnderlying : 'The Pivot Table report was saved without the underlying data.<br>Use the \'Refresh\' button to update the report.' ,
txtQuarter : 'Qtr' ,
2021-05-27 13:59:39 +00:00
txtOr : '%1 or %2' ,
2021-07-01 21:54:55 +00:00
confirmReplaceFormulaInTable : 'Formulas in the header row will be removed and converted to static text.<br>Do you want to continue?' ,
2021-06-23 15:49:47 +00:00
errorChangeOnProtectedSheet : 'The cell or chart you are trying to change is on a protected sheet.<br>To make a change, unprotect the sheet. You might be requested to enter a password.' ,
txtUnlockRange : 'Unlock Range' ,
txtUnlockRangeWarning : 'A range you are trying to change is password protected.' ,
txtUnlockRangeDescription : 'Enter the password to change this range:' ,
2021-07-19 20:50:45 +00:00
txtUnlock : 'Unlock' ,
2021-08-05 10:49:29 +00:00
errorWrongPassword : 'The password you supplied is not correct.' ,
errorLang : 'The interface language is not loaded.<br>Please contact your Document Server administrator.' ,
2021-07-28 16:49:34 +00:00
textDisconnect : 'Connection is lost' ,
2020-08-25 16:09:31 +00:00
textConvertEquation : 'This equation was created with an old version of equation editor which is no longer supported. Converting this equation to Office Math ML format will make it editable.<br>Do you want to convert this equation?' ,
textApplyAll : 'Apply to all equations' ,
2021-07-22 14:44:51 +00:00
textLearnMore : 'Learn More' ,
2021-07-20 13:24:05 +00:00
errorSingleColumnOrRowError : 'Location reference is not valid because the cells are not all in the same column or row.<br>Select cells that are all in a single column or row.' ,
2021-07-27 18:20:33 +00:00
errorLocationOrDataRangeError : 'The reference for the location or data range is not valid.' ,
2021-08-08 20:10:52 +00:00
txtErrorLoadHistory : 'Loading history failed' ,
errorPasswordIsNotCorrect : 'The password you supplied is not correct.<br>Verify that the CAPS LOCK key is off and be sure to use the correct capitalization.' ,
errorDeleteColumnContainsLockedCell : 'You are trying to delete a column that contains a locked cell. Locked cells cannot be deleted while the worksheet is protected.<br>To delete a locked cell, unprotect the sheet. You might be requested to enter a password.' ,
2021-08-18 16:46:55 +00:00
errorDeleteRowContainsLockedCell : 'You are trying to delete a row that contains a locked cell. Locked cells cannot be deleted while the worksheet is protected.<br>To delete a locked cell, unprotect the sheet. You might be requested to enter a password.' ,
2021-08-13 09:14:08 +00:00
uploadDocSizeMessage : 'Maximum document size limit exceeded.' ,
uploadDocExtMessage : 'Unknown document format.' ,
2021-08-19 17:58:59 +00:00
uploadDocFileCountMessage : 'No documents uploaded.' ,
2021-08-25 16:02:44 +00:00
errorLoadingFont : 'Fonts are not loaded.<br>Please contact your Document Server administrator.' ,
2021-07-28 16:49:34 +00:00
textNeedSynchronize : 'You have an updates' ,
2021-12-04 17:39:09 +00:00
textChangesSaved : 'All changes saved' ,
textFillOtherRows : 'Fill other rows' ,
textFormulaFilledAllRows : 'Formula filled {0} rows have data. Filling other empty rows may take a few minutes.' ,
textFormulaFilledAllRowsWithEmpty : 'Formula filled first {0} rows. Filling other empty rows may take a few minutes.' ,
textFormulaFilledFirstRowsOtherIsEmpty : 'Formula filled only first {0} rows by memory save reason. Other rows in this sheet don\'t have data.' ,
2021-12-13 21:37:33 +00:00
textFormulaFilledFirstRowsOtherHaveData : 'Formula filled only first {0} rows have data by memory save reason. There are other {1} rows have data in this sheet. You can fill them manually.' ,
2022-01-10 12:03:47 +00:00
textReconnect : 'Connection is restored' ,
2022-05-19 14:54:49 +00:00
errorCannotUseCommandProtectedSheet : 'You cannot use this command on a protected sheet. To use this command, unprotect the sheet.<br>You might be requested to enter a password.' ,
2022-05-20 10:24:17 +00:00
textRequestMacros : 'A macro makes a request to URL. Do you want to allow the request to the %1?' ,
2022-06-29 13:42:12 +00:00
textRememberMacros : 'Remember my choice for all macros' ,
2022-06-29 15:21:21 +00:00
confirmAddCellWatches : 'This action will add {0} cell watches.<br>Do you want to continue?' ,
2022-10-15 11:10:35 +00:00
confirmAddCellWatchesMax : 'This action will add only {0} cell watches by memory save reason.<br>Do you want to continue?' ,
2022-10-04 18:53:31 +00:00
confirmMaxChangesSize : 'The size of actions exceeds the limitation set for your server.<br>Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).' ,
textUndo : 'Undo' ,
textContinue : 'Continue'
2016-03-11 00:48:53 +00:00
}
} ) ( ) , SSE . Controllers . Main || { } ) )
2016-03-31 13:26:58 +00:00
} ) ;