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
/ * *
* CellRangeDialog . js
*
* Created by Julia Radzhabova on 6 / 3 / 14
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
*
* /
if ( Common === undefined )
var Common = { } ;
define ( [
'common/main/lib/component/InputField' ,
'common/main/lib/component/Window'
] , function ( ) { 'use strict' ;
SSE . Views . CellRangeDialog = Common . UI . Window . extend ( _ . extend ( {
options : {
width : 350 ,
cls : 'modal-dlg' ,
2019-09-11 08:38:08 +00:00
modal : false ,
2019-11-05 10:34:44 +00:00
buttons : [ 'ok' , 'cancel' ]
2016-03-11 00:48:53 +00:00
} ,
initialize : function ( options ) {
_ . extend ( this . options , {
title : this . txtTitle
} , options ) ;
this . template = [
'<div class="box">' ,
'<div id="id-dlg-cell-range" class="input-row" style="margin-bottom: 5px;"></div>' ,
'</div>'
] . join ( '' ) ;
2017-04-21 08:10:07 +00:00
this . options . tpl = _ . template ( this . template ) ( this . options ) ;
2016-03-11 00:48:53 +00:00
Common . UI . Window . prototype . initialize . call ( this , this . options ) ;
} ,
render : function ( ) {
Common . UI . Window . prototype . render . call ( this ) ;
var $window = this . getChild ( ) ,
me = this ;
me . inputRange = new Common . UI . InputField ( {
el : $ ( '#id-dlg-cell-range' ) ,
name : 'range' ,
style : 'width: 100%;' ,
2020-05-18 17:17:25 +00:00
allowBlank : this . options . allowBlank || false ,
2016-03-11 00:48:53 +00:00
blankError : this . txtEmpty ,
validateOnChange : true
} ) ;
$window . find ( '.dlg-btn' ) . on ( 'click' , _ . bind ( this . onBtnClick , this ) ) ;
this . on ( 'close' , _ . bind ( this . onClose , this ) ) ;
// _.defer(function(){
// $window.find('input[name="range"]').focus();
// }, 10);
} ,
onPrimary : function ( ) {
this . _handleInput ( 'ok' ) ;
return false ;
} ,
setSettings : function ( settings ) {
var me = this ;
2020-05-18 11:00:10 +00:00
this . settings = settings ;
2016-03-11 00:48:53 +00:00
this . inputRange . setValue ( settings . range ? settings . range : '' ) ;
2016-12-27 13:39:16 +00:00
if ( settings . type === undefined )
settings . type = Asc . c _oAscSelectionDialogType . Chart ;
2016-03-11 00:48:53 +00:00
if ( settings . api ) {
me . api = settings . api ;
2020-09-08 12:48:05 +00:00
me . wrapEvents = {
onApiRangeChanged : _ . bind ( me . onApiRangeChanged , me )
} ;
2016-03-11 00:48:53 +00:00
2016-12-13 12:54:58 +00:00
me . api . asc _setSelectionDialogMode ( settings . type , settings . range ? settings . range : '' ) ;
2020-09-08 12:48:05 +00:00
me . api . asc _registerCallback ( 'asc_onSelectionRangeChanged' , me . wrapEvents . onApiRangeChanged ) ;
2016-12-13 12:54:58 +00:00
Common . NotificationCenter . trigger ( 'cells:range' , settings . type ) ;
2016-03-11 00:48:53 +00:00
}
me . inputRange . validation = function ( value ) {
2016-09-29 10:36:11 +00:00
if ( settings . validation ) {
return settings . validation . call ( me , value ) ;
2016-09-29 09:38:39 +00:00
} else {
2020-05-18 11:00:10 +00:00
if ( settings . type === Asc . c _oAscSelectionDialogType . Function ) {
settings . argvalues [ settings . argindex ] = value ;
me . api . asc _insertArgumentsInFormula ( settings . argvalues ) ;
}
2020-05-15 14:27:20 +00:00
var isvalid = ( settings . type === Asc . c _oAscSelectionDialogType . Function ) || me . api . asc _checkDataRange ( settings . type , value , false ) ;
2016-09-29 09:38:39 +00:00
return ( isvalid == Asc . c _oAscError . ID . DataRangeError ) ? me . txtInvalidRange : true ;
}
2016-03-11 00:48:53 +00:00
} ;
2020-05-15 14:27:20 +00:00
2020-05-18 11:00:10 +00:00
if ( settings . type == Asc . c _oAscSelectionDialogType . Function ) {
2020-05-15 14:27:20 +00:00
_ . delay ( function ( ) {
me . inputRange . _input . focus ( ) ;
if ( settings . selection ) {
me . inputRange . _input [ 0 ] . selectionStart = settings . selection . start ;
me . inputRange . _input [ 0 ] . selectionEnd = settings . selection . end ;
}
} , 10 ) ;
me . inputRange . _input . on ( 'focus' , function ( ) {
me . _addedTextLength = 0 ;
2020-05-18 09:00:19 +00:00
me . api . asc _cleanSelectRange ( ) ;
2020-05-15 14:27:20 +00:00
} ) ;
}
2016-03-11 00:48:53 +00:00
} ,
getSettings : function ( ) {
return this . inputRange . getValue ( ) ;
} ,
2020-05-15 16:09:36 +00:00
onApiRangeChanged : function ( name ) {
2020-05-18 11:00:10 +00:00
if ( this . settings . type == Asc . c _oAscSelectionDialogType . Function ) {
2020-05-15 14:27:20 +00:00
var oldlen = this . _addedTextLength || 0 ,
val = this . inputRange . getValue ( ) ,
input = this . inputRange . _input [ 0 ] ,
start = input . selectionStart - oldlen ,
end = input . selectionEnd ,
add = ( start > 0 && oldlen == 0 ) && ! this . api . asc _canEnterWizardRange ( val . charAt ( start - 1 ) ) ? '+' : '' ;
this . _addedTextLength = name . length ;
val = val . substring ( 0 , start ) + add + name + val . substring ( end , val . length ) ;
this . inputRange . setValue ( val ) ;
input . selectionStart = input . selectionEnd = start + add . length + this . _addedTextLength ;
2020-05-18 11:00:10 +00:00
this . settings . argvalues [ this . settings . argindex ] = val ;
this . api . asc _insertArgumentsInFormula ( this . settings . argvalues ) ;
2021-03-10 16:53:38 +00:00
} else if ( this . settings . type == Asc . c _oAscSelectionDialogType . DataValidation || this . settings . type == Asc . c _oAscSelectionDialogType . ConditionalFormattingRule ) {
2020-12-10 15:17:38 +00:00
this . inputRange . setValue ( '=' + name ) ;
2020-05-15 14:27:20 +00:00
} else
this . inputRange . setValue ( name ) ;
2016-03-11 00:48:53 +00:00
if ( this . inputRange . cmpEl . hasClass ( 'error' ) )
this . inputRange . cmpEl . removeClass ( 'error' ) ;
} ,
onBtnClick : function ( event ) {
this . _handleInput ( event . currentTarget . attributes [ 'result' ] . value ) ;
} ,
onClose : function ( event ) {
2020-09-08 12:48:05 +00:00
if ( this . api ) {
2016-04-05 11:52:34 +00:00
this . api . asc _setSelectionDialogMode ( Asc . c _oAscSelectionDialogType . None ) ;
2020-09-08 12:48:05 +00:00
this . api . asc _unregisterCallback ( 'asc_onSelectionRangeChanged' , this . wrapEvents . onApiRangeChanged ) ;
}
2016-04-05 11:52:34 +00:00
Common . NotificationCenter . trigger ( 'cells:range' , Asc . c _oAscSelectionDialogType . None ) ;
2016-04-21 10:15:15 +00:00
SSE . getController ( 'RightMenu' ) . SetDisabled ( false ) ;
2016-03-11 00:48:53 +00:00
} ,
_handleInput : function ( state ) {
if ( this . options . handler ) {
if ( state == 'ok' ) {
if ( this . inputRange . checkValidate ( ) !== true )
return ;
}
2019-11-27 11:40:32 +00:00
if ( this . options . handler . call ( this , this , state ) )
return ;
2016-03-11 00:48:53 +00:00
}
this . close ( ) ;
} ,
2016-04-21 10:15:15 +00:00
show : function ( ) {
Common . UI . Window . prototype . show . call ( this ) ;
SSE . getController ( 'RightMenu' ) . SetDisabled ( true ) ;
} ,
2016-03-11 00:48:53 +00:00
txtTitle : 'Select Data Range' ,
txtEmpty : 'This field is required' ,
txtInvalidRange : 'ERROR! Invalid cells range' ,
2016-09-29 09:38:39 +00:00
errorMaxRows : 'ERROR! The maximum number of data series per chart is 255.' ,
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.'
2016-03-11 00:48:53 +00:00
} , SSE . Views . CellRangeDialog || { } ) )
} ) ;