2016-05-17 15:38:54 +00:00
/ *
*
2019-01-17 13:05:03 +00:00
* ( c ) Copyright Ascensio System SIA 2010 - 2019
2016-05-17 15:38:54 +00:00
*
* This program is a free software product . You can redistribute it and / or
* modify it under the terms of the GNU Affero General Public License ( AGPL )
* version 3 as published by the Free Software Foundation . In accordance with
* Section 7 ( a ) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non - infringement
* of any third - party rights .
*
* This program is distributed WITHOUT ANY WARRANTY ; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . For
* details , see the GNU AGPL at : http : //www.gnu.org/licenses/agpl-3.0.html
*
2019-01-17 13:00:34 +00:00
* You can contact Ascensio System SIA at 20 A - 12 Ernesta Birznieka - Upisha
* street , Riga , Latvia , EU , LV - 1050.
2016-05-17 15:38:54 +00:00
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices , as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7 ( b ) of the License you must retain the original Product
* logo when distributing the program . Pursuant to Section 7 ( e ) we decline to
* grant you any rights under trademark law for use of our trademarks .
*
* All the Product ' s GUI elements , including illustrations and icon sets , as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution - ShareAlike 4.0 International . See the License
* terms at http : //creativecommons.org/licenses/by-sa/4.0/legalcode
*
* /
/ * *
* User : Julia . Radzhabova
* Date : 17.05 . 16
* Time : 15 : 38
* /
define ( [
'core' ,
'common/main/lib/collection/Plugins' ,
2022-02-22 15:23:37 +00:00
'common/main/lib/view/Plugins' ,
'common/main/lib/view/PluginDlg'
2016-05-17 15:38:54 +00:00
] , function ( ) {
'use strict' ;
Common . Controllers . Plugins = Backbone . Controller . extend ( _ . extend ( {
models : [ ] ,
2019-02-15 10:44:37 +00:00
appOptions : { } ,
2019-05-22 11:44:30 +00:00
configPlugins : { autostart : [ ] } , // {config: 'from editor config', plugins: 'loaded plugins', UIplugins: 'loaded customization plugins', autostart: 'autostart guids'}
serverPlugins : { autostart : [ ] } , // {config: 'from editor config', plugins: 'loaded plugins', autostart: 'autostart guids'}
2016-05-17 15:38:54 +00:00
collections : [
'Common.Collections.Plugins'
] ,
views : [
'Common.Views.Plugins'
] ,
initialize : function ( ) {
2017-03-13 16:14:26 +00:00
var me = this ;
this . addListeners ( {
'Toolbar' : {
'render:before' : function ( toolbar ) {
2017-08-14 10:21:17 +00:00
var appOptions = me . getApplication ( ) . getController ( 'Main' ) . appOptions ;
2017-08-11 11:01:27 +00:00
2022-03-11 10:58:15 +00:00
if ( ! appOptions . isEditMailMerge && ! appOptions . isEditDiagram && ! appOptions . isEditOle ) {
2021-11-19 12:34:25 +00:00
var tab = { action : 'plugins' , caption : me . panelPlugins . groupCaption , dataHintTitle : 'E' , layoutname : 'toolbar-plugins' } ;
2017-09-04 14:25:45 +00:00
me . $toolbarPanelPlugins = me . panelPlugins . getPanel ( ) ;
2017-08-11 11:01:27 +00:00
2018-11-07 15:42:16 +00:00
toolbar . addTab ( tab , me . $toolbarPanelPlugins , 10 ) ; // TODO: clear plugins list in left panel
2017-08-11 11:01:27 +00:00
}
2017-03-16 10:20:07 +00:00
}
} ,
2017-03-16 10:21:36 +00:00
'Common.Views.Plugins' : {
2017-03-23 13:02:19 +00:00
'plugin:select' : function ( guid , type ) {
me . api . asc _pluginRun ( guid , type , '' ) ;
2017-03-13 16:14:26 +00:00
}
}
} ) ;
2016-05-17 15:38:54 +00:00
} ,
2016-06-24 11:07:55 +00:00
events : function ( ) {
return {
'click #id-plugin-close' : _ . bind ( this . onToolClose , this )
} ;
2016-05-17 15:38:54 +00:00
} ,
onLaunch : function ( ) {
2017-09-04 14:25:45 +00:00
var store = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ;
2016-05-17 15:38:54 +00:00
this . panelPlugins = this . createView ( 'Common.Views.Plugins' , {
2017-09-04 14:25:45 +00:00
storePlugins : store
2016-05-17 15:38:54 +00:00
} ) ;
this . panelPlugins . on ( 'render:after' , _ . bind ( this . onAfterRender , this ) ) ;
2016-08-01 13:25:59 +00:00
2017-09-04 14:25:45 +00:00
store . on ( {
add : this . onAddPlugin . bind ( this ) ,
reset : this . onResetPlugins . bind ( this )
} ) ;
2016-08-01 13:25:59 +00:00
this . _moveOffset = { x : 0 , y : 0 } ;
2019-05-22 11:44:30 +00:00
this . autostart = [ ] ;
2019-02-15 10:44:37 +00:00
Common . Gateway . on ( 'init' , this . loadConfig . bind ( this ) ) ;
Common . NotificationCenter . on ( 'app:face' , this . onAppShowed . bind ( this ) ) ;
2021-03-29 22:44:42 +00:00
Common . NotificationCenter . on ( 'uitheme:changed' , this . updatePluginsButtons . bind ( this ) ) ;
Common . NotificationCenter . on ( 'window:resize' , this . updatePluginsButtons . bind ( this ) ) ;
2019-02-15 10:44:37 +00:00
} ,
loadConfig : function ( data ) {
var me = this ;
2019-05-22 11:44:30 +00:00
me . configPlugins . config = data . config . plugins ;
2019-05-21 10:02:55 +00:00
me . editor = ! ! window . DE ? 'word' : ! ! window . PE ? 'slide' : 'cell' ;
} ,
2019-02-15 10:44:37 +00:00
2019-05-21 10:02:55 +00:00
loadPlugins : function ( ) {
2019-05-22 11:44:30 +00:00
if ( this . configPlugins . config ) {
this . getPlugins ( this . configPlugins . config . pluginsData )
. then ( function ( loaded )
{
me . configPlugins . plugins = loaded ;
me . mergePlugins ( ) ;
} )
. catch ( function ( err )
{
me . configPlugins . plugins = false ;
} ) ;
} else
this . configPlugins . plugins = false ;
2019-02-15 10:44:37 +00:00
2019-05-21 10:02:55 +00:00
var server _plugins _url = '../../../../plugins.json' ,
me = this ;
2019-02-15 10:44:37 +00:00
Common . Utils . loadConfig ( server _plugins _url , function ( obj ) {
if ( obj != 'error' ) {
2019-05-22 11:44:30 +00:00
me . serverPlugins . config = obj ;
me . getPlugins ( me . serverPlugins . config . pluginsData )
. then ( function ( loaded )
{
me . serverPlugins . plugins = loaded ;
me . mergePlugins ( ) ;
} )
. catch ( function ( err )
{
me . serverPlugins . plugins = false ;
} ) ;
} else
me . serverPlugins . plugins = false ;
2019-02-15 10:44:37 +00:00
} ) ;
} ,
onAppShowed : function ( config ) {
2016-05-17 15:38:54 +00:00
} ,
setApi : function ( api ) {
this . api = api ;
2020-05-21 20:07:41 +00:00
if ( ! this . appOptions . customization || ( this . appOptions . customization . plugins !== false ) ) {
this . api . asc _registerCallback ( "asc_onPluginShow" , _ . bind ( this . onPluginShow , this ) ) ;
this . api . asc _registerCallback ( "asc_onPluginClose" , _ . bind ( this . onPluginClose , this ) ) ;
this . api . asc _registerCallback ( "asc_onPluginResize" , _ . bind ( this . onPluginResize , this ) ) ;
this . api . asc _registerCallback ( "asc_onPluginMouseUp" , _ . bind ( this . onPluginMouseUp , this ) ) ;
this . api . asc _registerCallback ( "asc_onPluginMouseMove" , _ . bind ( this . onPluginMouseMove , this ) ) ;
this . api . asc _registerCallback ( 'asc_onPluginsReset' , _ . bind ( this . resetPluginsList , this ) ) ;
this . api . asc _registerCallback ( 'asc_onPluginsInit' , _ . bind ( this . onPluginsInit , this ) ) ;
this . loadPlugins ( ) ;
}
2016-05-17 15:38:54 +00:00
return this ;
} ,
2021-04-24 20:39:27 +00:00
setMode : function ( mode , api ) {
2019-05-21 10:02:55 +00:00
this . appOptions = mode ;
2021-04-24 20:39:27 +00:00
this . api = api ;
2019-05-21 10:02:55 +00:00
this . customPluginsComplete = ! this . appOptions . canBrandingExt ;
if ( this . appOptions . canBrandingExt )
this . getAppCustomPlugins ( this . configPlugins ) ;
2017-09-13 12:02:34 +00:00
return this ;
2016-05-17 15:38:54 +00:00
} ,
2016-06-28 09:27:00 +00:00
onAfterRender : function ( panelPlugins ) {
2019-09-03 14:36:32 +00:00
panelPlugins . viewPluginsList && panelPlugins . viewPluginsList . on ( 'item:click' , _ . bind ( this . onSelectPlugin , this ) ) ;
2016-06-24 11:07:55 +00:00
this . bindViewEvents ( this . panelPlugins , this . events ) ;
2016-08-01 08:26:08 +00:00
var me = this ;
Common . NotificationCenter . on ( {
'layout:resizestart' : function ( e ) {
if ( me . panelPlugins . isVisible ( ) ) {
2016-08-01 13:25:59 +00:00
var offset = me . panelPlugins . currentPluginFrame . offset ( ) ;
me . _moveOffset = { x : offset . left + parseInt ( me . panelPlugins . currentPluginFrame . css ( 'padding-left' ) ) ,
y : offset . top + parseInt ( me . panelPlugins . currentPluginFrame . css ( 'padding-top' ) ) } ;
2016-08-01 08:26:08 +00:00
me . api . asc _pluginEnableMouseEvents ( true ) ;
}
} ,
'layout:resizestop' : function ( e ) {
if ( me . panelPlugins . isVisible ( ) ) {
me . api . asc _pluginEnableMouseEvents ( false ) ;
}
}
} ) ;
2016-05-17 15:38:54 +00:00
} ,
2019-02-15 10:44:37 +00:00
refreshPluginsList : function ( ) {
2016-05-19 09:46:21 +00:00
var me = this ;
var storePlugins = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ,
arr = [ ] ;
storePlugins . each ( function ( item ) {
var plugin = new Asc . CPlugin ( ) ;
2022-06-22 18:14:44 +00:00
plugin . deserialize ( item . get ( 'original' ) ) ;
2016-05-19 09:46:21 +00:00
item . set ( 'pluginObj' , plugin ) ;
arr . push ( plugin ) ;
} ) ;
2017-03-01 16:19:42 +00:00
this . api . asc _pluginsRegister ( '' , arr ) ;
2019-01-15 14:05:13 +00:00
if ( storePlugins . hasVisible ( ) )
2021-10-08 07:55:26 +00:00
Common . NotificationCenter . trigger ( 'tab:visible' , 'plugins' , Common . UI . LayoutManager . isElementVisible ( 'toolbar-plugins' ) ) ;
2021-03-26 17:37:29 +00:00
Common . Gateway . pluginsReady ( ) ;
2016-05-19 09:46:21 +00:00
} ,
2017-09-04 14:25:45 +00:00
onAddPlugin : function ( model ) {
var me = this ;
2017-09-07 14:55:30 +00:00
if ( me . $toolbarPanelPlugins ) {
var btn = me . panelPlugins . createPluginButton ( model ) ;
2017-09-11 12:47:36 +00:00
if ( ! btn ) return ;
2017-09-04 14:25:45 +00:00
2017-09-07 14:55:30 +00:00
var _group = $ ( '> .group' , me . $toolbarPanelPlugins ) ;
2020-12-22 11:39:26 +00:00
var $slot = $ ( '<span class="btn-slot text x-huge"></span>' ) . appendTo ( _group ) ;
2017-09-07 14:55:30 +00:00
btn . render ( $slot ) ;
}
2017-09-04 14:25:45 +00:00
} ,
onResetPlugins : function ( collection ) {
var me = this ;
2019-02-15 10:44:37 +00:00
me . appOptions . canPlugins = ! collection . isEmpty ( ) ;
2017-09-07 14:55:30 +00:00
if ( me . $toolbarPanelPlugins ) {
me . $toolbarPanelPlugins . empty ( ) ;
2017-09-04 14:25:45 +00:00
2017-12-07 14:46:13 +00:00
var _group = $ ( '<div class="group"></div>' ) ,
2018-05-15 08:15:35 +00:00
rank = - 1 ,
rank _plugins = 0 ;
2017-09-07 14:55:30 +00:00
collection . each ( function ( model ) {
2017-12-07 14:46:13 +00:00
var new _rank = model . get ( 'groupRank' ) ;
2018-05-15 08:15:35 +00:00
if ( new _rank !== rank && rank > - 1 && rank _plugins > 0 ) {
2017-12-07 14:46:13 +00:00
_group . appendTo ( me . $toolbarPanelPlugins ) ;
$ ( '<div class="separator long"></div>' ) . appendTo ( me . $toolbarPanelPlugins ) ;
_group = $ ( '<div class="group"></div>' ) ;
2018-05-15 08:15:35 +00:00
rank _plugins = 0 ;
2022-07-13 21:03:57 +00:00
} else {
_group . appendTo ( me . $toolbarPanelPlugins ) ;
$ ( '<div class="separator long invisible"></div>' ) . appendTo ( me . $toolbarPanelPlugins ) ;
_group = $ ( '<div class="group" style="padding-left: 0;"></div>' ) ;
2017-12-07 14:46:13 +00:00
}
2017-09-11 12:47:36 +00:00
var btn = me . panelPlugins . createPluginButton ( model ) ;
if ( btn ) {
2020-12-22 11:39:26 +00:00
var $slot = $ ( '<span class="btn-slot text x-huge"></span>' ) . appendTo ( _group ) ;
2017-09-11 12:47:36 +00:00
btn . render ( $slot ) ;
2018-05-15 08:15:35 +00:00
rank _plugins ++ ;
2017-09-11 12:47:36 +00:00
}
2017-12-07 14:46:13 +00:00
rank = new _rank ;
2017-09-07 14:55:30 +00:00
} ) ;
_group . appendTo ( me . $toolbarPanelPlugins ) ;
2019-02-15 10:44:37 +00:00
} else {
console . error ( 'toolbar panel isnot created' ) ;
2017-09-07 14:55:30 +00:00
}
2017-09-04 14:25:45 +00:00
} ,
2021-03-29 22:44:42 +00:00
updatePluginsButtons : function ( ) {
var storePlugins = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ,
me = this ;
storePlugins . each ( function ( item ) {
2021-03-30 07:20:00 +00:00
me . panelPlugins . updatePluginIcons ( item ) ;
2021-03-29 22:44:42 +00:00
} ) ;
} ,
2016-06-24 08:30:03 +00:00
onSelectPlugin : function ( picker , item , record , e ) {
var btn = $ ( e . target ) ;
if ( btn && btn . hasClass ( 'plugin-caret' ) ) {
2016-06-28 09:27:00 +00:00
var menu = this . panelPlugins . pluginMenu ;
if ( menu . isVisible ( ) ) {
menu . hide ( ) ;
return ;
}
var showPoint , me = this ,
currentTarget = $ ( e . currentTarget ) ,
parent = $ ( this . panelPlugins . el ) ,
offset = currentTarget . offset ( ) ,
offsetParent = parent . offset ( ) ;
showPoint = [ offset . left - offsetParent . left + currentTarget . width ( ) , offset . top - offsetParent . top + currentTarget . height ( ) / 2 ] ;
if ( record != undefined ) {
for ( var i = 0 ; i < menu . items . length ; i ++ ) {
menu . removeItem ( menu . items [ i ] ) ; i -- ;
}
menu . removeAll ( ) ;
var variations = record . get ( 'variations' ) ;
for ( var i = 0 ; i < variations . length ; i ++ ) {
var variation = variations [ i ] ,
mnu = new Common . UI . MenuItem ( {
2016-06-29 07:30:59 +00:00
caption : ( i > 0 ) ? variation . get ( 'description' ) : me . panelPlugins . textStart ,
2016-06-28 09:27:00 +00:00
value : parseInt ( variation . get ( 'index' ) )
} ) . on ( 'click' , function ( item , e ) {
if ( me . api ) {
me . api . asc _pluginRun ( record . get ( 'guid' ) , item . value , '' ) ;
}
} ) ;
menu . addItem ( mnu ) ;
}
}
var menuContainer = parent . find ( '#menu-plugin-container' ) ;
if ( ! menu . rendered ) {
if ( menuContainer . length < 1 ) {
menuContainer = $ ( '<div id="menu-plugin-container" style="position: absolute; z-index: 10000;"><div class="dropdown-toggle" data-toggle="dropdown"></div></div>' , menu . id ) ;
parent . append ( menuContainer ) ;
}
menu . render ( menuContainer ) ;
menu . cmpEl . attr ( { tabindex : "-1" } ) ;
2017-09-05 11:53:44 +00:00
menu . on ( {
'show:after' : function ( cmp ) {
if ( cmp && cmp . menuAlignEl )
cmp . menuAlignEl . toggleClass ( 'over' , true ) ;
} ,
'hide:after' : function ( cmp ) {
if ( cmp && cmp . menuAlignEl )
cmp . menuAlignEl . toggleClass ( 'over' , false ) ;
}
2016-06-28 09:27:00 +00:00
} ) ;
}
menuContainer . css ( { left : showPoint [ 0 ] , top : showPoint [ 1 ] } ) ;
menu . menuAlignEl = currentTarget ;
2017-03-01 16:19:42 +00:00
menu . setOffset ( - 20 , - currentTarget . height ( ) / 2 - 3 ) ;
2016-06-28 09:27:00 +00:00
menu . show ( ) ;
_ . delay ( function ( ) {
menu . cmpEl . focus ( ) ;
} , 10 ) ;
e . stopPropagation ( ) ;
e . preventDefault ( ) ;
2016-06-24 08:30:03 +00:00
} else
2016-06-28 09:27:00 +00:00
this . api . asc _pluginRun ( record . get ( 'guid' ) , 0 , '' ) ;
2016-05-17 15:38:54 +00:00
} ,
2018-12-13 08:16:18 +00:00
onPluginShow : function ( plugin , variationIndex , frameId , urlAddition ) {
2016-06-28 15:15:06 +00:00
var variation = plugin . get _Variations ( ) [ variationIndex ] ;
2016-08-03 09:41:36 +00:00
if ( variation . get _Visual ( ) ) {
2016-09-05 15:28:56 +00:00
var url = variation . get _Url ( ) ;
2017-03-01 16:19:42 +00:00
url = ( ( plugin . get _BaseUrl ( ) . length == 0 ) ? url : plugin . get _BaseUrl ( ) ) + url ;
2018-12-13 08:16:18 +00:00
if ( urlAddition )
url += urlAddition ;
2016-08-03 09:41:36 +00:00
if ( variation . get _InsideMode ( ) ) {
2017-10-17 15:08:12 +00:00
if ( ! this . panelPlugins . openInsideMode ( plugin . get _Name ( ) , url , frameId ) )
2016-10-21 14:09:58 +00:00
this . api . asc _pluginButtonClick ( - 1 ) ;
2016-08-03 09:41:36 +00:00
} else {
var me = this ,
2017-06-23 11:54:36 +00:00
isCustomWindow = variation . get _CustomWindow ( ) ,
2016-08-03 09:41:36 +00:00
arrBtns = variation . get _Buttons ( ) ,
2019-10-08 07:50:22 +00:00
newBtns = [ ] ,
2021-04-16 12:59:52 +00:00
size = variation . get _Size ( ) ,
isModal = variation . get _Modal ( ) ;
2016-08-03 09:41:36 +00:00
if ( ! size || size . length < 2 ) size = [ 800 , 600 ] ;
2016-06-24 11:07:55 +00:00
2016-08-03 09:41:36 +00:00
if ( _ . isArray ( arrBtns ) ) {
_ . each ( arrBtns , function ( b , index ) {
2018-12-13 12:01:19 +00:00
if ( b . visible )
2019-10-08 07:50:22 +00:00
newBtns [ index ] = { caption : b . text , value : index , primary : b . primary } ;
2016-08-03 09:41:36 +00:00
} ) ;
}
2020-07-21 15:23:39 +00:00
var help = variation . get _Help ( ) ;
2016-08-03 09:41:36 +00:00
me . pluginDlg = new Common . Views . PluginDlg ( {
2017-06-23 11:54:36 +00:00
cls : isCustomWindow ? 'plain' : '' ,
header : ! isCustomWindow ,
2016-08-03 09:41:36 +00:00
title : plugin . get _Name ( ) ,
width : size [ 0 ] , // inner width
height : size [ 1 ] , // inner height
2016-09-05 15:28:56 +00:00
url : url ,
2017-10-17 15:08:12 +00:00
frameId : frameId ,
2017-06-23 11:54:36 +00:00
buttons : isCustomWindow ? undefined : newBtns ,
2020-07-21 12:33:22 +00:00
toolcallback : _ . bind ( this . onToolClose , this ) ,
2021-04-16 12:59:52 +00:00
help : ! ! help ,
2022-07-28 16:16:46 +00:00
loader : plugin . get _Loader ( ) ,
2021-04-16 12:59:52 +00:00
modal : isModal !== undefined ? isModal : true
2016-06-24 11:07:55 +00:00
} ) ;
2017-09-05 11:53:44 +00:00
me . pluginDlg . on ( {
'render:after' : function ( obj ) {
obj . getChild ( '.footer .dlg-btn' ) . on ( 'click' , _ . bind ( me . onDlgBtnClick , me ) ) ;
me . pluginContainer = me . pluginDlg . $window . find ( '#id-plugin-container' ) ;
} ,
'close' : function ( obj ) {
me . pluginDlg = undefined ;
} ,
'drag' : function ( args ) {
me . api . asc _pluginEnableMouseEvents ( args [ 1 ] == 'start' ) ;
} ,
'resize' : function ( args ) {
me . api . asc _pluginEnableMouseEvents ( args [ 1 ] == 'start' ) ;
2020-07-21 12:33:22 +00:00
} ,
'help' : function ( ) {
help && window . open ( help , '_blank' ) ;
2017-09-05 11:53:44 +00:00
}
2016-08-03 09:41:36 +00:00
} ) ;
2017-09-05 11:53:44 +00:00
2016-08-03 09:41:36 +00:00
me . pluginDlg . show ( ) ;
2016-06-24 11:07:55 +00:00
}
2017-08-18 12:17:25 +00:00
}
this . panelPlugins . openedPluginMode ( plugin . get _Guid ( ) ) ;
2016-05-18 10:42:06 +00:00
} ,
2017-08-11 11:01:27 +00:00
onPluginClose : function ( plugin ) {
2016-05-18 10:42:06 +00:00
if ( this . pluginDlg )
this . pluginDlg . close ( ) ;
2016-08-03 09:41:36 +00:00
else if ( this . panelPlugins . iframePlugin )
2016-06-24 11:07:55 +00:00
this . panelPlugins . closeInsideMode ( ) ;
2017-08-18 12:17:25 +00:00
this . panelPlugins . closedPluginMode ( plugin . get _Guid ( ) ) ;
2019-05-22 11:44:30 +00:00
this . runAutoStartPlugins ( ) ;
2016-05-18 10:42:06 +00:00
} ,
2016-08-04 13:03:17 +00:00
onPluginResize : function ( size , minSize , maxSize , callback ) {
2016-07-26 12:08:39 +00:00
if ( this . pluginDlg ) {
2016-08-04 13:03:17 +00:00
var resizable = ( minSize && minSize . length > 1 && maxSize && maxSize . length > 1 && ( maxSize [ 0 ] > minSize [ 0 ] || maxSize [ 1 ] > minSize [ 1 ] || maxSize [ 0 ] == 0 || maxSize [ 1 ] == 0 ) ) ;
this . pluginDlg . setResizable ( resizable , minSize , maxSize ) ;
this . pluginDlg . setInnerSize ( size [ 0 ] , size [ 1 ] ) ;
2016-07-26 12:08:39 +00:00
if ( callback )
callback . call ( ) ;
}
} ,
2016-05-18 10:42:06 +00:00
onDlgBtnClick : function ( event ) {
var state = event . currentTarget . attributes [ 'result' ] . value ;
2016-05-25 13:15:36 +00:00
this . api . asc _pluginButtonClick ( parseInt ( state ) ) ;
2016-05-18 10:42:06 +00:00
} ,
onToolClose : function ( ) {
2016-05-25 13:15:36 +00:00
this . api . asc _pluginButtonClick ( - 1 ) ;
2016-08-01 08:26:08 +00:00
} ,
2016-08-01 09:33:30 +00:00
onPluginMouseUp : function ( x , y ) {
2016-08-01 13:25:59 +00:00
if ( this . pluginDlg ) {
2016-08-04 11:44:23 +00:00
if ( this . pluginDlg . binding . dragStop ) this . pluginDlg . binding . dragStop ( ) ;
if ( this . pluginDlg . binding . resizeStop ) this . pluginDlg . binding . resizeStop ( ) ;
2016-08-01 13:25:59 +00:00
} else
2016-08-19 13:41:48 +00:00
Common . NotificationCenter . trigger ( 'frame:mouseup' , { pageX : x * Common . Utils . zoom ( ) + this . _moveOffset . x , pageY : y * Common . Utils . zoom ( ) + this . _moveOffset . y } ) ;
2016-08-01 08:26:08 +00:00
} ,
2016-08-01 09:33:30 +00:00
onPluginMouseMove : function ( x , y ) {
2016-08-01 13:25:59 +00:00
if ( this . pluginDlg ) {
var offset = this . pluginContainer . offset ( ) ;
2016-08-19 13:41:48 +00:00
if ( this . pluginDlg . binding . drag ) this . pluginDlg . binding . drag ( { pageX : x * Common . Utils . zoom ( ) + offset . left , pageY : y * Common . Utils . zoom ( ) + offset . top } ) ;
if ( this . pluginDlg . binding . resize ) this . pluginDlg . binding . resize ( { pageX : x * Common . Utils . zoom ( ) + offset . left , pageY : y * Common . Utils . zoom ( ) + offset . top } ) ;
2016-08-01 13:25:59 +00:00
} else
2016-08-19 13:41:48 +00:00
Common . NotificationCenter . trigger ( 'frame:mousemove' , { pageX : x * Common . Utils . zoom ( ) + this . _moveOffset . x , pageY : y * Common . Utils . zoom ( ) + this . _moveOffset . y } ) ;
2017-09-13 12:02:34 +00:00
} ,
2019-06-14 12:55:37 +00:00
onPluginsInit : function ( pluginsdata ) {
! ( pluginsdata instanceof Array ) && ( pluginsdata = pluginsdata [ "pluginsData" ] ) ;
this . parsePlugins ( pluginsdata )
} ,
2019-05-22 11:44:30 +00:00
runAutoStartPlugins : function ( ) {
if ( this . autostart && this . autostart . length > 0 ) {
this . api . asc _pluginRun ( this . autostart . shift ( ) , 0 , '' ) ;
2017-09-13 12:02:34 +00:00
}
2019-02-15 10:44:37 +00:00
} ,
resetPluginsList : function ( ) {
this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) . reset ( ) ;
} ,
applyUICustomization : function ( ) {
2019-05-23 14:25:44 +00:00
var me = this ;
return new Promise ( function ( resolve , reject ) {
var timer _sl = setInterval ( function ( ) {
if ( me . customPluginsComplete ) {
clearInterval ( timer _sl ) ;
try {
me . configPlugins . UIplugins && me . configPlugins . UIplugins . forEach ( function ( c ) {
if ( c . code ) eval ( c . code ) ;
} ) ;
} catch ( e ) { }
resolve ( ) ;
}
} , 10 ) ;
} ) ;
2019-02-15 10:44:37 +00:00
} ,
2019-05-21 10:02:55 +00:00
parsePlugins : function ( pluginsdata , uiCustomize ) {
2019-02-15 10:44:37 +00:00
var me = this ;
var pluginStore = this . getApplication ( ) . getCollection ( 'Common.Collections.Plugins' ) ,
isEdit = me . appOptions . isEdit ,
2021-04-06 16:52:13 +00:00
editor = me . editor ,
2021-04-24 20:39:27 +00:00
apiVersion = me . api ? me . api . GetVersion ( ) : undefined ;
2019-02-15 10:44:37 +00:00
if ( pluginsdata instanceof Array ) {
var arr = [ ] , arrUI = [ ] ,
lang = me . appOptions . lang . split ( /[\-_]/ ) [ 0 ] ;
pluginsdata . forEach ( function ( item ) {
if ( arr . some ( function ( i ) {
return ( i . get ( 'baseUrl' ) == item . baseUrl || i . get ( 'guid' ) == item . guid ) ;
}
) || pluginStore . findWhere ( { baseUrl : item . baseUrl } ) || pluginStore . findWhere ( { guid : item . guid } ) )
{
return ;
}
var variationsArr = [ ] ,
pluginVisible = false ;
item . variations . forEach ( function ( itemVar ) {
var visible = ( isEdit || itemVar . isViewer && ( itemVar . isDisplayedInViewer !== false ) ) && _ . contains ( itemVar . EditorsSupport , editor ) && ! itemVar . isSystem ;
if ( visible ) pluginVisible = true ;
if ( item . isUICustomizer ) {
visible && arrUI . push ( {
url : item . baseUrl + itemVar . url
} ) ;
} else {
var model = new Common . Models . PluginVariation ( itemVar ) ;
var description = itemVar . description ;
if ( typeof itemVar . descriptionLocale == 'object' )
description = itemVar . descriptionLocale [ lang ] || itemVar . descriptionLocale [ 'en' ] || description || '' ;
_ . each ( itemVar . buttons , function ( b , index ) {
if ( typeof b . textLocale == 'object' )
b . text = b . textLocale [ lang ] || b . textLocale [ 'en' ] || b . text || '' ;
b . visible = ( isEdit || b . isViewer !== false ) ;
} ) ;
model . set ( {
description : description ,
index : variationsArr . length ,
url : itemVar . url ,
2021-04-08 08:32:39 +00:00
icons : itemVar . icons2 || itemVar . icons ,
2019-02-15 10:44:37 +00:00
buttons : itemVar . buttons ,
2020-07-21 15:23:39 +00:00
visible : visible ,
help : itemVar . help
2019-02-15 10:44:37 +00:00
} ) ;
variationsArr . push ( model ) ;
}
} ) ;
if ( variationsArr . length > 0 && ! item . isUICustomizer ) {
var name = item . name ;
if ( typeof item . nameLocale == 'object' )
name = item . nameLocale [ lang ] || item . nameLocale [ 'en' ] || name || '' ;
2021-04-06 16:52:13 +00:00
if ( pluginVisible )
pluginVisible = me . checkPluginVersion ( apiVersion , item . minVersion ) ;
2019-02-15 10:44:37 +00:00
arr . push ( new Common . Models . Plugin ( {
name : name ,
guid : item . guid ,
baseUrl : item . baseUrl ,
variations : variationsArr ,
currentVariation : 0 ,
visible : pluginVisible ,
groupName : ( item . group ) ? item . group . name : '' ,
2021-04-06 18:25:24 +00:00
groupRank : ( item . group ) ? item . group . rank : 0 ,
2022-06-22 18:14:44 +00:00
minVersion : item . minVersion ,
original : item
2019-02-15 10:44:37 +00:00
} ) ) ;
}
} ) ;
2019-05-21 10:02:55 +00:00
if ( uiCustomize !== false ) // from ui customizer in editor config or desktop event
2019-05-22 11:44:30 +00:00
me . configPlugins . UIplugins = arrUI ;
2019-02-15 10:44:37 +00:00
2019-05-21 10:02:55 +00:00
if ( ! uiCustomize && pluginStore )
2019-02-15 10:44:37 +00:00
{
arr = pluginStore . models . concat ( arr ) ;
arr . sort ( function ( a , b ) {
var rank _a = a . get ( 'groupRank' ) ,
rank _b = b . get ( 'groupRank' ) ;
if ( rank _a < rank _b )
return ( rank _a == 0 ) ? 1 : - 1 ;
if ( rank _a > rank _b )
return ( rank _b == 0 ) ? - 1 : 1 ;
return 0 ;
} ) ;
2019-05-21 10:02:55 +00:00
pluginStore . reset ( arr ) ;
this . appOptions . canPlugins = ! pluginStore . isEmpty ( ) ;
2019-02-15 10:44:37 +00:00
}
}
2019-05-21 10:02:55 +00:00
else if ( ! uiCustomize ) {
this . appOptions . canPlugins = false ;
}
2019-02-15 10:44:37 +00:00
2019-05-21 10:02:55 +00:00
if ( ! uiCustomize )
this . getApplication ( ) . getController ( 'LeftMenu' ) . enablePlugins ( ) ;
2019-02-15 10:44:37 +00:00
2019-05-21 10:02:55 +00:00
if ( this . appOptions . canPlugins ) {
this . refreshPluginsList ( ) ;
this . runAutoStartPlugins ( ) ;
}
2019-02-15 10:44:37 +00:00
} ,
2021-04-06 16:52:13 +00:00
checkPluginVersion : function ( apiVersion , pluginVersion ) {
if ( apiVersion && apiVersion !== 'develop' && pluginVersion && typeof pluginVersion == 'string' ) {
var res = pluginVersion . match ( /^([0-9]+)(?:.([0-9]+))?(?:.([0-9]+))?$/ ) ,
apires = apiVersion . match ( /^([0-9]+)(?:.([0-9]+))?(?:.([0-9]+))?$/ ) ;
if ( res && res . length > 1 && apires && apires . length > 1 ) {
for ( var i = 0 ; i < 3 ; i ++ ) {
var pluginVer = res [ i + 1 ] ? parseInt ( res [ i + 1 ] ) : 0 ,
apiVer = apires [ i + 1 ] ? parseInt ( apires [ i + 1 ] ) : 0 ;
if ( pluginVer > apiVer )
return false ;
if ( pluginVer < apiVer )
return true ;
}
}
}
return true ;
} ,
2019-05-22 11:44:30 +00:00
getPlugins : function ( pluginsData , fetchFunction ) {
if ( ! pluginsData || pluginsData . length < 1 )
2019-05-30 13:15:18 +00:00
return Promise . resolve ( [ ] ) ;
2019-05-22 11:44:30 +00:00
fetchFunction = fetchFunction || function ( url ) {
return fetch ( url )
. then ( function ( response ) {
if ( response . ok ) return response . json ( ) ;
else return Promise . reject ( url ) ;
} ) . then ( function ( json ) {
json . baseUrl = url . substring ( 0 , url . lastIndexOf ( "config.json" ) ) ;
return json ;
} ) ;
} ;
var loaded = [ ] ;
return pluginsData . map ( fetchFunction ) . reduce ( function ( previousPromise , currentPromise ) {
return previousPromise
. then ( function ( )
{
return currentPromise ;
} )
. then ( function ( item )
{
loaded . push ( item ) ;
return Promise . resolve ( item ) ;
} )
. catch ( function ( item )
{
return Promise . resolve ( item ) ;
2019-02-15 10:44:37 +00:00
} ) ;
2019-05-21 10:02:55 +00:00
2019-05-22 11:44:30 +00:00
} , Promise . resolve ( ) )
. then ( function ( )
{
return Promise . resolve ( loaded ) ;
} ) ;
2019-02-15 10:44:37 +00:00
} ,
2019-05-22 11:44:30 +00:00
mergePlugins : function ( ) {
if ( this . serverPlugins . plugins !== undefined && this . configPlugins . plugins !== undefined ) { // undefined - plugins are loading
var autostart = [ ] ,
arr = [ ] ,
plugins = this . configPlugins ,
warn = false ;
2020-11-20 12:27:06 +00:00
if ( plugins . plugins && plugins . plugins . length > 0 )
2019-05-22 11:44:30 +00:00
arr = plugins . plugins ;
2021-03-09 11:48:36 +00:00
if ( plugins && plugins . config ) {
var val = plugins . config . autostart || plugins . config . autoStartGuid ;
if ( typeof ( val ) == 'string' )
val = [ val ] ;
warn = ! ! plugins . config . autoStartGuid ;
autostart = val || [ ] ;
}
2020-11-20 12:27:06 +00:00
2019-05-22 11:44:30 +00:00
plugins = this . serverPlugins ;
2020-11-20 12:27:06 +00:00
if ( plugins . plugins && plugins . plugins . length > 0 )
2019-05-22 11:44:30 +00:00
arr = arr . concat ( plugins . plugins ) ;
2021-03-09 11:48:36 +00:00
if ( plugins && plugins . config ) {
val = plugins . config . autostart || plugins . config . autoStartGuid ;
if ( typeof ( val ) == 'string' )
val = [ val ] ;
( warn || plugins . config . autoStartGuid ) && console . warn ( "Obsolete: The autoStartGuid parameter is deprecated. Please check the documentation for new plugin connection configuration." ) ;
autostart = autostart . concat ( val || [ ] ) ;
}
2020-11-20 12:27:06 +00:00
2019-05-22 11:44:30 +00:00
this . autostart = autostart ;
this . parsePlugins ( arr , false ) ;
}
2019-05-21 10:02:55 +00:00
} ,
2019-05-22 11:44:30 +00:00
getAppCustomPlugins : function ( plugins ) {
2019-05-23 14:25:44 +00:00
var me = this ,
funcComplete = function ( ) { me . customPluginsComplete = true ; } ;
2019-05-22 11:44:30 +00:00
if ( plugins . config ) {
this . getPlugins ( plugins . config . UIpluginsData )
. then ( function ( loaded )
{
me . parsePlugins ( loaded , true ) ;
me . getPlugins ( plugins . UIplugins , function ( item ) {
return fetch ( item . url )
2019-05-21 10:02:55 +00:00
. then ( function ( response ) {
2019-05-22 11:44:30 +00:00
if ( response . ok ) return response . text ( ) ;
else return Promise . reject ( ) ;
2019-05-21 10:02:55 +00:00
} )
. then ( function ( text ) {
2019-05-22 11:44:30 +00:00
item . code = text ;
2019-05-21 10:02:55 +00:00
return text ;
} ) ;
2019-05-23 14:25:44 +00:00
} ) . then ( funcComplete , funcComplete ) ;
} , funcComplete ) ;
2019-05-21 10:02:55 +00:00
} else
2019-05-23 14:25:44 +00:00
funcComplete ( ) ;
2019-05-21 10:02:55 +00:00
}
2016-05-17 15:38:54 +00:00
} , Common . Controllers . Plugins || { } ) ) ;
} ) ;