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 ) ) ;
2022-12-09 21:47:01 +00:00
if ( ! Common . Utils . isIE ) {
if ( /^https?:\/\// . test ( '{{HELP_CENTER_WEB_SSE}}' ) ) {
const _url _obj = new URL ( '{{HELP_CENTER_WEB_SSE}}' ) ;
_url _obj . searchParams . set ( 'lang' , Common . Locale . getCurrentLanguage ( ) ) ;
Common . Utils . InternalSettings . set ( "url-help-center" , _url _obj . toString ( ) ) ;
}
}
2016-03-11 00:48:53 +00:00
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 ) ;
}
2022-11-09 19:01:46 +00:00
if ( this . appOptions . customization . font ) {
2022-11-11 12:03:51 +00:00
if ( this . appOptions . customization . font . name && typeof this . appOptions . customization . font . name === 'string' ) {
var arr = this . appOptions . customization . font . name . split ( ',' ) ;
2022-11-09 22:31:07 +00:00
for ( var i = 0 ; i < arr . length ; i ++ ) {
var item = arr [ i ] . trim ( ) ;
if ( item && ( /[\s0-9\.]/ ) . test ( item ) ) {
arr [ i ] = "'" + item + "'" ;
}
}
document . documentElement . style . setProperty ( "--font-family-base-custom" , arr . join ( ',' ) ) ;
}
2022-11-09 19:01:46 +00:00
}
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 ) {
2022-10-28 14:02:42 +00:00
if ( ! info ) return ;
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 ;
2022-11-02 10:19:36 +00:00
Common . UI . Menu . Manager . hideAll ( ) ;
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 ) &&
2022-11-09 19:01:46 +00:00
this . editorConfig && this . editorConfig . customization && ( this . editorConfig . customization . loaderName || this . editorConfig . customization . loaderLogo ||
2022-11-11 12:03:51 +00:00
this . editorConfig . customization . font && this . editorConfig . customization . font . name ) ) {
2019-03-15 10:30:01 +00:00
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 ) ;
2022-11-29 22:31:59 +00:00
this . appOptions . canPrint = ( this . permissions . print !== false ) && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge || this . appOptions . isEditOle ) ;
2022-12-05 08:48:43 +00:00
this . appOptions . canQuickPrint = this . appOptions . canPrint && ! Common . Utils . isMac && this . appOptions . isDesktopApp ;
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 ) ;
2022-10-24 07:28:30 +00:00
this . editorConfig . customization && Common . UI . LayoutManager . init ( this . editorConfig . customization . layout , this . appOptions . canBrandingExt ) ;
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 ) ;
2022-10-19 22:01:36 +00:00
viewport && viewport . applyCommonMode ( ) ;
2016-03-11 00:48:53 +00:00
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' ,
2022-11-04 19:57:10 +00:00
fullInfoHintMode : true ,
2018-12-17 08:37:43 +00:00
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 ;
2022-11-29 08:57:14 +00:00
} else if ( id == Asc . c _oAscError . ID . CanNotPasteImage ) {
this . showTips ( [ this . errorCannotPasteImg ] , { timeout : 7000 , hideCloseTip : true } ) ;
return ;
2018-10-08 14:06:37 +00:00
}
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 ;
2022-11-08 17:20:29 +00:00
case Asc . c _oAscError . ID . ConvertationOpenFormat :
config . maxwidth = 600 ;
if ( errData === 'pdf' )
config . msg = this . errorInconsistentExtPdf . replace ( '%1' , this . appOptions . spreadsheet . fileType || '' ) ;
else if ( errData === 'docx' )
config . msg = this . errorInconsistentExtDocx . replace ( '%1' , this . appOptions . spreadsheet . fileType || '' ) ;
else if ( errData === 'xlsx' )
config . msg = this . errorInconsistentExtXlsx . replace ( '%1' , this . appOptions . spreadsheet . fileType || '' ) ;
else if ( errData === 'pptx' )
config . msg = this . errorInconsistentExtPptx . replace ( '%1' , this . appOptions . spreadsheet . fileType || '' ) ;
else
config . msg = this . errorInconsistentExt ;
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 ;
2022-11-24 14:47:05 +00:00
const cur _version = this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'about' ) . txtVersionNum ;
2022-11-29 09:59:24 +00:00
const cropped _version = cur _version . match ( /^(\d+.\d+.\d+)/ ) ;
2022-11-30 16:42:34 +00:00
if ( ! window . compareVersions && ( ! cropped _version || cropped _version [ 1 ] !== buildVersion ) ) {
2017-04-11 11:05:56 +00:00
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 ;
} ,
2022-11-16 11:28:07 +00:00
onPrintQuick : function ( ) {
if ( ! this . appOptions . canQuickPrint ) return ;
2022-11-21 21:56:54 +00:00
var value = Common . localStorage . getBool ( "sse-hide-quick-print-warning" ) ,
me = this ,
handler = function ( ) {
var printopt = new Asc . asc _CAdjustPrint ( ) ;
printopt . asc _setNativeOptions ( { quickPrint : true } ) ;
var opts = new Asc . asc _CDownloadOptions ( ) ;
opts . asc _setAdvancedOptions ( printopt ) ;
me . api . asc _Print ( opts ) ;
Common . component . Analytics . trackEvent ( 'Print' ) ;
} ;
if ( value ) {
handler . call ( this ) ;
} else {
Common . UI . warning ( {
msg : this . textTryQuickPrint ,
buttons : [ 'yes' , 'no' ] ,
primary : 'yes' ,
dontshow : true ,
maxwidth : 500 ,
callback : function ( btn , dontshow ) {
dontshow && Common . localStorage . setBool ( "sse-hide-quick-print-warning" , true ) ;
if ( btn === 'yes' ) {
setTimeout ( handler , 1 ) ;
}
}
} ) ;
}
2022-11-16 11:28:07 +00:00
} ,
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' ,
2022-11-08 17:20:29 +00:00
textContinue : 'Continue' ,
errorInconsistentExtDocx : 'An error has occurred while opening the file.<br>The file content corresponds to text documents (e.g. docx), but the file has the inconsistent extension: %1.' ,
errorInconsistentExtXlsx : 'An error has occurred while opening the file.<br>The file content corresponds to spreadsheets (e.g. xlsx), but the file has the inconsistent extension: %1.' ,
errorInconsistentExtPptx : 'An error has occurred while opening the file.<br>The file content corresponds to presentations (e.g. pptx), but the file has the inconsistent extension: %1.' ,
errorInconsistentExtPdf : 'An error has occurred while opening the file.<br>The file content corresponds to one of the following formats: pdf/djvu/xps/oxps, but the file has the inconsistent extension: %1.' ,
2022-11-29 08:57:14 +00:00
errorInconsistentExt : 'An error has occurred while opening the file.<br>The file content does not match the file extension.' ,
2022-12-04 14:44:46 +00:00
errorCannotPasteImg : 'We can\'t paste this image from the Clipboard, but you can save it to your device and \ninsert it from there, or you can copy the image without text and paste it into the spreadsheet.' ,
2022-11-21 21:56:54 +00:00
textTryQuickPrint : 'You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?'
2016-03-11 00:48:53 +00:00
}
} ) ( ) , SSE . Controllers . Main || { } ) )
2016-03-31 13:26:58 +00:00
} ) ;