2016-04-01 13:17:09 +00:00
/ *
*
2017-01-17 14:58:08 +00:00
* ( c ) Copyright Ascensio System Limited 2010 - 2017
2016-04-01 13:17:09 +00:00
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st . 125 a - 25 , Riga , Latvia ,
* EU , LV - 1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
2016-03-11 00:48:53 +00:00
/ * *
* Main . js
*
* Main controller
*
* Created by Maxim Kadushkin on 24 March 2014
* Copyright ( c ) 2014 Ascensio System SIA . All rights reserved .
*
* /
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' ,
'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' ,
2016-03-11 00:48:53 +00:00
'spreadsheeteditor/main/app/controller/FormulaDialog' ,
'spreadsheeteditor/main/app/view/FormulaLang'
] , 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
header : '#viewport #header' ,
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' ,
'Common.Collections.TextArt'
] ,
views : [ ] ,
initialize : function ( ) {
this . addListeners ( {
'FileMenu' : {
'settings:apply' : _ . bind ( this . applySettings , this )
}
} ) ;
} ,
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
2017-04-11 11:05:56 +00:00
this . _state = { isDisconnected : false , usersCount : 1 , fastCoauth : true , lostEditingRights : false , licenseWarning : false } ;
2017-06-27 09:52:29 +00:00
this . translationTable = [ ] ;
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);
}
var value = Common . localStorage . getItem ( "sse-settings-fontrender" ) ;
if ( value === null ) value = window . devicePixelRatio > 1 ? '1' : '3' ;
// Initialize api
2017-06-23 13:52:12 +00:00
var styleNames = [ 'Normal' , 'Neutral' , 'Bad' , 'Good' , 'Input' , 'Output' , 'Calculation' , 'Check Cell' , 'Explanatory Text' , 'Note' , 'Linked Cell' , 'Warning Text' ,
'Heading 1' , 'Heading 2' , 'Heading 3' , 'Heading 4' , 'Title' , 'Total' , 'Currency' , 'Percent' , 'Comma' ] ,
translate = {
2017-06-23 13:43:21 +00:00
'Series' : this . txtSeries ,
'Diagram Title' : this . txtDiagramTitle ,
'X Axis' : this . txtXAxis ,
'Y Axis' : this . txtYAxis ,
'Your text here' : this . txtArt
2017-06-23 13:52:12 +00:00
} ;
styleNames . forEach ( function ( item ) {
2017-06-27 09:52:29 +00:00
translate [ item ] = me . translationTable [ item ] = me [ 'txtStyle_' + item . replace ( / /g , '_' ) ] || item ;
2017-06-23 13:52:12 +00:00
} ) ;
2017-06-27 09:52:29 +00:00
translate [ 'Currency [0]' ] = me . translationTable [ 'Currency [0]' ] = me . txtStyle _Currency + ' [0]' ;
translate [ 'Comma [0]' ] = me . translationTable [ 'Comma [0]' ] = me . txtStyle _Comma + ' [0]' ;
2017-06-23 13:52:12 +00:00
for ( var i = 1 ; i < 7 ; i ++ ) {
2017-06-27 09:52:29 +00:00
translate [ 'Accent' + i ] = me . translationTable [ 'Accent' + i ] = me . txtAccent + i ;
translate [ '20% - Accent' + i ] = me . translationTable [ '20% - Accent' + i ] = '20% - ' + me . txtAccent + i ;
translate [ '40% - Accent' + i ] = me . translationTable [ '40% - Accent' + i ] = '40% - ' + me . txtAccent + i ;
translate [ '60% - Accent' + i ] = me . translationTable [ '60% - Accent' + i ] = '60% - ' + me . txtAccent + i ;
2017-06-23 13:52:12 +00:00
}
this . api = new Asc . spreadsheet _api ( {
'id-view' : 'editor_sdk' ,
'id-input' : 'ce-cell-content' ,
'translate' : translate
2016-05-13 08:37:54 +00:00
} ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _setFontRenderingMode ( parseInt ( value ) ) ;
this . api . asc _registerCallback ( 'asc_onOpenDocumentProgress' , _ . bind ( this . onOpenDocument , this ) ) ;
this . api . asc _registerCallback ( 'asc_onEndAction' , _ . bind ( this . onLongActionEnd , this ) ) ;
this . api . asc _registerCallback ( 'asc_onError' , _ . bind ( this . onError , this ) ) ;
this . api . asc _registerCallback ( 'asc_onCoAuthoringDisconnect' , _ . bind ( this . onCoAuthoringDisconnect , this ) ) ;
this . api . asc _registerCallback ( 'asc_onAdvancedOptions' , _ . bind ( this . onAdvancedOptions , this ) ) ;
this . api . asc _registerCallback ( 'asc_onDocumentUpdateVersion' , _ . bind ( this . onUpdateVersion , this ) ) ;
2017-04-11 11:05:56 +00:00
this . api . asc _registerCallback ( 'asc_onServerVersion' , _ . bind ( this . onServerVersion , this ) ) ;
2016-03-11 00:48:53 +00:00
this . api . asc _registerCallback ( 'asc_onDocumentName' , _ . bind ( this . onDocumentName , this ) ) ;
this . api . asc _registerCallback ( 'asc_onPrintUrl' , _ . bind ( this . onPrintUrl , this ) ) ;
2016-09-26 10:54:25 +00:00
this . api . asc _registerCallback ( 'asc_onMeta' , _ . bind ( this . onMeta , this ) ) ;
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 ) ) ;
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
this . isShowOpenDialog = false ;
// Initialize api gateway
this . editorConfig = { } ;
2016-07-05 12:21:26 +00:00
this . plugins = undefined ;
2016-11-16 09:38:16 +00:00
this . UICustomizePlugins = [ ] ;
2016-03-11 00:48:53 +00:00
Common . Gateway . on ( 'init' , _ . bind ( this . loadConfig , this ) ) ;
Common . Gateway . on ( 'showmessage' , _ . bind ( this . onExternalMessage , this ) ) ;
Common . Gateway . on ( 'opendocument' , _ . bind ( this . loadDocument , this ) ) ;
Common . Gateway . on ( 'internalcommand' , _ . bind ( this . onInternalCommand , 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 ;
2017-04-11 11:05:56 +00:00
else if ( /chat-msg-text/ . test ( e . target . id ) )
me . dontCloseChat = 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 ;
2016-10-14 13:58:57 +00:00
if ( ! me . isModalShowed && ! ( me . loadMask && me . loadMask . isVisible ( ) ) ) {
if ( ! e . relatedTarget ||
2017-10-02 11:08:26 +00:00
! /area_id/ . test ( e . target . id ) && ( $ ( e . target ) . parent ( ) . find ( e . relatedTarget ) . length < 1 || e . target . localName == 'textarea' ) /* Check if focus in combobox goes from input to it's menu button or menu items, or from comment editing area to Ok/Cancel button */
2016-10-14 13:58:57 +00:00
&& ( e . relatedTarget . localName != 'input' || ! /form-control/ . test ( e . relatedTarget . className ) ) /* Check if focus goes to text input with class "form-control" */
&& ( e . relatedTarget . localName != 'textarea' || /area_id/ . test ( e . relatedTarget . id ) ) ) /* Check if focus goes to textarea, but not to "area_id" */ {
me . api . asc _enableKeyEvents ( true ) ;
if ( /msg-reply/ . test ( e . target . className ) )
me . dontCloseDummyComment = false ;
2017-04-11 11:05:56 +00:00
else if ( /chat-msg-text/ . test ( e . target . id ) )
me . dontCloseChat = 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 ;
if ( event . target && $ ( event . target ) . closest ( '#editor_sdk' ) . length < 1 ) {
event . preventDefault ( ) ;
event . dataTransfer . dropEffect = "none" ;
return false ;
}
} ) ;
Common . NotificationCenter . on ( {
'modal:show' : function ( e ) {
me . isModalShowed = true ;
me . api . asc _enableKeyEvents ( false ) ;
} ,
'modal:close' : function ( dlg ) {
2017-04-21 08:20:40 +00:00
if ( dlg && dlg . $lastmodal && dlg . $lastmodal . length < 1 ) {
2016-03-11 00:48:53 +00:00
me . isModalShowed = false ;
me . api . asc _enableKeyEvents ( true ) ;
}
} ,
'modal:hide' : function ( dlg ) {
2017-04-21 08:20:40 +00:00
if ( dlg && dlg . $lastmodal && dlg . $lastmodal . length < 1 ) {
2016-03-11 00:48:53 +00:00
me . isModalShowed = false ;
me . api . asc _enableKeyEvents ( true ) ;
}
} ,
'dataview:focus' : function ( e ) {
} ,
'dataview:blur' : function ( e ) {
if ( ! me . isModalShowed ) {
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 ) {
if ( ! me . isModalShowed && ( ! 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 : {
'command+s,ctrl+s' : _ . bind ( function ( e ) {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
} , this )
}
} ) ;
} ,
loadConfig : function ( data ) {
this . editorConfig = $ . extend ( this . editorConfig , data . config ) ;
this . appOptions = { } ;
this . editorConfig . user =
this . appOptions . user = Common . Utils . fillUserInfo ( this . editorConfig . user , this . editorConfig . lang , this . textAnonymous ) ;
this . appOptions . nativeApp = this . editorConfig . nativeApp === true ;
this . appOptions . isDesktopApp = this . editorConfig . targetApp == 'desktop' ;
this . appOptions . canCreateNew = ! _ . isEmpty ( this . editorConfig . createUrl ) && ! this . appOptions . isDesktopApp ;
this . appOptions . canOpenRecent = this . editorConfig . nativeApp !== true && this . editorConfig . recent !== undefined && ! this . appOptions . isDesktopApp ;
this . appOptions . templates = this . editorConfig . templates ;
this . appOptions . recent = this . editorConfig . recent ;
this . appOptions . createUrl = this . editorConfig . createUrl ;
this . appOptions . lang = this . editorConfig . lang ;
2016-04-08 08:55:15 +00:00
this . appOptions . location = ( typeof ( this . editorConfig . location ) == 'string' ) ? this . editorConfig . location . toLowerCase ( ) : '' ;
2016-03-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 ;
this . appOptions . isEditDiagram = this . editorConfig . mode == 'editdiagram' ;
this . appOptions . isEditMailMerge = this . editorConfig . mode == 'editmerge' ;
this . appOptions . customization = this . editorConfig . customization ;
this . appOptions . canBackToFolder = ( this . editorConfig . canBackToFolder !== false ) && ( typeof ( this . editorConfig . customization ) == 'object' )
&& ( typeof ( this . editorConfig . customization . goback ) == 'object' ) && ! _ . isEmpty ( this . editorConfig . customization . goback . url ) ;
this . appOptions . canBack = this . editorConfig . nativeApp !== true && this . appOptions . canBackToFolder === true ;
2016-07-05 12:21:26 +00:00
this . appOptions . canPlugins = false ;
this . plugins = this . editorConfig . plugins ;
2016-03-11 00:48:53 +00:00
this . headerView = this . getApplication ( ) . getController ( 'Viewport' ) . getView ( 'Common.Views.Header' ) ;
this . headerView . setCanBack ( this . appOptions . canBackToFolder === true ) ;
var value = Common . localStorage . getItem ( "sse-settings-reg-settings" ) ;
if ( value !== null )
this . api . asc _setLocale ( parseInt ( value ) ) ;
else {
this . api . asc _setLocale ( ( this . editorConfig . lang ) ? parseInt ( Common . util . LanguageInfo . getLocalLanguageCode ( this . editorConfig . lang ) ) : 0x0409 ) ;
}
value = Common . localStorage . getItem ( "sse-settings-func-locale" ) ;
if ( value === null ) {
var lang = ( ( this . editorConfig . lang ) ? this . editorConfig . lang : 'en' ) . split ( "-" ) [ 0 ] . toLowerCase ( ) ;
if ( lang !== 'en' )
value = SSE . Views . FormulaLang . get ( lang ) ;
} else
value = SSE . Views . FormulaLang . get ( value ) ;
if ( value ) this . api . asc _setLocalization ( 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
this . isFrameClosed = ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) ;
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 ) ;
2016-04-18 12:21:15 +00:00
var _user = new Asc . asc _CUserInfo ( ) ;
2016-03-11 00:48:53 +00:00
_user . put _Id ( this . appOptions . user . id ) ;
_user . put _FullName ( this . appOptions . user . fullname ) ;
2016-04-18 12:21:15 +00:00
docInfo = new Asc . asc _CDocInfo ( ) ;
2016-03-11 00:48:53 +00:00
docInfo . put _Id ( data . doc . key ) ;
docInfo . put _Url ( data . doc . url ) ;
docInfo . put _Title ( data . doc . title ) ;
docInfo . put _Format ( data . doc . fileType ) ;
docInfo . put _VKey ( data . doc . vkey ) ;
docInfo . put _Options ( data . doc . options ) ;
docInfo . put _UserInfo ( _user ) ;
docInfo . put _CallbackUrl ( this . editorConfig . callbackUrl ) ;
2016-11-24 13:44:54 +00:00
docInfo . put _Token ( data . doc . token ) ;
2016-03-11 00:48:53 +00:00
this . headerView . setDocumentCaption ( data . doc . title ) ;
}
this . api . asc _registerCallback ( 'asc_onGetEditorPermissions' , _ . bind ( this . onEditorPermissions , this ) ) ;
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 ( ) ;
this . getApplication ( ) . getController ( 'LeftMenu' ) . leftMenu . getMenu ( 'file' ) . panels [ 'rights' ] . onLostEditRights ( ) ;
2016-11-10 12:38:26 +00:00
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
2016-03-11 00:48:53 +00:00
if ( ! old _rights )
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
2016-08-09 09:25:34 +00:00
maxwidth : 600 ,
2016-03-11 00:48:53 +00:00
msg : _ . isEmpty ( data . message ) ? this . warnProcessRightsChange : data . message ,
callback : function ( ) {
me . _state . lostEditingRights = false ;
me . onEditComplete ( ) ;
}
} ) ;
}
} ,
onDownloadAs : function ( ) {
2016-04-05 11:52:34 +00:00
this . api . asc _DownloadAs ( Asc . c _oAscFileType . XLSX , 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 ) ;
}
}
} ,
2017-04-27 15:40:27 +00:00
goBack : function ( blank ) {
2016-03-11 00:48:53 +00:00
var href = this . appOptions . customization . goback . url ;
if ( blank ) {
window . open ( href , "_blank" ) ;
} else {
parent . location . href = href ;
}
} ,
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 ;
}
} ,
2016-08-18 08:34:00 +00:00
onSelectionChanged : function ( info ) {
if ( ! this . _isChartDataReady ) {
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 ) ;
this . headerView . setDocumentCaption ( this . api . asc _getDocumentName ( ) ) ;
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' , { } ) ;
this . onDocumentReady ( ) ;
}
2016-04-05 11:52:34 +00:00
action = this . stackLongActions . get ( { type : Asc . c _oAscAsyncActionType . Information } ) ;
2016-03-11 00:48:53 +00:00
action && this . setLongActionView ( action ) ;
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscAsyncAction . Save ) {
2017-06-14 11:53:29 +00:00
this . toolbarView && this . toolbarView . 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 ) {
2017-09-08 12:02:54 +00:00
if ( this . loadMask . isVisible ( ) && ! this . dontCloseDummyComment && ! this . dontCloseChat && ! this . isModalShowed )
2016-03-11 00:48:53 +00:00
this . api . asc _enableKeyEvents ( true ) ;
this . loadMask . hide ( ) ;
}
2017-09-08 12:02:54 +00:00
if ( type == Asc . c _oAscAsyncActionType . BlockInteraction && ! ( ( id == Asc . c _oAscAsyncAction [ 'LoadDocumentFonts' ] || id == Asc . c _oAscAsyncAction [ 'ApplyChanges' ] ) && ( this . dontCloseDummyComment || this . dontCloseChat || this . isModalShowed ) ) )
2016-03-11 00:48:53 +00:00
this . onEditComplete ( this . loadMask , { restorefocus : true } ) ;
}
} ,
setLongActionView : function ( action ) {
var title = '' ;
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 ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . Save :
2016-03-11 00:48:53 +00:00
title = this . saveTitleText ;
break ;
2017-04-11 11:05:56 +00:00
case Asc . c _oAscAsyncAction . ForceSaveTimeout :
break ;
case Asc . c _oAscAsyncAction . ForceSaveButton :
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 ;
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 ;
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 ;
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 ;
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 ;
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 ;
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 ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction . Recalc :
2016-03-11 00:48:53 +00:00
title = this . titleRecalcFormulas ;
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 ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscAsyncAction [ 'PrepareToSave' ] :
2016-03-11 00:48:53 +00:00
title = this . savePreparingText ;
break ;
case ApplyEditRights :
title = this . txtEditingMode ;
break ;
case LoadingDocument :
title = this . loadingDocumentTitleText ;
break ;
}
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 ( ) ;
}
}
} ,
onApplyEditRights : function ( data ) {
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
}
} ,
onDocumentReady : function ( ) {
if ( this . _isDocReady )
return ;
2017-09-20 11:32:18 +00:00
Common . Gateway . documentReady ( ) ;
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
value = ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram ) ? 100 : Common . localStorage . getItem ( "sse-settings-zoom" ) ;
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
/** coauthoring begin **/
value = Common . localStorage . getItem ( "sse-settings-livecomment" ) ;
this . isLiveCommenting = ! ( value !== null && parseInt ( value ) == 0 ) ;
2017-06-06 08:31:30 +00:00
var resolved = Common . localStorage . getItem ( "sse-settings-resolvedcomment" ) ;
this . isLiveCommenting ? this . api . asc _showComments ( ! ( resolved !== null && parseInt ( resolved ) == 0 ) ) : this . api . asc _hideComments ( ) ;
2016-03-11 00:48:53 +00:00
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
value = Common . localStorage . getItem ( "sse-settings-coauthmode" ) ;
2016-11-17 11:13:33 +00:00
if ( value === null && Common . localStorage . getItem ( "sse-settings-autosave" ) === null &&
this . appOptions . customization && this . appOptions . customization . autosave === false ) {
value = 0 ; // use customization.autosave only when sse-settings-coauthmode and sse-settings-autosave are null
}
2016-03-11 00:48:53 +00:00
this . _state . fastCoauth = ( value === null || parseInt ( value ) == 1 ) ;
2017-06-16 07:29:15 +00:00
} else {
2017-06-14 11:59:43 +00:00
this . _state . fastCoauth = ( ! this . appOptions . isEdit && this . appOptions . canComments ) ;
2017-06-16 07:29:15 +00:00
this . _state . fastCoauth && this . api . asc _setAutoSaveGap ( 1 ) ;
}
2016-03-11 00:48:53 +00:00
this . api . asc _SetFastCollaborative ( this . _state . fastCoauth ) ;
/** coauthoring end **/
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' ) ,
pluginsController = application . getController ( 'Common.Controllers.Plugins' ) ;
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
2016-07-06 13:35:01 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram ) {
2016-07-05 12:21:26 +00:00
pluginsController . setApi ( me . api ) ;
2017-09-11 13:34:23 +00:00
if ( me . plugins && me . plugins . pluginsData && me . plugins . pluginsData . length > 0 )
me . updatePlugins ( me . plugins , false ) ;
else
me . requestPlugins ( '../../../../plugins.json' ) ;
2016-07-05 12:21:26 +00:00
me . api . asc _registerCallback ( 'asc_onPluginsInit' , _ . bind ( me . updatePluginsList , me ) ) ;
}
2016-03-11 00:48:53 +00:00
leftMenuView . disableMenu ( 'all' , false ) ;
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram && me . appOptions . canBranding ) {
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 ) {
2016-03-25 07:48:19 +00:00
if ( me . appOptions . canAutosave ) {
value = Common . localStorage . getItem ( "sse-settings-autosave" ) ;
2016-11-17 11:13:33 +00:00
if ( value === null && me . appOptions . customization && me . appOptions . customization . autosave === false )
value = 0 ;
2016-08-16 10:01:23 +00:00
value = ( ! me . _state . fastCoauth && value !== null ) ? parseInt ( value ) : ( me . appOptions . canCoAuthoring ? 1 : 0 ) ;
2016-03-25 07:48:19 +00:00
} else {
value = 0 ;
}
me . api . asc _setAutoSaveGap ( value ) ;
2017-04-11 11:05:56 +00:00
if ( me . appOptions . canForcesave ) { // use asc_setIsForceSaveOnUserSave only when customization->forcesave = true
value = Common . localStorage . getItem ( "sse-settings-forcesave" ) ;
me . appOptions . forcesave = ( value === null ) ? me . appOptions . canForcesave : ( parseInt ( value ) == 1 ) ;
me . api . asc _setIsForceSaveOnUserSave ( me . appOptions . forcesave ) ;
}
2016-03-11 00:48:53 +00:00
if ( me . needToUpdateVersion ) {
Common . NotificationCenter . trigger ( 'api:disconnect' ) ;
toolbarController . onApiCoAuthoringDisconnect ( ) ;
}
var timer _sl = setInterval ( function ( ) {
if ( window . styles _loaded || me . appOptions . isEditDiagram || me . appOptions . isEditMailMerge ) {
clearInterval ( timer _sl ) ;
Common . NotificationCenter . trigger ( 'comments:updatefilter' ,
{ property : 'uid' ,
value : new RegExp ( '^(doc_|sheet' + me . api . asc _getActiveWorksheetId ( ) + '_)' ) } ) ;
documentHolderView . createDelayedElements ( ) ;
toolbarController . createDelayedElements ( ) ;
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram ) {
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 . fillTextArt ( me . api . asc _getTextArtPreviews ( ) ) ;
me . updateThemeColors ( ) ;
}
2016-10-12 15:38:10 +00:00
rightmenuController . createDelayedElements ( ) ;
2016-03-11 00:48:53 +00:00
me . api . asc _registerCallback ( 'asc_onDocumentModifiedChanged' , _ . bind ( me . onDocumentModifiedChanged , me ) ) ;
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
if ( me . appOptions . canBrandingExt )
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
2016-03-11 00:48:53 +00:00
}
} , 50 ) ;
2017-06-06 08:04:04 +00:00
} else {
documentHolderView . createDelayedElementsViewer ( ) ;
if ( me . appOptions . canBrandingExt )
Common . NotificationCenter . trigger ( 'document:ready' , 'main' ) ;
}
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 ) ) ;
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 ( ) ;
2016-03-11 00:48:53 +00:00
if ( this . _state . licenseWarning ) {
value = Common . localStorage . getItem ( "de-license-warning" ) ;
value = ( value !== null ) ? parseInt ( value ) : 0 ;
var now = ( new Date ) . getTime ( ) ;
if ( now - value > 86400000 ) {
Common . localStorage . setItem ( "de-license-warning" , now ) ;
Common . UI . info ( {
2016-06-23 06:45:41 +00:00
width : 500 ,
2016-03-11 00:48:53 +00:00
title : this . textNoLicenseTitle ,
msg : this . warnNoLicense ,
2016-04-13 12:40:58 +00:00
buttons : [
{ value : 'buynow' , caption : this . textBuyNow } ,
{ value : 'contact' , caption : this . textContactUs }
] ,
primary : 'buynow' ,
2016-03-11 00:48:53 +00:00
callback : function ( btn ) {
2016-04-13 12:40:58 +00:00
if ( btn == 'buynow' )
2016-03-11 00:48:53 +00:00
window . open ( 'http://www.onlyoffice.com/enterprise-edition.aspx' , "_blank" ) ;
2016-04-13 12:40:58 +00:00
else if ( btn == 'contact' )
window . open ( 'mailto:sales@onlyoffice.com' , "_blank" ) ;
2016-03-11 00:48:53 +00:00
}
} ) ;
}
}
} ,
onOpenDocument : function ( progress ) {
var elem = document . getElementById ( 'loadmask-text' ) ;
var proc = ( progress . asc _getCurrentFont ( ) + progress . asc _getCurrentImage ( ) ) / ( progress . asc _getFontsCount ( ) + progress . asc _getImagesCount ( ) ) ;
proc = this . textLoadingDocument + ': ' + Math . min ( Math . round ( proc * 100 ) , 100 ) + '%' ;
elem ? elem . innerHTML = proc : this . loadMask . setTitle ( proc ) ;
} ,
onEditorPermissions : function ( params ) {
2016-08-30 07:00:29 +00:00
var licType = params ? params . asc _getLicenseType ( ) : Asc . c _oLicenseResult . Error ;
if ( params && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) ) {
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 ;
}
2016-08-29 11:46:15 +00:00
2017-04-11 11:05:56 +00:00
if ( this . onServerVersion ( params . asc _getBuildVersion ( ) ) ) return ;
2016-10-20 07:22:16 +00:00
if ( params . asc _getRights ( ) !== Asc . c _oRights . Edit )
this . permissions . edit = false ;
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 ( ) ;
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 **/
2017-06-28 15:34:16 +00:00
this . appOptions . canComments = this . appOptions . canLicense && ( this . permissions . comment === undefined ? ( this . permissions . edit !== false && this . editorConfig . mode !== 'view' ) : this . permissions . comment ) ;
2017-06-14 11:53:29 +00:00
this . appOptions . canComments = this . appOptions . canComments && ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . comments === false ) ;
this . appOptions . canChat = this . appOptions . canLicense && ! this . appOptions . isOffline && ! ( ( typeof ( this . editorConfig . customization ) == 'object' ) && this . editorConfig . customization . chat === false ) ;
2016-09-27 12:09:32 +00:00
this . appOptions . canRename = ! ! this . permissions . rename ;
2017-04-11 11:05:56 +00:00
this . appOptions . isTrial = params . asc _getTrial ( ) ;
2016-03-11 00:48:53 +00:00
2016-12-20 15:40:43 +00:00
this . appOptions . canBranding = ( licType === Asc . c _oLicenseResult . Success ) && ( typeof this . editorConfig . customization == 'object' ) ;
2016-09-19 14:04:56 +00:00
if ( this . appOptions . canBranding )
2016-03-11 00:48:53 +00:00
this . headerView . setBranding ( this . editorConfig . customization ) ;
2016-09-19 14:04:56 +00:00
2016-11-16 09:38:16 +00:00
this . appOptions . canBrandingExt = params . asc _getCanBranding ( ) && ( typeof this . editorConfig . customization == 'object' || this . editorConfig . plugins ) ;
if ( this . appOptions . canBrandingExt )
this . updatePlugins ( this . plugins , true ) ;
2016-10-28 13:38:33 +00:00
2016-09-27 12:09:32 +00:00
this . appOptions . canRename && this . headerView . setCanRename ( 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
this . appOptions . isEdit = ( this . appOptions . canLicense || this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) && this . permissions . edit !== false && this . editorConfig . mode !== 'view' ;
this . appOptions . canDownload = ! this . appOptions . nativeApp && ( this . permissions . download !== false ) ;
this . appOptions . canPrint = ( this . permissions . print !== false ) ;
2017-04-11 11:05:56 +00:00
this . appOptions . canForcesave = this . appOptions . isEdit && ! this . appOptions . isOffline && ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) &&
( typeof ( this . editorConfig . customization ) == 'object' && ! ! this . editorConfig . customization . forcesave ) ;
this . appOptions . forcesave = this . appOptions . canForcesave ;
this . appOptions . canEditComments = this . appOptions . isOffline || ! ( typeof ( this . editorConfig . customization ) == 'object' && this . editorConfig . customization . commentAuthorOnly ) ;
2016-03-11 00:48:53 +00:00
2016-08-29 11:46:15 +00:00
this . _state . licenseWarning = ! ( this . appOptions . isEditDiagram || this . appOptions . isEditMailMerge ) && ( licType === Asc . c _oLicenseResult . Connections ) && this . appOptions . canEdit && this . editorConfig . mode !== 'view' ;
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
2017-06-14 11:53:29 +00:00
this . api . asc _setViewMode ( ! this . appOptions . isEdit && ! this . appOptions . canComments ) ;
2017-06-14 11:56:51 +00:00
( ! this . appOptions . isEdit && this . appOptions . canComments ) && this . api . asc _setRestriction ( Asc . c _oAscRestrictionType . OnlyComments ) ;
2017-04-27 15:40:27 +00:00
( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram ) ? this . api . asc _LoadEmptyDocument ( ) : this . api . asc _LoadDocument ( ) ;
2016-03-11 00:48:53 +00:00
} ,
applyModeCommonElements : function ( ) {
window . editor _elements _prepared = true ;
var value = Common . localStorage . getItem ( "sse-hidden-title" ) ;
value = this . appOptions . isEdit && ( value !== null && parseInt ( value ) == 1 ) ;
var app = this . getApplication ( ) ,
viewport = app . getController ( 'Viewport' ) . getView ( 'Viewport' ) ,
statusbarView = app . getController ( 'Statusbar' ) . getView ( 'Statusbar' ) ;
if ( this . headerView ) {
this . headerView . setHeaderCaption ( this . appOptions . isEdit ? 'Spreadsheet Editor' : 'Spreadsheet Viewer' ) ;
this . headerView . setVisible ( ! this . appOptions . nativeApp && ! value && ! this . appOptions . isEditMailMerge &&
! this . appOptions . isDesktopApp && ! this . appOptions . isEditDiagram ) ;
}
viewport && viewport . setMode ( this . appOptions , true ) ;
statusbarView && statusbarView . setMode ( this . appOptions ) ;
// this.getStatusInfo().setDisabled(false);
// this.getCellInfo().setMode(this.appOptions);
app . getController ( 'DocumentHolder' ) . setMode ( this . appOptions ) ;
if ( this . appOptions . isEditMailMerge || this . appOptions . isEditDiagram ) {
statusbarView . hide ( ) ;
app . getController ( 'LeftMenu' ) . getView ( 'LeftMenu' ) . hide ( ) ;
$ ( window )
. mouseup ( function ( e ) {
Common . Gateway . internalMessage ( 'processMouse' , { event : 'mouse:up' } ) ;
} )
. mousemove ( $ . proxy ( function ( e ) {
if ( this . isDiagramDrag ) {
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 ) ) ;
}
if ( ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram ) {
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 ) ) ;
2016-04-04 08:17:21 +00:00
var printController = app . getController ( 'Print' ) ;
printController && this . api && printController . setApi ( this . api ) ;
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 ) {
2017-06-14 11:53:29 +00:00
if ( this . appOptions . canComments || this . appOptions . isEdit ) {
/** coauthoring begin **/
var commentsController = this . getApplication ( ) . getController ( 'Common.Controllers.Comments' ) ;
if ( commentsController ) {
commentsController . setMode ( this . appOptions ) ;
commentsController . setConfig ( {
config : this . editorConfig ,
sdkviewname : '#ws-canvas-outer' ,
hintmode : true } ,
this . api ) ;
}
/** coauthoring end **/
}
2016-03-11 00:48:53 +00:00
if ( this . appOptions . isEdit ) {
var me = this ,
application = this . getApplication ( ) ,
toolbarController = application . getController ( 'Toolbar' ) ,
statusbarController = application . getController ( 'Statusbar' ) ,
rightmenuController = application . getController ( 'RightMenu' ) ,
2017-06-14 11:53:29 +00:00
fontsControllers = application . getController ( 'Common.Controllers.Fonts' ) ;
2016-03-11 00:48:53 +00:00
fontsControllers && fontsControllers . setApi ( me . api ) ;
toolbarController && toolbarController . setApi ( me . api ) ;
// statusbarController && statusbarController.setApi(me.api);
rightmenuController && rightmenuController . setApi ( me . api ) ;
if ( statusbarController ) {
statusbarController . getView ( 'Statusbar' ) . changeViewMode ( true ) ;
}
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' ) ;
var value = Common . localStorage . getItem ( 'sse-settings-unit' ) ;
2016-04-08 08:55:15 +00:00
Common . Utils . Metric . setCurrentMetric ( ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ) ;
2016-03-11 00:48:53 +00:00
if ( ! me . appOptions . isEditMailMerge && ! me . appOptions . isEditDiagram ) {
var options = { } ;
JSON . parse ( Common . localStorage . getItem ( 'sse-hidden-title' ) ) && ( options . title = true ) ;
JSON . parse ( Common . localStorage . getItem ( 'sse-hidden-formula' ) ) && ( options . formula = true ) ;
application . getController ( 'Toolbar' ) . hideElements ( options ) ;
} else
rightmenuController . getView ( 'RightMenu' ) . hide ( ) ;
/** coauthoring begin **/
me . api . asc _registerCallback ( 'asc_onAuthParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
me . api . asc _registerCallback ( 'asc_onParticipantsChanged' , _ . bind ( me . onAuthParticipantsChanged , me ) ) ;
/** 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
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 ) ;
}
} ,
onExternalMessage : function ( msg ) {
if ( msg && msg . msg ) {
msg . msg = ( msg . msg ) . toString ( ) ;
this . showTips ( [ msg . msg . charAt ( 0 ) . toUpperCase ( ) + msg . msg . substring ( 1 ) ] ) ;
2017-05-16 07:46:04 +00:00
Common . component . Analytics . trackEvent ( 'External Error' ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onError : function ( id , level , errData ) {
this . hidePreloader ( ) ;
2016-04-05 11:52:34 +00:00
this . onLongActionEnd ( Asc . c _oAscAsyncActionType . BlockInteraction , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
var config = { closable : false } ;
switch ( id ) {
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . Unknown :
2016-03-11 00:48:53 +00:00
config . msg = this . unknownErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . ConvertationTimeout :
2016-03-11 00:48:53 +00:00
config . msg = this . convertationTimeoutText ;
break ;
2016-09-13 06:40:44 +00:00
case Asc . c _oAscError . ID . ConvertationOpenError :
config . msg = this . openErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationSaveError :
config . msg = this . saveErrorText ;
2016-03-11 00:48:53 +00:00
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DownloadError :
2016-03-11 00:48:53 +00:00
config . msg = this . downloadErrorText ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageSize :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageSizeMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageExt :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageExtMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . UplImageFileCount :
2016-03-11 00:48:53 +00:00
config . msg = this . uploadImageFileCountMessage ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . 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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
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 ;
2016-11-17 08:02:07 +00:00
config . closable = true ;
2016-03-11 00:48:53 +00:00
break ;
2017-04-11 11:05:56 +00:00
case Asc . c _oAscError . ID . FrmlOperandExpected :
config . msg = this . errorOperandExpected ;
config . closable = true ;
break ;
case Asc . c _oAscError . ID . FrmlWrongReferences :
config . msg = this . errorFrmlWrongReferences ;
config . closable = true ;
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 ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . DataRangeError :
2016-03-11 00:48:53 +00:00
config . msg = this . errorDataRange ;
break ;
2016-04-05 11:52:34 +00:00
case Asc . c _oAscError . ID . 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 ;
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 :
2016-03-11 00:48:53 +00:00
config . msg = this . errorConnectToServer ;
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 ;
2016-03-11 00:48:53 +00:00
default :
config . msg = this . errorDefaultMessage . replace ( '%1' , id ) ;
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' ;
if ( this . appOptions . canBackToFolder ) {
config . msg += '<br/><br/>' + this . criticalErrorExtText ;
config . callback = function ( btn ) {
if ( btn == 'ok' ) {
Common . NotificationCenter . trigger ( 'goback' ) ;
}
}
}
} else {
config . title = this . notcriticalErrorTitle ;
config . iconCls = 'warn' ;
config . buttons = [ 'ok' ] ;
config . callback = _ . bind ( function ( btn ) {
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscError . ID . Warning && btn == 'ok' && this . appOptions . canDownload ) {
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' ) ;
}
this . _state . lostEditingRights = false ;
this . onEditComplete ( ) ;
} , this ) ;
}
if ( $ ( '.asc-window.modal.alert:visible' ) . length < 1 ) {
Common . UI . alert ( config ) ;
Common . component . Analytics . trackEvent ( 'Internal Error' , id . toString ( ) ) ;
}
} ,
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
} ,
showTips : function ( strings ) {
var me = this ;
if ( ! strings . length ) return ;
if ( typeof ( strings ) != 'object' ) strings = [ strings ] ;
function showNextTip ( ) {
var str _tip = strings . shift ( ) ;
if ( str _tip ) {
2016-11-16 10:35:26 +00:00
str _tip += '\n' + me . textCloseTip ;
2016-03-11 00:48:53 +00:00
tooltip . setTitle ( str _tip ) ;
tooltip . show ( ) ;
}
}
if ( ! this . tooltip ) {
this . tooltip = new Common . UI . Tooltip ( {
owner : this . getApplication ( ) . getController ( 'Toolbar' ) . getView ( 'Toolbar' ) ,
hideonclick : true ,
placement : 'bottom' ,
cls : 'main-info' ,
offset : 30
} ) ;
}
var tooltip = this . tooltip ;
tooltip . on ( 'tooltip:hide' , function ( ) {
setTimeout ( showNextTip , 300 ) ;
} ) ;
showNextTip ( ) ;
} ,
updateWindowTitle : function ( change , force ) {
if ( this . _state . isDocModified !== change || force ) {
var title = this . defaultTitleText ;
if ( ! _ . isEmpty ( this . headerView . getDocumentCaption ( ) ) )
title = this . headerView . getDocumentCaption ( ) + ' - ' + title ;
if ( change ) {
2017-04-11 11:05:56 +00:00
clearTimeout ( this . _state . timerCaption ) ;
if ( ! _ . isUndefined ( title ) ) {
2016-03-11 00:48:53 +00:00
title = '* ' + title ;
2017-04-11 11:05:56 +00:00
this . headerView . setDocumentCaption ( this . headerView . getDocumentCaption ( ) , true ) ;
2016-03-11 00:48:53 +00:00
}
} else {
2017-04-11 11:05:56 +00:00
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
}
if ( window . document . title != title )
window . document . title = title ;
2017-04-11 11:05:56 +00:00
Common . Gateway . setDocumentModified ( change ) ;
2016-03-11 00:48:53 +00:00
this . _state . isDocModified = change ;
}
} ,
onDocumentChanged : function ( ) {
} ,
onDocumentModifiedChanged : function ( change ) {
this . updateWindowTitle ( change ) ;
Common . Gateway . setDocumentModified ( change ) ;
2017-04-28 12:24:57 +00:00
if ( this . toolbarView && this . toolbarView . btnSave && this . api ) {
2017-04-28 14:08:11 +00:00
var isSyncButton = $ ( '.icon' , this . toolbarView . btnSave . cmpEl ) . hasClass ( 'btn-synch' ) ,
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 ;
if ( this . toolbarView . btnSave . isDisabled ( ) !== isDisabled )
this . toolbarView . btnsSave . forEach ( function ( button ) {
if ( button ) {
button . setDisabled ( isDisabled ) ;
}
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onDocumentCanSaveChanged : function ( isCanSave ) {
2017-04-28 13:37:28 +00:00
if ( this . toolbarView && this . toolbarView . btnSave ) {
2017-04-28 14:08:11 +00:00
var isSyncButton = $ ( '.icon' , this . toolbarView . btnSave . cmpEl ) . hasClass ( 'btn-synch' ) ,
2017-09-05 07:54:44 +00:00
forcesave = this . appOptions . forcesave ,
isDisabled = ! isCanSave && ! isSyncButton && ! forcesave || this . _state . isDisconnected || this . _state . fastCoauth && this . _state . usersCount > 1 && ! forcesave ;
if ( this . toolbarView . btnSave . isDisabled ( ) !== isDisabled )
this . toolbarView . btnsSave . forEach ( function ( button ) {
if ( button ) {
button . setDisabled ( isDisabled ) ;
}
} ) ;
2016-03-11 00:48:53 +00:00
}
} ,
onBeforeUnload : function ( ) {
Common . localStorage . save ( ) ;
var isEdit = this . permissions . edit !== false && this . editorConfig . mode !== 'view' && this . editorConfig . mode !== 'editdiagram' ;
if ( isEdit && this . api . asc _isDocumentModified ( ) ) {
var me = this ;
this . api . asc _stopSaving ( ) ;
this . continueSavingTimer = window . setTimeout ( function ( ) {
me . api . asc _continueSaving ( ) ;
} , 500 ) ;
return this . leavePageText ;
}
} ,
onUnload : function ( ) {
if ( this . continueSavingTimer ) clearTimeout ( this . continueSavingTimer ) ;
} ,
hidePreloader : function ( ) {
2016-11-16 09:38:16 +00:00
if ( ! this . _state . customizationDone ) {
this . _state . customizationDone = true ;
2017-04-11 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 ) ;
2016-11-16 09:38:16 +00:00
Common . Utils . applyCustomizationPlugins ( this . UICustomizePlugins ) ;
}
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' ) ;
$ ( '#loading-mask' ) . hide ( ) . remove ( ) ;
} ,
onDownloadUrl : function ( url ) {
Common . Gateway . downloadAs ( url ) ;
} ,
onUpdateVersion : function ( callback ) {
var me = this ;
me . needToUpdateVersion = true ;
2016-04-05 11:52:34 +00:00
me . onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
Common . UI . error ( {
msg : this . errorUpdateVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
if ( callback ) callback . call ( me ) ;
2016-04-05 11:52:34 +00:00
me . onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
2016-03-11 00:48:53 +00:00
} )
}
} ) ;
} ,
2017-04-11 11:05:56 +00:00
onServerVersion : function ( buildVersion ) {
if ( this . changeServerVersion ) return true ;
if ( DocsAPI . DocEditor . version ( ) !== buildVersion && ! window . compareVersions ) {
this . changeServerVersion = true ;
Common . UI . warning ( {
title : this . titleServerVersion ,
msg : this . errorServerVersion ,
callback : function ( ) {
_ . defer ( function ( ) {
Common . Gateway . updateVersion ( ) ;
} )
}
} ) ;
return true ;
}
return false ;
} ,
2016-03-11 00:48:53 +00:00
onAdvancedOptions : function ( advOptions ) {
2017-09-08 08:39:07 +00:00
if ( this . _state . openDlg ) return ;
2016-08-10 09:33:08 +00:00
var type = advOptions . asc _getOptionId ( ) ,
2017-09-08 08:39:07 +00:00
me = this ;
2016-04-05 11:52:34 +00:00
if ( type == Asc . c _oAscAdvancedOptionsID . CSV ) {
2017-09-08 08:39:07 +00:00
me . _state . openDlg = new Common . Views . OpenDialog ( {
2016-03-11 00:48:53 +00:00
type : type ,
codepages : advOptions . asc _getOptions ( ) . asc _getCodePages ( ) ,
settings : advOptions . asc _getOptions ( ) . asc _getRecommendedSettings ( ) ,
2017-05-11 08:11:33 +00:00
handler : function ( encoding , delimiter , delimiterChar ) {
2016-03-11 00:48:53 +00:00
me . isShowOpenDialog = false ;
if ( me && me . api ) {
2017-05-11 08:11:33 +00:00
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CCSVAdvancedOptions ( encoding , delimiter , delimiterChar ) ) ;
2016-03-11 00:48:53 +00:00
me . loadMask && me . loadMask . show ( ) ;
}
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 ( {
2016-08-10 09:33:08 +00:00
type : type ,
2017-09-08 08:44:01 +00:00
validatePwd : ! ! me . _state . isDRM ,
2016-08-10 09:33:08 +00:00
handler : function ( value ) {
me . isShowOpenDialog = false ;
if ( me && me . api ) {
me . api . asc _setAdvancedOptions ( type , new Asc . asc _CDRMAdvancedOptions ( value ) ) ;
me . loadMask && me . loadMask . show ( ) ;
}
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 ) ;
if ( this . appOptions . isEdit && ! this . dontCloseDummyComment ) {
Common . NotificationCenter . trigger ( 'comments:updatefilter' ,
{
property : 'uid' ,
value : new RegExp ( '^(doc_|sheet' + this . api . asc _getWorksheetId ( index ) + '_)' )
} ,
false // hide popover
) ;
}
}
} ,
onConfirmAction : function ( id , apiCallback ) {
2016-04-29 11:53:15 +00:00
var me = this ;
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscConfirm . ConfirmReplaceRange ) {
2016-03-11 00:48:53 +00:00
Common . UI . warning ( {
title : this . notcriticalErrorTitle ,
msg : this . confirmMoveCellRange ,
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 )
} ) ;
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 = [ ] ,
shapeStore = this . getCollection ( 'ShapeGroups' ) ;
shapeStore . reset ( ) ;
var groupscount = groupNames . length ;
_ . each ( groupNames , function ( groupName , index ) {
var store = new Backbone . Collection ( [ ] , {
model : SSE . Models . ShapeModel
} ) ;
var cols = ( shapes [ index ] . length ) > 18 ? 7 : 6 ,
height = Math . ceil ( shapes [ index ] . length / cols ) * 35 + 3 ,
width = 30 * cols ;
_ . each ( shapes [ index ] , function ( shape , idx ) {
store . add ( {
imageUrl : shape . Image ,
data : { shapeType : shape . Type } ,
tip : me . textShape + ' ' + ( idx + 1 ) ,
allowSelected : true ,
selected : false
} ) ;
} ) ;
shapegrouparray . push ( {
groupName : me . shapeGroupNames [ index ] ,
groupStore : store ,
groupWidth : width ,
groupHeight : height
} ) ;
} ) ;
shapeStore . add ( shapegrouparray ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Toolbar' ) . fillAutoShapes ( ) ;
} , 50 ) ;
} ,
fillTextArt : function ( shapes ) {
if ( _ . isEmpty ( shapes ) ) return ;
var me = this , arr = [ ] ,
artStore = this . getCollection ( 'Common.Collections.TextArt' ) ;
_ . each ( shapes , function ( shape , index ) {
arr . push ( {
imageUrl : shape ,
data : index ,
allowSelected : true ,
selected : false
} ) ;
} ) ;
artStore . reset ( arr ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'Toolbar' ) . fillTextArt ( ) ;
} , 50 ) ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'RightMenu' ) . fillTextArt ( ) ;
} , 50 ) ;
} ,
updateThemeColors : function ( ) {
var me = this ;
setTimeout ( function ( ) {
me . getApplication ( ) . getController ( 'RightMenu' ) . UpdateThemeColors ( ) ;
} , 50 ) ;
setTimeout ( function ( ) {
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 ) ;
if ( window . styles _loaded && ! this . appOptions . isEditMailMerge && ! this . appOptions . isEditDiagram ) {
this . updateThemeColors ( ) ;
this . fillTextArt ( this . api . asc _getTextArtPreviews ( ) ) ;
}
} ,
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 ;
case 'setAppDisabled' :
this . isAppDisabled = data . data ;
break ;
case 'queryClose' :
if ( $ ( 'body .asc-window:visible' ) . length === 0 ) {
2016-12-05 14:08:58 +00:00
this . isFrameClosed = true ;
2016-06-20 08:59:34 +00:00
this . api . asc _closeCellEditor ( ) ;
2016-03-11 00:48:53 +00:00
Common . Gateway . internalMessage ( 'canClose' , { mr : data . data . mr , answer : true } ) ;
}
break ;
case 'window:drag' :
this . isDiagramDrag = data . data ;
break ;
case 'processmouse' :
this . onProcessMouse ( data . data ) ;
break ;
}
}
} ,
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 ;
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 ( ) ;
} ,
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 ;
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
} ) ;
}
}
} ,
unitsChanged : function ( m ) {
var value = Common . localStorage . getItem ( "sse-settings-unit" ) ;
2016-04-08 08:55:15 +00:00
Common . Utils . Metric . setCurrentMetric ( ( value !== null ) ? parseInt ( value ) : Common . Utils . Metric . getDefaultMetric ( ) ) ;
2016-03-11 00:48:53 +00:00
this . getApplication ( ) . getController ( 'RightMenu' ) . updateMetricUnit ( ) ;
this . getApplication ( ) . getController ( 'Print' ) . getView ( 'MainSettingsPrint' ) . updateMetricUnit ( ) ;
} ,
_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 ( {
closable : false ,
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 ,
msg : this . textTryUndoRedo ,
iconCls : 'info' ,
buttons : [ 'custom' , 'cancel' ] ,
primary : 'custom' ,
customButtonText : this . textStrict ,
dontshow : true ,
callback : _ . bind ( function ( btn , dontshow ) {
if ( dontshow ) window . localStorage . setItem ( "sse-hide-try-undoredo" , 1 ) ;
if ( btn == 'custom' ) {
Common . localStorage . setItem ( "sse-settings-coauthmode" , 0 ) ;
this . api . asc _SetFastCollaborative ( false ) ;
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 ;
} ,
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 )
this . toolbarView . synchronizeChanges ( ) ;
}
2017-04-11 11:05:56 +00:00
if ( this . appOptions . canForcesave ) {
value = Common . localStorage . getItem ( "sse-settings-forcesave" ) ;
this . appOptions . forcesave = ( value === null ) ? this . appOptions . canForcesave : ( parseInt ( value ) == 1 ) ;
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 } ) ;
filemenu . panels [ 'info' ] . updateInfo ( this . appOptions . spreadsheet ) ;
Common . Gateway . metaChange ( meta ) ;
} ,
2016-03-11 00:48:53 +00:00
onPrint : function ( ) {
if ( ! this . appOptions . canPrint ) return ;
2016-04-04 08:17:21 +00:00
Common . NotificationCenter . trigger ( '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 ( ) {
me . iframePrint . contentWindow . focus ( ) ;
me . iframePrint . contentWindow . print ( ) ;
2016-06-09 10:22:58 +00:00
me . iframePrint . contentWindow . blur ( ) ;
window . focus ( ) ;
2016-03-11 00:48:53 +00:00
} ;
}
if ( url ) this . iframePrint . src = url ;
} ,
2017-03-01 16:19:42 +00:00
requestPlugins : function ( pluginsPath ) { // request plugins
if ( ! pluginsPath ) return ;
2017-09-04 14:20:46 +00:00
this . updatePlugins ( Common . Utils . getConfigJson ( pluginsPath ) , false ) ;
2017-03-01 16:19:42 +00:00
} ,
2016-11-16 09:38:16 +00:00
updatePlugins : function ( plugins , uiCustomize ) { // plugins from config
if ( ! plugins ) return ;
var pluginsData = ( uiCustomize ) ? plugins . UIpluginsData : plugins . pluginsData ;
if ( ! pluginsData || pluginsData . length < 1 ) return ;
2016-09-05 14:43:29 +00:00
2017-04-11 11:05:56 +00:00
var arr = [ ] ,
baseUrl = _ . isEmpty ( plugins . url ) ? "" : plugins . url ;
if ( baseUrl !== "" )
2017-09-04 14:20:46 +00:00
console . warn ( "Obsolete: The url parameter is deprecated. Please check the documentation for new plugin connection configuration." ) ;
2017-04-11 11:05:56 +00:00
2016-11-16 09:38:16 +00:00
pluginsData . forEach ( function ( item ) {
2017-04-11 11:05:56 +00:00
item = baseUrl + item ; // for compatibility with previouse version of server, where plugins.url is used.
2017-09-04 14:20:46 +00:00
var value = Common . Utils . getConfigJson ( item ) ;
2017-03-01 16:19:42 +00:00
if ( value ) {
value . baseUrl = item . substring ( 0 , item . lastIndexOf ( "config.json" ) ) ;
2017-04-11 11:05:56 +00:00
value . oldVersion = ( baseUrl !== "" ) ;
2017-03-01 16:19:42 +00:00
arr . push ( value ) ;
}
2016-09-05 14:43:29 +00:00
} ) ;
if ( arr . length > 0 )
this . updatePluginsList ( {
2016-10-21 14:09:58 +00:00
autoStartGuid : plugins . autoStartGuid ,
2017-09-13 10:32:01 +00:00
autostart : plugins . autostart ,
2016-09-05 14:43:29 +00:00
pluginsData : arr
2016-11-16 09:38:16 +00:00
} , ! ! uiCustomize ) ;
2016-09-05 14:43:29 +00:00
} ,
2016-11-16 09:38:16 +00:00
updatePluginsList : function ( plugins , uiCustomize ) {
2016-07-05 12:21:26 +00:00
var pluginStore = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ,
isEdit = this . appOptions . isEdit ;
2016-11-16 09:38:16 +00:00
if ( plugins ) {
var arr = [ ] , arrUI = [ ] ;
2016-07-05 12:21:26 +00:00
plugins . pluginsData . forEach ( function ( item ) {
2017-04-11 11:05:56 +00:00
if ( uiCustomize !== undefined && ( pluginStore . findWhere ( { baseUrl : item . baseUrl } ) || pluginStore . findWhere ( { guid : item . guid } ) ) ) return ;
2016-07-05 12:21:26 +00:00
var variations = item . variations ,
2017-09-11 12:47:36 +00:00
variationsArr = [ ] ,
pluginVisible = false ;
2016-07-05 12:21:26 +00:00
variations . forEach ( function ( itemVar ) {
2017-09-11 12:47:36 +00:00
var visible = ( isEdit || itemVar . isViewer ) && itemVar . EditorsSupport . includes ( 'cell' ) ;
if ( visible ) pluginVisible = true ;
var icons = itemVar . icons ;
if ( item . oldVersion ) { // for compatibility with previouse version of server, where plugins.url is used.
icons = [ ] ;
itemVar . icons . forEach ( function ( icon ) {
icons . push ( icon . substring ( icon . lastIndexOf ( "\/" ) + 1 ) ) ;
} ) ;
}
if ( item . isUICustomizer ) {
visible && arrUI . push ( item . baseUrl + itemVar . url ) ;
} else {
var model = new Common . Models . PluginVariation ( itemVar ) ;
model . set ( {
index : variationsArr . length ,
url : ( item . oldVersion ) ? ( itemVar . url . substring ( itemVar . url . lastIndexOf ( "\/" ) + 1 ) ) : itemVar . url ,
icons : icons ,
visible : visible
} ) ;
variationsArr . push ( model ) ;
2016-11-16 09:38:16 +00:00
}
2016-07-05 12:21:26 +00:00
} ) ;
2016-11-16 09:38:16 +00:00
if ( variationsArr . length > 0 && ! item . isUICustomizer )
2016-07-05 12:21:26 +00:00
arr . push ( new Common . Models . Plugin ( {
name : item . name ,
guid : item . guid ,
baseUrl : item . baseUrl ,
variations : variationsArr ,
2017-09-11 12:47:36 +00:00
currentVariation : 0 ,
visible : pluginVisible
2016-07-05 12:21:26 +00:00
} ) ) ;
} ) ;
2016-11-16 09:38:16 +00:00
if ( uiCustomize !== false ) // from ui customizer in editor config or desktop event
this . UICustomizePlugins = arrUI ;
2016-07-05 12:21:26 +00:00
2017-09-05 09:47:52 +00:00
if ( ! uiCustomize ) {
2016-11-16 09:38:16 +00:00
if ( pluginStore ) pluginStore . reset ( arr ) ;
2017-09-05 09:47:52 +00:00
this . appOptions . canPlugins = ! pluginStore . isEmpty ( ) ;
2016-11-16 09:38:16 +00:00
}
} else if ( ! uiCustomize ) {
2016-07-05 12:21:26 +00:00
this . appOptions . canPlugins = false ;
}
2016-10-21 14:09:58 +00:00
if ( this . appOptions . canPlugins ) {
2016-07-05 12:21:26 +00:00
this . getApplication ( ) . getController ( 'Common.Controllers.Plugins' ) . setMode ( this . appOptions ) ;
2017-09-13 10:32:01 +00:00
if ( plugins . autoStartGuid ) {
console . warn ( "Obsolete: The autoStartGuid parameter is deprecated. Please check the documentation for new plugin connection configuration." ) ;
2016-10-21 14:09:58 +00:00
this . api . asc _pluginRun ( plugins . autoStartGuid , 0 , '' ) ;
2017-09-13 10:32:01 +00:00
} else if ( plugins . autostart && plugins . autostart . length > 0 ) {
// run array of plugins
}
2016-10-21 14:09:58 +00:00
}
2016-11-16 09:38:16 +00:00
if ( ! uiCustomize ) this . getApplication ( ) . getController ( 'LeftMenu' ) . enablePlugins ( ) ;
2016-07-05 12:21:26 +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' ,
criticalErrorExtText : 'Press "Ok" to to back to document list.' ,
openTitleText : 'Opening Document' ,
openTextText : 'Opening document...' ,
saveTitleText : 'Saving Document' ,
saveTextText : 'Saving document...' ,
loadFontsTitleText : 'Loading Data' ,
loadFontsTextText : 'Loading data...' ,
loadImagesTitleText : 'Loading Images' ,
loadImagesTextText : 'Loading images...' ,
loadFontTitleText : 'Loading Data' ,
loadFontTextText : 'Loading data...' ,
loadImageTitleText : 'Loading Image' ,
loadImageTextText : 'Loading image...' ,
downloadTitleText : 'Downloading Document' ,
downloadTextText : 'Downloading document...' ,
printTitleText : 'Printing Document' ,
printTextText : 'Printing document...' ,
uploadImageTitleText : 'Uploading Image' ,
uploadImageTextText : 'Uploading image...' ,
savePreparingText : 'Preparing to save' ,
savePreparingTitle : 'Preparing to save. Please wait...' ,
2016-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.' ,
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
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' ,
titleRecalcFormulas : 'Calculating formulas...' ,
textRecalcFormulas : 'Calculating formulas...' ,
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.' ,
errorFilePassProtect : 'The document is password protected.' ,
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.' ,
defaultTitleText : 'ONLYOFFICE Spreadsheet Editor' ,
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.' ,
errorConnectToServer : ' The document could not be saved. Please check connection settings or contact your administrator.<br>When you click the \'OK\' button, you will be prompted to download the document.<br><br>' +
'Find more information about connecting Document Server <a href=\"https://api.onlyoffice.com/editors/callback\" target=\"_blank\">here</a>' ,
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' ,
textNoLicenseTitle : 'ONLYOFFICE open source version' ,
warnNoLicense : 'You are using an open source version of ONLYOFFICE. The version has limitations for concurrent connections to the document server (20 connections at a time).<br>If you need more please consider purchasing a commercial license.' ,
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.' ,
2016-10-12 13:32:48 +00:00
errorViewerDisconnect : 'Connection is lost. You can still view the document,<br>but will not be able to download or print until the connection is restored.' ,
2016-08-29 11:46:15 +00:00
warnLicenseExp : 'Your license has expired.<br>Please update your license and refresh the page.' ,
2016-09-13 06:40:44 +00:00
titleLicenseExp : 'License expired' ,
openErrorText : 'An error has occurred while opening the file' ,
2016-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' ,
txtStyle _Comma : 'Comma'
2016-03-11 00:48:53 +00:00
}
} ) ( ) , SSE . Controllers . Main || { } ) )
2016-03-31 13:26:58 +00:00
} ) ;