@ -780,94 +780,95 @@ nQuotient){sGroup+=arrChinese[nQuotient]+arrChinese[1E3];isPrevZero=false}else i
true ; if ( nTTRemainder <= 0 ) { sResult = sGroup + sResult ; if ( nRemValue <= 0 ) break ; continue } var nQuotient = nTTRemainder / 1E3 | 0 ; var nRemainder = nTTRemainder - nQuotient * 1E3 ; if ( 0 !== nQuotient ) { sGroup += arrChinese [ nQuotient ] + arrChinese [ 1E3 ] ; isPrevZero = false } else if ( nTTQuotient > 0 ) { sGroup += arrChinese [ 0 ] ; isPrevZero = true } if ( nRemainder <= 0 ) { sResult = sGroup + sResult ; if ( nRemValue <= 0 ) break ; continue } nQuotient = nRemainder / 100 | 0 ; nRemainder = nRemainder - nQuotient * 100 ; if ( 0 !== nQuotient ) { sGroup += arrChinese [ nQuotient ] + arrChinese [ 100 ] ; isPrevZero =
false } else if ( ! isPrevZero ) { sGroup += arrChinese [ 0 ] ; isPrevZero = true } if ( nRemainder <= 0 ) { sResult = sGroup + sResult ; if ( nRemValue <= 0 ) break ; continue } nQuotient = nRemainder / 10 | 0 ; nRemainder = nRemainder - nQuotient * 10 ; if ( 0 !== nQuotient ) { sGroup += arrChinese [ nQuotient ] + arrChinese [ 10 ] ; isPrevZero = false } else if ( ! isPrevZero ) { sGroup += arrChinese [ 0 ] ; isPrevZero = true } if ( 0 !== nRemainder ) sGroup += arrChinese [ nRemainder ] ; sResult = sGroup + sResult ; if ( nRemValue <= 0 ) break } break } } return sResult } var c _oAscSpaces = [ ] ; c _oAscSpaces [ 10 ] = 1 ; c _oAscSpaces [ 32 ] =
1 ; c _oAscSpaces [ 8194 ] = 1 ; c _oAscSpaces [ 8195 ] = 1 ; c _oAscSpaces [ 8197 ] = 1 ; c _oAscSpaces [ 12288 ] = 1 ; function IsSpace ( nUnicode ) { return ! ! c _oAscSpaces [ nUnicode ] } function private _IsAbbreviation ( sWord ) { if ( sWord . toUpperCase ( ) === sWord ) { for ( var nPos = 0 , nLen = sWord . length ; nPos < nLen ; ++ nPos ) { var nCharCode = sWord . charCodeAt ( nPos ) ; if ( 44032 <= nCharCode && nCharCode <= 55203 || 4352 <= nCharCode && nCharCode <= 4607 || 12592 <= nCharCode && nCharCode <= 12687 || 43360 <= nCharCode && nCharCode <= 43391 || 55216 <= nCharCode && nCharCode <= 55295 || 19968 <= nCharCode &&
nCharCode <= 40959 || 13312 <= nCharCode && nCharCode <= 19903 || 131072 <= nCharCode && nCharCode <= 173791 || 173824 <= nCharCode && nCharCode <= 177983 || 177984 <= nCharCode && nCharCode <= 178207 || 178208 <= nCharCode && nCharCode <= 183983 || 63744 <= nCharCode && nCharCode <= 64255 || 194560 <= nCharCode && nCharCode <= 195103 ) return false } return true } return false } var g _oUserColorById = { } , g _oUserNextColorIndex = 0 ; function getUserColorById ( userId , userName , isDark , isNumericValue ) { if ( ( ! userId || "" === userId ) && ( ! userName || "" === userName ) ) return new CColor ( 0 ,
0 , 0 , 255 ) ; var res ; if ( g _oUserColorById . hasOwnProperty ( userId ) ) res = g _oUserColorById [ userId ] ; else if ( g _oUserColorById . hasOwnProperty ( userName ) ) res = g _oUserColorById [ userName ] ; else { var nColor = Asc . c _oAscArrUserColors [ g _oUserNextColorIndex % Asc . c _oAscArrUserColors . length ] ; ++ g _oUserNextColorIndex ; res = g _oUserColorById [ userId || userName ] = new CUserCacheColor ( nColor ) } if ( ! res ) return new CColor ( 0 , 0 , 0 , 255 ) ; var oColor = true === isDark ? res . Dark : res . Light ; return true === isNumericValue ? oColor . r << 16 & 16711680 | oColor . g << 8 & 65280 |
oColor . b & 255 : oColor } function isNullOrEmptyString ( str ) { return str == undefined || str == null || str == "" } function unleakString ( s ) { return ( " " + s ) . substr ( 1 ) } function readValAttr ( attr ) { if ( attr ( ) ) { var val = attr ( ) [ "val" ] ; return val ? val : null } return null } function getNumFromXml ( val ) { return val ? val - 0 : null } function getColorFromXml ( attr ) { if ( attr ( ) ) { var vals = attr ( ) ; if ( null != vals [ "theme" ] ) return AscCommonExcel . g _oColorManager . getThemeColor ( getNumFromXml ( vals [ "theme" ] ) , getNumFromXml ( vals [ "tint" ] ) ) ; else if ( null != vals [ "rgb" ] ) return new AscCommonExcel . RgbColor ( 16777215 &
getNumFromXml ( vals [ "rgb" ] ) ) } return null } function getBoolFromXml ( val ) { return "0" !== val && "false" !== val && "off" !== val } function CUserCacheColor ( nColor ) { this . Light = null ; this . Dark = null ; this . init ( nColor ) } CUserCacheColor . prototype . init = function ( nColor ) { var r = nColor >> 16 & 255 ; var g = nColor >> 8 & 255 ; var b = nColor & 255 ; var Y = Math . max ( 0 , Math . min ( 255 , . 299 * r + . 587 * g + . 114 * b ) ) ; var Cb = Math . max ( 0 , Math . min ( 255 , 128 - . 168736 * r - . 331264 * g + . 5 * b ) ) ; var Cr = Math . max ( 0 , Math . min ( 255 , 128 + . 5 * r - . 418688 * g - . 081312 * b ) ) ; if ( Y > 63 ) Y = 63 ; var R = Math . max ( 0 ,
Math . min ( 255 , Y + 1.402 * ( Cr - 128 ) ) ) | 0 ; var G = Math . max ( 0 , Math . min ( 255 , Y - . 34414 * ( Cb - 128 ) - . 71414 * ( Cr - 128 ) ) ) | 0 ; var B = Math . max ( 0 , Math . min ( 255 , Y + 1.772 * ( Cb - 128 ) ) ) | 0 ; this . Light = new CColor ( r , g , b , 255 ) ; this . Dark = new CColor ( R , G , B , 255 ) } ; function loadScript ( url , onSuccess , onError ) { if ( window [ "NATIVE_EDITOR_ENJINE" ] === true || window [ "Native" ] !== undefined ) { onSuccess ( ) ; return } if ( window [ "AscDesktopEditor" ] && window [ "local_load_add" ] ) { var _context = { "completeLoad" : function ( ) { return onSuccess ( ) } } ; window [ "local_load_add" ] ( _context ,
"sdk-all-from-min" , url ) ; var _ret _param = window [ "AscDesktopEditor" ] [ "LoadJS" ] ( url ) ; if ( 2 != _ret _param ) window [ "local_load_remove" ] ( url ) ; if ( _ret _param == 1 ) { setTimeout ( onSuccess , 1 ) ; return } else if ( _ret _param == 2 ) return } var backoff = new AscCommon . Backoff ( AscCommon . g _oBackoffDefaults ) ; loadScriptWithBackoff ( backoff , url , onSuccess , onError ) } function loadScriptWithBackoff ( backoff , url , onSuccess , onError ) { var script = document . createElement ( "script" ) ; script . type = "text/javascript" ; script . src = url ; script . onload = onSuccess ;
script . onerror = function ( ) { backoff . attempt ( onError , function ( ) { loadScriptWithBackoff ( backoff , url , onSuccess , onError ) } ) } ; document . head . appendChild ( script ) } function loadSdk ( sdkName , onSuccess , onError ) { if ( window [ "AscNotLoadAllScript" ] ) onSuccess ( ) ; else { var urlArgs = window . parent && window . parent . APP && window . parent . APP . urlArgs || "" ; loadScript ( "./../../../../sdkjs/" + sdkName + "/sdk-all.js?" + urlArgs , onSuccess , onError ) } } function getAltGr ( e ) { var ctrlKey = e . metaKey || e . ctrlKey ; var altKey = e . altKey ; return altKey && ( AscBrowser . isMacOs ?
! ctrlKey : ctrlKey ) } function getColorSchemeByName ( sName ) { for ( var i = 0 ; i < AscCommon . g _oUserColorScheme . length ; ++ i ) { var tmp = AscCommon . g _oUserColorScheme [ i ] ; if ( tmp && tmp . name === sName ) return getColorSchemeByIdx ( i ) } return null } function getColorSchemeByIdx ( idx ) { var tmp = AscCommon . g _oUserColorScheme [ idx ] ; if ( tmp ) { var scheme = new AscFormat . ClrScheme , _c ; scheme . name = tmp . name ; _c = tmp . get _dk1 ( ) ; scheme . colors [ 8 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _lt1 ( ) ; scheme . colors [ 12 ] = AscFormat . CreateUniColorRGB ( _c . r ,
_c . g , _c . b ) ; _c = tmp . get _dk2 ( ) ; scheme . colors [ 9 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _lt2 ( ) ; scheme . colors [ 13 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent1 ( ) ; scheme . colors [ 0 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent2 ( ) ; scheme . colors [ 1 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent3 ( ) ; scheme . colors [ 2 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent4 ( ) ; scheme . colors [ 3 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent5 ( ) ;
scheme . colors [ 4 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent6 ( ) ; scheme . colors [ 5 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _hlink ( ) ; scheme . colors [ 11 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _folHlink ( ) ; scheme . colors [ 10 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; return scheme } return null } function getAscColorScheme ( _scheme , theme ) { var elem , _c ; var _rgba = { R : 0 , G : 0 , B : 0 , A : 255 } ; elem = new AscCommon . CAscColorScheme ; elem . scheme = _scheme ; elem . name = _scheme . name ; _scheme . colors [ 8 ] . Calculate ( theme ,
null , null , null , _rgba ) ; _c = _scheme . colors [ 8 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 12 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 12 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 9 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 9 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 13 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 13 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ;
_scheme . colors [ 0 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 0 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 1 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 1 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 2 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 2 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 3 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 3 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R ,
_c . G , _c . B ) ) ; _scheme . colors [ 4 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 4 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 5 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 5 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 11 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 11 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 10 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 10 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R ,
_c . G , _c . B ) ) ; return elem } function getIndexColorSchemeInArray ( result , asc _color _scheme ) { for ( var j = 0 ; j < result . length ; ++ j ) if ( result [ j ] . isEqual ( asc _color _scheme ) ) return j ; return - 1 } function checkAddColorScheme ( result , asc _color _scheme , nStartIndex ) { var nIndex = getIndexColorSchemeInArray ( result , asc _color _scheme ) ; if ( nIndex > - 1 ) return nIndex ; var nStartIndex _ = nStartIndex ; if ( nStartIndex === null ) nStartIndex _ = result . length ; result . splice ( nStartIndex _ , 0 , asc _color _scheme ) ; return nStartIndex _ } function isEastAsianScript ( value ) { return 12544 <=
value && value <= 12591 || 12704 <= value && value <= 12735 || 19968 <= value && value <= 40938 || 13312 <= value && value <= 19893 || 131072 <= value && value <= 173782 || 173824 <= value && value <= 177972 || 177984 <= value && value <= 178205 || 178208 <= value && value <= 183969 || 183984 <= value && value <= 191456 || 63744 <= value && value <= 64255 || 194560 <= value && value <= 195103 || 12032 <= value && value <= 12255 || 11904 <= value && value <= 12031 || 12736 <= value && value <= 12783 || 12272 <= value && value <= 12287 || 4352 <= value && value <= 4607 || 43360 <= value && value <= 43391 || 55216 <= value && value <= 55295 ||
12592 <= value && value <= 12687 || 65280 <= value && value <= 65519 || 44032 <= value && value <= 55215 || 12352 <= value && value <= 12447 || 110848 <= value && value <= 110895 || 110592 <= value && value <= 110847 || 12688 <= value && value <= 12703 || 12448 <= value && value <= 12543 || 12784 <= value && value <= 12799 || 42192 <= value && value <= 42239 || 93952 <= value && value <= 94111 || 110960 <= value && value <= 111359 || 94208 <= value && value <= 100332 || 100352 <= value && value <= 101119 || 40960 <= value && value <= 42127 || 42128 <= value && value <= 42191 } var g _oIdCounter = new CIdCounter ; window . Asc . g _signature _drawer =
null ; function CSignatureDrawer ( id , api , w , h ) { window . Asc . g _signature _drawer = this ; this . Api = api ; this . CanvasParent = document . getElementById ( id ) ; this . Canvas = document . createElement ( "canvas" ) ; this . Canvas . style . position = "absolute" ; this . Canvas . style . left = "0px" ; this . Canvas . style . top = "0px" ; var _width = parseInt ( this . CanvasParent . offsetWidth ) ; var _height = parseInt ( this . CanvasParent . offsetHeight ) ; if ( 0 == _width ) _width = 300 ; if ( 0 == _height ) _height = 80 ; this . Canvas . width = _width ; this . Canvas . height = _height ; this . CanvasParent . appendChild ( this . Canvas ) ;
this . Image = "" ; this . ImageHtml = null ; this . Text = "" ; this . Font = "Arial" ; this . Size = 10 ; this . Italic = true ; this . Bold = false ; this . Width = w ; this . Height = h ; this . CanvasReturn = null ; this . IsAsync = false } CSignatureDrawer . prototype . getCanvas = function ( ) { return this . CanvasReturn == null ? this . Canvas : this . CanvasReturn } ; CSignatureDrawer . prototype . getImages = function ( ) { if ( ! this . isValid ( ) ) return [ "" , "" ] ; this . CanvasReturn = document . createElement ( "canvas" ) ; this . CanvasReturn . width = this . Width * AscCommon . g _dKoef _mm _to _pix ; this . CanvasReturn . height =
this . Height * AscCommon . g _dKoef _mm _to _pix ; if ( this . Text != "" ) this . drawText ( ) ; else this . drawImage ( ) ; var _ret = [ ] ; _ret . push ( this . CanvasReturn . toDataURL ( "image/png" ) ) ; var _ctx = this . CanvasReturn . getContext ( "2d" ) ; _ctx . strokeStyle = "#FF0000" ; _ctx . lineWidth = 2 ; _ctx . moveTo ( 0 , 0 ) ; _ctx . lineTo ( this . CanvasReturn . width , this . CanvasReturn . height ) ; _ctx . moveTo ( 0 , this . CanvasReturn . height ) ; _ctx . lineTo ( this . CanvasReturn . width , 0 ) ; _ctx . stroke ( ) ; _ret . push ( this . CanvasReturn . toDataURL ( "image/png" ) ) ; this . CanvasReturn = null ; return _ret } ;
CSignatureDrawer . prototype . setText = function ( text , font , size , isItalic , isBold ) { if ( this . IsAsync ) { this . Text = text ; return } this . Image = "" ; this . ImageHtml = null ; this . Text = text ; this . Font = font ; this . Size = size ; this . Italic = isItalic ; this . Bold = isBold ; this . IsAsync = true ; AscFonts . FontPickerByCharacter . checkText ( this . Text , this , function ( ) { this . IsAsync = false ; var loader = AscCommon . g _font _loader ; var fontinfo = AscFonts . g _fontApplication . GetFontInfo ( font ) ; var isasync = loader . LoadFont ( fontinfo , function ( ) { window . Asc . g _signature _drawer . Api . sync _EndAction ( Asc . c _oAscAsyncActionType . Information ,
Asc . c _oAscAsyncAction . LoadFont ) ; window . Asc . g _signature _drawer . drawText ( ) } ) ; if ( false === isasync ) this . drawText ( ) } ) } ; CSignatureDrawer . prototype . drawText = function ( ) { var _oldTurn = this . Api . isViewMode ; var _oldMarks = this . Api . ShowParaMarks ; this . Api . isViewMode = true ; this . Api . ShowParaMarks = false ; AscFormat . ExecuteNoHistory ( AscCommon . DrawTextByCenter , this , [ ] ) ; this . Api . isViewMode = _oldTurn ; this . Api . ShowParaMarks = _oldMarks } ; CSignatureDrawer . prototype . drawImage = function ( ) { var _canvas = this . getCanvas ( ) ; var w = _canvas . width ;
var h = _canvas . height ; var _ctx = _canvas . getContext ( "2d" ) ; _ctx . clearRect ( 0 , 0 , w , h ) ; var im _w = this . ImageHtml . width ; var im _h = this . ImageHtml . height ; var _x = 0 ; var _y = 0 ; var _w = 0 ; var _h = 0 ; var koef1 = w / h ; var koef2 = im _w / im _h ; if ( koef1 > koef2 ) { _h = h ; _w = koef2 * _h >> 0 ; _y = 0 ; _x = w - _w >> 1 } else { _w = w ; _h = _w / koef2 >> 0 ; _x = 0 ; _y = h - _h >> 1 } _ctx . drawImage ( this . ImageHtml , _x , _y , _w , _h ) } ; CSignatureDrawer . prototype . selectImage = CSignatureDrawer . prototype [ "selectImage" ] = function ( ) { this . Text = "" ; window [ "AscDesktopEditor" ] [ "OpenFilenameDialog" ] ( "images" ,
false , function ( _file ) { var file = _file ; if ( Array . isArray ( file ) ) file = file [ 0 ] ; if ( ! file ) return ; var _drawer = window . Asc . g _signature _drawer ; _drawer . Image = window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( file ) ; _drawer . ImageHtml = new Image ; _drawer . ImageHtml . onload = function ( ) { window . Asc . g _signature _drawer . drawImage ( ) } ; _drawer . ImageHtml . src = _drawer . Image ; _drawer = null } ) } ; CSignatureDrawer . prototype . isValid = function ( ) { return this . Image != "" || this . Text != "" } ; CSignatureDrawer . prototype . destroy = function ( ) { window . Asc . g _signature _drawer . CanvasParent . removeChild ( this . Canvas ) ;
delete window . Asc . g _signature _drawer } ; function CSignatureImage ( ) { this . ImageValidBase64 = "" ; this . ImageInvalidBase64 = "" ; this . ImageValid = null ; this . ImageInvalid = null ; this . Valid = false ; this . Loading = 0 ; this . Remove = function ( ) { this . ImageValidBase64 = "" ; this . ImageInvalidBase64 = "" ; this . ImageValid = null ; this . ImageInvalid = null ; this . Valid = false ; this . Loading = 0 } ; this . Register = function ( _api , _guid ) { if ( _api . ImageLoader . map _image _index [ _guid ] ) return ; var _obj = { Image : this . Valid ? this . ImageValid : this . ImageInvalid , Status : AscFonts . ImageLoadStatus . Complete ,
src : _guid } ; _api . ImageLoader . map _image _index [ _guid ] = _obj } ; this . Unregister = function ( _api , _guid ) { if ( _api . ImageLoader . map _image _index [ _guid ] ) delete _api . ImageLoader . map _image _index [ _guid ] } } function CShortcuts ( ) { this . List = { } ; this . CustomCounter = 0 ; this . CustomActions = { } } CShortcuts . prototype . Add = function ( nType , nCode , isCtrl , isShift , isAlt ) { this . List [ this . private _GetIndex ( nCode , isCtrl , isShift , isAlt ) ] = nType } ; CShortcuts . prototype . Get = function ( nCode , isCtrl , isShift , isAlt ) { var nType = this . List [ this . private _GetIndex ( nCode ,
isCtrl , isShift , isAlt ) ] ; return undefined !== nType ? nType : 0 } ; CShortcuts . prototype . private _GetIndex = function ( nCode , isCtrl , isShift , isAlt ) { return nCode << 8 | ( isCtrl ? 4 : 0 ) | ( isShift ? 2 : 0 ) | ( isAlt ? 1 : 0 ) } ; CShortcuts . prototype . CheckType = function ( nType ) { for ( var nIndex in this . List ) if ( this . List [ nIndex ] === nType ) return { KeyCode : nIndex >>> 8 , CtrlKey : ! ! ( nIndex & 4 ) , ShiftKey : ! ! ( nIndex & 2 ) , AltKey : ! ! ( nIndex & 1 ) } ; return null } ; CShortcuts . prototype . Remove = function ( nCode , isCtrl , isShift , isAlt ) { delete this . List [ this . private _GetIndex ( nCode ,
isCtrl , isShift , isAlt ) ] } ; CShortcuts . prototype . RemoveByType = function ( nType ) { for ( var nIndex in this . List ) if ( this . List [ nIndex ] === nType ) delete this . List [ nIndex ] } ; CShortcuts . prototype . GetNewCustomType = function ( ) { return 16711680 | this . CustomCounter ++ } ; CShortcuts . prototype . IsCustomType = function ( nType ) { return nType >= 16711680 } ; CShortcuts . prototype . GetCustomAction = function ( nType ) { return this . CustomActions [ nType ] } ; CShortcuts . prototype . AddCustomActionSymbol = function ( nCharCode , sFont ) { var nType = this . GetNewCustomType ( ) ;
this . CustomActions [ nType ] = new CCustomShortcutActionSymbol ( nCharCode , sFont ) ; return nType } ; function CCustomShortcutActionSymbol ( nCharCode , sFont ) { this . CharCode = nCharCode ; this . Font = sFont } CCustomShortcutActionSymbol . prototype . Type = AscCommon . c _oAscCustomShortcutType . Symbol ; AscCommon . EncryptionMessageType = { Encrypt : 0 , Decrypt : 1 } ; function CEncryptionData ( ) { this . _init = false ; this . arrData = [ ] ; this . arrImages = [ ] ; this . handleChangesCallback = null ; this . isChangesHandled = false ; this . cryptoMode = 0 ; this . isChartEditor = false ;
this . isExistDecryptedChanges = false ; this . cryptoPrefix = window [ "AscDesktopEditor" ] && window [ "AscDesktopEditor" ] [ "GetEncryptedHeader" ] ? window [ "AscDesktopEditor" ] [ "GetEncryptedHeader" ] ( ) : "ENCRYPTED;" ; this . cryptoPrefixLen = this . cryptoPrefix . length ; this . editorId = null ; this . nextChangesTimeoutId = - 1 ; this . isPasswordCryptoPresent = false ; this . init = function ( ) { this . _init = true } ; this . isInit = function ( ) { return this . _init } ; this . isNeedCrypt = function ( ) { if ( window . g _asc _plugins ) if ( ! window . g _asc _plugins . isRunnedEncryption ( ) ) return false ;
if ( ! window [ "AscDesktopEditor" ] ) return false ; if ( this . isChartEditor ) return false ; if ( 2 == this . cryptoMode ) return true ; if ( 0 === window [ "AscDesktopEditor" ] [ "CryptoMode" ] ) return false ; return true } ; this . isCryptoImages = function ( ) { return this . isNeedCrypt ( ) && this . isPasswordCryptoPresent } ; this . addCryproImagesFromDialog = function ( callback ) { var _this = this ; window [ "AscDesktopEditor" ] [ "OpenFilenameDialog" ] ( "images" , true , function ( files ) { if ( ! files ) return ; if ( ! Array . isArray ( files ) ) files = [ files ] ; if ( 0 === files . length ) return ;
var _files = [ ] ; var _options = { isImageCrypt : true , callback : callback , ext : [ ] } ; for ( var i = 0 ; i < files . length ; i ++ ) { _files . push ( window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( files [ i ] , true ) ) ; _options . ext . push ( AscCommon . GetFileExtension ( files [ i ] ) ) } _this . sendChanges ( this , _files , AscCommon . EncryptionMessageType . Encrypt , _options ) } ) } ; this . addCryproImagesFromUrls = function ( urls , callback ) { var _editor = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; _editor . sync _StartAction ( Asc . c _oAscAsyncActionType . BlockInteraction ,
Asc . c _oAscAsyncAction . LoadImage ) ; var _this = this ; window [ "AscDesktopEditor" ] [ "DownloadFiles" ] ( urls , [ ] , function ( files ) { _editor . sync _EndAction ( Asc . c _oAscAsyncActionType . BlockInteraction , Asc . c _oAscAsyncAction . LoadImage ) ; _editor . sync _StartAction ( Asc . c _oAscAsyncActionType . BlockInteraction , Asc . c _oAscAsyncAction . UploadImage ) ; var _files = [ ] ; var _options = { isImageCrypt : true , isUrls : true , callback : callback , ext : [ ] , api : _editor } ; for ( var elem in files ) { _files . push ( window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( files [ elem ] ,
true ) ) ; _options . ext . push ( window [ "AscDesktopEditor" ] [ "GetImageFormat" ] ( files [ elem ] ) ) ; window [ "AscDesktopEditor" ] [ "RemoveFile" ] ( files [ elem ] ) } _this . sendChanges ( this , _files , AscCommon . EncryptionMessageType . Encrypt , _options ) } ) } ; this . onDecodeError = function ( ) { var _editor = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; _editor . sendEvent ( "asc_onError" , Asc . c _oAscError . ID . DataEncrypted , Asc . c _oAscError . Level . Critical ) } ; this . checkEditorId = function ( ) { if ( null == this . editorId ) { var _editor = window [ "Asc" ] [ "editor" ] ?
window [ "Asc" ] [ "editor" ] : window . editor ; this . editorId = _editor . editorId } } ; this . decryptImage = function ( src , img , data ) { this . sendChanges ( this , [ data ] , AscCommon . EncryptionMessageType . Decrypt , { isImageDecrypt : true , src : src , img : img } ) } ; this . nextChanges = function ( ) { this . nextChangesTimeoutId = setTimeout ( function ( ) { AscCommon . EncryptionWorker . sendChanges ( undefined , undefined ) ; this . nextChangesTimeoutId = - 1 } , 10 ) } ; this . sendChanges = function ( sender , data , type , options ) { if ( ! this . isNeedCrypt ( ) ) { if ( AscCommon . EncryptionMessageType . Encrypt ==
type ) sender . _send ( data , true ) ; else if ( AscCommon . EncryptionMessageType . Decrypt == type ) { if ( this . isExistEncryptedChanges ( data [ "changes" ] ) ) { this . onDecodeError ( ) ; return } sender . _onSaveChanges ( data , true ) } return } if ( undefined !== type ) this . arrData . push ( { sender : sender , type : type , data : data , options : options } ) ; if ( this . arrData . length == 0 ) return ; if ( undefined !== type && ( 1 != this . arrData . length || ! this . isChangesHandled ) ) return ; if ( undefined !== type && - 1 != this . nextChangesTimeoutId ) { clearTimeout ( this . nextChangesTimeoutId ) ; this . nextChangesTimeoutId =
- 1 } if ( AscCommon . EncryptionMessageType . Encrypt == this . arrData [ 0 ] . type ) if ( this . arrData [ 0 ] . options && this . arrData [ 0 ] . options . isImageCrypt ) window . g _asc _plugins . sendToEncryption ( { "type" : "encryptData" , "data" : this . arrData [ 0 ] . data } ) ; else window . g _asc _plugins . sendToEncryption ( { "type" : "encryptData" , "data" : JSON . parse ( this . arrData [ 0 ] . data [ "changes" ] ) } ) ; else if ( AscCommon . EncryptionMessageType . Decrypt == this . arrData [ 0 ] . type ) if ( this . arrData [ 0 ] . options && this . arrData [ 0 ] . options . isImageDecrypt ) window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" ,
"data" : this . arrData [ 0 ] . data } ) ; else window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" , "data" : this . arrData [ 0 ] . data [ "changes" ] } ) } ; this . receiveChanges = function ( obj ) { var data = obj [ "data" ] ; var check = obj [ "check" ] ; if ( ! check ) { this . onDecodeError ( ) ; return } if ( this . handleChangesCallback ) { this . isExistDecryptedChanges = true ; this . checkEditorId ( ) ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = data . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changesBase [ i ] = data [ i ] ; else for ( var i = data . length -
1 ; i >= 0 ; i -- ) this . handleChangesCallback . changesBase [ i ] . m _pData = data [ i ] ; this . isChangesHandled = true ; this . handleChangesCallback . callback . call ( this . handleChangesCallback . sender ) ; this . handleChangesCallback = null ; this . nextChanges ( ) ; return } var obj = this . arrData [ 0 ] ; this . arrData . splice ( 0 , 1 ) ; if ( AscCommon . EncryptionMessageType . Encrypt == obj . type ) if ( obj . options && obj . options . isImageCrypt ) { for ( var i = 0 ; i < data . length ; i ++ ) if ( this . cryptoPrefix == data [ i ] . substr ( 0 , this . cryptoPrefixLen ) ) data [ i ] = this . cryptoPrefix + obj . options . ext [ i ] +
";" + data [ i ] . substr ( this . cryptoPrefixLen ) ; if ( ! obj . options . isUrls ) obj . options . callback ( Asc . c _oAscError . ID . No , data ) ; else AscCommon . UploadImageUrls ( data , obj . options . api . documentId , obj . options . api . documentUserId , obj . options . api . CoAuthoringApi . get _jwt ( ) , function ( urls ) { obj . options . api . sync _EndAction ( Asc . c _oAscAsyncActionType . BlockInteraction , Asc . c _oAscAsyncAction . UploadImage ) ; obj . options . callback ( urls ) } ) } else { obj . data [ "changes" ] = JSON . stringify ( data ) ; obj . sender . _send ( obj . data , true ) } else if ( AscCommon . EncryptionMessageType . Decrypt ==
obj . type ) if ( obj . options && obj . options . isImageDecrypt ) { window [ "AscDesktopEditor" ] [ "ResaveFile" ] ( obj . options . src , data [ 0 ] ) ; obj . options . img [ "onload_crypto" ] ( obj . options . src ) } else { this . isExistDecryptedChanges = true ; obj . data [ "changes" ] = data ; obj . sender . _onSaveChanges ( obj . data , true ) } this . nextChanges ( ) } ; this . isExistEncryptedChanges = function ( _array ) { if ( 0 == _array . length ) return false ; this . checkEditorId ( ) ; var isChangesMode = _array [ 0 ] [ "change" ] ? true : false ; var _prefix = "" ; var _checkPrefixLen = this . cryptoPrefixLen + 1 ;
if ( isChangesMode ) { for ( var i = _array . length - 1 ; i >= 0 ; i -- ) if ( _array [ i ] [ "change" ] . length > _checkPrefixLen ) { _prefix = _array [ i ] [ "change" ] . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } return isCrypted } var isCrypted = false ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = _array . length - 1 ; i >= 0 ; i -- ) { if ( _array [ i ] . length > _checkPrefixLen ) { _prefix = _array [ i ] . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } } else for ( var i =
_array . length - 1 ; i >= 0 ; i -- ) if ( _array [ i ] . m _pData . length > _checkPrefixLen ) { _prefix = _array [ i ] . m _pData . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } return isCrypted } ; this . handleChanges = function ( _array , _sender , _callback ) { if ( 0 == _array . length || ! this . isNeedCrypt ( ) ) { if ( this . isExistEncryptedChanges ( _array ) ) { this . onDecodeError ( ) ; return } this . isChangesHandled = true ; _callback . call ( _sender ) ; return } this . handleChangesCallback = { changesBase : _array , changes : [ ] , sender : _sender ,
callback : _callback } ; this . checkEditorId ( ) ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = _array . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changes [ i ] = _array [ i ] ; else for ( var i = _array . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changes [ i ] = _array [ i ] . m _pData ; window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" , "data" : this . handleChangesCallback . changes } ) } ; this . asc _setAdvancedOptions = function ( api , idOption , option ) { if ( window . isNativeOpenPassword ) { window [ "AscDesktopEditor" ] [ "NativeViewerOpen" ] ( option . asc _getPassword ( ) ) ;
return } if ( window . isCloudCryptoDownloadAs ) return false ; if ( ! this . isNeedCrypt ( ) ) return false ; window . checkPasswordFromPlugin = true ; if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . TXT === idOption ) { var _param = "<m_nCsvTxtEncoding>" + option . asc _getCodePage ( ) + "</m_nCsvTxtEncoding>" ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } else if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . CSV === idOption ) { var delimiter = option . asc _getDelimiter ( ) ; var delimiterChar = option . asc _getDelimiterChar ( ) ; var _param = "" ; _param += "<m_nCsvTxtEncoding>" +
option . asc _getCodePage ( ) + "</m_nCsvTxtEncoding>" ; if ( null != delimiter ) _param += "<m_nCsvDelimiter>" + delimiter + "</m_nCsvDelimiter>" ; if ( null != delimiterChar ) _param += "<m_nCsvDelimiterChar>" + delimiterChar + "</m_nCsvDelimiterChar>" ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } else if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . DRM === idOption ) { var _param = "<m_sPassword>" + AscCommon . CopyPasteCorrectString ( option . asc _getPassword ( ) ) + "</m_sPassword>" ; api . currentPassword = option . asc _getPassword ( ) ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } return true } }
AscCommon . EncryptionWorker = new CEncryptionData ; function CMouseSmoothWheelCorrector ( t , scrollFunction ) { this . _deltaX = 0 ; this . _deltaY = 0 ; this . _isBreakX = false ; this . _isBreakY = false ; this . _timeoutCorrector = - 1 ; this . _api = t ; this . _scrollFunction = scrollFunction ; this . _normalDelta = 120 ; this . _isNormalDeltaActive = false ; this . setNormalDeltaActive = function ( value ) { this . _isNormalDeltaActive = true ; this . _normalDelta = value } ; this . isBreakX = function ( ) { return this . _isBreakX } ; this . isBreakY = function ( ) { return this . _isBreakY } ; this . get _DeltaX =
function ( wheelDeltaX ) { this . _isBreakX = false ; if ( ! AscCommon . AscBrowser . isMacOs ) return wheelDeltaX ; this . _deltaX += wheelDeltaX ; if ( Math . abs ( this . _deltaX ) >= this . _normalDelta ) return this . _isNormalDeltaActive ? this . _deltaX > 0 ? this . _normalDelta : - this . _normalDelta : this . _deltaX ; this . _isBreakX = true ; return 0 } ; this . get _DeltaY = function ( wheelDeltaY ) { this . _isBreakY = false ; if ( ! AscCommon . AscBrowser . isMacOs ) return wheelDeltaY ; this . _deltaY += wheelDeltaY ; if ( Math . abs ( this . _deltaY ) >= this . _normalDelta ) return this . _isNormalDeltaActive ?
this . _deltaY > 0 ? this . _normalDelta : - this . _normalDelta : this . _deltaY ; this . _isBreakY = true ; return 0 } ; this . checkBreak = function ( ) { if ( - 1 != this . _timeoutCorrector ) { clearTimeout ( this . _timeoutCorrector ) ; this . _timeoutCorrector = - 1 } if ( ( this . _isBreakX || this . _isBreakY ) && this . _scrollFunction ) { var obj = { t : this , x : this . _isBreakX ? this . _deltaX : 0 , y : this . _isBreakY ? this . _deltaY : 0 } ; this . _timeoutCorrector = setTimeout ( function ( ) { var t = obj . t ; t . _scrollFunction . call ( t . _api , obj . x , obj . y ) ; t . _timeoutCorrector = - 1 ; t . _deltaX = 0 ; t . _deltaY =
0 } , 100 ) } if ( ! this . _isBreakX ) this . _deltaX = 0 ; if ( ! this . _isBreakY ) this . _deltaY = 0 ; this . _isBreakX = false ; this . _isBreakY = false } } AscCommon . CMouseSmoothWheelCorrector = CMouseSmoothWheelCorrector ; function CTranslateManager ( ) { this . mapTranslate = { } } CTranslateManager . prototype . init = function ( map ) { this . mapTranslate = map || { } } ; CTranslateManager . prototype . getValue = function ( key ) { return this . mapTranslate . hasOwnProperty ( key ) ? this . mapTranslate [ key ] : key } ; function CPolygonPoint2 ( X , Y ) { this . X = X ; this . Y = Y } function CPolygonVectors ( ) { this . Page =
- 1 ; this . VX = [ ] ; this . VY = [ ] } function CPolygonPath ( precision ) { this . Page = - 1 ; this . Direction = 1 ; this . precision = precision ; this . Points = [ ] } CPolygonPath . prototype . PushPoint = function ( x , y ) { this . Points . push ( new CPolygonPoint2 ( x / this . precision , y / this . precision ) ) } ; CPolygonPath . prototype . CorrectExtremePoints = function ( ) { var Lng = this . Points . length ; this . Points [ 0 ] . X = this . Points [ Lng - 1 ] . X ; this . Points [ Lng - 1 ] . Y = this . Points [ 0 ] . Y } ; function CPolygon ( ) { this . Vectors = [ ] ; this . precision = 1E3 } CPolygon . prototype . fill = function ( arrBounds ) { this . Vectors . length =
0 ; if ( arrBounds . length <= 0 ) return ; var nStartLineIndex = 0 , nStartIndex = 0 , CountLines = arrBounds . length , CountBounds ; while ( nStartLineIndex < arrBounds . length ) { CountBounds = arrBounds [ nStartLineIndex ] . length ; while ( nStartIndex < CountBounds ) if ( arrBounds [ nStartLineIndex ] [ nStartIndex ] . W < . 001 ) nStartIndex ++ ; else break ; if ( nStartIndex < CountBounds ) break ; nStartLineIndex ++ ; nStartIndex = 0 } if ( nStartLineIndex >= arrBounds . length ) return ; var CurrentPage = arrBounds [ nStartLineIndex ] [ nStartIndex ] . Page , CurrentVectors = new CPolygonVectors ,
VectorsX = CurrentVectors . VX , VectorsY = CurrentVectors . VY ; CurrentVectors . Page = CurrentPage ; this . Vectors . push ( CurrentVectors ) ; for ( var LineIndex = nStartLineIndex ; LineIndex < CountLines ; nStartIndex = 0 , LineIndex ++ ) { if ( arrBounds [ LineIndex ] [ nStartIndex ] . Page !== CurrentPage ) { CurrentPage = arrBounds [ LineIndex ] [ nStartIndex ] . Page ; CurrentVectors = new CPolygonVectors ; VectorsX = CurrentVectors . VX ; VectorsY = CurrentVectors . VY ; CurrentVectors . Page = CurrentPage ; this . Vectors . push ( CurrentVectors ) } for ( var Index = nStartIndex ; Index < arrBounds [ LineIndex ] . length ; Index ++ ) { var oBound =
arrBounds [ LineIndex ] [ Index ] ; if ( oBound . W < . 001 ) continue ; var x1 = Math . round ( oBound . X * this . precision ) , x2 = Math . round ( ( oBound . X + oBound . W ) * this . precision ) , y1 = Math . round ( oBound . Y * this . precision ) , y2 = Math . round ( ( oBound . Y + oBound . H ) * this . precision ) ; if ( VectorsX [ y1 ] == undefined ) VectorsX [ y1 ] = { } ; this . IntersectionX ( VectorsX , x2 , x1 , y1 ) ; if ( VectorsY [ x1 ] == undefined ) VectorsY [ x1 ] = { } ; this . IntersectionY ( VectorsY , y1 , y2 , x1 ) ; if ( VectorsX [ y2 ] == undefined ) VectorsX [ y2 ] = { } ; this . IntersectionX ( VectorsX , x1 , x2 , y2 ) ; if ( VectorsY [ x2 ] == undefined ) VectorsY [ x2 ] =
{ } ; this . IntersectionY ( VectorsY , y2 , y1 , x2 ) } } } ; CPolygon . prototype . IntersectionX = function ( VectorsX , BeginX , EndX , Y ) { var CurrentVector = { } ; CurrentVector [ BeginX ] = EndX ; var VX = VectorsX [ Y ] ; if ( BeginX > EndX ) while ( true == this . IntersectVectorX ( CurrentVector , VX ) ) ; else while ( true == this . IntersectVectorX ( VX , CurrentVector ) ) ; for ( var X in CurrentVector ) { var VBeginX = parseInt ( X ) ; var VEndX = CurrentVector [ VBeginX ] ; if ( VBeginX !== VEndX || VX [ VBeginX ] === undefined ) VX [ VBeginX ] = VEndX } } ; CPolygon . prototype . IntersectVectorX = function ( VectorOpp ,
VectorClW ) { for ( var X in VectorOpp ) { var VBeginX = parseInt ( X ) ; var VEndX = VectorOpp [ VBeginX ] ; if ( VEndX == VBeginX ) continue ; for ( var ClwX in VectorClW ) { var ClwBeginX = parseInt ( ClwX ) ; var ClwEndX = VectorClW [ ClwBeginX ] ; var bIntersection = false ; if ( ClwBeginX == ClwEndX ) continue ; if ( ClwBeginX <= VEndX && VBeginX <= ClwEndX ) { VectorOpp [ VBeginX ] = VBeginX ; VectorClW [ ClwBeginX ] = VEndX ; VectorClW [ VBeginX ] = ClwEndX ; bIntersection = true } else if ( VEndX <= ClwBeginX && ClwEndX <= VBeginX ) { VectorClW [ ClwBeginX ] = ClwBeginX ; VectorOpp [ VBeginX ] = ClwEndX ; VectorOpp [ ClwBeginX ] =
VEndX ; bIntersection = true } else if ( ClwBeginX < VEndX && VEndX < ClwEndX ) { VectorClW [ ClwBeginX ] = VEndX ; VectorOpp [ VBeginX ] = ClwEndX ; bIntersection = true } else if ( ClwBeginX < VBeginX && VBeginX < ClwEndX ) { VectorOpp [ ClwBeginX ] = VEndX ; VectorClW [ VBeginX ] = ClwEndX ; delete VectorOpp [ VBeginX ] ; delete VectorClW [ ClwBeginX ] ; bIntersection = true } if ( bIntersection == true ) return true } } return false } ; CPolygon . prototype . IntersectionY = function ( VectorsY , BeginY , EndY , X ) { var bIntersect = false ; for ( var y in VectorsY [ X ] ) { var CurBeginY = parseInt ( y ) ; var CurEndY =
VectorsY [ X ] [ CurBeginY ] ; var minY , maxY ; if ( CurBeginY < CurEndY ) { minY = CurBeginY ; maxY = CurEndY } else { minY = CurEndY ; maxY = CurBeginY } var bInterSection = ! ( maxY <= BeginY && maxY <= EndY || minY >= BeginY && minY >= EndY ) , bDirection = ( CurBeginY - CurEndY ) * ( BeginY - EndY ) < 0 ; if ( bInterSection && bDirection ) { VectorsY [ X ] [ CurBeginY ] = EndY ; VectorsY [ X ] [ BeginY ] = CurEndY ; bIntersect = true } } if ( bIntersect == false ) VectorsY [ X ] [ BeginY ] = EndY } ; CPolygon . prototype . GetPaths = function ( shift ) { var Paths = [ ] ; shift *= this . precision ; for ( var PageIndex = 0 ; PageIndex < this . Vectors . length ; PageIndex ++ ) { var y ,
x1 , x2 , x , y1 , y2 ; var VectorsX = this . Vectors [ PageIndex ] . VX , VectorsY = this . Vectors [ PageIndex ] . VY , Page = this . Vectors [ PageIndex ] . Page ; for ( var LineIndex in VectorsX ) for ( var Index in VectorsX [ LineIndex ] ) { var Polygon = new CPolygonPath ( this . precision ) ; Polygon . Page = Page ; y = parseInt ( LineIndex ) ; x1 = parseInt ( Index ) ; x2 = VectorsX [ y ] [ x1 ] ; VectorsX [ y ] [ x1 ] = - 1 ; var Direction = x1 > x2 ? 1 : - 1 ; var minY = y ; var SignRightLeft , SignDownUp ; var X , Y ; if ( x2 !== - 1 ) { SignRightLeft = x1 > x2 ? 1 : - 1 ; Y = y - SignRightLeft * shift ; Polygon . PushPoint ( x1 , Y ) ; while ( true ) { x =
x2 ; y1 = y ; y2 = VectorsY [ x ] [ y1 ] ; if ( y2 == - 1 ) break ; else if ( y2 == undefined ) return [ ] ; VectorsY [ x ] [ y1 ] = - 1 ; SignDownUp = y1 > y2 ? 1 : - 1 ; X = x + SignDownUp * shift ; Polygon . PushPoint ( X , Y ) ; y = y2 ; x1 = x ; x2 = VectorsX [ y ] [ x1 ] ; if ( x2 == - 1 ) break ; else if ( x2 == undefined ) return [ ] ; VectorsX [ y ] [ x1 ] = - 1 ; SignRightLeft = x1 > x2 ? 1 : - 1 ; Y = y - SignRightLeft * shift ; Polygon . PushPoint ( X , Y ) ; if ( y < minY ) { minY = y ; Direction = x1 > x2 ? 1 : - 1 } } Polygon . PushPoint ( X , Y ) ; Polygon . CorrectExtremePoints ( ) ; Polygon . Direction = Direction ; Paths . push ( Polygon ) } } } return Paths } ; function CMathTrack ( ) { this . MathRect =
{ IsActive : false , Bounds : [ ] , ContentSelection : null } ; this . MathPolygons = [ ] ; this . MathSelectPolygons = [ ] } CMathTrack . prototype . Update = function ( IsActive , IsContentActive , oMath , PixelError ) { this . MathRect . IsActive = IsActive ; if ( true === IsActive && null !== oMath ) { var selectBounds = true === IsContentActive ? oMath . Get _ContentSelection ( ) : null ; if ( selectBounds != null ) { var SelectPolygon = new CPolygon ; SelectPolygon . fill ( selectBounds ) ; this . MathSelectPolygons = SelectPolygon . GetPaths ( 0 ) } else this . MathSelectPolygons . length = 0 ; var arrBounds =
oMath . Get _Bounds ( ) ; if ( arrBounds . length <= 0 ) return ; var MPolygon = new CPolygon ; MPolygon . fill ( arrBounds ) ; this . MathPolygons = MPolygon . GetPaths ( PixelError ) } } ; CMathTrack . prototype . Draw = function ( overlay , oPath , shift , color , dKoefX , dKoefY , left , top ) { var ctx = overlay . m _oContext ; ctx . strokeStyle = color ; ctx . lineWidth = 1 ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nCount = Points . length ; var PrevX = Points [ nCount - 2 ] . X , PrevY = Points [ nCount - 2 ] . Y ; var _x = left + dKoefX * Points [ nCount - 2 ] . X , _y = top + dKoefY * Points [ nCount - 2 ] . Y ; var StartX ,
StartY ; for ( var nIndex = 0 ; nIndex < nCount ; nIndex ++ ) { if ( PrevX > Points [ nIndex ] . X ) _y = top + dKoefY * Points [ nIndex ] . Y - shift ; else if ( PrevX < Points [ nIndex ] . X ) _y = top + dKoefY * Points [ nIndex ] . Y + shift ; if ( PrevY < Points [ nIndex ] . Y ) _x = left + dKoefX * Points [ nIndex ] . X - shift ; else if ( PrevY > Points [ nIndex ] . Y ) _x = left + dKoefX * Points [ nIndex ] . X + shift ; PrevX = Points [ nIndex ] . X ; PrevY = Points [ nIndex ] . Y ; if ( nIndex > 0 ) { overlay . CheckPoint ( _x , _y ) ; if ( 1 == nIndex ) { StartX = _x ; StartY = _y ; overlay . m _oContext . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } else overlay . m _oContext . lineTo ( ( _x >>
0 ) + . 5 , ( _y >> 0 ) + . 5 ) } } overlay . m _oContext . lineTo ( ( StartX >> 0 ) + . 5 , ( StartY >> 0 ) + . 5 ) ; ctx . closePath ( ) ; ctx . stroke ( ) ; ctx . beginPath ( ) } ; CMathTrack . prototype . DrawWithMatrix = function ( overlay , oPath , ShiftX , ShiftY , color , dKoefX , dKoefY , left , top , m ) { var ctx = overlay . m _oContext ; ctx . strokeStyle = color ; ctx . lineWidth = 1 ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nCount = Points . length ; var x = Points [ nCount - 2 ] . X , y = Points [ nCount - 2 ] . Y ; var _x , _y ; var PrevX = Points [ nCount - 2 ] . X , PrevY = Points [ nCount - 2 ] . Y ; var StartX , StartY ; for ( var nIndex = 0 ; nIndex <
nCount ; nIndex ++ ) { if ( PrevX > Points [ nIndex ] . X ) y = Points [ nIndex ] . Y - ShiftY ; else if ( PrevX < Points [ nIndex ] . X ) y = Points [ nIndex ] . Y + ShiftY ; if ( PrevY < Points [ nIndex ] . Y ) x = Points [ nIndex ] . X - ShiftX ; else if ( PrevY > Points [ nIndex ] . Y ) x = Points [ nIndex ] . X + ShiftX ; PrevX = Points [ nIndex ] . X ; PrevY = Points [ nIndex ] . Y ; if ( nIndex > 0 ) { _x = left + dKoefX * m . TransformPointX ( x , y ) ; _y = top + dKoefY * m . TransformPointY ( x , y ) ; overlay . CheckPoint ( _x , _y ) ; if ( 1 == nIndex ) { StartX = _x ; StartY = _y ; overlay . m _oContext . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } else overlay . m _oContext . lineTo ( ( _x >>
0 ) + . 5 , ( _y >> 0 ) + . 5 ) } } overlay . m _oContext . lineTo ( ( StartX >> 0 ) + . 5 , ( StartY >> 0 ) + . 5 ) ; ctx . closePath ( ) ; ctx . stroke ( ) ; ctx . beginPath ( ) } ; CMathTrack . prototype . DrawSelectPolygon = function ( overlay , oPath , dKoefX , dKoefY , left , top , m ) { var ctx = overlay . m _oContext ; ctx . fillStyle = "#375082" ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nPointIndex ; var _x , _y , x , y , p ; for ( nPointIndex = 0 ; nPointIndex < Points . length - 1 ; nPointIndex ++ ) { p = Points [ nPointIndex ] ; if ( ! m ) { _x = left + dKoefX * p . X ; _y = top + dKoefY * p . Y } else { x = p . X ; y = p . Y ; _x = left + dKoefX * m . TransformPointX ( x ,
y ) ; _y = top + dKoefY * m . TransformPointY ( x , y ) } overlay . CheckPoint ( _x , _y ) ; if ( 0 == nPointIndex ) ctx . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) ; else ctx . lineTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } ctx . globalAlpha = . 2 ; ctx . fill ( ) ; ctx . globalAlpha = 1 } ; CMathTrack . prototype . IsActive = function ( ) { return this . MathRect . IsActive } ; CMathTrack . prototype . GetPolygonsCount = function ( ) { return this . MathPolygons . length } ; CMathTrack . prototype . GetPolygon = function ( nIndex ) { return this . MathPolygons [ nIndex ] } ; CMathTrack . prototype . GetSelectPathsCount = function ( ) { return this . MathSelectPolygons . length } ;
CMathTrack . prototype . GetSelectPath = function ( nIndex ) { return this . MathSelectPolygons [ nIndex ] } ; if ( ! Array . prototype . findIndex ) Object . defineProperty ( Array . prototype , "findIndex" , { value : function ( predicate ) { if ( this == null ) throw new TypeError ( "Array.prototype.findIndex called on null or undefined" ) ; if ( typeof predicate !== "function" ) throw new TypeError ( "predicate must be a function" ) ; var list = Object ( this ) ; var length = list . length >>> 0 ; var thisArg = arguments [ 1 ] ; var value ; for ( var i = 0 ; i < length ; i ++ ) { value = list [ i ] ; if ( predicate . call ( thisArg ,
value , i , list ) ) return i } return - 1 } } ) ; if ( ! Array . prototype . fill ) Object . defineProperty ( Array . prototype , "fill" , { value : function ( value ) { if ( this == null ) throw new TypeError ( "this is null or not defined" ) ; var O = Object ( this ) ; var len = O . length >>> 0 ; var start = arguments [ 1 ] ; var relativeStart = start >> 0 ; var k = relativeStart < 0 ? Math . max ( len + relativeStart , 0 ) : Math . min ( relativeStart , len ) ; var end = arguments [ 2 ] ; var relativeEnd = end === undefined ? len : end >> 0 ; var final = relativeEnd < 0 ? Math . max ( len + relativeEnd , 0 ) : Math . min ( relativeEnd , len ) ;
while ( k < final ) { O [ k ] = value ; k ++ } return O } } ) ; if ( typeof Int8Array !== "undefined" && ! Int8Array . prototype . fill ) Int8Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint8Array !== "undefined" && ! Uint8Array . prototype . fill ) Uint8Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint8ClampedArray !== "undefined" && ! Uint8ClampedArray . prototype . fill ) Uint8ClampedArray . prototype . fill = Array . prototype . fill ; if ( typeof Int16Array !== "undefined" && ! Int16Array . prototype . fill ) Int16Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint16Array !==
"undefined" && ! Uint16Array . prototype . fill ) Uint16Array . prototype . fill = Array . prototype . fill ; if ( typeof Int32Array !== "undefined" && ! Int32Array . prototype . fill ) Int32Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint32Array !== "undefined" && ! Uint32Array . prototype . fill ) Uint32Array . prototype . fill = Array . prototype . fill ; if ( typeof Float32Array !== "undefined" && ! Float32Array . prototype . fill ) Float32Array . prototype . fill = Array . prototype . fill ; if ( typeof Float64Array !== "undefined" && ! Float64Array . prototype . fill ) Float64Array . prototype . fill =
Array . prototype . fill ; if ( typeof Uint8Array !== "undefined" && ! Uint8Array . prototype . slice ) Uint8Array . prototype . slice = Array . prototype . slice ; function parseText ( text , options , bTrimSpaces ) { var delimiterChar ; if ( options . asc _getDelimiterChar ( ) ) delimiterChar = options . asc _getDelimiterChar ( ) ; else switch ( options . asc _getDelimiter ( ) ) { case AscCommon . c _oAscCsvDelimiter . None : delimiterChar = undefined ; break ; case AscCommon . c _oAscCsvDelimiter . Tab : delimiterChar = "\t" ; break ; case AscCommon . c _oAscCsvDelimiter . Semicolon : delimiterChar =
";" ; break ; case AscCommon . c _oAscCsvDelimiter . Colon : delimiterChar = ":" ; break ; case AscCommon . c _oAscCsvDelimiter . Comma : delimiterChar = "," ; break ; case AscCommon . c _oAscCsvDelimiter . Space : delimiterChar = " " ; break } var matrix = [ ] ; var rows = text . split ( /\r?\n/ ) ; for ( var i = 0 ; i < rows . length ; ++ i ) { var row = rows [ i ] ; if ( " " === delimiterChar && bTrimSpaces ) { var addSpace = false ; if ( row [ 0 ] === delimiterChar ) addSpace = true ; row = addSpace ? delimiterChar + row . trim ( ) : row . trim ( ) } matrix . push ( row . split ( delimiterChar ) ) } return matrix } function getTimeISO8601 ( dateStr ) { if ( dateStr ) if ( dateStr . endsWith ( "Z" ) ) return Date . parse ( dateStr ) ;
else return Date . parse ( dateStr + "Z" ) ; return NaN } function valueToMmType ( value ) { var oVal = parseFloat ( value ) ; var oType ; if ( ! isNaN ( oVal ) ) { if ( - 1 !== value . indexOf ( "%" ) ) { oType = "%" ; oVal /= 100 } else if ( - 1 !== value . indexOf ( "px" ) ) { oType = "px" ; oVal *= AscCommon . g _dKoef _pix _to _mm } else if ( - 1 !== value . indexOf ( "in" ) ) { oType = "in" ; oVal *= AscCommonWord . g _dKoef _in _to _mm } else if ( - 1 !== value . indexOf ( "cm" ) ) { oType = "cm" ; oVal *= 10 } else if ( - 1 !== value . indexOf ( "mm" ) ) oType = "mm" ; else if ( - 1 !== value . indexOf ( "pt" ) ) { oType = "pt" ; oVal *= AscCommonWord . g _dKoef _pt _to _mm } else if ( - 1 !==
value . indexOf ( "pc" ) ) { oType = "pc" ; oVal *= AscCommonWord . g _dKoef _pc _to _mm } else oType = "none" ; return { val : oVal , type : oType } } return null } function valueToMm ( value ) { var obj = valueToMmType ( value ) ; if ( obj && "%" !== obj . type && "none" !== obj . type ) return obj . val ; return null } function arrayMove ( array , from , to ) { array . splice ( to , 0 , array . splice ( from , 1 ) [ 0 ] ) } function getRangeArray ( start , stop ) { var res = new Array ( stop - start ) ; for ( var i = start ; i < stop ; ++ i ) res [ i - start ] = i ; return res } var g _oBackoffDefaults = { retries : 2 , factor : 2 , minTimeout : 100 ,
maxTimeout : 2E3 , randomize : true } ; function Backoff ( opts ) { this . attempts = 0 ; this . opts = opts } Backoff . prototype . attempt = function ( fError , fRetry ) { var timeout = this . nextTimeout ( ) ; if ( timeout > 0 ) setTimeout ( function ( ) { fRetry ( ) } , timeout ) ; else fError ( ) } ; Backoff . prototype . nextTimeout = function ( ) { var timeout = - 1 ; if ( this . attempts < this . opts . retries ) { timeout = this . createTimeout ( this . attempts , this . opts ) ; this . attempts ++ } return timeout } ; Backoff . prototype . createTimeout = function ( attempt , opts ) { var random = opts . randomize ? Math . random ( ) +
1 : 1 ; var timeout = Math . round ( random * opts . minTimeout * Math . pow ( opts . factor , attempt ) ) ; timeout = Math . min ( timeout , opts . maxTimeout ) ; return timeout } ; function backoffOnError ( obj , onError , onRetry ) { if ( ! onRetry ) return onError ; var backoff = new Backoff ( g _oBackoffDefaults ) ; return function ( ) { var timeout = backoff . nextTimeout ( ) ; if ( timeout > 0 ) setTimeout ( function ( ) { onRetry . call ( obj , obj ) } , timeout ) ; else if ( onError ) onError . apply ( obj , arguments ) } } function backoffOnErrorImg ( img , onRetry ) { if ( ! onRetry ) onRetry = function ( img ) { img . setAttribute ( "src" ,
img . getAttribute ( "src" ) ) } ; img . onerror = backoffOnError ( img , img . onerror , onRetry ) } function isEmptyObject ( obj ) { for ( var name in obj ) return false ; return true } window [ "AscCommon" ] = window [ "AscCommon" ] || { } ; window [ "AscCommon" ] . getSockJs = getSockJs ; window [ "AscCommon" ] . getJSZipUtils = getJSZipUtils ; window [ "AscCommon" ] . getJSZip = getJSZip ; window [ "AscCommon" ] . getBaseUrl = getBaseUrl ; window [ "AscCommon" ] . getEncodingParams = getEncodingParams ; window [ "AscCommon" ] . getEncodingByBOM = getEncodingByBOM ; window [ "AscCommon" ] . saveWithParts =
saveWithParts ; window [ "AscCommon" ] . loadFileContent = loadFileContent ; window [ "AscCommon" ] . getImageFromChanges = getImageFromChanges ; window [ "AscCommon" ] . openFileCommand = openFileCommand ; window [ "AscCommon" ] . sendCommand = sendCommand ; window [ "AscCommon" ] . sendSaveFile = sendSaveFile ; window [ "AscCommon" ] . mapAscServerErrorToAscError = mapAscServerErrorToAscError ; window [ "AscCommon" ] . joinUrls = joinUrls ; window [ "AscCommon" ] . getFullImageSrc2 = getFullImageSrc2 ; window [ "AscCommon" ] . fSortAscending = fSortAscending ; window [ "AscCommon" ] . fSortDescending =
fSortDescending ; window [ "AscCommon" ] . isLeadingSurrogateChar = isLeadingSurrogateChar ; window [ "AscCommon" ] . decodeSurrogateChar = decodeSurrogateChar ; window [ "AscCommon" ] . encodeSurrogateChar = encodeSurrogateChar ; window [ "AscCommon" ] . convertUnicodeToUTF16 = convertUnicodeToUTF16 ; window [ "AscCommon" ] . convertUTF16toUnicode = convertUTF16toUnicode ; window [ "AscCommon" ] . build _local _rx = build _local _rx ; window [ "AscCommon" ] . GetFileName = GetFileName ; window [ "AscCommon" ] . GetFileExtension = GetFileExtension ; window [ "AscCommon" ] . changeFileExtention =
changeFileExtention ; window [ "AscCommon" ] . getExtentionByFormat = getExtentionByFormat ; window [ "AscCommon" ] . InitOnMessage = InitOnMessage ; window [ "AscCommon" ] . ShowImageFileDialog = ShowImageFileDialog ; window [ "AscCommon" ] . ShowDocumentFileDialog = ShowDocumentFileDialog ; window [ "AscCommon" ] . InitDragAndDrop = InitDragAndDrop ; window [ "AscCommon" ] . UploadImageFiles = UploadImageFiles ; window [ "AscCommon" ] . UploadImageUrls = UploadImageUrls ; window [ "AscCommon" ] . CanDropFiles = CanDropFiles ; window [ "AscCommon" ] . getUrlType = getUrlType ;
window [ "AscCommon" ] . prepareUrl = prepareUrl ; window [ "AscCommon" ] . getUserColorById = getUserColorById ; window [ "AscCommon" ] . isNullOrEmptyString = isNullOrEmptyString ; window [ "AscCommon" ] . unleakString = unleakString ; window [ "AscCommon" ] . readValAttr = readValAttr ; window [ "AscCommon" ] . getNumFromXml = getNumFromXml ; window [ "AscCommon" ] . getColorFromXml = getColorFromXml ; window [ "AscCommon" ] . getBoolFromXml = getBoolFromXml ; window [ "AscCommon" ] . initStreamFromResponse = initStreamFromResponse ; window [ "AscCommon" ] . checkStreamSignature =
checkStreamSignature ; window [ "AscCommon" ] . DocumentUrls = DocumentUrls ; window [ "AscCommon" ] . OpenFileResult = OpenFileResult ; window [ "AscCommon" ] . CLock = CLock ; window [ "AscCommon" ] . CContentChanges = CContentChanges ; window [ "AscCommon" ] . CContentChangesElement = CContentChangesElement ; window [ "AscCommon" ] . CorrectMMToTwips = CorrectMMToTwips ; window [ "AscCommon" ] . TwipsToMM = TwipsToMM ; window [ "AscCommon" ] . MMToTwips = MMToTwips ; window [ "AscCommon" ] . RomanToInt = RomanToInt ; window [ "AscCommon" ] . LatinNumberingToInt = LatinNumberingToInt ;
window [ "AscCommon" ] . IntToNumberFormat = IntToNumberFormat ; window [ "AscCommon" ] . IsSpace = IsSpace ; window [ "AscCommon" ] . loadSdk = loadSdk ; window [ "AscCommon" ] . loadScript = loadScript ; window [ "AscCommon" ] . getAltGr = getAltGr ; window [ "AscCommon" ] . getColorSchemeByName = getColorSchemeByName ; window [ "AscCommon" ] . getColorSchemeByIdx = getColorSchemeByIdx ; window [ "AscCommon" ] . getAscColorScheme = getAscColorScheme ; window [ "AscCommon" ] . checkAddColorScheme = checkAddColorScheme ; window [ "AscCommon" ] . getIndexColorSchemeInArray = getIndexColorSchemeInArray ;
window [ "AscCommon" ] . isEastAsianScript = isEastAsianScript ; window [ "AscCommon" ] . CMathTrack = CMathTrack ; window [ "AscCommon" ] . CPolygon = CPolygon ; window [ "AscCommon" ] . JSZipWrapper = JSZipWrapper ; window [ "AscCommon" ] . g _oDocumentUrls = g _oDocumentUrls ; window [ "AscCommon" ] . FormulaTablePartInfo = FormulaTablePartInfo ; window [ "AscCommon" ] . cBoolLocal = cBoolLocal ; window [ "AscCommon" ] . cErrorOrigin = cErrorOrigin ; window [ "AscCommon" ] . cErrorLocal = cErrorLocal ; window [ "AscCommon" ] . FormulaSeparators = FormulaSeparators ; window [ "AscCommon" ] . rx _space _g =
rx _space _g ; window [ "AscCommon" ] . rx _space = rx _space ; window [ "AscCommon" ] . rx _defName = rx _defName ; window [ "AscCommon" ] . kCurFormatPainterWord = kCurFormatPainterWord ; window [ "AscCommon" ] . parserHelp = parserHelp ; window [ "AscCommon" ] . g _oIdCounter = g _oIdCounter ; window [ "AscCommon" ] . g _oHtmlCursor = g _oHtmlCursor ; window [ "AscCommon" ] . g _oBackoffDefaults = g _oBackoffDefaults ; window [ "AscCommon" ] . Backoff = Backoff ; window [ "AscCommon" ] . backoffOnErrorImg = backoffOnErrorImg ; window [ "AscCommon" ] . isEmptyObject = isEmptyObject ; window [ "AscCommon" ] . CSignatureDrawer =
window [ "AscCommon" ] [ "CSignatureDrawer" ] = CSignatureDrawer ; var prot = CSignatureDrawer . prototype ; prot [ "getImages" ] = prot . getImages ; prot [ "setText" ] = prot . setText ; prot [ "selectImage" ] = prot . selectImage ; prot [ "isValid" ] = prot . isValid ; prot [ "destroy" ] = prot . destroy ; window [ "AscCommon" ] . translateManager = new CTranslateManager ; window [ "AscCommon" ] . parseText = parseText ; window [ "AscCommon" ] . getTimeISO8601 = getTimeISO8601 ; window [ "AscCommon" ] . valueToMm = valueToMm ; window [ "AscCommon" ] . valueToMmType = valueToMmType ; window [ "AscCommon" ] . arrayMove =
arrayMove ; window [ "AscCommon" ] . getRangeArray = getRangeArray ; window [ "AscCommon" ] . CUnicodeStringEmulator = CUnicodeStringEmulator ; window [ "AscCommon" ] . private _IsAbbreviation = private _IsAbbreviation ; window [ "AscCommon" ] . rx _test _ws _name = rx _test _ws _name ; window [ "AscCommon" ] . CShortcuts = window [ "AscCommon" ] [ "CShortcuts" ] = CShortcuts ; prot = CShortcuts . prototype ; prot [ "Add" ] = prot . Add ; prot [ "Get" ] = prot . Get ; prot [ "CheckType" ] = prot . CheckType ; prot [ "Remove" ] = prot . Remove ; prot [ "RemoveByType" ] = prot . RemoveByType ; prot [ "GetNewCustomType" ] =
prot . GetNewCustomType ; prot [ "IsCustomType" ] = prot . IsCustomType ; prot [ "GetCustomAction" ] = prot . GetCustomAction ; prot [ "AddCustomActionSymbol" ] = prot . AddCustomActionSymbol ; window [ "AscCommon" ] . CCustomShortcutActionSymbol = window [ "AscCommon" ] [ "CCustomShortcutActionSymbol" ] = CCustomShortcutActionSymbol } ) ( window ) ;
nCharCode <= 40959 || 13312 <= nCharCode && nCharCode <= 19903 || 131072 <= nCharCode && nCharCode <= 173791 || 173824 <= nCharCode && nCharCode <= 177983 || 177984 <= nCharCode && nCharCode <= 178207 || 178208 <= nCharCode && nCharCode <= 183983 || 63744 <= nCharCode && nCharCode <= 64255 || 194560 <= nCharCode && nCharCode <= 195103 ) return false } return true } return false } var g _oUserColorById = { } , g _oUserNextColorIndex = 0 ; function getUserColorById ( userId , userName , isDark , isNumericValue ) { if ( window . parent . APP && window . parent . APP . getUserColor ) try { var CPColor = window . parent . APP . getUserColor ( userId ) ;
if ( CPColor ) return true === isNumericValue ? CPColor . r << 16 & 16711680 | CPColor . g << 8 & 65280 | CPColor . b & 255 : CPColor } catch ( e ) { } if ( ( ! userId || "" === userId ) && ( ! userName || "" === userName ) ) return new CColor ( 0 , 0 , 0 , 255 ) ; var res ; if ( g _oUserColorById . hasOwnProperty ( userId ) ) res = g _oUserColorById [ userId ] ; else if ( g _oUserColorById . hasOwnProperty ( userName ) ) res = g _oUserColorById [ userName ] ; else { var nColor = Asc . c _oAscArrUserColors [ g _oUserNextColorIndex % Asc . c _oAscArrUserColors . length ] ; ++ g _oUserNextColorIndex ; res = g _oUserColorById [ userId ||
userName ] = new CUserCacheColor ( nColor ) } if ( ! res ) return new CColor ( 0 , 0 , 0 , 255 ) ; var oColor = true === isDark ? res . Dark : res . Light ; return true === isNumericValue ? oColor . r << 16 & 16711680 | oColor . g << 8 & 65280 | oColor . b & 255 : oColor } function isNullOrEmptyString ( str ) { return str == undefined || str == null || str == "" } function unleakString ( s ) { return ( " " + s ) . substr ( 1 ) } function readValAttr ( attr ) { if ( attr ( ) ) { var val = attr ( ) [ "val" ] ; return val ? val : null } return null } function getNumFromXml ( val ) { return val ? val - 0 : null } function getColorFromXml ( attr ) { if ( attr ( ) ) { var vals =
attr ( ) ; if ( null != vals [ "theme" ] ) return AscCommonExcel . g _oColorManager . getThemeColor ( getNumFromXml ( vals [ "theme" ] ) , getNumFromXml ( vals [ "tint" ] ) ) ; else if ( null != vals [ "rgb" ] ) return new AscCommonExcel . RgbColor ( 16777215 & getNumFromXml ( vals [ "rgb" ] ) ) } return null } function getBoolFromXml ( val ) { return "0" !== val && "false" !== val && "off" !== val } function CUserCacheColor ( nColor ) { this . Light = null ; this . Dark = null ; this . init ( nColor ) } CUserCacheColor . prototype . init = function ( nColor ) { var r = nColor >> 16 & 255 ; var g = nColor >> 8 & 255 ; var b = nColor &
255 ; var Y = Math . max ( 0 , Math . min ( 255 , . 299 * r + . 587 * g + . 114 * b ) ) ; var Cb = Math . max ( 0 , Math . min ( 255 , 128 - . 168736 * r - . 331264 * g + . 5 * b ) ) ; var Cr = Math . max ( 0 , Math . min ( 255 , 128 + . 5 * r - . 418688 * g - . 081312 * b ) ) ; if ( Y > 63 ) Y = 63 ; var R = Math . max ( 0 , Math . min ( 255 , Y + 1.402 * ( Cr - 128 ) ) ) | 0 ; var G = Math . max ( 0 , Math . min ( 255 , Y - . 34414 * ( Cb - 128 ) - . 71414 * ( Cr - 128 ) ) ) | 0 ; var B = Math . max ( 0 , Math . min ( 255 , Y + 1.772 * ( Cb - 128 ) ) ) | 0 ; this . Light = new CColor ( r , g , b , 255 ) ; this . Dark = new CColor ( R , G , B , 255 ) } ; function loadScript ( url , onSuccess , onError ) { if ( window [ "NATIVE_EDITOR_ENJINE" ] ===
true || window [ "Native" ] !== undefined ) { onSuccess ( ) ; return } if ( window [ "AscDesktopEditor" ] && window [ "local_load_add" ] ) { var _context = { "completeLoad" : function ( ) { return onSuccess ( ) } } ; window [ "local_load_add" ] ( _context , "sdk-all-from-min" , url ) ; var _ret _param = window [ "AscDesktopEditor" ] [ "LoadJS" ] ( url ) ; if ( 2 != _ret _param ) window [ "local_load_remove" ] ( url ) ; if ( _ret _param == 1 ) { setTimeout ( onSuccess , 1 ) ; return } else if ( _ret _param == 2 ) return } var backoff = new AscCommon . Backoff ( AscCommon . g _oBackoffDefaults ) ; loadScriptWithBackoff ( backoff ,
url , onSuccess , onError ) } function loadScriptWithBackoff ( backoff , url , onSuccess , onError ) { var script = document . createElement ( "script" ) ; script . type = "text/javascript" ; script . src = url ; script . onload = onSuccess ; script . onerror = function ( ) { backoff . attempt ( onError , function ( ) { loadScriptWithBackoff ( backoff , url , onSuccess , onError ) } ) } ; document . head . appendChild ( script ) } function loadSdk ( sdkName , onSuccess , onError ) { if ( window [ "AscNotLoadAllScript" ] ) onSuccess ( ) ; else { var urlArgs = window . parent && window . parent . APP && window . parent . APP . urlArgs ||
"" ; loadScript ( "./../../../../sdkjs/" + sdkName + "/sdk-all.js?" + urlArgs , onSuccess , onError ) } } function getAltGr ( e ) { var ctrlKey = e . metaKey || e . ctrlKey ; var altKey = e . altKey ; return altKey && ( AscBrowser . isMacOs ? ! ctrlKey : ctrlKey ) } function getColorSchemeByName ( sName ) { for ( var i = 0 ; i < AscCommon . g _oUserColorScheme . length ; ++ i ) { var tmp = AscCommon . g _oUserColorScheme [ i ] ; if ( tmp && tmp . name === sName ) return getColorSchemeByIdx ( i ) } return null } function getColorSchemeByIdx ( idx ) { var tmp = AscCommon . g _oUserColorScheme [ idx ] ; if ( tmp ) { var scheme =
new AscFormat . ClrScheme , _c ; scheme . name = tmp . name ; _c = tmp . get _dk1 ( ) ; scheme . colors [ 8 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _lt1 ( ) ; scheme . colors [ 12 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _dk2 ( ) ; scheme . colors [ 9 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _lt2 ( ) ; scheme . colors [ 13 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent1 ( ) ; scheme . colors [ 0 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent2 ( ) ; scheme . colors [ 1 ] = AscFormat . CreateUniColorRGB ( _c . r ,
_c . g , _c . b ) ; _c = tmp . get _accent3 ( ) ; scheme . colors [ 2 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent4 ( ) ; scheme . colors [ 3 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent5 ( ) ; scheme . colors [ 4 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _accent6 ( ) ; scheme . colors [ 5 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _hlink ( ) ; scheme . colors [ 11 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ; _c = tmp . get _folHlink ( ) ; scheme . colors [ 10 ] = AscFormat . CreateUniColorRGB ( _c . r , _c . g , _c . b ) ;
return scheme } return null } function getAscColorScheme ( _scheme , theme ) { var elem , _c ; var _rgba = { R : 0 , G : 0 , B : 0 , A : 255 } ; elem = new AscCommon . CAscColorScheme ; elem . scheme = _scheme ; elem . name = _scheme . name ; _scheme . colors [ 8 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 8 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 12 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 12 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 9 ] . Calculate ( theme , null , null ,
null , _rgba ) ; _c = _scheme . colors [ 9 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 13 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 13 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 0 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 0 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 1 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 1 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 2 ] . Calculate ( theme ,
null , null , null , _rgba ) ; _c = _scheme . colors [ 2 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 3 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 3 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 4 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 4 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 5 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 5 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ;
_scheme . colors [ 11 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 11 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; _scheme . colors [ 10 ] . Calculate ( theme , null , null , null , _rgba ) ; _c = _scheme . colors [ 10 ] . RGBA ; elem . putColor ( new AscCommon . CColor ( _c . R , _c . G , _c . B ) ) ; return elem } function getIndexColorSchemeInArray ( result , asc _color _scheme ) { for ( var j = 0 ; j < result . length ; ++ j ) if ( result [ j ] . isEqual ( asc _color _scheme ) ) return j ; return - 1 } function checkAddColorScheme ( result , asc _color _scheme , nStartIndex ) { var nIndex =
getIndexColorSchemeInArray ( result , asc _color _scheme ) ; if ( nIndex > - 1 ) return nIndex ; var nStartIndex _ = nStartIndex ; if ( nStartIndex === null ) nStartIndex _ = result . length ; result . splice ( nStartIndex _ , 0 , asc _color _scheme ) ; return nStartIndex _ } function isEastAsianScript ( value ) { return 12544 <= value && value <= 12591 || 12704 <= value && value <= 12735 || 19968 <= value && value <= 40938 || 13312 <= value && value <= 19893 || 131072 <= value && value <= 173782 || 173824 <= value && value <= 177972 || 177984 <= value && value <= 178205 || 178208 <= value && value <= 183969 || 183984 <=
value && value <= 191456 || 63744 <= value && value <= 64255 || 194560 <= value && value <= 195103 || 12032 <= value && value <= 12255 || 11904 <= value && value <= 12031 || 12736 <= value && value <= 12783 || 12272 <= value && value <= 12287 || 4352 <= value && value <= 4607 || 43360 <= value && value <= 43391 || 55216 <= value && value <= 55295 || 12592 <= value && value <= 12687 || 65280 <= value && value <= 65519 || 44032 <= value && value <= 55215 || 12352 <= value && value <= 12447 || 110848 <= value && value <= 110895 || 110592 <= value && value <= 110847 || 12688 <= value && value <= 12703 || 12448 <= value && value <= 12543 ||
12784 <= value && value <= 12799 || 42192 <= value && value <= 42239 || 93952 <= value && value <= 94111 || 110960 <= value && value <= 111359 || 94208 <= value && value <= 100332 || 100352 <= value && value <= 101119 || 40960 <= value && value <= 42127 || 42128 <= value && value <= 42191 } var g _oIdCounter = new CIdCounter ; window . Asc . g _signature _drawer = null ; function CSignatureDrawer ( id , api , w , h ) { window . Asc . g _signature _drawer = this ; this . Api = api ; this . CanvasParent = document . getElementById ( id ) ; this . Canvas = document . createElement ( "canvas" ) ; this . Canvas . style . position = "absolute" ;
this . Canvas . style . left = "0px" ; this . Canvas . style . top = "0px" ; var _width = parseInt ( this . CanvasParent . offsetWidth ) ; var _height = parseInt ( this . CanvasParent . offsetHeight ) ; if ( 0 == _width ) _width = 300 ; if ( 0 == _height ) _height = 80 ; this . Canvas . width = _width ; this . Canvas . height = _height ; this . CanvasParent . appendChild ( this . Canvas ) ; this . Image = "" ; this . ImageHtml = null ; this . Text = "" ; this . Font = "Arial" ; this . Size = 10 ; this . Italic = true ; this . Bold = false ; this . Width = w ; this . Height = h ; this . CanvasReturn = null ; this . IsAsync = false } CSignatureDrawer . prototype . getCanvas =
function ( ) { return this . CanvasReturn == null ? this . Canvas : this . CanvasReturn } ; CSignatureDrawer . prototype . getImages = function ( ) { if ( ! this . isValid ( ) ) return [ "" , "" ] ; this . CanvasReturn = document . createElement ( "canvas" ) ; this . CanvasReturn . width = this . Width * AscCommon . g _dKoef _mm _to _pix ; this . CanvasReturn . height = this . Height * AscCommon . g _dKoef _mm _to _pix ; if ( this . Text != "" ) this . drawText ( ) ; else this . drawImage ( ) ; var _ret = [ ] ; _ret . push ( this . CanvasReturn . toDataURL ( "image/png" ) ) ; var _ctx = this . CanvasReturn . getContext ( "2d" ) ; _ctx . strokeStyle =
"#FF0000" ; _ctx . lineWidth = 2 ; _ctx . moveTo ( 0 , 0 ) ; _ctx . lineTo ( this . CanvasReturn . width , this . CanvasReturn . height ) ; _ctx . moveTo ( 0 , this . CanvasReturn . height ) ; _ctx . lineTo ( this . CanvasReturn . width , 0 ) ; _ctx . stroke ( ) ; _ret . push ( this . CanvasReturn . toDataURL ( "image/png" ) ) ; this . CanvasReturn = null ; return _ret } ; CSignatureDrawer . prototype . setText = function ( text , font , size , isItalic , isBold ) { if ( this . IsAsync ) { this . Text = text ; return } this . Image = "" ; this . ImageHtml = null ; this . Text = text ; this . Font = font ; this . Size = size ; this . Italic = isItalic ;
this . Bold = isBold ; this . IsAsync = true ; AscFonts . FontPickerByCharacter . checkText ( this . Text , this , function ( ) { this . IsAsync = false ; var loader = AscCommon . g _font _loader ; var fontinfo = AscFonts . g _fontApplication . GetFontInfo ( font ) ; var isasync = loader . LoadFont ( fontinfo , function ( ) { window . Asc . g _signature _drawer . Api . sync _EndAction ( Asc . c _oAscAsyncActionType . Information , Asc . c _oAscAsyncAction . LoadFont ) ; window . Asc . g _signature _drawer . drawText ( ) } ) ; if ( false === isasync ) this . drawText ( ) } ) } ; CSignatureDrawer . prototype . drawText = function ( ) { var _oldTurn =
this . Api . isViewMode ; var _oldMarks = this . Api . ShowParaMarks ; this . Api . isViewMode = true ; this . Api . ShowParaMarks = false ; AscFormat . ExecuteNoHistory ( AscCommon . DrawTextByCenter , this , [ ] ) ; this . Api . isViewMode = _oldTurn ; this . Api . ShowParaMarks = _oldMarks } ; CSignatureDrawer . prototype . drawImage = function ( ) { var _canvas = this . getCanvas ( ) ; var w = _canvas . width ; var h = _canvas . height ; var _ctx = _canvas . getContext ( "2d" ) ; _ctx . clearRect ( 0 , 0 , w , h ) ; var im _w = this . ImageHtml . width ; var im _h = this . ImageHtml . height ; var _x = 0 ; var _y = 0 ; var _w = 0 ;
var _h = 0 ; var koef1 = w / h ; var koef2 = im _w / im _h ; if ( koef1 > koef2 ) { _h = h ; _w = koef2 * _h >> 0 ; _y = 0 ; _x = w - _w >> 1 } else { _w = w ; _h = _w / koef2 >> 0 ; _x = 0 ; _y = h - _h >> 1 } _ctx . drawImage ( this . ImageHtml , _x , _y , _w , _h ) } ; CSignatureDrawer . prototype . selectImage = CSignatureDrawer . prototype [ "selectImage" ] = function ( ) { this . Text = "" ; window [ "AscDesktopEditor" ] [ "OpenFilenameDialog" ] ( "images" , false , function ( _file ) { var file = _file ; if ( Array . isArray ( file ) ) file = file [ 0 ] ; if ( ! file ) return ; var _drawer = window . Asc . g _signature _drawer ; _drawer . Image = window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( file ) ;
_drawer . ImageHtml = new Image ; _drawer . ImageHtml . onload = function ( ) { window . Asc . g _signature _drawer . drawImage ( ) } ; _drawer . ImageHtml . src = _drawer . Image ; _drawer = null } ) } ; CSignatureDrawer . prototype . isValid = function ( ) { return this . Image != "" || this . Text != "" } ; CSignatureDrawer . prototype . destroy = function ( ) { window . Asc . g _signature _drawer . CanvasParent . removeChild ( this . Canvas ) ; delete window . Asc . g _signature _drawer } ; function CSignatureImage ( ) { this . ImageValidBase64 = "" ; this . ImageInvalidBase64 = "" ; this . ImageValid = null ; this . ImageInvalid =
null ; this . Valid = false ; this . Loading = 0 ; this . Remove = function ( ) { this . ImageValidBase64 = "" ; this . ImageInvalidBase64 = "" ; this . ImageValid = null ; this . ImageInvalid = null ; this . Valid = false ; this . Loading = 0 } ; this . Register = function ( _api , _guid ) { if ( _api . ImageLoader . map _image _index [ _guid ] ) return ; var _obj = { Image : this . Valid ? this . ImageValid : this . ImageInvalid , Status : AscFonts . ImageLoadStatus . Complete , src : _guid } ; _api . ImageLoader . map _image _index [ _guid ] = _obj } ; this . Unregister = function ( _api , _guid ) { if ( _api . ImageLoader . map _image _index [ _guid ] ) delete _api . ImageLoader . map _image _index [ _guid ] } }
function CShortcuts ( ) { this . List = { } ; this . CustomCounter = 0 ; this . CustomActions = { } } CShortcuts . prototype . Add = function ( nType , nCode , isCtrl , isShift , isAlt ) { this . List [ this . private _GetIndex ( nCode , isCtrl , isShift , isAlt ) ] = nType } ; CShortcuts . prototype . Get = function ( nCode , isCtrl , isShift , isAlt ) { var nType = this . List [ this . private _GetIndex ( nCode , isCtrl , isShift , isAlt ) ] ; return undefined !== nType ? nType : 0 } ; CShortcuts . prototype . private _GetIndex = function ( nCode , isCtrl , isShift , isAlt ) { return nCode << 8 | ( isCtrl ? 4 : 0 ) | ( isShift ? 2 : 0 ) | ( isAlt ?
1 : 0 ) } ; CShortcuts . prototype . CheckType = function ( nType ) { for ( var nIndex in this . List ) if ( this . List [ nIndex ] === nType ) return { KeyCode : nIndex >>> 8 , CtrlKey : ! ! ( nIndex & 4 ) , ShiftKey : ! ! ( nIndex & 2 ) , AltKey : ! ! ( nIndex & 1 ) } ; return null } ; CShortcuts . prototype . Remove = function ( nCode , isCtrl , isShift , isAlt ) { delete this . List [ this . private _GetIndex ( nCode , isCtrl , isShift , isAlt ) ] } ; CShortcuts . prototype . RemoveByType = function ( nType ) { for ( var nIndex in this . List ) if ( this . List [ nIndex ] === nType ) delete this . List [ nIndex ] } ; CShortcuts . prototype . GetNewCustomType =
function ( ) { return 16711680 | this . CustomCounter ++ } ; CShortcuts . prototype . IsCustomType = function ( nType ) { return nType >= 16711680 } ; CShortcuts . prototype . GetCustomAction = function ( nType ) { return this . CustomActions [ nType ] } ; CShortcuts . prototype . AddCustomActionSymbol = function ( nCharCode , sFont ) { var nType = this . GetNewCustomType ( ) ; this . CustomActions [ nType ] = new CCustomShortcutActionSymbol ( nCharCode , sFont ) ; return nType } ; function CCustomShortcutActionSymbol ( nCharCode , sFont ) { this . CharCode = nCharCode ; this . Font = sFont } CCustomShortcutActionSymbol . prototype . Type =
AscCommon . c _oAscCustomShortcutType . Symbol ; AscCommon . EncryptionMessageType = { Encrypt : 0 , Decrypt : 1 } ; function CEncryptionData ( ) { this . _init = false ; this . arrData = [ ] ; this . arrImages = [ ] ; this . handleChangesCallback = null ; this . isChangesHandled = false ; this . cryptoMode = 0 ; this . isChartEditor = false ; this . isExistDecryptedChanges = false ; this . cryptoPrefix = window [ "AscDesktopEditor" ] && window [ "AscDesktopEditor" ] [ "GetEncryptedHeader" ] ? window [ "AscDesktopEditor" ] [ "GetEncryptedHeader" ] ( ) : "ENCRYPTED;" ; this . cryptoPrefixLen = this . cryptoPrefix . length ;
this . editorId = null ; this . nextChangesTimeoutId = - 1 ; this . isPasswordCryptoPresent = false ; this . init = function ( ) { this . _init = true } ; this . isInit = function ( ) { return this . _init } ; this . isNeedCrypt = function ( ) { if ( window . g _asc _plugins ) if ( ! window . g _asc _plugins . isRunnedEncryption ( ) ) return false ; if ( ! window [ "AscDesktopEditor" ] ) return false ; if ( this . isChartEditor ) return false ; if ( 2 == this . cryptoMode ) return true ; if ( 0 === window [ "AscDesktopEditor" ] [ "CryptoMode" ] ) return false ; return true } ; this . isCryptoImages = function ( ) { return this . isNeedCrypt ( ) &&
this . isPasswordCryptoPresent } ; this . addCryproImagesFromDialog = function ( callback ) { var _this = this ; window [ "AscDesktopEditor" ] [ "OpenFilenameDialog" ] ( "images" , true , function ( files ) { if ( ! files ) return ; if ( ! Array . isArray ( files ) ) files = [ files ] ; if ( 0 === files . length ) return ; var _files = [ ] ; var _options = { isImageCrypt : true , callback : callback , ext : [ ] } ; for ( var i = 0 ; i < files . length ; i ++ ) { _files . push ( window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( files [ i ] , true ) ) ; _options . ext . push ( AscCommon . GetFileExtension ( files [ i ] ) ) } _this . sendChanges ( this ,
_files , AscCommon . EncryptionMessageType . Encrypt , _options ) } ) } ; this . addCryproImagesFromUrls = function ( urls , callback ) { var _editor = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; _editor . sync _StartAction ( Asc . c _oAscAsyncActionType . BlockInteraction , Asc . c _oAscAsyncAction . LoadImage ) ; var _this = this ; window [ "AscDesktopEditor" ] [ "DownloadFiles" ] ( urls , [ ] , function ( files ) { _editor . sync _EndAction ( Asc . c _oAscAsyncActionType . BlockInteraction , Asc . c _oAscAsyncAction . LoadImage ) ; _editor . sync _StartAction ( Asc . c _oAscAsyncActionType . BlockInteraction ,
Asc . c _oAscAsyncAction . UploadImage ) ; var _files = [ ] ; var _options = { isImageCrypt : true , isUrls : true , callback : callback , ext : [ ] , api : _editor } ; for ( var elem in files ) { _files . push ( window [ "AscDesktopEditor" ] [ "GetImageBase64" ] ( files [ elem ] , true ) ) ; _options . ext . push ( window [ "AscDesktopEditor" ] [ "GetImageFormat" ] ( files [ elem ] ) ) ; window [ "AscDesktopEditor" ] [ "RemoveFile" ] ( files [ elem ] ) } _this . sendChanges ( this , _files , AscCommon . EncryptionMessageType . Encrypt , _options ) } ) } ; this . onDecodeError = function ( ) { var _editor = window [ "Asc" ] [ "editor" ] ?
window [ "Asc" ] [ "editor" ] : window . editor ; _editor . sendEvent ( "asc_onError" , Asc . c _oAscError . ID . DataEncrypted , Asc . c _oAscError . Level . Critical ) } ; this . checkEditorId = function ( ) { if ( null == this . editorId ) { var _editor = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; this . editorId = _editor . editorId } } ; this . decryptImage = function ( src , img , data ) { this . sendChanges ( this , [ data ] , AscCommon . EncryptionMessageType . Decrypt , { isImageDecrypt : true , src : src , img : img } ) } ; this . nextChanges = function ( ) { this . nextChangesTimeoutId =
setTimeout ( function ( ) { AscCommon . EncryptionWorker . sendChanges ( undefined , undefined ) ; this . nextChangesTimeoutId = - 1 } , 10 ) } ; this . sendChanges = function ( sender , data , type , options ) { if ( ! this . isNeedCrypt ( ) ) { if ( AscCommon . EncryptionMessageType . Encrypt == type ) sender . _send ( data , true ) ; else if ( AscCommon . EncryptionMessageType . Decrypt == type ) { if ( this . isExistEncryptedChanges ( data [ "changes" ] ) ) { this . onDecodeError ( ) ; return } sender . _onSaveChanges ( data , true ) } return } if ( undefined !== type ) this . arrData . push ( { sender : sender , type : type ,
data : data , options : options } ) ; if ( this . arrData . length == 0 ) return ; if ( undefined !== type && ( 1 != this . arrData . length || ! this . isChangesHandled ) ) return ; if ( undefined !== type && - 1 != this . nextChangesTimeoutId ) { clearTimeout ( this . nextChangesTimeoutId ) ; this . nextChangesTimeoutId = - 1 } if ( AscCommon . EncryptionMessageType . Encrypt == this . arrData [ 0 ] . type ) if ( this . arrData [ 0 ] . options && this . arrData [ 0 ] . options . isImageCrypt ) window . g _asc _plugins . sendToEncryption ( { "type" : "encryptData" , "data" : this . arrData [ 0 ] . data } ) ; else window . g _asc _plugins . sendToEncryption ( { "type" : "encryptData" ,
"data" : JSON . parse ( this . arrData [ 0 ] . data [ "changes" ] ) } ) ; else if ( AscCommon . EncryptionMessageType . Decrypt == this . arrData [ 0 ] . type ) if ( this . arrData [ 0 ] . options && this . arrData [ 0 ] . options . isImageDecrypt ) window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" , "data" : this . arrData [ 0 ] . data } ) ; else window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" , "data" : this . arrData [ 0 ] . data [ "changes" ] } ) } ; this . receiveChanges = function ( obj ) { var data = obj [ "data" ] ; var check = obj [ "check" ] ; if ( ! check ) { this . onDecodeError ( ) ; return } if ( this . handleChangesCallback ) { this . isExistDecryptedChanges =
true ; this . checkEditorId ( ) ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = data . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changesBase [ i ] = data [ i ] ; else for ( var i = data . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changesBase [ i ] . m _pData = data [ i ] ; this . isChangesHandled = true ; this . handleChangesCallback . callback . call ( this . handleChangesCallback . sender ) ; this . handleChangesCallback = null ; this . nextChanges ( ) ; return } var obj = this . arrData [ 0 ] ; this . arrData . splice ( 0 , 1 ) ; if ( AscCommon . EncryptionMessageType . Encrypt ==
obj . type ) if ( obj . options && obj . options . isImageCrypt ) { for ( var i = 0 ; i < data . length ; i ++ ) if ( this . cryptoPrefix == data [ i ] . substr ( 0 , this . cryptoPrefixLen ) ) data [ i ] = this . cryptoPrefix + obj . options . ext [ i ] + ";" + data [ i ] . substr ( this . cryptoPrefixLen ) ; if ( ! obj . options . isUrls ) obj . options . callback ( Asc . c _oAscError . ID . No , data ) ; else AscCommon . UploadImageUrls ( data , obj . options . api . documentId , obj . options . api . documentUserId , obj . options . api . CoAuthoringApi . get _jwt ( ) , function ( urls ) { obj . options . api . sync _EndAction ( Asc . c _oAscAsyncActionType . BlockInteraction ,
Asc . c _oAscAsyncAction . UploadImage ) ; obj . options . callback ( urls ) } ) } else { obj . data [ "changes" ] = JSON . stringify ( data ) ; obj . sender . _send ( obj . data , true ) } else if ( AscCommon . EncryptionMessageType . Decrypt == obj . type ) if ( obj . options && obj . options . isImageDecrypt ) { window [ "AscDesktopEditor" ] [ "ResaveFile" ] ( obj . options . src , data [ 0 ] ) ; obj . options . img [ "onload_crypto" ] ( obj . options . src ) } else { this . isExistDecryptedChanges = true ; obj . data [ "changes" ] = data ; obj . sender . _onSaveChanges ( obj . data , true ) } this . nextChanges ( ) } ; this . isExistEncryptedChanges =
function ( _array ) { if ( 0 == _array . length ) return false ; this . checkEditorId ( ) ; var isChangesMode = _array [ 0 ] [ "change" ] ? true : false ; var _prefix = "" ; var _checkPrefixLen = this . cryptoPrefixLen + 1 ; if ( isChangesMode ) { for ( var i = _array . length - 1 ; i >= 0 ; i -- ) if ( _array [ i ] [ "change" ] . length > _checkPrefixLen ) { _prefix = _array [ i ] [ "change" ] . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } return isCrypted } var isCrypted = false ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = _array . length -
1 ; i >= 0 ; i -- ) { if ( _array [ i ] . length > _checkPrefixLen ) { _prefix = _array [ i ] . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } } else for ( var i = _array . length - 1 ; i >= 0 ; i -- ) if ( _array [ i ] . m _pData . length > _checkPrefixLen ) { _prefix = _array [ i ] . m _pData . substr ( 0 , _checkPrefixLen ) ; if ( - 1 != _prefix . indexOf ( this . cryptoPrefix ) ) { isCrypted = true ; break } } return isCrypted } ; this . handleChanges = function ( _array , _sender , _callback ) { if ( 0 == _array . length || ! this . isNeedCrypt ( ) ) { if ( this . isExistEncryptedChanges ( _array ) ) { this . onDecodeError ( ) ;
return } this . isChangesHandled = true ; _callback . call ( _sender ) ; return } this . handleChangesCallback = { changesBase : _array , changes : [ ] , sender : _sender , callback : _callback } ; this . checkEditorId ( ) ; if ( this . editorId == AscCommon . c _oEditorId . Spreadsheet ) for ( var i = _array . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changes [ i ] = _array [ i ] ; else for ( var i = _array . length - 1 ; i >= 0 ; i -- ) this . handleChangesCallback . changes [ i ] = _array [ i ] . m _pData ; window . g _asc _plugins . sendToEncryption ( { "type" : "decryptData" , "data" : this . handleChangesCallback . changes } ) } ;
this . asc _setAdvancedOptions = function ( api , idOption , option ) { if ( window . isNativeOpenPassword ) { window [ "AscDesktopEditor" ] [ "NativeViewerOpen" ] ( option . asc _getPassword ( ) ) ; return } if ( window . isCloudCryptoDownloadAs ) return false ; if ( ! this . isNeedCrypt ( ) ) return false ; window . checkPasswordFromPlugin = true ; if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . TXT === idOption ) { var _param = "<m_nCsvTxtEncoding>" + option . asc _getCodePage ( ) + "</m_nCsvTxtEncoding>" ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } else if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . CSV ===
idOption ) { var delimiter = option . asc _getDelimiter ( ) ; var delimiterChar = option . asc _getDelimiterChar ( ) ; var _param = "" ; _param += "<m_nCsvTxtEncoding>" + option . asc _getCodePage ( ) + "</m_nCsvTxtEncoding>" ; if ( null != delimiter ) _param += "<m_nCsvDelimiter>" + delimiter + "</m_nCsvDelimiter>" ; if ( null != delimiterChar ) _param += "<m_nCsvDelimiterChar>" + delimiterChar + "</m_nCsvDelimiterChar>" ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } else if ( window [ "Asc" ] . c _oAscAdvancedOptionsID . DRM === idOption ) { var _param = "<m_sPassword>" +
AscCommon . CopyPasteCorrectString ( option . asc _getPassword ( ) ) + "</m_sPassword>" ; api . currentPassword = option . asc _getPassword ( ) ; window [ "AscDesktopEditor" ] [ "SetAdvancedOptions" ] ( _param ) } return true } } AscCommon . EncryptionWorker = new CEncryptionData ; function CMouseSmoothWheelCorrector ( t , scrollFunction ) { this . _deltaX = 0 ; this . _deltaY = 0 ; this . _isBreakX = false ; this . _isBreakY = false ; this . _timeoutCorrector = - 1 ; this . _api = t ; this . _scrollFunction = scrollFunction ; this . _normalDelta = 120 ; this . _isNormalDeltaActive = false ; this . setNormalDeltaActive =
function ( value ) { this . _isNormalDeltaActive = true ; this . _normalDelta = value } ; this . isBreakX = function ( ) { return this . _isBreakX } ; this . isBreakY = function ( ) { return this . _isBreakY } ; this . get _DeltaX = function ( wheelDeltaX ) { this . _isBreakX = false ; if ( ! AscCommon . AscBrowser . isMacOs ) return wheelDeltaX ; this . _deltaX += wheelDeltaX ; if ( Math . abs ( this . _deltaX ) >= this . _normalDelta ) return this . _isNormalDeltaActive ? this . _deltaX > 0 ? this . _normalDelta : - this . _normalDelta : this . _deltaX ; this . _isBreakX = true ; return 0 } ; this . get _DeltaY = function ( wheelDeltaY ) { this . _isBreakY =
false ; if ( ! AscCommon . AscBrowser . isMacOs ) return wheelDeltaY ; this . _deltaY += wheelDeltaY ; if ( Math . abs ( this . _deltaY ) >= this . _normalDelta ) return this . _isNormalDeltaActive ? this . _deltaY > 0 ? this . _normalDelta : - this . _normalDelta : this . _deltaY ; this . _isBreakY = true ; return 0 } ; this . checkBreak = function ( ) { if ( - 1 != this . _timeoutCorrector ) { clearTimeout ( this . _timeoutCorrector ) ; this . _timeoutCorrector = - 1 } if ( ( this . _isBreakX || this . _isBreakY ) && this . _scrollFunction ) { var obj = { t : this , x : this . _isBreakX ? this . _deltaX : 0 , y : this . _isBreakY ?
this . _deltaY : 0 } ; this . _timeoutCorrector = setTimeout ( function ( ) { var t = obj . t ; t . _scrollFunction . call ( t . _api , obj . x , obj . y ) ; t . _timeoutCorrector = - 1 ; t . _deltaX = 0 ; t . _deltaY = 0 } , 100 ) } if ( ! this . _isBreakX ) this . _deltaX = 0 ; if ( ! this . _isBreakY ) this . _deltaY = 0 ; this . _isBreakX = false ; this . _isBreakY = false } } AscCommon . CMouseSmoothWheelCorrector = CMouseSmoothWheelCorrector ; function CTranslateManager ( ) { this . mapTranslate = { } } CTranslateManager . prototype . init = function ( map ) { this . mapTranslate = map || { } } ; CTranslateManager . prototype . getValue =
function ( key ) { return this . mapTranslate . hasOwnProperty ( key ) ? this . mapTranslate [ key ] : key } ; function CPolygonPoint2 ( X , Y ) { this . X = X ; this . Y = Y } function CPolygonVectors ( ) { this . Page = - 1 ; this . VX = [ ] ; this . VY = [ ] } function CPolygonPath ( precision ) { this . Page = - 1 ; this . Direction = 1 ; this . precision = precision ; this . Points = [ ] } CPolygonPath . prototype . PushPoint = function ( x , y ) { this . Points . push ( new CPolygonPoint2 ( x / this . precision , y / this . precision ) ) } ; CPolygonPath . prototype . CorrectExtremePoints = function ( ) { var Lng = this . Points . length ;
this . Points [ 0 ] . X = this . Points [ Lng - 1 ] . X ; this . Points [ Lng - 1 ] . Y = this . Points [ 0 ] . Y } ; function CPolygon ( ) { this . Vectors = [ ] ; this . precision = 1E3 } CPolygon . prototype . fill = function ( arrBounds ) { this . Vectors . length = 0 ; if ( arrBounds . length <= 0 ) return ; var nStartLineIndex = 0 , nStartIndex = 0 , CountLines = arrBounds . length , CountBounds ; while ( nStartLineIndex < arrBounds . length ) { CountBounds = arrBounds [ nStartLineIndex ] . length ; while ( nStartIndex < CountBounds ) if ( arrBounds [ nStartLineIndex ] [ nStartIndex ] . W < . 001 ) nStartIndex ++ ; else break ; if ( nStartIndex <
CountBounds ) break ; nStartLineIndex ++ ; nStartIndex = 0 } if ( nStartLineIndex >= arrBounds . length ) return ; var CurrentPage = arrBounds [ nStartLineIndex ] [ nStartIndex ] . Page , CurrentVectors = new CPolygonVectors , VectorsX = CurrentVectors . VX , VectorsY = CurrentVectors . VY ; CurrentVectors . Page = CurrentPage ; this . Vectors . push ( CurrentVectors ) ; for ( var LineIndex = nStartLineIndex ; LineIndex < CountLines ; nStartIndex = 0 , LineIndex ++ ) { if ( arrBounds [ LineIndex ] [ nStartIndex ] . Page !== CurrentPage ) { CurrentPage = arrBounds [ LineIndex ] [ nStartIndex ] . Page ; CurrentVectors =
new CPolygonVectors ; VectorsX = CurrentVectors . VX ; VectorsY = CurrentVectors . VY ; CurrentVectors . Page = CurrentPage ; this . Vectors . push ( CurrentVectors ) } for ( var Index = nStartIndex ; Index < arrBounds [ LineIndex ] . length ; Index ++ ) { var oBound = arrBounds [ LineIndex ] [ Index ] ; if ( oBound . W < . 001 ) continue ; var x1 = Math . round ( oBound . X * this . precision ) , x2 = Math . round ( ( oBound . X + oBound . W ) * this . precision ) , y1 = Math . round ( oBound . Y * this . precision ) , y2 = Math . round ( ( oBound . Y + oBound . H ) * this . precision ) ; if ( VectorsX [ y1 ] == undefined ) VectorsX [ y1 ] = { } ; this . IntersectionX ( VectorsX ,
x2 , x1 , y1 ) ; if ( VectorsY [ x1 ] == undefined ) VectorsY [ x1 ] = { } ; this . IntersectionY ( VectorsY , y1 , y2 , x1 ) ; if ( VectorsX [ y2 ] == undefined ) VectorsX [ y2 ] = { } ; this . IntersectionX ( VectorsX , x1 , x2 , y2 ) ; if ( VectorsY [ x2 ] == undefined ) VectorsY [ x2 ] = { } ; this . IntersectionY ( VectorsY , y2 , y1 , x2 ) } } } ; CPolygon . prototype . IntersectionX = function ( VectorsX , BeginX , EndX , Y ) { var CurrentVector = { } ; CurrentVector [ BeginX ] = EndX ; var VX = VectorsX [ Y ] ; if ( BeginX > EndX ) while ( true == this . IntersectVectorX ( CurrentVector , VX ) ) ; else while ( true == this . IntersectVectorX ( VX , CurrentVector ) ) ;
for ( var X in CurrentVector ) { var VBeginX = parseInt ( X ) ; var VEndX = CurrentVector [ VBeginX ] ; if ( VBeginX !== VEndX || VX [ VBeginX ] === undefined ) VX [ VBeginX ] = VEndX } } ; CPolygon . prototype . IntersectVectorX = function ( VectorOpp , VectorClW ) { for ( var X in VectorOpp ) { var VBeginX = parseInt ( X ) ; var VEndX = VectorOpp [ VBeginX ] ; if ( VEndX == VBeginX ) continue ; for ( var ClwX in VectorClW ) { var ClwBeginX = parseInt ( ClwX ) ; var ClwEndX = VectorClW [ ClwBeginX ] ; var bIntersection = false ; if ( ClwBeginX == ClwEndX ) continue ; if ( ClwBeginX <= VEndX && VBeginX <= ClwEndX ) { VectorOpp [ VBeginX ] =
VBeginX ; VectorClW [ ClwBeginX ] = VEndX ; VectorClW [ VBeginX ] = ClwEndX ; bIntersection = true } else if ( VEndX <= ClwBeginX && ClwEndX <= VBeginX ) { VectorClW [ ClwBeginX ] = ClwBeginX ; VectorOpp [ VBeginX ] = ClwEndX ; VectorOpp [ ClwBeginX ] = VEndX ; bIntersection = true } else if ( ClwBeginX < VEndX && VEndX < ClwEndX ) { VectorClW [ ClwBeginX ] = VEndX ; VectorOpp [ VBeginX ] = ClwEndX ; bIntersection = true } else if ( ClwBeginX < VBeginX && VBeginX < ClwEndX ) { VectorOpp [ ClwBeginX ] = VEndX ; VectorClW [ VBeginX ] = ClwEndX ; delete VectorOpp [ VBeginX ] ; delete VectorClW [ ClwBeginX ] ; bIntersection =
true } if ( bIntersection == true ) return true } } return false } ; CPolygon . prototype . IntersectionY = function ( VectorsY , BeginY , EndY , X ) { var bIntersect = false ; for ( var y in VectorsY [ X ] ) { var CurBeginY = parseInt ( y ) ; var CurEndY = VectorsY [ X ] [ CurBeginY ] ; var minY , maxY ; if ( CurBeginY < CurEndY ) { minY = CurBeginY ; maxY = CurEndY } else { minY = CurEndY ; maxY = CurBeginY } var bInterSection = ! ( maxY <= BeginY && maxY <= EndY || minY >= BeginY && minY >= EndY ) , bDirection = ( CurBeginY - CurEndY ) * ( BeginY - EndY ) < 0 ; if ( bInterSection && bDirection ) { VectorsY [ X ] [ CurBeginY ] = EndY ;
VectorsY [ X ] [ BeginY ] = CurEndY ; bIntersect = true } } if ( bIntersect == false ) VectorsY [ X ] [ BeginY ] = EndY } ; CPolygon . prototype . GetPaths = function ( shift ) { var Paths = [ ] ; shift *= this . precision ; for ( var PageIndex = 0 ; PageIndex < this . Vectors . length ; PageIndex ++ ) { var y , x1 , x2 , x , y1 , y2 ; var VectorsX = this . Vectors [ PageIndex ] . VX , VectorsY = this . Vectors [ PageIndex ] . VY , Page = this . Vectors [ PageIndex ] . Page ; for ( var LineIndex in VectorsX ) for ( var Index in VectorsX [ LineIndex ] ) { var Polygon = new CPolygonPath ( this . precision ) ; Polygon . Page = Page ; y = parseInt ( LineIndex ) ;
x1 = parseInt ( Index ) ; x2 = VectorsX [ y ] [ x1 ] ; VectorsX [ y ] [ x1 ] = - 1 ; var Direction = x1 > x2 ? 1 : - 1 ; var minY = y ; var SignRightLeft , SignDownUp ; var X , Y ; if ( x2 !== - 1 ) { SignRightLeft = x1 > x2 ? 1 : - 1 ; Y = y - SignRightLeft * shift ; Polygon . PushPoint ( x1 , Y ) ; while ( true ) { x = x2 ; y1 = y ; y2 = VectorsY [ x ] [ y1 ] ; if ( y2 == - 1 ) break ; else if ( y2 == undefined ) return [ ] ; VectorsY [ x ] [ y1 ] = - 1 ; SignDownUp = y1 > y2 ? 1 : - 1 ; X = x + SignDownUp * shift ; Polygon . PushPoint ( X , Y ) ; y = y2 ; x1 = x ; x2 = VectorsX [ y ] [ x1 ] ; if ( x2 == - 1 ) break ; else if ( x2 == undefined ) return [ ] ; VectorsX [ y ] [ x1 ] = - 1 ; SignRightLeft = x1 > x2 ?
1 : - 1 ; Y = y - SignRightLeft * shift ; Polygon . PushPoint ( X , Y ) ; if ( y < minY ) { minY = y ; Direction = x1 > x2 ? 1 : - 1 } } Polygon . PushPoint ( X , Y ) ; Polygon . CorrectExtremePoints ( ) ; Polygon . Direction = Direction ; Paths . push ( Polygon ) } } } return Paths } ; function CMathTrack ( ) { this . MathRect = { IsActive : false , Bounds : [ ] , ContentSelection : null } ; this . MathPolygons = [ ] ; this . MathSelectPolygons = [ ] } CMathTrack . prototype . Update = function ( IsActive , IsContentActive , oMath , PixelError ) { this . MathRect . IsActive = IsActive ; if ( true === IsActive && null !== oMath ) { var selectBounds =
true === IsContentActive ? oMath . Get _ContentSelection ( ) : null ; if ( selectBounds != null ) { var SelectPolygon = new CPolygon ; SelectPolygon . fill ( selectBounds ) ; this . MathSelectPolygons = SelectPolygon . GetPaths ( 0 ) } else this . MathSelectPolygons . length = 0 ; var arrBounds = oMath . Get _Bounds ( ) ; if ( arrBounds . length <= 0 ) return ; var MPolygon = new CPolygon ; MPolygon . fill ( arrBounds ) ; this . MathPolygons = MPolygon . GetPaths ( PixelError ) } } ; CMathTrack . prototype . Draw = function ( overlay , oPath , shift , color , dKoefX , dKoefY , left , top ) { var ctx = overlay . m _oContext ;
ctx . strokeStyle = color ; ctx . lineWidth = 1 ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nCount = Points . length ; var PrevX = Points [ nCount - 2 ] . X , PrevY = Points [ nCount - 2 ] . Y ; var _x = left + dKoefX * Points [ nCount - 2 ] . X , _y = top + dKoefY * Points [ nCount - 2 ] . Y ; var StartX , StartY ; for ( var nIndex = 0 ; nIndex < nCount ; nIndex ++ ) { if ( PrevX > Points [ nIndex ] . X ) _y = top + dKoefY * Points [ nIndex ] . Y - shift ; else if ( PrevX < Points [ nIndex ] . X ) _y = top + dKoefY * Points [ nIndex ] . Y + shift ; if ( PrevY < Points [ nIndex ] . Y ) _x = left + dKoefX * Points [ nIndex ] . X - shift ; else if ( PrevY > Points [ nIndex ] . Y ) _x =
left + dKoefX * Points [ nIndex ] . X + shift ; PrevX = Points [ nIndex ] . X ; PrevY = Points [ nIndex ] . Y ; if ( nIndex > 0 ) { overlay . CheckPoint ( _x , _y ) ; if ( 1 == nIndex ) { StartX = _x ; StartY = _y ; overlay . m _oContext . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } else overlay . m _oContext . lineTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } } overlay . m _oContext . lineTo ( ( StartX >> 0 ) + . 5 , ( StartY >> 0 ) + . 5 ) ; ctx . closePath ( ) ; ctx . stroke ( ) ; ctx . beginPath ( ) } ; CMathTrack . prototype . DrawWithMatrix = function ( overlay , oPath , ShiftX , ShiftY , color , dKoefX , dKoefY , left , top , m ) { var ctx = overlay . m _oContext ; ctx . strokeStyle =
color ; ctx . lineWidth = 1 ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nCount = Points . length ; var x = Points [ nCount - 2 ] . X , y = Points [ nCount - 2 ] . Y ; var _x , _y ; var PrevX = Points [ nCount - 2 ] . X , PrevY = Points [ nCount - 2 ] . Y ; var StartX , StartY ; for ( var nIndex = 0 ; nIndex < nCount ; nIndex ++ ) { if ( PrevX > Points [ nIndex ] . X ) y = Points [ nIndex ] . Y - ShiftY ; else if ( PrevX < Points [ nIndex ] . X ) y = Points [ nIndex ] . Y + ShiftY ; if ( PrevY < Points [ nIndex ] . Y ) x = Points [ nIndex ] . X - ShiftX ; else if ( PrevY > Points [ nIndex ] . Y ) x = Points [ nIndex ] . X + ShiftX ; PrevX = Points [ nIndex ] . X ; PrevY =
Points [ nIndex ] . Y ; if ( nIndex > 0 ) { _x = left + dKoefX * m . TransformPointX ( x , y ) ; _y = top + dKoefY * m . TransformPointY ( x , y ) ; overlay . CheckPoint ( _x , _y ) ; if ( 1 == nIndex ) { StartX = _x ; StartY = _y ; overlay . m _oContext . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } else overlay . m _oContext . lineTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } } overlay . m _oContext . lineTo ( ( StartX >> 0 ) + . 5 , ( StartY >> 0 ) + . 5 ) ; ctx . closePath ( ) ; ctx . stroke ( ) ; ctx . beginPath ( ) } ; CMathTrack . prototype . DrawSelectPolygon = function ( overlay , oPath , dKoefX , dKoefY , left , top , m ) { var ctx = overlay . m _oContext ; ctx . fillStyle =
"#375082" ; ctx . beginPath ( ) ; var Points = oPath . Points ; var nPointIndex ; var _x , _y , x , y , p ; for ( nPointIndex = 0 ; nPointIndex < Points . length - 1 ; nPointIndex ++ ) { p = Points [ nPointIndex ] ; if ( ! m ) { _x = left + dKoefX * p . X ; _y = top + dKoefY * p . Y } else { x = p . X ; y = p . Y ; _x = left + dKoefX * m . TransformPointX ( x , y ) ; _y = top + dKoefY * m . TransformPointY ( x , y ) } overlay . CheckPoint ( _x , _y ) ; if ( 0 == nPointIndex ) ctx . moveTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) ; else ctx . lineTo ( ( _x >> 0 ) + . 5 , ( _y >> 0 ) + . 5 ) } ctx . globalAlpha = . 2 ; ctx . fill ( ) ; ctx . globalAlpha = 1 } ; CMathTrack . prototype . IsActive = function ( ) { return this . MathRect . IsActive } ;
CMathTrack . prototype . GetPolygonsCount = function ( ) { return this . MathPolygons . length } ; CMathTrack . prototype . GetPolygon = function ( nIndex ) { return this . MathPolygons [ nIndex ] } ; CMathTrack . prototype . GetSelectPathsCount = function ( ) { return this . MathSelectPolygons . length } ; CMathTrack . prototype . GetSelectPath = function ( nIndex ) { return this . MathSelectPolygons [ nIndex ] } ; if ( ! Array . prototype . findIndex ) Object . defineProperty ( Array . prototype , "findIndex" , { value : function ( predicate ) { if ( this == null ) throw new TypeError ( "Array.prototype.findIndex called on null or undefined" ) ;
if ( typeof predicate !== "function" ) throw new TypeError ( "predicate must be a function" ) ; var list = Object ( this ) ; var length = list . length >>> 0 ; var thisArg = arguments [ 1 ] ; var value ; for ( var i = 0 ; i < length ; i ++ ) { value = list [ i ] ; if ( predicate . call ( thisArg , value , i , list ) ) return i } return - 1 } } ) ; if ( ! Array . prototype . fill ) Object . defineProperty ( Array . prototype , "fill" , { value : function ( value ) { if ( this == null ) throw new TypeError ( "this is null or not defined" ) ; var O = Object ( this ) ; var len = O . length >>> 0 ; var start = arguments [ 1 ] ; var relativeStart =
start >> 0 ; var k = relativeStart < 0 ? Math . max ( len + relativeStart , 0 ) : Math . min ( relativeStart , len ) ; var end = arguments [ 2 ] ; var relativeEnd = end === undefined ? len : end >> 0 ; var final = relativeEnd < 0 ? Math . max ( len + relativeEnd , 0 ) : Math . min ( relativeEnd , len ) ; while ( k < final ) { O [ k ] = value ; k ++ } return O } } ) ; if ( typeof Int8Array !== "undefined" && ! Int8Array . prototype . fill ) Int8Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint8Array !== "undefined" && ! Uint8Array . prototype . fill ) Uint8Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint8ClampedArray !==
"undefined" && ! Uint8ClampedArray . prototype . fill ) Uint8ClampedArray . prototype . fill = Array . prototype . fill ; if ( typeof Int16Array !== "undefined" && ! Int16Array . prototype . fill ) Int16Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint16Array !== "undefined" && ! Uint16Array . prototype . fill ) Uint16Array . prototype . fill = Array . prototype . fill ; if ( typeof Int32Array !== "undefined" && ! Int32Array . prototype . fill ) Int32Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint32Array !== "undefined" && ! Uint32Array . prototype . fill ) Uint32Array . prototype . fill =
Array . prototype . fill ; if ( typeof Float32Array !== "undefined" && ! Float32Array . prototype . fill ) Float32Array . prototype . fill = Array . prototype . fill ; if ( typeof Float64Array !== "undefined" && ! Float64Array . prototype . fill ) Float64Array . prototype . fill = Array . prototype . fill ; if ( typeof Uint8Array !== "undefined" && ! Uint8Array . prototype . slice ) Uint8Array . prototype . slice = Array . prototype . slice ; function parseText ( text , options , bTrimSpaces ) { var delimiterChar ; if ( options . asc _getDelimiterChar ( ) ) delimiterChar = options . asc _getDelimiterChar ( ) ;
else switch ( options . asc _getDelimiter ( ) ) { case AscCommon . c _oAscCsvDelimiter . None : delimiterChar = undefined ; break ; case AscCommon . c _oAscCsvDelimiter . Tab : delimiterChar = "\t" ; break ; case AscCommon . c _oAscCsvDelimiter . Semicolon : delimiterChar = ";" ; break ; case AscCommon . c _oAscCsvDelimiter . Colon : delimiterChar = ":" ; break ; case AscCommon . c _oAscCsvDelimiter . Comma : delimiterChar = "," ; break ; case AscCommon . c _oAscCsvDelimiter . Space : delimiterChar = " " ; break } var matrix = [ ] ; var rows = text . split ( /\r?\n/ ) ; for ( var i = 0 ; i < rows . length ; ++ i ) { var row =
rows [ i ] ; if ( " " === delimiterChar && bTrimSpaces ) { var addSpace = false ; if ( row [ 0 ] === delimiterChar ) addSpace = true ; row = addSpace ? delimiterChar + row . trim ( ) : row . trim ( ) } matrix . push ( row . split ( delimiterChar ) ) } return matrix } function getTimeISO8601 ( dateStr ) { if ( dateStr ) if ( dateStr . endsWith ( "Z" ) ) return Date . parse ( dateStr ) ; else return Date . parse ( dateStr + "Z" ) ; return NaN } function valueToMmType ( value ) { var oVal = parseFloat ( value ) ; var oType ; if ( ! isNaN ( oVal ) ) { if ( - 1 !== value . indexOf ( "%" ) ) { oType = "%" ; oVal /= 100 } else if ( - 1 !== value . indexOf ( "px" ) ) { oType =
"px" ; oVal *= AscCommon . g _dKoef _pix _to _mm } else if ( - 1 !== value . indexOf ( "in" ) ) { oType = "in" ; oVal *= AscCommonWord . g _dKoef _in _to _mm } else if ( - 1 !== value . indexOf ( "cm" ) ) { oType = "cm" ; oVal *= 10 } else if ( - 1 !== value . indexOf ( "mm" ) ) oType = "mm" ; else if ( - 1 !== value . indexOf ( "pt" ) ) { oType = "pt" ; oVal *= AscCommonWord . g _dKoef _pt _to _mm } else if ( - 1 !== value . indexOf ( "pc" ) ) { oType = "pc" ; oVal *= AscCommonWord . g _dKoef _pc _to _mm } else oType = "none" ; return { val : oVal , type : oType } } return null } function valueToMm ( value ) { var obj = valueToMmType ( value ) ; if ( obj &&
"%" !== obj . type && "none" !== obj . type ) return obj . val ; return null } function arrayMove ( array , from , to ) { array . splice ( to , 0 , array . splice ( from , 1 ) [ 0 ] ) } function getRangeArray ( start , stop ) { var res = new Array ( stop - start ) ; for ( var i = start ; i < stop ; ++ i ) res [ i - start ] = i ; return res } var g _oBackoffDefaults = { retries : 2 , factor : 2 , minTimeout : 100 , maxTimeout : 2E3 , randomize : true } ; function Backoff ( opts ) { this . attempts = 0 ; this . opts = opts } Backoff . prototype . attempt = function ( fError , fRetry ) { var timeout = this . nextTimeout ( ) ; if ( timeout > 0 ) setTimeout ( function ( ) { fRetry ( ) } ,
timeout ) ; else fError ( ) } ; Backoff . prototype . nextTimeout = function ( ) { var timeout = - 1 ; if ( this . attempts < this . opts . retries ) { timeout = this . createTimeout ( this . attempts , this . opts ) ; this . attempts ++ } return timeout } ; Backoff . prototype . createTimeout = function ( attempt , opts ) { var random = opts . randomize ? Math . random ( ) + 1 : 1 ; var timeout = Math . round ( random * opts . minTimeout * Math . pow ( opts . factor , attempt ) ) ; timeout = Math . min ( timeout , opts . maxTimeout ) ; return timeout } ; function backoffOnError ( obj , onError , onRetry ) { if ( ! onRetry ) return onError ;
var backoff = new Backoff ( g _oBackoffDefaults ) ; return function ( ) { var timeout = backoff . nextTimeout ( ) ; if ( timeout > 0 ) setTimeout ( function ( ) { onRetry . call ( obj , obj ) } , timeout ) ; else if ( onError ) onError . apply ( obj , arguments ) } } function backoffOnErrorImg ( img , onRetry ) { if ( ! onRetry ) onRetry = function ( img ) { img . setAttribute ( "src" , img . getAttribute ( "src" ) ) } ; img . onerror = backoffOnError ( img , img . onerror , onRetry ) } function isEmptyObject ( obj ) { for ( var name in obj ) return false ; return true } window [ "AscCommon" ] = window [ "AscCommon" ] || { } ;
window [ "AscCommon" ] . getSockJs = getSockJs ; window [ "AscCommon" ] . getJSZipUtils = getJSZipUtils ; window [ "AscCommon" ] . getJSZip = getJSZip ; window [ "AscCommon" ] . getBaseUrl = getBaseUrl ; window [ "AscCommon" ] . getEncodingParams = getEncodingParams ; window [ "AscCommon" ] . getEncodingByBOM = getEncodingByBOM ; window [ "AscCommon" ] . saveWithParts = saveWithParts ; window [ "AscCommon" ] . loadFileContent = loadFileContent ; window [ "AscCommon" ] . getImageFromChanges = getImageFromChanges ; window [ "AscCommon" ] . openFileCommand = openFileCommand ; window [ "AscCommon" ] . sendCommand =
sendCommand ; window [ "AscCommon" ] . sendSaveFile = sendSaveFile ; window [ "AscCommon" ] . mapAscServerErrorToAscError = mapAscServerErrorToAscError ; window [ "AscCommon" ] . joinUrls = joinUrls ; window [ "AscCommon" ] . getFullImageSrc2 = getFullImageSrc2 ; window [ "AscCommon" ] . fSortAscending = fSortAscending ; window [ "AscCommon" ] . fSortDescending = fSortDescending ; window [ "AscCommon" ] . isLeadingSurrogateChar = isLeadingSurrogateChar ; window [ "AscCommon" ] . decodeSurrogateChar = decodeSurrogateChar ; window [ "AscCommon" ] . encodeSurrogateChar = encodeSurrogateChar ;
window [ "AscCommon" ] . convertUnicodeToUTF16 = convertUnicodeToUTF16 ; window [ "AscCommon" ] . convertUTF16toUnicode = convertUTF16toUnicode ; window [ "AscCommon" ] . build _local _rx = build _local _rx ; window [ "AscCommon" ] . GetFileName = GetFileName ; window [ "AscCommon" ] . GetFileExtension = GetFileExtension ; window [ "AscCommon" ] . changeFileExtention = changeFileExtention ; window [ "AscCommon" ] . getExtentionByFormat = getExtentionByFormat ; window [ "AscCommon" ] . InitOnMessage = InitOnMessage ; window [ "AscCommon" ] . ShowImageFileDialog = ShowImageFileDialog ;
window [ "AscCommon" ] . ShowDocumentFileDialog = ShowDocumentFileDialog ; window [ "AscCommon" ] . InitDragAndDrop = InitDragAndDrop ; window [ "AscCommon" ] . UploadImageFiles = UploadImageFiles ; window [ "AscCommon" ] . UploadImageUrls = UploadImageUrls ; window [ "AscCommon" ] . CanDropFiles = CanDropFiles ; window [ "AscCommon" ] . getUrlType = getUrlType ; window [ "AscCommon" ] . prepareUrl = prepareUrl ; window [ "AscCommon" ] . getUserColorById = getUserColorById ; window [ "AscCommon" ] . isNullOrEmptyString = isNullOrEmptyString ; window [ "AscCommon" ] . unleakString =
unleakString ; window [ "AscCommon" ] . readValAttr = readValAttr ; window [ "AscCommon" ] . getNumFromXml = getNumFromXml ; window [ "AscCommon" ] . getColorFromXml = getColorFromXml ; window [ "AscCommon" ] . getBoolFromXml = getBoolFromXml ; window [ "AscCommon" ] . initStreamFromResponse = initStreamFromResponse ; window [ "AscCommon" ] . checkStreamSignature = checkStreamSignature ; window [ "AscCommon" ] . DocumentUrls = DocumentUrls ; window [ "AscCommon" ] . OpenFileResult = OpenFileResult ; window [ "AscCommon" ] . CLock = CLock ; window [ "AscCommon" ] . CContentChanges = CContentChanges ;
window [ "AscCommon" ] . CContentChangesElement = CContentChangesElement ; window [ "AscCommon" ] . CorrectMMToTwips = CorrectMMToTwips ; window [ "AscCommon" ] . TwipsToMM = TwipsToMM ; window [ "AscCommon" ] . MMToTwips = MMToTwips ; window [ "AscCommon" ] . RomanToInt = RomanToInt ; window [ "AscCommon" ] . LatinNumberingToInt = LatinNumberingToInt ; window [ "AscCommon" ] . IntToNumberFormat = IntToNumberFormat ; window [ "AscCommon" ] . IsSpace = IsSpace ; window [ "AscCommon" ] . loadSdk = loadSdk ; window [ "AscCommon" ] . loadScript = loadScript ; window [ "AscCommon" ] . getAltGr =
getAltGr ; window [ "AscCommon" ] . getColorSchemeByName = getColorSchemeByName ; window [ "AscCommon" ] . getColorSchemeByIdx = getColorSchemeByIdx ; window [ "AscCommon" ] . getAscColorScheme = getAscColorScheme ; window [ "AscCommon" ] . checkAddColorScheme = checkAddColorScheme ; window [ "AscCommon" ] . getIndexColorSchemeInArray = getIndexColorSchemeInArray ; window [ "AscCommon" ] . isEastAsianScript = isEastAsianScript ; window [ "AscCommon" ] . CMathTrack = CMathTrack ; window [ "AscCommon" ] . CPolygon = CPolygon ; window [ "AscCommon" ] . JSZipWrapper = JSZipWrapper ;
window [ "AscCommon" ] . g _oDocumentUrls = g _oDocumentUrls ; window [ "AscCommon" ] . FormulaTablePartInfo = FormulaTablePartInfo ; window [ "AscCommon" ] . cBoolLocal = cBoolLocal ; window [ "AscCommon" ] . cErrorOrigin = cErrorOrigin ; window [ "AscCommon" ] . cErrorLocal = cErrorLocal ; window [ "AscCommon" ] . FormulaSeparators = FormulaSeparators ; window [ "AscCommon" ] . rx _space _g = rx _space _g ; window [ "AscCommon" ] . rx _space = rx _space ; window [ "AscCommon" ] . rx _defName = rx _defName ; window [ "AscCommon" ] . kCurFormatPainterWord = kCurFormatPainterWord ; window [ "AscCommon" ] . parserHelp =
parserHelp ; window [ "AscCommon" ] . g _oIdCounter = g _oIdCounter ; window [ "AscCommon" ] . g _oHtmlCursor = g _oHtmlCursor ; window [ "AscCommon" ] . g _oBackoffDefaults = g _oBackoffDefaults ; window [ "AscCommon" ] . Backoff = Backoff ; window [ "AscCommon" ] . backoffOnErrorImg = backoffOnErrorImg ; window [ "AscCommon" ] . isEmptyObject = isEmptyObject ; window [ "AscCommon" ] . CSignatureDrawer = window [ "AscCommon" ] [ "CSignatureDrawer" ] = CSignatureDrawer ; var prot = CSignatureDrawer . prototype ; prot [ "getImages" ] = prot . getImages ; prot [ "setText" ] = prot . setText ; prot [ "selectImage" ] =
prot . selectImage ; prot [ "isValid" ] = prot . isValid ; prot [ "destroy" ] = prot . destroy ; window [ "AscCommon" ] . translateManager = new CTranslateManager ; window [ "AscCommon" ] . parseText = parseText ; window [ "AscCommon" ] . getTimeISO8601 = getTimeISO8601 ; window [ "AscCommon" ] . valueToMm = valueToMm ; window [ "AscCommon" ] . valueToMmType = valueToMmType ; window [ "AscCommon" ] . arrayMove = arrayMove ; window [ "AscCommon" ] . getRangeArray = getRangeArray ; window [ "AscCommon" ] . CUnicodeStringEmulator = CUnicodeStringEmulator ; window [ "AscCommon" ] . private _IsAbbreviation =
private _IsAbbreviation ; window [ "AscCommon" ] . rx _test _ws _name = rx _test _ws _name ; window [ "AscCommon" ] . CShortcuts = window [ "AscCommon" ] [ "CShortcuts" ] = CShortcuts ; prot = CShortcuts . prototype ; prot [ "Add" ] = prot . Add ; prot [ "Get" ] = prot . Get ; prot [ "CheckType" ] = prot . CheckType ; prot [ "Remove" ] = prot . Remove ; prot [ "RemoveByType" ] = prot . RemoveByType ; prot [ "GetNewCustomType" ] = prot . GetNewCustomType ; prot [ "IsCustomType" ] = prot . IsCustomType ; prot [ "GetCustomAction" ] = prot . GetCustomAction ; prot [ "AddCustomActionSymbol" ] = prot . AddCustomActionSymbol ;
window [ "AscCommon" ] . CCustomShortcutActionSymbol = window [ "AscCommon" ] [ "CCustomShortcutActionSymbol" ] = CCustomShortcutActionSymbol } ) ( window ) ;
window [ "asc_initAdvancedOptions" ] = function ( _code , _file _hash , _docInfo ) { if ( window . isNativeOpenPassword ) return window [ "NativeFileOpen_error" ] ( window . isNativeOpenPassword , _file _hash , _docInfo ) ; var _editor = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; if ( _code == 90 || _code == 91 ) { if ( window [ "AscDesktopEditor" ] && 0 !== window [ "AscDesktopEditor" ] [ "CryptoMode" ] && ! _editor . isLoadFullApi ) { _editor . asc _initAdvancedOptions _params = [ ] ; _editor . asc _initAdvancedOptions _params . push ( _code ) ; _editor . asc _initAdvancedOptions _params . push ( _file _hash ) ;
_editor . asc _initAdvancedOptions _params . push ( _docInfo ) ; return } if ( AscCommon . EncryptionWorker . isNeedCrypt ( ) && ! window . checkPasswordFromPlugin ) { window . checkPasswordFromPlugin = true ; window . g _asc _plugins . sendToEncryption ( { "type" : "getPasswordByFile" , "hash" : _file _hash , "docinfo" : _docInfo } ) ; return } } window . checkPasswordFromPlugin = false ; _editor . _onNeedParams ( undefined , _code == 90 || _code == 91 ? true : undefined ) } ;
window [ "asc_IsNeedBuildCryptedFile" ] = function ( ) { if ( ! window [ "AscDesktopEditor" ] || ! window [ "AscDesktopEditor" ] [ "CryptoMode" ] ) return false ; var _api = window [ "Asc" ] [ "editor" ] ? window [ "Asc" ] [ "editor" ] : window . editor ; var _returnValue = false ; var _users = null ; if ( _api . CoAuthoringApi && _api . CoAuthoringApi . _CoAuthoringApi && _api . CoAuthoringApi . _CoAuthoringApi . _participants ) _users = _api . CoAuthoringApi . _CoAuthoringApi . _participants ; var _usersCount = 0 ; for ( var _user in _users ) _usersCount ++ ; var isOne = 1 >= _usersCount ? true : false ;