2021-08-28 23:46:21 +00:00
/ *
*
* ( c ) Copyright Ascensio System SIA 2010 - 2019
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
DE . ApplicationController = new ( function ( ) {
var me ,
api ,
config = { } ,
docConfig = { } ,
permissions = { } ,
maxPages = 0 ,
created = false ,
appOptions = { } ,
2021-09-01 23:26:43 +00:00
_submitFail , $submitedTooltip ,
2021-08-28 23:46:21 +00:00
bodyWidth = 0 ;
var LoadingDocument = - 256 ;
// Check browser
// -------------------------
2021-09-03 03:46:59 +00:00
if ( typeof isBrowserSupported !== 'undefined' && ! isBrowserSupported ( ) ) {
//Common.Gateway.reportError(undefined, this.unsupportedBrowserErrorText);
console . error ( this . unsupportedBrowserErrorText ) ;
2021-08-28 23:46:21 +00:00
return ;
2021-09-03 03:46:59 +00:00
}
2021-08-28 23:46:21 +00:00
common . localStorage . setId ( 'text' ) ;
common . localStorage . setKeysFilter ( 'de-,asc.text' ) ;
common . localStorage . sync ( ) ;
// Handlers
// -------------------------
function loadConfig ( data ) {
config = $ . extend ( config , data . config ) ;
}
function loadDocument ( data ) {
docConfig = data . doc ;
if ( docConfig ) {
permissions = $ . extend ( permissions , docConfig . permissions ) ;
var _permissions = $ . extend ( { } , docConfig . permissions ) ,
docInfo = new Asc . asc _CDocInfo ( ) ,
_user = new Asc . asc _CUserInfo ( ) ;
var canRenameAnonymous = ! ( ( typeof ( config . customization ) == 'object' ) && ( typeof ( config . customization . anonymous ) == 'object' ) && ( config . customization . anonymous . request === false ) ) ,
guestName = ( typeof ( config . customization ) == 'object' ) && ( typeof ( config . customization . anonymous ) == 'object' ) &&
( typeof ( config . customization . anonymous . label ) == 'string' ) && config . customization . anonymous . label . trim ( ) !== '' ?
common . utils . htmlEncode ( config . customization . anonymous . label ) : me . textGuest ,
2021-08-30 01:49:25 +00:00
value = canRenameAnonymous ? common . localStorage . getItem ( "guest-username" ) : null ; //,
2021-08-28 23:46:21 +00:00
user = common . utils . fillUserInfo ( config . user , config . lang , value ? ( value + ' (' + guestName + ')' ) : me . textAnonymous ,
common . localStorage . getItem ( "guest-id" ) || ( 'uid-' + Date . now ( ) ) ) ;
user . anonymous && common . localStorage . setItem ( "guest-id" , user . id ) ;
_user . put _Id ( user . id ) ;
_user . put _FullName ( user . fullname ) ;
_user . put _IsAnonymousUser ( user . anonymous ) ;
docInfo . put _Id ( docConfig . key ) ;
docInfo . put _Url ( docConfig . url ) ;
docInfo . put _Title ( docConfig . title ) ;
docInfo . put _Format ( docConfig . fileType ) ;
docInfo . put _VKey ( docConfig . vkey ) ;
docInfo . put _UserInfo ( _user ) ;
docInfo . put _Token ( docConfig . token ) ;
docInfo . put _Permissions ( _permissions ) ;
docInfo . put _EncryptedInfo ( config . encryptionKeys ) ;
2021-09-03 03:46:59 +00:00
var enable = ! config . customization || ( config . customization . macros !== false ) ;
2021-08-28 23:46:21 +00:00
docInfo . asc _putIsEnabledMacroses ( ! ! enable ) ;
enable = ! config . customization || ( config . customization . plugins !== false ) ;
2021-09-03 03:46:59 +00:00
docInfo . asc _putIsEnabledPlugins ( ! ! enable ) ;
2021-09-01 23:26:43 +00:00
2021-08-28 23:46:21 +00:00
var type = /^(?:(pdf|djvu|xps))$/ . exec ( docConfig . fileType ) ;
if ( type && typeof type [ 1 ] === 'string' ) {
permissions . edit = permissions . review = false ;
}
if ( api ) {
api . asc _registerCallback ( 'asc_onGetEditorPermissions' , onEditorPermissions ) ;
api . asc _registerCallback ( 'asc_onRunAutostartMacroses' , onRunAutostartMacroses ) ;
api . asc _setDocInfo ( docInfo ) ;
api . asc _getEditorPermissions ( config . licenseUrl , config . customerId ) ;
api . asc _enableKeyEvents ( true ) ;
}
}
}
2021-09-03 03:46:59 +00:00
function onLongActionBegin ( type , id ) {
2021-08-28 23:46:21 +00:00
if ( type == Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] ) {
if ( ! me . loadMask )
me . loadMask = new common . view . LoadMask ( ) ;
me . loadMask . show ( ) ;
}
}
function onLongActionEnd ( type , id ) {
me . loadMask && me . loadMask . hide ( ) ;
}
2021-09-03 03:46:59 +00:00
function onPrint ( ) {
if ( permissions . print !== false )
api . asc _Print ( new Asc . asc _CDownloadOptions ( null , false ) ) ;
}
function onPrintUrl ( url ) {
common . utils . dialogPrint ( url , api ) ;
}
2021-08-28 23:46:21 +00:00
function onDownloadUrl ( url , fileType ) {
Common . Gateway . downloadAs ( url , fileType ) ;
}
function hidePreloader ( ) {
$ ( '#loading-mask' ) . fadeOut ( 'slow' ) ;
}
function onDocumentContentReady ( ) {
hidePreloader ( ) ;
onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
var zf = ( config . customization && config . customization . zoom ? parseInt ( config . customization . zoom ) : - 2 ) ;
( zf == - 1 ) ? api . zoomFitToPage ( ) : ( ( zf == - 2 ) ? api . zoomFitToWidth ( ) : api . zoom ( zf > 0 ? zf : 100 ) ) ;
api . asc _registerCallback ( 'asc_onStartAction' , onLongActionBegin ) ;
api . asc _registerCallback ( 'asc_onEndAction' , onLongActionEnd ) ;
2021-08-30 01:49:25 +00:00
api . asc _registerCallback ( 'asc_onHyperlinkClick' , common . utils . openLink ) ;
2021-08-28 23:46:21 +00:00
api . asc _registerCallback ( 'asc_onDownloadUrl' , onDownloadUrl ) ;
2021-09-03 03:46:59 +00:00
api . asc _registerCallback ( 'asc_onPrint' , onPrint ) ;
api . asc _registerCallback ( 'asc_onPrintUrl' , onPrintUrl ) ;
2021-08-28 23:46:21 +00:00
2021-09-02 01:02:25 +00:00
Common . Gateway . on ( 'processmouse' , onProcessMouse ) ;
2021-09-03 03:46:59 +00:00
Common . Gateway . on ( 'downloadas' , onDownloadAs ) ;
2021-09-02 01:02:25 +00:00
Common . Gateway . on ( 'requestclose' , onRequestClose ) ;
2021-09-03 03:46:59 +00:00
var downloadAs = function ( format ) {
2021-08-28 23:46:21 +00:00
api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( format ) ) ;
2021-09-03 03:46:59 +00:00
} ;
2021-08-28 23:46:21 +00:00
// TODO: add asc_hasRequiredFields to sdk
Common . Gateway . documentReady ( ) ;
}
function onEditorPermissions ( params ) {
var licType = params . asc _getLicenseType ( ) ;
appOptions . canLicense = ( licType === Asc . c _oLicenseResult . Success || licType === Asc . c _oLicenseResult . SuccessLimit ) ;
2021-09-01 23:26:43 +00:00
//appOptions.canFillForms = appOptions.canLicense && (permissions.fillForms===true) && (config.mode !== 'view');
2021-08-28 23:46:21 +00:00
appOptions . canSubmitForms = appOptions . canLicense && ( typeof ( config . customization ) == 'object' ) && ! ! config . customization . submitForm ;
2021-09-01 23:26:43 +00:00
//api.asc_setViewMode(!appOptions.canFillForms);
//api.asc_setViewMode(false);
/*if (appOptions.canFillForms) {*/
2021-08-28 23:46:21 +00:00
2021-09-01 23:26:43 +00:00
//api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms);
//api.asc_SetFastCollaborative(true);
2021-08-28 23:46:21 +00:00
api . asc _setAutoSaveGap ( 1 ) ;
2021-09-01 23:26:43 +00:00
/*}*/
2021-08-28 23:46:21 +00:00
onLongActionBegin ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
api . asc _LoadDocument ( ) ;
api . Resize ( ) ;
}
function onOpenDocument ( progress ) {
var proc = ( progress . asc _getCurrentFont ( ) + progress . asc _getCurrentImage ( ) ) / ( progress . asc _getFontsCount ( ) + progress . asc _getImagesCount ( ) ) ;
me . loadMask && me . loadMask . setTitle ( me . textLoadingDocument + ': ' + common . utils . fixedDigits ( Math . min ( Math . round ( proc * 100 ) , 100 ) , 3 , " " ) + '%' ) ;
}
2021-09-03 03:46:59 +00:00
function onError ( id , level , errData ) {
2021-08-28 23:46:21 +00:00
if ( id == Asc . c _oAscError . ID . LoadingScriptError ) {
$ ( '#id-critical-error-title' ) . text ( me . criticalErrorTitle ) ;
$ ( '#id-critical-error-message' ) . text ( me . scriptLoadError ) ;
$ ( '#id-critical-error-close' ) . text ( me . txtClose ) . off ( ) . on ( 'click' , function ( ) {
window . location . reload ( ) ;
} ) ;
2021-09-03 03:46:59 +00:00
$ ( '#id-critical-error-dialog' ) . css ( 'z-index' , 20002 ) . modal ( 'show' ) ;
2021-08-28 23:46:21 +00:00
return ;
}
hidePreloader ( ) ;
onLongActionEnd ( Asc . c _oAscAsyncActionType [ 'BlockInteraction' ] , LoadingDocument ) ;
var message ;
switch ( id )
{
case Asc . c _oAscError . ID . Unknown :
message = me . unknownErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationTimeout :
message = me . convertationTimeoutText ;
break ;
case Asc . c _oAscError . ID . ConvertationError :
message = me . convertationErrorText ;
break ;
case Asc . c _oAscError . ID . DownloadError :
message = me . downloadErrorText ;
break ;
case Asc . c _oAscError . ID . ConvertationPassword :
message = me . errorFilePassProtect ;
break ;
case Asc . c _oAscError . ID . UserDrop :
message = me . errorUserDrop ;
break ;
case Asc . c _oAscError . ID . ConvertationOpenLimitError :
message = me . errorFileSizeExceed ;
break ;
case Asc . c _oAscError . ID . UpdateVersion :
message = me . errorUpdateVersionOnDisconnect ;
break ;
case Asc . c _oAscError . ID . AccessDeny :
message = me . errorAccessDeny ;
break ;
case Asc . c _oAscError . ID . Submit :
message = me . errorSubmit ;
_submitFail = true ;
$submitedTooltip && $submitedTooltip . hide ( ) ;
break ;
case Asc . c _oAscError . ID . EditingError :
message = me . errorEditingDownloadas ;
break ;
case Asc . c _oAscError . ID . ForceSaveButton :
case Asc . c _oAscError . ID . ForceSaveTimeout :
message = me . errorForceSave ;
break ;
case Asc . c _oAscError . ID . LoadingFontError :
message = me . errorLoadingFont ;
break ;
default :
message = me . errorDefaultMessage . replace ( '%1' , id ) ;
break ;
}
if ( level == Asc . c _oAscError . Level . Critical ) {
// report only critical errors
2021-09-03 03:46:59 +00:00
//Common.Gateway.reportError(id, message);
console . error ( id , message ) ;
2021-08-28 23:46:21 +00:00
$ ( '#id-critical-error-title' ) . text ( me . criticalErrorTitle ) ;
$ ( '#id-critical-error-message' ) . html ( message ) ;
$ ( '#id-critical-error-close' ) . text ( me . txtClose ) . off ( ) . on ( 'click' , function ( ) {
window . location . reload ( ) ;
} ) ;
}
else {
2021-09-03 03:46:59 +00:00
//Common.Gateway.reportWarning(id, message);
console . warn ( id , message ) ;
2021-08-28 23:46:21 +00:00
$ ( '#id-critical-error-title' ) . text ( me . notcriticalErrorTitle ) ;
$ ( '#id-critical-error-message' ) . html ( message ) ;
$ ( '#id-critical-error-close' ) . text ( me . txtClose ) . off ( ) . on ( 'click' , function ( ) {
$ ( '#id-critical-error-dialog' ) . modal ( 'hide' ) ;
} ) ;
}
$ ( '#id-critical-error-dialog' ) . modal ( 'show' ) ;
}
function onExternalMessage ( error ) {
if ( error ) {
hidePreloader ( ) ;
$ ( '#id-error-mask-title' ) . text ( me . criticalErrorTitle ) ;
$ ( '#id-error-mask-text' ) . text ( error . msg ) ;
$ ( '#id-error-mask' ) . css ( 'display' , 'block' ) ;
}
2021-09-03 03:46:59 +00:00
}
2021-08-28 23:46:21 +00:00
function onProcessMouse ( data ) {
if ( data . type == 'mouseup' ) {
var e = document . getElementById ( 'editor_sdk' ) ;
if ( e ) {
var r = e . getBoundingClientRect ( ) ;
api . OnMouseUp (
data . x - r . left ,
data . y - r . top
) ;
}
}
}
function onRequestClose ( ) {
Common . Gateway . requestClose ( ) ;
}
function onDownloadAs ( ) {
if ( permissions . download === false ) {
2021-09-03 03:46:59 +00:00
//Common.Gateway.reportError(Asc.c_oAscError.ID.AccessDeny, me.errorAccessDeny);
console . error ( Asc . c _oAscError . ID . AccessDeny , me . errorAccessDeny ) ;
2021-08-28 23:46:21 +00:00
return ;
}
2021-09-03 03:46:59 +00:00
if ( api ) api . asc _DownloadAs ( new Asc . asc _CDownloadOptions ( Asc . c _oAscFileType . DOCX , false ) ) ;
2021-08-28 23:46:21 +00:00
}
function onRunAutostartMacroses ( ) {
if ( ! config . customization || ( config . customization . macros !== false ) )
if ( api ) api . asc _runAutostartMacroses ( ) ;
}
function onBeforeUnload ( ) {
common . localStorage . save ( ) ;
}
// Helpers
// -------------------------
function onDocumentResize ( ) {
api && api . Resize ( ) ;
bodyWidth = $ ( 'body' ) . width ( ) ;
}
function createController ( ) {
if ( created )
return me ;
me = this ;
created = true ;
$ ( window ) . resize ( function ( ) {
onDocumentResize ( ) ;
} ) ;
window . onbeforeunload = onBeforeUnload ;
var ismodalshown = false ;
$ ( document . body ) . on ( 'show.bs.modal' , '.modal' ,
function ( e ) {
ismodalshown = true ;
api . asc _enableKeyEvents ( false ) ;
}
) . on ( 'hidden.bs.modal' , '.modal' ,
function ( e ) {
ismodalshown = false ;
api . asc _enableKeyEvents ( true ) ;
}
2021-09-03 03:46:59 +00:00
) . on ( 'hidden.bs.dropdown' , '.dropdown' ,
2021-08-28 23:46:21 +00:00
function ( e ) {
if ( ! ismodalshown )
api . asc _enableKeyEvents ( true ) ;
}
) . on ( 'blur' , 'input, textarea' ,
function ( e ) {
if ( ! ismodalshown ) {
if ( ! /area_id/ . test ( e . target . id ) ) {
api . asc _enableKeyEvents ( true ) ;
}
}
}
2021-09-03 03:46:59 +00:00
) ;
2021-08-28 23:46:21 +00:00
$ ( '#editor_sdk' ) . on ( 'click' , function ( e ) {
if ( e . target . localName == 'canvas' ) {
e . currentTarget . focus ( ) ;
}
} ) ;
2021-08-30 01:49:25 +00:00
window [ "flat_desine" ] = true ;
2021-08-28 23:46:21 +00:00
api = new Asc . asc _docs _api ( {
2021-09-09 02:55:43 +00:00
'id-view' : 'editor_sdk' ,
'embedded' : true
2021-08-28 23:46:21 +00:00
} ) ;
if ( api ) {
2021-09-03 03:46:59 +00:00
api . asc _registerCallback ( 'asc_onError' , onError ) ;
2021-08-28 23:46:21 +00:00
api . asc _registerCallback ( 'asc_onDocumentContentReady' , onDocumentContentReady ) ;
api . asc _registerCallback ( 'asc_onOpenDocumentProgress' , onOpenDocument ) ;
// Initialize api gateway
Common . Gateway . on ( 'init' , loadConfig ) ;
Common . Gateway . on ( 'opendocument' , loadDocument ) ;
2021-09-03 03:46:59 +00:00
Common . Gateway . on ( 'showmessage' , onExternalMessage ) ;
2021-08-28 23:46:21 +00:00
Common . Gateway . appReady ( ) ;
}
return me ;
}
return {
create : createController ,
errorDefaultMessage : 'Error code: %1' ,
unknownErrorText : 'Unknown error.' ,
convertationTimeoutText : 'Conversion timeout exceeded.' ,
convertationErrorText : 'Conversion failed.' ,
downloadErrorText : 'Download failed.' ,
criticalErrorTitle : 'Error' ,
notcriticalErrorTitle : 'Warning' ,
scriptLoadError : 'The connection is too slow, some of the components could not be loaded. Please reload the page.' ,
errorFilePassProtect : 'The file is password protected and cannot be opened.' ,
errorAccessDeny : 'You are trying to perform an action you do not have rights for.<br>Please contact your Document Server administrator.' ,
errorUserDrop : 'The file cannot be accessed right now.' ,
unsupportedBrowserErrorText : 'Your browser is not supported.' ,
textLoadingDocument : 'Loading document' ,
txtClose : 'Close' ,
errorFileSizeExceed : 'The file size exceeds the limitation set for your server.<br>Please contact your Document Server administrator for details.' ,
errorUpdateVersionOnDisconnect : 'Internet connection has been restored, and the file version has been changed.<br>Before you can continue working, you need to download the file or copy its content to make sure nothing is lost, and then reload this page.' ,
errorSubmit : 'Submit failed.' ,
errorEditingDownloadas : 'An error occurred during the work with the document.<br>Use the \'Download as...\' option to save the file backup copy to your computer hard drive.' ,
textGuest : 'Guest' ,
textAnonymous : 'Anonymous' ,
errorForceSave : "An error occurred while saving the file. Please use the 'Download as' option to save the file to your computer hard drive or try again later." ,
errorLoadingFont : 'Fonts are not loaded.<br>Please contact your Document Server administrator.'
}
} ) ( ) ;