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
if ( Common === undefined )
var Common = { } ;
define ( [
'common/main/lib/component/BaseView'
] , function ( ) {
'use strict' ;
Common . UI . SynchronizeTip = Common . UI . BaseView . extend ( _ . extend ( ( function ( ) {
return {
options : {
target : $ ( document . body ) ,
text : '' ,
2021-02-17 17:25:30 +00:00
placement : 'right-bottom' ,
2021-08-19 20:09:18 +00:00
showLink : true ,
2021-10-29 15:33:03 +00:00
showButton : false ,
closable : true
2016-03-11 00:48:53 +00:00
} ,
template : _ . template ( [
2021-12-20 15:47:05 +00:00
'<div class="synch-tip-root <% if (!!scope.options.extCls) {print(scope.options.extCls + \" \");} %><%= scope.placement %>" style="<%= scope.style %>">' ,
2016-03-11 00:48:53 +00:00
'<div class="asc-synchronizetip">' ,
'<div class="tip-arrow <%= scope.placement %>"></div>' ,
'<div>' ,
2020-04-23 16:55:45 +00:00
'<div class="tip-text"><%= scope.text %></div>' ,
2021-10-29 15:33:03 +00:00
'<% if ( scope.closable ) { %>' ,
2021-02-17 17:25:30 +00:00
'<div class="close"></div>' ,
2021-10-29 15:33:03 +00:00
'<% } %>' ,
2016-03-11 00:48:53 +00:00
'</div>' ,
2017-11-08 14:35:23 +00:00
'<% if ( scope.showLink ) { %>' ,
'<div class="show-link"><label><%= scope.textLink %></label></div>' ,
'<% } %>' ,
2021-08-19 20:09:18 +00:00
'<% if ( scope.showButton ) { %>' ,
'<div class="btn-div"><%= scope.textButton %></div>' ,
'<% } %>' ,
2016-03-11 00:48:53 +00:00
'</div>' ,
'</div>'
] . join ( '' ) ) ,
initialize : function ( options ) {
this . textSynchronize += Common . Utils . String . platformKey ( 'Ctrl+S' ) ;
Common . UI . BaseView . prototype . initialize . call ( this , options ) ;
this . target = this . options . target ;
this . text = ! _ . isEmpty ( this . options . text ) ? this . options . text : this . textSynchronize ;
2017-11-08 14:35:23 +00:00
this . textLink = ! _ . isEmpty ( this . options . textLink ) ? this . options . textLink : this . textDontShow ;
2021-12-13 16:20:55 +00:00
this . placement = this . options . placement ; // if placement='target' and position is undefined show in top,left position of target, also use for arrow position
2017-11-08 14:35:23 +00:00
this . showLink = this . options . showLink ;
2021-08-19 20:09:18 +00:00
this . showButton = this . options . showButton ;
2021-11-08 22:16:45 +00:00
this . closable = this . options . closable ;
2021-08-19 20:09:18 +00:00
this . textButton = this . options . textButton || '' ;
2021-12-13 16:20:55 +00:00
this . position = this . options . position ; // show in the position relative to target
2021-12-20 15:47:05 +00:00
this . style = this . options . style || '' ;
2016-03-11 00:48:53 +00:00
} ,
render : function ( ) {
2017-11-08 11:19:44 +00:00
if ( ! this . cmpEl ) {
this . cmpEl = $ ( this . template ( { scope : this } ) ) ;
$ ( document . body ) . append ( this . cmpEl ) ;
this . cmpEl . find ( '.close' ) . on ( 'click' , _ . bind ( function ( ) { this . trigger ( 'closeclick' ) ; } , this ) ) ;
this . cmpEl . find ( '.show-link label' ) . on ( 'click' , _ . bind ( function ( ) { this . trigger ( 'dontshowclick' ) ; } , this ) ) ;
2021-08-19 20:09:18 +00:00
this . cmpEl . find ( '.btn-div' ) . on ( 'click' , _ . bind ( function ( ) { this . trigger ( 'buttonclick' ) ; } , this ) ) ;
2021-12-13 16:20:55 +00:00
this . closable && this . cmpEl . addClass ( 'closable' ) ;
2017-11-08 11:19:44 +00:00
}
2016-03-11 00:48:53 +00:00
this . applyPlacement ( ) ;
return this ;
} ,
show : function ( ) {
2017-11-08 11:19:44 +00:00
if ( this . cmpEl ) {
2016-03-11 00:48:53 +00:00
this . applyPlacement ( ) ;
2017-11-08 11:19:44 +00:00
this . cmpEl . show ( )
2016-03-11 00:48:53 +00:00
} else
this . render ( ) ;
} ,
hide : function ( ) {
2017-11-08 11:19:44 +00:00
if ( this . cmpEl ) this . cmpEl . hide ( ) ;
2021-02-17 18:11:04 +00:00
this . trigger ( 'hide' ) ;
2016-03-11 00:48:53 +00:00
} ,
2017-11-10 12:41:56 +00:00
close : function ( ) {
if ( this . cmpEl ) this . cmpEl . remove ( ) ;
} ,
2016-03-11 00:48:53 +00:00
applyPlacement : function ( ) {
2021-12-13 16:20:55 +00:00
var target = this . target && this . target . length > 0 ? this . target : $ ( document . body ) ;
var showxy = target . offset ( ) ;
if ( this . placement == 'target' && ! this . position ) {
2021-02-17 17:25:30 +00:00
this . cmpEl . css ( { top : showxy . top + 5 + 'px' , left : showxy . left + 5 + 'px' } ) ;
return ;
}
2021-02-17 18:11:04 +00:00
2021-12-13 16:20:55 +00:00
if ( this . position && typeof this . position == 'object' ) {
var top = this . position . top , left = this . position . left , bottom = this . position . bottom , right = this . position . right ;
if ( bottom !== undefined || top !== undefined )
left = showxy . left + ( target . width ( ) - this . cmpEl . width ( ) ) / 2 ;
else
top = showxy . top + ( target . height ( ) - this . cmpEl . height ( ) ) / 2 ;
top = ( top !== undefined ) ? ( top + 'px' ) : 'auto' ;
bottom = ( bottom !== undefined ) ? ( bottom + 'px' ) : 'auto' ;
right = ( right !== undefined ) ? ( right + 'px' ) : 'auto' ;
left = ( left !== undefined ) ? ( left + 'px' ) : 'auto' ;
this . cmpEl . css ( { top : top , left : left , right : right , bottom : bottom } ) ;
return ;
}
2021-02-17 17:25:30 +00:00
var placement = this . placement . split ( '-' ) ;
if ( placement . length > 0 ) {
var top , left , bottom , right ;
var pos = placement [ 0 ] ;
if ( pos == 'top' ) {
bottom = Common . Utils . innerHeight ( ) - showxy . top ;
} else if ( pos == 'bottom' ) {
2021-12-13 16:20:55 +00:00
top = showxy . top + target . height ( ) ;
2021-02-17 17:25:30 +00:00
} else if ( pos == 'left' ) {
right = Common . Utils . innerWidth ( ) - showxy . left ;
} else if ( pos == 'right' ) {
2021-12-13 16:20:55 +00:00
left = showxy . left + target . width ( ) ;
2021-02-17 17:25:30 +00:00
}
pos = placement [ 1 ] ;
if ( pos == 'top' ) {
2021-12-13 16:20:55 +00:00
bottom = Common . Utils . innerHeight ( ) - showxy . top - target . height ( ) / 2 ;
2021-02-17 17:25:30 +00:00
} else if ( pos == 'bottom' ) {
2021-12-13 16:20:55 +00:00
top = showxy . top + target . height ( ) / 2 ;
2021-05-26 16:29:41 +00:00
var height = this . cmpEl . height ( ) ;
if ( top + height > Common . Utils . innerHeight ( ) )
top = Common . Utils . innerHeight ( ) - height - 10 ;
2021-02-17 17:25:30 +00:00
} else if ( pos == 'left' ) {
2021-12-13 16:20:55 +00:00
right = Common . Utils . innerWidth ( ) - showxy . left - target . width ( ) / 2 ;
2021-02-17 17:25:30 +00:00
} else if ( pos == 'right' ) {
2021-12-13 16:20:55 +00:00
left = showxy . left + target . width ( ) / 2 ;
2021-02-17 17:25:30 +00:00
} else {
if ( bottom !== undefined || top !== undefined )
2021-12-13 16:20:55 +00:00
left = showxy . left + ( target . width ( ) - this . cmpEl . width ( ) ) / 2 ;
2021-02-17 17:25:30 +00:00
else
2021-12-13 16:20:55 +00:00
top = showxy . top + ( target . height ( ) - this . cmpEl . height ( ) ) / 2 ;
2021-02-17 17:25:30 +00:00
}
top = ( top !== undefined ) ? ( top + 'px' ) : 'auto' ;
bottom = ( bottom !== undefined ) ? ( bottom + 'px' ) : 'auto' ;
right = ( right !== undefined ) ? ( right + 'px' ) : 'auto' ;
2021-11-23 20:30:41 +00:00
if ( left !== undefined ) {
var width = this . cmpEl . width ( ) ;
if ( left + width > Common . Utils . innerWidth ( ) )
left = Common . Utils . innerWidth ( ) - width - 10 ;
left = ( left + 'px' ) ;
} else
left = 'auto' ;
2021-02-17 17:25:30 +00:00
this . cmpEl . css ( { top : top , left : left , right : right , bottom : bottom } ) ;
2018-04-03 14:39:49 +00:00
}
2016-03-11 00:48:53 +00:00
} ,
2017-04-25 08:54:45 +00:00
isVisible : function ( ) {
2017-11-08 11:19:44 +00:00
return this . cmpEl && this . cmpEl . is ( ':visible' ) ;
2017-04-25 08:54:45 +00:00
} ,
2016-03-11 00:48:53 +00:00
textDontShow : 'Don\'t show this message again' ,
2020-06-05 17:34:50 +00:00
textSynchronize : 'The document has been changed by another user.<br>Please click to save your changes and reload the updates.'
2016-03-11 00:48:53 +00:00
}
} ) ( ) , Common . UI . SynchronizeTip || { } ) ) ;
} ) ;