2016-04-01 13:17:09 +00:00
/ *
*
2019-01-17 13:05:03 +00:00
* ( c ) Copyright Ascensio System SIA 2010 - 2019
2016-04-01 13:17:09 +00:00
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
2019-01-17 13:00:34 +00:00
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
2016-04-01 13:17:09 +00:00
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
2016-03-11 00:48:53 +00:00
/ * *
* Statusbar . js
*
* Statusbar controller
*
* Created by Maxim Kadushkin on 27 March 2014
2018-03-01 12:16:38 +00:00
* Copyright ( c ) 2018 Ascensio System SIA . All rights reserved .
2016-03-11 00:48:53 +00:00
*
* /
define ( [
'core' ,
'spreadsheeteditor/main/app/view/Statusbar'
] , function ( ) {
'use strict' ;
SSE . Controllers . Statusbar = Backbone . Controller . extend ( _ . extend ( {
models : [ ] ,
collections : [ ] ,
views : [
'Statusbar'
] ,
initialize : function ( ) {
this . addListeners ( {
'Statusbar' : {
2021-06-26 13:16:33 +00:00
'show:tab' : _ . bind ( this . showTab , this ) ,
2016-03-11 00:48:53 +00:00
'show:hidden' : _ . bind ( function ( obj , index ) {
this . hideWorksheet ( false , index ) ;
} , this ) ,
'sheet:changename' : _ . bind ( function ( ) {
this . api . asc _closeCellEditor ( ) ;
this . renameWorksheet ( ) ;
} , this ) ,
'sheet:setcolor' : _ . bind ( this . setWorksheetColor , this ) ,
'sheet:updateColors' : _ . bind ( this . updateTabsColors , this ) ,
'sheet:move' : _ . bind ( this . moveWorksheet , this )
2021-07-20 09:30:09 +00:00
} ,
2021-12-12 14:49:49 +00:00
'ViewTab' : {
'statusbar:setcompact' : _ . bind ( this . onChangeViewMode , this )
2016-03-11 00:48:53 +00:00
}
} ) ;
} ,
events : function ( ) {
return {
'click #status-btn-zoomdown' : _ . bind ( this . zoomDocument , this , 'down' ) ,
'click #status-btn-zoomup' : _ . bind ( this . zoomDocument , this , 'up' ) ,
'click .cnt-zoom' : _ . bind ( this . onZoomShow , this )
} ;
} ,
onLaunch : function ( ) {
2017-04-27 15:27:41 +00:00
this . statusbar = this . createView ( 'Statusbar' ) . render ( ) ;
2016-03-11 00:48:53 +00:00
this . statusbar . $el . css ( 'z-index' , 10 ) ;
2017-11-10 09:00:47 +00:00
this . statusbar . labelZoom . css ( 'min-width' , 80 ) ;
2016-03-11 00:48:53 +00:00
this . statusbar . zoomMenu . on ( 'item:click' , _ . bind ( this . menuZoomClick , this ) ) ;
this . bindViewEvents ( this . statusbar , this . events ) ;
$ ( '#id-tab-menu-new-color' , this . statusbar . $el ) . on ( 'click' , _ . bind ( this . onNewBorderColor , this ) ) ;
} ,
setApi : function ( api ) {
this . api = api ;
this . api . asc _registerCallback ( 'asc_onZoomChanged' , _ . bind ( this . onZoomChange , this ) ) ;
this . api . asc _registerCallback ( 'asc_onSelectionMathChanged' , _ . bind ( this . onApiMathChanged , this ) ) ;
this . api . asc _registerCallback ( 'asc_onCoAuthoringDisconnect' , _ . bind ( this . onApiDisconnect , this ) ) ;
Common . NotificationCenter . on ( 'api:disconnect' , _ . bind ( this . onApiDisconnect , this ) ) ;
this . api . asc _registerCallback ( 'asc_onUpdateTabColor' , _ . bind ( this . onApiUpdateTabColor , this ) ) ;
this . api . asc _registerCallback ( 'asc_onEditCell' , _ . bind ( this . onApiEditCell , this ) ) ;
/** coauthoring begin **/
this . api . asc _registerCallback ( 'asc_onWorkbookLocked' , _ . bind ( this . onWorkbookLocked , this ) ) ;
this . api . asc _registerCallback ( 'asc_onWorksheetLocked' , _ . bind ( this . onWorksheetLocked , this ) ) ;
2021-06-25 15:29:17 +00:00
this . api . asc _registerCallback ( 'asc_onChangeProtectWorkbook' , _ . bind ( this . onChangeProtectWorkbook , this ) ) ;
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
this . api . asc _registerCallback ( 'asc_onError' , _ . bind ( this . onError , this ) ) ;
2017-02-06 11:22:34 +00:00
this . api . asc _registerCallback ( 'asc_onFilterInfo' , _ . bind ( this . onApiFilterInfo , this ) ) ;
2017-08-09 13:50:46 +00:00
this . api . asc _registerCallback ( 'asc_onActiveSheetChanged' , _ . bind ( this . onApiActiveSheetChanged , this ) ) ;
2020-07-16 15:04:34 +00:00
this . api . asc _registerCallback ( 'asc_onRefreshNamedSheetViewList' , _ . bind ( this . onRefreshNamedSheetViewList , this ) ) ;
2016-03-11 00:48:53 +00:00
this . statusbar . setApi ( api ) ;
} ,
zoomDocument : function ( d , e ) {
2020-06-18 15:43:27 +00:00
if ( ! this . api ) return ;
2016-03-11 00:48:53 +00:00
switch ( d ) {
case 'up' :
var f = Math . floor ( this . api . asc _getZoom ( ) * 10 ) / 10 ;
f += . 1 ;
2021-12-01 09:24:07 +00:00
! ( f > 5. ) && this . api . asc _setZoom ( f ) ;
2016-03-11 00:48:53 +00:00
break ;
case 'down' :
f = Math . ceil ( this . api . asc _getZoom ( ) * 10 ) / 10 ;
f -= . 1 ;
2020-12-09 11:45:05 +00:00
! ( f < . 1 ) && this . api . asc _setZoom ( f ) ;
2016-03-11 00:48:53 +00:00
break ;
}
Common . NotificationCenter . trigger ( 'edit:complete' , this . statusbar ) ;
} ,
menuZoomClick : function ( menu , item ) {
2020-06-18 15:43:27 +00:00
this . api && this . api . asc _setZoom ( item . value / 100 ) ;
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . trigger ( 'edit:complete' , this . statusbar ) ;
} ,
/ *
* api events
* * /
onZoomChange : function ( percent , type ) {
this . statusbar . labelZoom . text ( Common . Utils . String . format ( this . zoomText , Math . floor ( ( percent + . 005 ) * 100 ) ) ) ;
} ,
onApiDisconnect : function ( ) {
2017-11-10 07:50:01 +00:00
this . SetDisabled ( true ) ;
} ,
SetDisabled : function ( state ) {
this . statusbar . setMode ( { isDisconnected : state } ) ;
2016-03-11 00:48:53 +00:00
this . statusbar . update ( ) ;
} ,
/** coauthoring begin **/
onWorkbookLocked : function ( locked ) {
this . statusbar . tabbar [ locked ? 'addClass' : 'removeClass' ] ( 'coauth-locked' ) ;
2019-10-14 12:00:15 +00:00
this . statusbar . btnAddWorksheet . setDisabled ( locked || this . api . isCellEdited || this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . Chart ||
2020-03-19 09:15:45 +00:00
this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . FormatTable ||
2021-06-25 15:29:17 +00:00
this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . PrintTitles ||
this . api . asc _isProtectedWorkbook ( ) ) ;
2016-03-11 00:48:53 +00:00
var item , i = this . statusbar . tabbar . getCount ( ) ;
while ( i -- > 0 ) {
item = this . statusbar . tabbar . getAt ( i ) ;
if ( item . sheetindex >= 0 ) {
// if (locked) item.reorderable = false;
// else item.reorderable = !this.api.asc_isWorksheetLockedOrDeleted(item.sheetindex);
} else {
item . disable ( locked ) ;
2020-02-13 09:09:05 +00:00
item . $el . children ( ':first-child' ) . attr ( 'draggable' , locked ? 'false' : 'true' ) ;
2016-03-11 00:48:53 +00:00
}
}
} ,
onWorksheetLocked : function ( index , locked ) {
var count = this . statusbar . tabbar . getCount ( ) , tab ;
2021-06-25 15:29:17 +00:00
var wbprotected = this . api . asc _isProtectedWorkbook ( ) ;
2016-03-11 00:48:53 +00:00
for ( var i = count ; i -- > 0 ; ) {
tab = this . statusbar . tabbar . getAt ( i ) ;
if ( index == tab . sheetindex ) {
tab [ locked ? 'addClass' : 'removeClass' ] ( 'coauth-locked' ) ;
2021-06-25 15:29:17 +00:00
tab . isLockTheDrag = locked || wbprotected || ( this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . FormatTable ) || ( this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . PrintTitles ) ;
2020-02-13 09:09:05 +00:00
tab . $el . children ( ':first-child' ) . attr ( 'draggable' , tab . isLockTheDrag ? 'false' : 'true' ) ;
2016-03-11 00:48:53 +00:00
break ;
}
}
2021-06-30 12:36:53 +00:00
var listItem = this . statusbar . sheetListMenu . items [ index ] ;
if ( listItem . $el . children ( ) . first ( ) . data ( 'hidden' ) ) {
listItem . setDisabled ( locked ) ;
}
2016-03-11 00:48:53 +00:00
} ,
2021-06-25 15:29:17 +00:00
onChangeProtectWorkbook : function ( ) {
var wbprotected = this . api . asc _isProtectedWorkbook ( ) ;
2021-11-11 13:53:43 +00:00
this . statusbar . btnAddWorksheet . setDisabled ( this . api . isCellEdited || this . api . asc _isWorkbookLocked ( ) || wbprotected || this . statusbar . rangeSelectionMode != Asc . c _oAscSelectionDialogType . None ) ;
var count = this . statusbar . tabbar . getCount ( ) , tab ;
2021-06-25 15:29:17 +00:00
for ( var i = count ; i -- > 0 ; ) {
tab = this . statusbar . tabbar . getAt ( i ) ;
var islocked = tab . hasClass ( 'coauth-locked' ) ;
tab . isLockTheDrag = islocked || wbprotected || ( this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . FormatTable ) || ( this . statusbar . rangeSelectionMode == Asc . c _oAscSelectionDialogType . PrintTitles ) ;
tab . $el . children ( ':first-child' ) . attr ( 'draggable' , tab . isLockTheDrag ? 'false' : 'true' ) ;
}
2021-11-11 13:53:43 +00:00
this . statusbar . update ( ) ;
2021-06-25 15:29:17 +00:00
} ,
2016-03-11 00:48:53 +00:00
/** coauthoring end **/
onApiMathChanged : function ( info ) {
// info.asc_getCountNumbers();
// info.asc_getMin();
// info.asc_getMax();
this . statusbar . setMathInfo ( {
count : info . asc _getCount ( ) ,
average : info . asc _getAverage ( ) ,
2019-02-28 08:31:15 +00:00
min : info . asc _getMin ( ) ,
max : info . asc _getMax ( ) ,
2016-03-11 00:48:53 +00:00
sum : info . asc _getSum ( )
} ) ;
this . statusbar . updateTabbarBorders ( ) ;
} ,
2017-02-06 11:22:34 +00:00
onApiFilterInfo : function ( countFilter , countRecords ) {
this . statusbar . setFilteredInfo ( countFilter , countRecords ) ;
this . statusbar . updateTabbarBorders ( ) ;
} ,
2016-03-11 00:48:53 +00:00
onApiEditCell : function ( state ) {
2016-04-05 11:52:34 +00:00
var disableAdd = ( state == Asc . c _oAscCellEditorState . editFormula ) ,
disable = ( state != Asc . c _oAscCellEditorState . editEnd ) ,
2016-03-11 00:48:53 +00:00
mask = $ ( '.statusbar-mask' ) ,
statusbar = this . statusbar ;
statusbar . isEditFormula = disableAdd ;
2020-07-27 15:31:29 +00:00
statusbar . tabbar && ( statusbar . tabbar . isEditFormula = disableAdd ) ;
2016-03-11 00:48:53 +00:00
statusbar . btnZoomUp . setDisabled ( disable ) ;
statusbar . btnZoomDown . setDisabled ( disable ) ;
statusbar . labelZoom [ disable ? 'addClass' : 'removeClass' ] ( 'disabled' ) ;
2021-06-25 15:29:17 +00:00
statusbar . btnAddWorksheet . setDisabled ( disable || this . api . asc _isWorkbookLocked ( ) || this . api . asc _isProtectedWorkbook ( ) || statusbar . rangeSelectionMode != Asc . c _oAscSelectionDialogType . None ) ;
2016-03-11 00:48:53 +00:00
2020-07-27 15:32:41 +00:00
statusbar . $el . find ( '#statusbar_bottom li span' ) . attr ( 'oo_editor_input' , ! disableAdd ) ;
2016-03-11 00:48:53 +00:00
if ( disableAdd && mask . length > 0 || ! disableAdd && mask . length == 0 ) return ;
statusbar . $el . find ( '.statusbar' ) . toggleClass ( 'masked' , disableAdd ) ;
if ( disableAdd ) {
mask = $ ( "<div class='statusbar-mask'>" ) . appendTo ( statusbar . $el ) ;
} else {
mask . remove ( ) ;
}
} ,
createDelayedElements : function ( ) {
this . statusbar . $el . css ( 'z-index' , '' ) ;
this . statusbar . tabMenu . on ( 'item:click' , _ . bind ( this . onTabMenu , this ) ) ;
this . statusbar . btnAddWorksheet . on ( 'click' , _ . bind ( this . onAddWorksheetClick , this ) ) ;
2021-11-18 20:56:29 +00:00
if ( ! Common . UI . LayoutManager . isElementVisible ( 'statusBar-actionStatus' ) ) {
this . statusbar . customizeStatusBarMenu . items [ 0 ] . setVisible ( false ) ;
this . statusbar . customizeStatusBarMenu . items [ 1 ] . setVisible ( false ) ;
this . statusbar . boxAction . addClass ( 'hide' ) ;
}
2016-03-11 00:48:53 +00:00
Common . NotificationCenter . on ( 'window:resize' , _ . bind ( this . onWindowResize , this ) ) ;
Common . NotificationCenter . on ( 'cells:range' , _ . bind ( this . onRangeDialogMode , this ) ) ;
} ,
onWindowResize : function ( area ) {
2020-06-29 17:51:58 +00:00
this . statusbar . updateVisibleItemsBoxMath ( ) ;
this . statusbar . updateTabbarBorders ( ) ;
2016-03-11 00:48:53 +00:00
this . statusbar . onTabInvisible ( undefined , this . statusbar . tabbar . checkInvisible ( true ) ) ;
} ,
onRangeDialogMode : function ( mode ) {
var islocked = this . statusbar . tabbar . hasClass ( 'coauth-locked' ) ,
currentIdx = this . api . asc _getActiveWorksheetIndex ( ) ;
2021-06-25 15:29:17 +00:00
this . statusbar . btnAddWorksheet . setDisabled ( islocked || this . api . isCellEdited || this . api . asc _isProtectedWorkbook ( ) || mode != Asc . c _oAscSelectionDialogType . None ) ;
2021-07-01 10:34:48 +00:00
this . statusbar . btnSheetList [ mode == Asc . c _oAscSelectionDialogType . FormatTable || mode == Asc . c _oAscSelectionDialogType . PrintTitles ? 'addClass' : 'removeClass' ] ( 'disabled' ) ;
2016-03-11 00:48:53 +00:00
var item , i = this . statusbar . tabbar . getCount ( ) ;
2021-06-25 15:29:17 +00:00
var wbprotected = this . api . asc _isProtectedWorkbook ( ) ;
2016-03-11 00:48:53 +00:00
while ( i -- > 0 ) {
item = this . statusbar . tabbar . getAt ( i ) ;
if ( item . sheetindex !== currentIdx ) {
2020-03-19 09:15:45 +00:00
item . disable ( mode == Asc . c _oAscSelectionDialogType . FormatTable || mode == Asc . c _oAscSelectionDialogType . PrintTitles ) ;
2016-03-11 00:48:53 +00:00
}
2021-06-25 15:29:17 +00:00
item . isLockTheDrag = ( item . hasClass ( 'coauth-locked' ) || wbprotected || ( mode != Asc . c _oAscSelectionDialogType . None ) ) ;
2016-03-11 00:48:53 +00:00
}
this . statusbar . rangeSelectionMode = mode ;
} ,
onTabMenu : function ( obj , item , e ) {
2018-03-26 11:41:21 +00:00
var me = this ;
2019-09-26 08:35:29 +00:00
var selectTabs = this . statusbar . tabbar . selectTabs ,
arrIndex = [ ] ;
selectTabs . forEach ( function ( item ) {
arrIndex . push ( item . sheetindex ) ;
} ) ;
switch ( item . value ) {
case 'ins' :
2019-10-09 07:06:30 +00:00
var arrNames = [ ] ;
for ( var i = 0 ; i < arrIndex . length ; i ++ ) {
arrNames . push ( me . createSheetName ( arrNames ) ) ;
}
2019-09-26 08:35:29 +00:00
setTimeout ( function ( ) {
2019-10-09 07:06:30 +00:00
me . api . asc _insertWorksheet ( arrNames ) ;
2019-09-26 08:35:29 +00:00
} , 1 ) ;
break ;
case 'del' :
this . deleteWorksheet ( arrIndex ) ;
break ;
case 'ren' :
this . renameWorksheet ( ) ;
break ;
case 'copy' :
2019-10-01 08:49:43 +00:00
this . moveWorksheet ( arrIndex , false ) ;
2019-09-26 08:35:29 +00:00
break ;
case 'move' :
2019-10-01 08:49:43 +00:00
this . moveWorksheet ( arrIndex , true ) ;
2019-09-26 08:35:29 +00:00
break ;
case 'hide' :
setTimeout ( function ( ) {
me . hideWorksheet ( true , arrIndex ) ;
} , 1 ) ;
break ;
2021-08-04 21:37:48 +00:00
case 'protect' :
this . protectWorksheet ( ) ;
break ;
2019-09-26 08:35:29 +00:00
}
2016-03-11 00:48:53 +00:00
} ,
2019-10-09 07:06:30 +00:00
createSheetName : function ( curArrNames ) {
2016-03-11 00:48:53 +00:00
var items = [ ] , wc = this . api . asc _getWorksheetsCount ( ) ;
while ( wc -- ) {
items . push ( this . api . asc _getWorksheetName ( wc ) . toLowerCase ( ) ) ;
}
var index = 0 , name ;
2019-10-17 12:45:28 +00:00
while ( true ) {
index ++ ;
2016-03-11 00:48:53 +00:00
name = this . strSheet + index ;
if ( items . indexOf ( name . toLowerCase ( ) ) < 0 ) break ;
}
2019-10-09 07:06:30 +00:00
if ( curArrNames && curArrNames . length > 0 ) {
var arr = [ ] ;
curArrNames . forEach ( function ( item ) {
arr . push ( item . toLowerCase ( ) ) ;
} ) ;
2019-10-22 06:57:22 +00:00
while ( arr . indexOf ( name . toLowerCase ( ) ) !== - 1 || items . indexOf ( name . toLowerCase ( ) ) !== - 1 ) {
2019-10-09 07:06:30 +00:00
index ++ ;
name = this . strSheet + index ;
}
}
2016-03-11 00:48:53 +00:00
return name ;
} ,
2019-10-08 08:20:45 +00:00
createCopyName : function ( orig , curArrNames ) {
2016-03-11 00:48:53 +00:00
var wc = this . api . asc _getWorksheetsCount ( ) , names = [ ] ;
while ( wc -- ) {
names . push ( this . api . asc _getWorksheetName ( wc ) . toLowerCase ( ) ) ;
}
var re = /^(.*)\((\d)\)$/ . exec ( orig ) ;
var first = re ? re [ 1 ] : orig + ' ' ;
var index = 1 , name ;
2019-10-17 12:45:28 +00:00
while ( true ) {
index ++ ;
2016-03-11 00:48:53 +00:00
name = first + '(' + index + ')' ;
if ( names . indexOf ( name . toLowerCase ( ) ) < 0 ) break ;
}
2019-10-08 08:20:45 +00:00
if ( curArrNames && curArrNames . length > 0 ) {
var arr = [ ] ;
curArrNames . forEach ( function ( item ) {
arr . push ( item . toLowerCase ( ) ) ;
} ) ;
while ( arr . indexOf ( name . toLowerCase ( ) ) !== - 1 ) {
index ++ ;
name = first + '(' + index + ')' ;
}
}
2016-03-11 00:48:53 +00:00
return name ;
} ,
2019-09-26 08:35:29 +00:00
deleteWorksheet : function ( selectTabs ) {
2016-03-11 00:48:53 +00:00
var me = this ;
2019-09-26 08:35:29 +00:00
if ( this . statusbar . tabbar . tabs . length == 1 || selectTabs . length === this . statusbar . tabbar . tabs . length ) {
2016-03-11 00:48:53 +00:00
Common . UI . warning ( { msg : this . errorLastSheet } ) ;
} else {
Common . UI . warning ( {
msg : this . warnDeleteSheet ,
buttons : [ 'ok' , 'cancel' ] ,
callback : function ( btn ) {
2019-09-26 08:35:29 +00:00
if ( btn == 'ok' && ! me . api . asc _deleteWorksheet ( selectTabs ) ) {
2016-03-11 00:48:53 +00:00
_ . delay ( function ( ) {
Common . UI . error ( { msg : me . errorRemoveSheet } ) ;
} , 10 ) ;
}
}
} ) ;
}
} ,
hideWorksheet : function ( hide , index ) {
if ( hide ) {
2019-09-26 08:35:29 +00:00
( this . statusbar . tabbar . tabs . length == 1 || index . length === this . statusbar . tabbar . tabs . length ) ?
2016-03-11 00:48:53 +00:00
Common . UI . warning ( { msg : this . errorLastSheet } ) :
this . api [ 'asc_hideWorksheet' ] ( index ) ;
} else {
this . api [ 'asc_showWorksheet' ] ( index ) ;
this . loadTabColor ( index ) ;
2019-04-17 13:28:52 +00:00
var me = this ;
setTimeout ( function ( ) {
me . statusbar . tabMenu . hide ( ) ;
} , 1 ) ;
2016-03-11 00:48:53 +00:00
}
} ,
renameWorksheet : function ( ) {
var me = this ;
var wc = me . api . asc _getWorksheetsCount ( ) , items = null ;
if ( wc > 0 ) {
var sindex = me . api . asc _getActiveWorksheetIndex ( ) ;
if ( me . api . asc _isWorksheetLockedOrDeleted ( sindex ) ) {
return ;
}
2017-10-04 15:44:01 +00:00
var value = Common . Utils . InternalSettings . get ( "sse-settings-coauthmode" ) ;
if ( ! value ) {
2016-03-11 00:48:53 +00:00
items = [ ] ;
while ( wc -- ) {
if ( sindex !== wc ) {
items . push ( me . api . asc _getWorksheetName ( wc ) . toLowerCase ( ) ) ;
}
}
}
var tab = me . statusbar . tabbar . tabs [ me . statusbar . tabbar . getActive ( ) ] ;
var top = me . statusbar . $el . position ( ) . top - 115 ,
left = tab . $el . offset ( ) . left ;
var current = me . api . asc _getWorksheetName ( me . api . asc _getActiveWorksheetIndex ( ) ) ;
var win = ( new SSE . Views . Statusbar . RenameDialog ( {
current : current ,
names : items ,
api : me . api ,
handler : function ( btn , s ) {
if ( btn == 'ok' && s != current ) {
me . api . asc _renameWorksheet ( s ) ;
}
me . api . asc _enableKeyEvents ( true ) ;
}
} ) ) ;
if ( typeof win . options . width == "number" ) {
var bodywidth = $ ( 'body' ) . width ( ) ;
if ( left + win . options . width > bodywidth )
left = bodywidth - win . options . width - 5 ;
}
win . show ( left , top ) ;
}
} ,
2021-08-31 14:03:39 +00:00
moveWorksheet : function ( selectArr , cut , silent , indTo ) {
2016-03-11 00:48:53 +00:00
var me = this ;
2019-10-01 08:49:43 +00:00
var wc = me . api . asc _getWorksheetsCount ( ) , items = [ ] , arrIndex = [ ] , i = - 1 ;
2016-03-11 00:48:53 +00:00
while ( ++ i < wc ) {
if ( ! this . api . asc _isWorksheetHidden ( i ) ) {
items . push ( {
2019-10-01 08:49:43 +00:00
value : me . api . asc _getWorksheetName ( i ) ,
inindex : i
2016-03-11 00:48:53 +00:00
} ) ;
}
}
2019-10-01 08:49:43 +00:00
if ( ! _ . isUndefined ( selectArr ) ) {
items . forEach ( function ( item ) {
if ( selectArr . indexOf ( item . inindex ) !== - 1 ) {
arrIndex . push ( item . inindex ) ;
}
} ) ;
}
2016-03-11 00:48:53 +00:00
2021-08-31 14:03:39 +00:00
if ( ! _ . isUndefined ( silent ) ) {
if ( cut ) {
me . api . asc _moveWorksheet ( indTo , arrIndex ) ;
me . api . asc _enableKeyEvents ( true ) ;
2019-10-01 08:49:43 +00:00
} else {
2021-08-31 14:03:39 +00:00
var arrNames = [ ] ;
arrIndex . forEach ( function ( item ) {
arrNames . push ( me . createCopyName ( me . api . asc _getWorksheetName ( item ) , arrNames ) ) ;
} ) ;
me . api . asc _copyWorksheet ( indTo , arrNames , arrIndex ) ;
2016-03-11 00:48:53 +00:00
}
return ;
}
( new SSE . Views . Statusbar . CopyDialog ( {
title : cut ? me . statusbar . itemMove : me . statusbar . itemCopy ,
ismove : cut ,
names : items ,
handler : function ( btn , i ) {
if ( btn == 'ok' ) {
if ( cut ) {
2019-10-01 08:49:43 +00:00
me . api . asc _moveWorksheet ( i == - 255 ? wc : i , arrIndex ) ;
2016-03-11 00:48:53 +00:00
} else {
2019-10-08 08:20:45 +00:00
var arrNames = [ ] ;
arrIndex . forEach ( function ( item ) {
arrNames . push ( me . createCopyName ( me . api . asc _getWorksheetName ( item ) , arrNames ) ) ;
} ) ;
me . api . asc _copyWorksheet ( i == - 255 ? wc : i , arrNames , arrIndex ) ;
2016-03-11 00:48:53 +00:00
}
}
me . api . asc _enableKeyEvents ( true ) ;
}
} ) ) . show ( ) ;
} ,
onAddWorksheetClick : function ( o , index , opts ) {
if ( this . api ) {
this . api . asc _closeCellEditor ( ) ;
this . api . asc _addWorksheet ( this . createSheetName ( ) ) ;
2018-11-16 13:44:11 +00:00
Common . NotificationCenter . trigger ( 'comments:updatefilter' , [ 'doc' , 'sheet' + this . api . asc _getActiveWorksheetId ( ) ] , false ) ; // hide popover
2016-03-11 00:48:53 +00:00
}
Common . NotificationCenter . trigger ( 'edit:complete' , this . statusbar ) ;
} ,
2021-06-26 13:16:33 +00:00
showTab : function ( sheetIndex ) {
if ( this . api && this . api . asc _getActiveWorksheetIndex ( ) !== sheetIndex ) {
this . api . asc _showWorksheet ( sheetIndex ) ;
this . loadTabColor ( sheetIndex ) ;
}
2021-06-30 12:36:53 +00:00
var me = this ;
setTimeout ( function ( ) {
me . statusbar . sheetListMenu . hide ( ) ;
} , 1 ) ;
2021-06-26 13:16:33 +00:00
} ,
2016-03-11 00:48:53 +00:00
selectTab : function ( sheetindex ) {
if ( this . api ) {
var hidden = this . api . asc _isWorksheetHidden ( sheetindex ) ;
if ( ! hidden ) {
var tab = _ . findWhere ( this . statusbar . tabbar . tabs , { sheetindex : sheetindex } ) ;
if ( tab ) {
this . statusbar . tabbar . setActive ( tab ) ;
}
}
}
} ,
// colors
onApiUpdateTabColor : function ( index ) {
this . loadTabColor ( index ) ;
} ,
setWorksheetColor : function ( color ) {
2019-09-26 11:24:33 +00:00
var me = this ;
2016-03-11 00:48:53 +00:00
if ( this . api ) {
2019-09-26 11:24:33 +00:00
var selectTabs = this . statusbar . tabbar . selectTabs ,
arrIndex = [ ] ;
selectTabs . forEach ( function ( item ) {
arrIndex . push ( item . sheetindex ) ;
} ) ;
if ( arrIndex ) {
2016-03-11 00:48:53 +00:00
if ( 'transparent' === color ) {
2019-09-26 11:24:33 +00:00
this . api . asc _setWorksheetTabColor ( null , arrIndex ) ;
selectTabs . forEach ( function ( tab ) {
2020-02-13 09:09:05 +00:00
tab . $el . find ( 'span' ) . css ( 'box-shadow' , '' ) ;
2019-09-26 11:24:33 +00:00
} ) ;
2016-03-11 00:48:53 +00:00
} else {
var asc _clr = Common . Utils . ThemeColor . getRgbColor ( color ) ;
if ( asc _clr ) {
2019-09-26 11:24:33 +00:00
this . api . asc _setWorksheetTabColor ( asc _clr , arrIndex ) ;
selectTabs . forEach ( function ( tab ) {
me . setTabLineColor ( tab , asc _clr ) ;
} ) ;
2016-03-11 00:48:53 +00:00
}
}
}
}
} ,
updateThemeColors : function ( ) {
var updateColors = function ( picker , defaultColorIndex ) {
if ( picker ) {
var clr ,
effectcolors = Common . Utils . ThemeColor . getEffectColors ( ) ;
for ( var i = 0 ; i < effectcolors . length ; ++ i ) {
if ( typeof ( picker . currentColor ) == 'object' &&
clr === undefined &&
picker . currentColor . effectId == effectcolors [ i ] . effectId )
clr = effectcolors [ i ] ;
}
picker . updateColors ( effectcolors , Common . Utils . ThemeColor . getStandartColors ( ) ) ;
if ( picker . currentColor === undefined ) {
picker . currentColor = effectcolors [ defaultColorIndex ] ;
} else if ( clr !== undefined ) {
picker . currentColor = clr ;
}
}
} ;
if ( this . statusbar ) {
updateColors ( this . statusbar . mnuTabColor , 1 ) ;
}
} ,
onNewBorderColor : function ( ) {
if ( this . statusbar && this . statusbar . mnuTabColor ) {
this . statusbar . mnuTabColor . addNewColor ( ) ;
}
} ,
updateTabsColors : function ( updateCurrentColor ) {
var i = - 1 ,
tabind = - 1 ,
color = null ,
clr = null ,
ishidden = false ,
wc = this . api . asc _getWorksheetsCount ( ) ,
sindex = this . api . asc _getActiveWorksheetIndex ( ) ;
if ( ! _ . isUndefined ( updateCurrentColor ) ) {
var toolbarController = this . application . getController ( 'Toolbar' ) ;
if ( toolbarController ) {
this . statusbar . mnuTabColor . updateCustomColors ( ) ;
color = this . api . asc _getWorksheetTabColor ( sindex ) ;
if ( color ) {
2016-04-05 11:52:34 +00:00
if ( color . get _type ( ) == Asc . c _oAscColor . COLOR _TYPE _SCHEME ) {
2016-03-11 00:48:53 +00:00
clr = { color : Common . Utils . ThemeColor . getHexColor ( color . get _r ( ) , color . get _g ( ) , color . get _b ( ) ) , effectValue : color . get _value ( ) } ;
} else {
clr = Common . Utils . ThemeColor . getHexColor ( color . get _r ( ) , color . get _g ( ) , color . get _b ( ) ) ;
}
}
if ( _ . isObject ( clr ) ) {
var isselected = false ;
for ( i = 0 ; i < 10 ; i ++ ) {
if ( Common . Utils . ThemeColor . ThemeValues [ i ] === clr . effectValue ) {
this . statusbar . mnuTabColor . select ( clr , true ) ;
isselected = true ;
break ;
}
}
if ( ! isselected ) this . statusbar . mnuTabColor . clearSelection ( ) ;
} else {
this . statusbar . mnuTabColor . select ( clr || 'transparent' , true ) ;
}
}
}
i = - 1 ;
while ( ++ i < wc ) {
++ tabind ;
ishidden = this . api . asc _isWorksheetHidden ( i ) ;
if ( ishidden ) {
-- tabind ;
}
if ( ! ishidden ) {
this . setTabLineColor ( this . statusbar . tabbar . getAt ( tabind ) , this . api . asc _getWorksheetTabColor ( i ) ) ;
}
}
} ,
loadTabColor : function ( sheetindex ) {
if ( this . api ) {
if ( ! this . api . asc _isWorksheetHidden ( sheetindex ) ) {
var tab = _ . findWhere ( this . statusbar . tabbar . tabs , { sheetindex : sheetindex } ) ;
if ( tab ) {
this . setTabLineColor ( tab , this . api . asc _getWorksheetTabColor ( sheetindex ) ) ;
}
}
}
} ,
setTabLineColor : function ( tab , color ) {
if ( tab ) {
if ( null !== color ) {
color = '#' + Common . Utils . ThemeColor . getHexColor ( color . get _r ( ) , color . get _g ( ) , color . get _b ( ) ) ;
} else {
color = '' ;
}
if ( color . length ) {
2021-06-26 13:16:33 +00:00
this . statusbar . sheetListMenu . items [ tab . sheetindex ] . $el . find ( '.color' ) . css ( 'background-color' , color ) ;
2016-03-11 00:48:53 +00:00
if ( ! tab . isActive ( ) ) {
2019-11-15 10:08:57 +00:00
color = '0px 4px 0 ' + Common . Utils . RGBColor ( color ) . toRGBA ( 1 ) + ' inset' ;
2016-03-11 00:48:53 +00:00
} else {
2019-11-15 10:08:57 +00:00
color = '0px 4px 0 ' + color + ' inset' ;
2016-03-11 00:48:53 +00:00
}
2020-02-13 09:09:05 +00:00
tab . $el . find ( 'span' ) . css ( 'box-shadow' , color ) ;
2016-03-11 00:48:53 +00:00
} else {
2020-02-13 09:09:05 +00:00
tab . $el . find ( 'span' ) . css ( 'box-shadow' , '' ) ;
2021-06-26 13:16:33 +00:00
this . statusbar . sheetListMenu . items [ tab . sheetindex ] . $el . find ( '.color' ) . css ( 'background-color' , '' ) ;
2016-03-11 00:48:53 +00:00
}
}
} ,
onZoomShow : function ( e ) {
if ( e . target . classList . contains ( 'disabled' ) ) {
return false ;
}
} ,
onError : function ( id , level , errData ) {
2016-04-05 11:52:34 +00:00
if ( id == Asc . c _oAscError . ID . LockedWorksheetRename )
2016-03-11 00:48:53 +00:00
this . statusbar . update ( ) ;
} ,
2017-08-09 13:50:46 +00:00
onApiActiveSheetChanged : function ( index ) {
2019-04-17 13:28:52 +00:00
this . statusbar . tabMenu . hide ( ) ;
2021-06-26 13:16:33 +00:00
this . statusbar . sheetListMenu . hide ( ) ;
if ( this . statusbar . sheetListMenu . items [ index ] ) {
this . statusbar . sheetListMenu . clearAll ( ) ;
this . statusbar . sheetListMenu . items [ index ] . setChecked ( true ) ;
}
2020-09-29 11:22:39 +00:00
if ( this . _sheetViewTip && this . _sheetViewTip . isVisible ( ) && this . api . asc _getActiveNamedSheetView && ! this . api . asc _getActiveNamedSheetView ( index ) ) { // hide tip when sheet in the default mode
2020-07-17 15:38:38 +00:00
this . _sheetViewTip . hide ( ) ;
}
2017-08-09 13:50:46 +00:00
} ,
2020-07-16 15:04:34 +00:00
onRefreshNamedSheetViewList : function ( ) {
var views = this . api . asc _getNamedSheetViews ( ) ,
active = false ,
2020-07-17 15:38:38 +00:00
name = "" ,
me = this ;
2020-07-16 15:04:34 +00:00
for ( var i = 0 ; i < views . length ; i ++ ) {
if ( views [ i ] . asc _getIsActive ( ) ) {
active = true ;
name = views [ i ] . asc _getName ( ) ;
break ;
}
}
var tab = this . statusbar . tabbar . getAt ( this . statusbar . tabbar . getActive ( ) ) ;
if ( tab ) {
tab . changeIconState ( active , name ) ;
}
2020-07-17 08:16:43 +00:00
if ( active && ! Common . localStorage . getBool ( "sse-hide-sheet-view-tip" ) && ! Common . Utils . InternalSettings . get ( "sse-hide-sheet-view-tip" ) ) {
2020-07-17 15:38:38 +00:00
if ( ! this . _sheetViewTip ) {
this . _sheetViewTip = new Common . UI . SynchronizeTip ( {
target : $ ( '#editor_sdk' ) ,
extCls : 'no-arrow' ,
2020-11-11 08:43:26 +00:00
text : this . textSheetViewTipFilters ,
2020-07-17 15:38:38 +00:00
placement : 'target'
} ) ;
this . _sheetViewTip . on ( {
'dontshowclick' : function ( ) {
Common . localStorage . setBool ( "sse-hide-sheet-view-tip" , true ) ;
Common . Utils . InternalSettings . set ( "sse-hide-sheet-view-tip" , true ) ;
this . close ( ) ;
me . _sheetViewTip = undefined ;
} ,
'closeclick' : function ( ) {
Common . Utils . InternalSettings . set ( "sse-hide-sheet-view-tip" , true ) ;
this . close ( ) ;
me . _sheetViewTip = undefined ;
}
} ) ;
}
if ( ! this . _sheetViewTip . isVisible ( ) )
this . _sheetViewTip . show ( ) ;
} else if ( ! active && this . _sheetViewTip && this . _sheetViewTip . isVisible ( ) )
this . _sheetViewTip . hide ( ) ;
2020-07-16 15:04:34 +00:00
} ,
2022-03-11 10:58:15 +00:00
onChangeViewMode : function ( item , compact , suppressEvent ) {
2021-07-20 09:30:09 +00:00
this . statusbar . fireEvent ( 'view:compact' , [ this . statusbar , compact ] ) ;
2022-03-11 10:58:15 +00:00
! suppressEvent && Common . localStorage . setBool ( 'sse-compact-statusbar' , compact ) ;
2021-07-20 09:30:09 +00:00
Common . NotificationCenter . trigger ( 'layout:changed' , 'status' ) ;
2021-07-26 13:57:01 +00:00
this . statusbar . onChangeCompact ( compact ) ;
2021-07-20 09:30:09 +00:00
Common . NotificationCenter . trigger ( 'edit:complete' , this . statusbar ) ;
} ,
2021-12-13 21:07:24 +00:00
setStatusCaption : function ( text , force , delay , callback ) {
2021-07-28 16:49:34 +00:00
if ( this . timerCaption && ( ( ( new Date ( ) ) < this . timerCaption ) || text . length == 0 ) && ! force )
return ;
this . timerCaption = undefined ;
if ( text . length ) {
2021-12-13 21:07:24 +00:00
this . statusbar . showStatusMessage ( text , callback ) ;
2021-07-28 16:49:34 +00:00
if ( delay > 0 )
this . timerCaption = ( new Date ( ) ) . getTime ( ) + delay ;
} else
this . statusbar . clearStatusMessage ( ) ;
} ,
2021-08-04 21:37:48 +00:00
protectWorksheet : function ( ) {
Common . NotificationCenter . trigger ( 'protect:sheet' , ! this . api . asc _isProtectedSheet ( ) ) ;
} ,
2021-11-24 19:06:49 +00:00
getIsDragDrop : function ( ) {
var isDragDrop = this . statusbar . tabbar . isDragDrop ;
this . statusbar . tabbar . isDragDrop = false ;
return isDragDrop ;
} ,
2021-12-13 16:20:55 +00:00
showDisconnectTip : function ( ) {
var me = this ;
if ( ! this . disconnectTip ) {
2021-12-13 21:07:24 +00:00
var target = this . statusbar . getStatusLabel ( ) ;
target = target . is ( ':visible' ) ? target . parent ( ) : this . statusbar . isVisible ( ) ? this . statusbar . $el : $ ( document . body ) ;
2021-12-13 16:20:55 +00:00
this . disconnectTip = new Common . UI . SynchronizeTip ( {
2021-12-13 21:07:24 +00:00
target : target ,
2021-12-13 16:20:55 +00:00
text : this . textDisconnect ,
placement : 'top' ,
position : this . statusbar . isVisible ( ) ? undefined : { bottom : 0 } ,
2021-12-20 15:47:05 +00:00
showLink : false ,
style : 'max-width: 310px;'
2021-12-13 16:20:55 +00:00
} ) ;
this . disconnectTip . on ( {
'closeclick' : function ( ) {
me . disconnectTip . hide ( ) ;
me . disconnectTip = null ;
}
} ) ;
}
this . disconnectTip . show ( ) ;
} ,
hideDisconnectTip : function ( ) {
this . disconnectTip && this . disconnectTip . hide ( ) ;
this . disconnectTip = null ;
} ,
2016-03-11 00:48:53 +00:00
zoomText : 'Zoom {0}%' ,
errorLastSheet : 'Workbook must have at least one visible worksheet.' ,
errorRemoveSheet : 'Can\'t delete the worksheet.' ,
warnDeleteSheet : 'The worksheet maybe has data. Proceed operation?' ,
2020-07-17 08:16:43 +00:00
strSheet : 'Sheet' ,
2020-11-11 08:43:26 +00:00
textSheetViewTip : 'You are in Sheet View mode. Filters and sorting are visible only to you and those who are still in this view.' ,
2021-12-13 16:20:55 +00:00
textSheetViewTipFilters : 'You are in Sheet View mode. Filters are visible only to you and those who are still in this view.' ,
2021-12-20 15:47:05 +00:00
textDisconnect : '<b>Connection is lost</b><br>Trying to connect. Please check connection settings.'
2016-03-11 00:48:53 +00:00
} , SSE . Controllers . Statusbar || { } ) ) ;
} ) ;