All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jbpm.designer.public.js.Plugins.view.js Maven / Gradle / Ivy

There is a newer version: 7.73.0.Final
Show newest version
/**
 * Copyright (c) 2006
 * Martin Czuchra, Nicolas Peters, Daniel Polak, Willi Tscheschner
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 **/

/**
 * @namespace Oryx name space for plugins
 * @name ORYX.Plugins
 */
if(!ORYX.Plugins)
    ORYX.Plugins = new Object();

/**
 * The view plugin offers all of zooming functionality accessible over the
 * tool bar. This are zoom in, zoom out, zoom to standard, zoom fit to model.
 *
 * @class ORYX.Plugins.View
 * @extends Clazz
 * @param {Object} facade The editor facade for plugins.
 */
ORYX.Plugins.View = {
    /** @lends ORYX.Plugins.View.prototype */
    facade: undefined,
    diffEditor: undefined,
    diffDialog: undefined,

    construct: function(facade, ownPluginData) {
        this.facade = facade;

        // registered voice commands
        this.facade.registerOnEvent(ORYX.CONFIG.VOICE_COMMAND_GENERATE_IMAGE, this.showAsPNG.bind(this));
        this.facade.registerOnEvent(ORYX.CONFIG.VOICE_COMMAND_VIEW_SOURCE, this.showProcessBPMN.bind(this));

        this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDROP_END, this.refreshCanvasForIE.bind(this));
        this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SHAPE_ADDED, this.refreshCanvasForIE.bind(this));
        this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DRAGDOCKER_MOVE_FINISHED, this.refreshCanvasForIE.bind(this));
        this.facade.registerOnEvent(ORYX.CONFIG.EVENT_RESIZE_END, this.refreshCanvasForIE.bind(this));

        this.facade.registerOnEvent(ORYX.CONFIG.EVENT_DOCELEMENT_TO_MODEL, this.showDocElementInModel.bind(this));

        //Standard Values
        this.zoomLevel = 1.0;
        this.maxFitToScreenLevel=1.5;
        this.minZoomLevel = 0.4;
        this.maxZoomLevel = 2.0;
        this.diff=5; //difference between canvas and view port, s.th. like toolbar??

        //Read properties
        if (ownPluginData.properties) {
            ownPluginData.properties.each( function(property) {
                if (property.zoomLevel) {this.zoomLevel = Number(1.0);}
                if (property.maxFitToScreenLevel) {this.maxFitToScreenLevel=Number(property.maxFitToScreenLevel);}
                if (property.minZoomLevel) {this.minZoomLevel = Number(property.minZoomLevel);}
                if (property.maxZoomLevel) {this.maxZoomLevel = Number(property.maxZoomLevel);}
            }.bind(this));
        }


        /* Register zoom in */
        this.facade.offer({
            'name':ORYX.I18N.View.zoomIn,
            'functionality': this.zoom.bind(this, [1.0 + ORYX.CONFIG.ZOOM_OFFSET]),
            'group': ORYX.I18N.View.group,
            'icon': ORYX.BASE_FILE_PATH + "images/magnifier_zoom_in.png",
            'description': ORYX.I18N.View.zoomInDesc,
            'index': 1,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){return this.zoomLevel < this.maxZoomLevel }.bind(this)});

        /* Register zoom out */
        this.facade.offer({
            'name':ORYX.I18N.View.zoomOut,
            'functionality': this.zoom.bind(this, [1.0 - ORYX.CONFIG.ZOOM_OFFSET]),
            'group': ORYX.I18N.View.group,
            'icon': ORYX.BASE_FILE_PATH + "images/magnifier_zoom_out.png",
            'description': ORYX.I18N.View.zoomOutDesc,
            'index': 2,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){ return this._checkSize() }.bind(this)});

        /* Register zoom standard */
        this.facade.offer({
            'name':ORYX.I18N.View.zoomStandard,
            'functionality': this.setAFixZoomLevel.bind(this, 1),
            'group': ORYX.I18N.View.group,
            'icon': ORYX.BASE_FILE_PATH + "images/zoom_standard.png",
            'cls' : 'icon-large',
            'description': ORYX.I18N.View.zoomStandardDesc,
            'index': 3,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){return this.zoomLevel != 1}.bind(this)
        });

        /* Register zoom fit to model */
        this.facade.offer({
            'name':ORYX.I18N.View.zoomFitToModel,
            'functionality': this.zoomFitToModel.bind(this),
            'group': ORYX.I18N.View.group,
            'icon': ORYX.BASE_FILE_PATH + "images/image.png",
            'description': ORYX.I18N.View.zoomFitToModelDesc,
            'index': 4,
            'minShape': 0,
            'maxShape': 0
        });

        /* Register popout to model */
//		this.facade.offer({
//			'name':ORYX.I18N.View.showInPopout,
//			'functionality': this.showInPopout.bind(this),
//			'group': ORYX.I18N.View.jbpmgroup,
//			'icon': ORYX.BASE_FILE_PATH + "images/popup.gif",
//			'description': ORYX.I18N.View.showInPopoutDesc,
//			'index': 1,
//			'minShape': 0,
//			'maxShape': 0,
//			'isEnabled': function(){
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1]; 
//				return profileParamValue == "jbpm";
//			}.bind(this)
//		});

        if(!(ORYX.READONLY == true || ORYX.VIEWLOCKED == true)) {
        /* Register full screen to model */
        this.facade.offer({
            'name':ORYX.I18N.view.toggleFullScreen,
            'functionality': function(context) {

                var isParentInFullScreen = (parent.document.fullscreenElement && parent.document.fullscreenElement !== null) ||
                    (parent.document.webkitFullscreenElement && parent.document.webkitFullscreenElement !== null) ||
                    (parent.document.mozFullScreenElement && parent.document.mozFullScreenElement !== null) ||
                    (parent.document.msFullscreenElement && parent.document.msFullscreenElement !== null);

                var docElm = parent.document.documentElement;
                if (!isParentInFullScreen) {
                    if (docElm.requestFullscreen) {
                        docElm.requestFullscreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (docElm.mozRequestFullScreen) {
                        docElm.mozRequestFullScreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (docElm.webkitRequestFullScreen) {
                        docElm.webkitRequestFullScreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (docElm.msRequestFullscreen) {
                        docElm.msRequestFullscreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else {
                        ORYX.EDITOR._pluginFacade.raiseEvent({
                            type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                            ntype		: 'error',
                            msg         : ORYX.I18N.view.failShowFullScreen,
                            title       : ''

                        });
                    }
                } else {
                    if (parent.document.exitFullscreen) {
                        parent.document.exitFullscreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (parent.document.webkitExitFullscreen) {
                        parent.document.webkitExitFullscreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (parent.document.mozCancelFullScreen) {
                        parent.document.mozCancelFullScreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else if (parent.document.msExitFullscreen) {
                        parent.document.msExitFullscreen();
                        setTimeout(function(){ parent.designercallonresize(); }, 2000);
                    } else {
                        ORYX.EDITOR._pluginFacade.raiseEvent({
                            type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                            ntype		: 'error',
                            msg         : ORYX.I18N.view.failShowFullScreen,
                            title       : ''

                        });
                    }
                }
            }.bind(this),
            'group': 'fullscreengroup',
            'icon': ORYX.BASE_FILE_PATH + "images/fullscreen.png",
            'description': ORYX.I18N.view.toggleFullScreen_desc,
            'index': 2,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });


        /* Register sharing to model 1*/
        this.facade.offer({
            'name': ORYX.I18N.view.shareProcessImg,
            'functionality': this.shareProcessImage.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.shareProcessImg_desc,
            'index': 1,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        /* Register sharing to model 2*/
        this.facade.offer({
            'name': ORYX.I18N.view.shareProcessPDF,
            'functionality': this.shareProcessPdf.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.shareProcessPDF_desc,
            'index': 2,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        /* Register import from BPMN2*/
        this.facade.offer({
            'name': ORYX.I18N.view.importFromBPMN2,
            'functionality': this.importFromBPMN2.bind(this),
            'group': 'importgroup',
            'icon': ORYX.BASE_FILE_PATH + "images/import.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/import.png",
            'description': ORYX.I18N.view.importFromBPMN2_desc,
            'index': 1,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        /* Register import from JSON*/
        this.facade.offer({
            'name': ORYX.I18N.view.importFromJSON,
            'functionality': this.importFromJSON.bind(this),
            'group': 'importgroup',
            'icon': ORYX.BASE_FILE_PATH + "images/import.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/import.png",
            'description': ORYX.I18N.view.importFromJSON_desc,
            'index': 2,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        /* Register sharing to model 3*/
//		this.facade.offer({
//			'name': "Share Embeddable Process",
//			'functionality': this.shareEmbeddableProcess.bind(this),
//			'group': ORYX.I18N.View.jbpmgroup,
//			'icon': ORYX.BASE_FILE_PATH + "images/share.png",
//			dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
//			'description': "Share Embeddable Process",
//			'index': 3,
//			'minShape': 0,
//			'maxShape': 0,
//			'isEnabled': function(){
//                return true;
////				profileParamName = "profile";
////				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
////				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
////		        regexa = new RegExp( regexSa );
////		        profileParams = regexa.exec( window.location.href );
////		        profileParamValue = profileParams[1];
////				return profileParamValue == "jbpm";
//			}.bind(this)
//		});

        /* Register diff to model */
//		this.facade.offer({
//			'name':ORYX.I18N.View.viewDiff,
//			'functionality': this.diffprocess.bind(this),
//			'group': ORYX.I18N.View.jbpmgroup,
//			'icon': ORYX.BASE_FILE_PATH + "images/diff.gif",
//			'description': ORYX.I18N.View.viewDiffDesc,
//			'index': 5,
//			'minShape': 0,
//			'maxShape': 0,
//			'isEnabled': function(){
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
//			}.bind(this)
//		});

        /* Register information view to model */
//        this.facade.offer({
//            'name': "View Process BPMN2",
//            'functionality': this.showProcessBPMN.bind(this),
//            'group': 'sharegroup',
//            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
//            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
//            'description': "View BPMN2 Source",
//            'index': 3,
//            'minShape': 0,
//            'maxShape': 0,
//            'isEnabled': function(){
//                return true;
////				profileParamName = "profile";
////				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
////				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
////		        regexa = new RegExp( regexSa );
////		        profileParams = regexa.exec( window.location.href );
////		        profileParamValue = profileParams[1];
////				return profileParamValue == "jbpm";
//            }.bind(this)
//        });

//        this.facade.offer({
//            'name': "View Process JSON",
//            'functionality': this.showProcessJSON.bind(this),
//            'group': 'sharegroup',
//            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
//            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
//            'description': "View JSON Source",
//            'index': 4,
//            'minShape': 0,
//            'maxShape': 0,
//            'isEnabled': function(){
//                return true;
////				profileParamName = "profile";
////				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
////				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
////		        regexa = new RegExp( regexSa );
////		        profileParams = regexa.exec( window.location.href );
////		        profileParamValue = profileParams[1];
////				return profileParamValue == "jbpm";
//            }.bind(this)
//        });

//        this.facade.offer({
//            'name': "View Process SVG",
//            'functionality': this.showProcessSVG.bind(this),
//            'group': 'sharegroup',
//            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
//            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
//            'description': "View SVG Source",
//            'index': 5,
//            'minShape': 0,
//            'maxShape': 0,
//            'isEnabled': function(){
//                return true;
////				profileParamName = "profile";
////				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
////				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
////		        regexa = new RegExp( regexSa );
////		        profileParams = regexa.exec( window.location.href );
////		        profileParamValue = profileParams[1];
////				return profileParamValue == "jbpm";
//            }.bind(this)
//        });

//        this.facade.offer({
//            'name': "View Process ERDF",
//            'functionality': this.showProcessERDF.bind(this),
//            'group': 'sharegroup',
//            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
//            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
//            'description': "View ERDF Source",
//            'index': 6,
//            'minShape': 0,
//            'maxShape': 0,
//            'isEnabled': function(){
//                return true;
////				profileParamName = "profile";
////				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
////				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
////		        regexa = new RegExp( regexSa );
////		        profileParams = regexa.exec( window.location.href );
////		        profileParamValue = profileParams[1];
////				return profileParamValue == "jbpm";
//            }.bind(this)
//        });

        this.facade.offer({
            'name': ORYX.I18N.view.downloadProcPDF,
            'functionality': this.showAsPDF.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.downloadProcPDF_desc,
            'index': 4,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        this.facade.offer({
            'name': ORYX.I18N.view.downloadProcPNG,
            'functionality': this.showAsPNG.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.downloadProcPNG_desc,
            'index': 3,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        this.facade.offer({
            'name': ORYX.I18N.view.downloadProcSVG,
            'functionality': this.showAsSVG.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.downloadProcSVG_desc,
            'index': 5,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });

        this.facade.offer({
            'name': ORYX.I18N.view.viewProcSources,
            'functionality': this.showProcessSources.bind(this),
            'group': 'sharegroup',
            'icon': ORYX.BASE_FILE_PATH + "images/share.png",
            dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/share.png",
            'description': ORYX.I18N.view.viewProcSources_desc,
            'index': 6,
            'minShape': 0,
            'maxShape': 0,
            'isEnabled': function(){
                return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
//				profileParamName = "profile";
//				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
//				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
//		        regexa = new RegExp( regexSa );
//		        profileParams = regexa.exec( window.location.href );
//		        profileParamValue = profileParams[1];
//				return profileParamValue == "jbpm";
            }.bind(this)
        });
        }
    },

    /**
     * It sets the zoom level to a fix value and call the zooming function.
     *
     * @param {Number} zoomLevel
     * 			the zoom level
     */
    setAFixZoomLevel : function(zoomLevel) {
        this.zoomLevel = zoomLevel;
        this._checkZoomLevelRange();
        this.zoom(1);
    },

    /**
     * Shows the canvas in bigger popout window.
     *
     */
    showInPopout : function() {
        uuidParamName = "uuid";
        uuidParamName = uuidParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        regexS = "[\\?&]"+uuidParamName+"=([^&#]*)";
        regex = new RegExp( regexS );
        uuidParams = regex.exec( window.location.href );

        uuidParamValue = uuidParams[1];
        window.open (ORYX.EXTERNAL_PROTOCOL + "://" + ORYX.EXTERNAL_HOST + "/" + ORYX.EXTERNAL_SUBDOMAIN  + "/org.drools.guvnor.Guvnor/standaloneEditorServlet?assetsUUIDs=" + uuidParamValue + "&client=oryx" , "Process Editor","status=0,toolbar=0,menubar=0,resizable=0,location=no,width=1400,height=1000");
    },

    /**
     * Import from existing BPMN2
     */
    importFromBPMN2 : function(successCallback) {
        var form = new Ext.form.FormPanel({
            baseCls: 		'x-plain',
            labelWidth: 	50,
            defaultType: 	'textfield',
            items: [{
                text : 		ORYX.I18N.FromBPMN2Support.selectFile,
                style : 	'font-size:12px;margin-bottom:10px;display:block;',
                anchor:		'100%',
                xtype : 	'label'
            },{
                fieldLabel: ORYX.I18N.FromBPMN2Support.file,
                name: 		'subject',
                inputType : 'file',
                style : 	'margin-bottom:10px;display:block;',
                itemCls :	'ext_specific_window_overflow'
            }, {
                xtype: 'textarea',
                hideLabel: true,
                name: 'msg',
                anchor: '100% -63'
            }]
        });
        // Create the panel
        var dialogSize = ORYX.Utils.getDialogSize(350, 500);
        var dialog = new Ext.Window({
            autoCreate: true,
            layout: 	'fit',
            plain:		true,
            bodyStyle: 	'padding:5px;',
            title: 		ORYX.I18N.FromBPMN2Support.impBPMN2,
            height: 	dialogSize.height,
            width:		dialogSize.width,
            modal:		true,
            fixedcenter:true,
            shadow:		true,
            proxyDrag: 	true,
            resizable:	true,
            items: 		[form],
            buttons:[
                {
                    text:ORYX.I18N.FromBPMN2Support.impBtn,
                    handler:function(){

                        this.facade.raiseEvent({
                            type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                            ntype		: 'info',
                            msg         : ORYX.I18N.FromBPMN2Support.impProgress,
                            title       : ''

                        });
                        var filename = form.items.items[1].getValue();
                        var canimport = false;
                        if(filename === undefined || filename.length <= 0) {
                            canimport = true; // no file selected - cut/paste only
                        } else {
                            if(filename.endsWith(".bpmn") || filename.endsWith(".bpmn2")) {
                                canimport = true;
                            }
                        }


                        if(canimport) {
                            var bpmn2string =  form.items.items[2].getValue();
                            Ext.Ajax.request({
                                url: ORYX.PATH + "transformer",
                                method: 'POST',
                                success: function(request) {
                                    if(request.responseText.length < 1) {
                                        this.facade.raiseEvent({
                                            type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                                            ntype		: 'error',
                                            msg         : ORYX.I18N.view.importFromBPMN2Error+ ORYX.I18N.view.importFromBPMN2ErrorCheckLogs,
                                            title       : ''
                                        });
                                        dialog.hide();
                                    } else {
                                        try {
                                            this._loadJSON( request.responseText, "BPMN2", true );
                                        } catch(e) {
                                            this.facade.raiseEvent({
                                                type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                                                ntype		: 'error',
                                                msg         : ORYX.I18N.view.importFromBPMN2Error+'

' + e + '

', title : '' }); } dialog.hide(); } }.createDelegate(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.importFromBPMN2Error+ ORYX.I18N.view.importFromBPMN2ErrorCheckLogs, title : '' }); dialog.hide(); }.createDelegate(this), params: { profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)), pp: ORYX.PREPROCESSING, bpmn2 : bpmn2string, transformto : "bpmn2json" } }); } else { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : "Invalid file type. Must be .bpmn or .bpmn2", title : '' }); } }.bind(this) },{ text: ORYX.I18N.Save.close, handler:function(){ dialog.hide(); }.bind(this) } ] }); // Destroy the panel when hiding dialog.on('hide', function(){ dialog.destroy(true); delete dialog; }); // Show the panel dialog.show(); // Adds the change event handler to form.items.items[1].getEl().dom.addEventListener('change',function(evt){ var reader = new FileReader(); reader.onload = function(e) { form.items.items[2].setValue( e.target.result ); } reader.readAsText(evt.target.files[0], 'UTF-8'); }, true) }, /** * Import from existing JSON */ importFromJSON : function(successCallback) { var form = new Ext.form.FormPanel({ baseCls: 'x-plain', labelWidth: 50, defaultType: 'textfield', items: [{ text : ORYX.I18N.FromJSONSupport.selectFile, style : 'font-size:12px;margin-bottom:10px;display:block;', anchor: '100%', xtype : 'label' },{ fieldLabel: ORYX.I18N.FromJSONSupport.file, name: 'subject', inputType : 'file', style : 'margin-bottom:10px;display:block;', itemCls : 'ext_specific_window_overflow' }, { xtype: 'textarea', hideLabel: true, name: 'msg', anchor: '100% -63' }] }); // Create the panel var dialogSize = ORYX.Utils.getDialogSize(350, 500); var dialog = new Ext.Window({ autoCreate: true, layout: 'fit', plain: true, bodyStyle: 'padding:5px;', title: ORYX.I18N.FromJSONSupport.impBPMN2, height: dialogSize.height, width: dialogSize.width, modal: true, fixedcenter:true, shadow: true, proxyDrag: true, resizable: true, items: [form], buttons:[ { text:ORYX.I18N.FromJSONSupport.impBtn, handler:function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.FromJSONSupport.impProgress, title : '' }); var filename = form.items.items[1].getValue(); var canimport = false; if(filename === undefined || filename.length <= 0) { canimport = true; // no file selected - cut/paste only } else { if(filename.endsWith(".json")) { canimport = true; } } if(canimport) { var jsonString = form.items.items[2].getValue(); try { this._loadJSON( jsonString, "JSON", false ); } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.importFromJSONError+'\n' + e, title : '' }); } dialog.hide(); } else { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : "Invalid file type. Must be .json", title : '' }); } }.bind(this) },{ text: ORYX.I18N.Save.close, handler:function(){ dialog.hide(); }.bind(this) } ] }); // Destroy the panel when hiding dialog.on('hide', function(){ dialog.destroy(true); delete dialog; }); // Show the panel dialog.show(); // Adds the change event handler to form.items.items[1].getEl().dom.addEventListener('change',function(evt){ var reader = new FileReader(); reader.onload = function(e) { form.items.items[2].setValue( e.target.result ); } reader.readAsText(evt.target.files[0], 'UTF-8'); }, true) }, /** * Share the embeddable process */ shareEmbeddableProcess : function() { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.view.creatingEmbeddableProc, title : '' }); Ext.Ajax.request({ url: ORYX.PATH + "transformer", method: 'POST', success: function(request){ try { var cf = new Ext.form.TextArea({ id:"sharedEmbeddableArea", fieldLabel:ORYX.I18N.view.enbedableProc, width:400, height:250, value:request.responseText }); var win = new Ext.Window({ width:400, id:'sharedEmbeddableURL', height:250, autoScroll:true, title:ORYX.I18N.view.enbedableProc, items: [cf] }); win.show(); } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.enbedableProcFailCreate+': ' + e, title : '' }); } }.createDelegate(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.enbedableProcFailCreate+'.', title : '' }); }, params: { profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)), respaction : "showembeddable" } }); }, /** * Share the process PDF URL. */ shareProcessPdf : function() { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.view.creatingProcPDF, title : '' }); var svg = ORYX.EDITOR.getCanvas().getSVGRepresentation(true, true); var formattedSvgDOM = DataManager.serialize(svg); var svgHeight = svg.getAttributeNS(null, 'height'); var svgWidth = svg.getAttributeNS(null, 'width'); Ext.Ajax.request({ url: ORYX.PATH + "transformer", method: 'POST', success: function(request){ try { var dialogSize = ORYX.Utils.getDialogSize(250, 400); var cf = new Ext.form.TextArea({ id:"sharedPDFArea", fieldLabel:ORYX.I18N.view.processImgPDF, width:dialogSize.width, height:dialogSize.height, value:request.responseText }); var win = new Ext.Window({ width:dialogSize.width, id:'sharedPDFURL', height:dialogSize.height, autoScroll:true, layout: 'fit', title: ORYX.I18N.view.processPDFurl, items: [cf] }); win.show(); } catch(e) { ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.processPDFFail +': ' + e, title : '' }); } }.createDelegate(this), failure: function(){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.processPDFFail+'.', title : '' }); }, params: { profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)), fsvg : Base64.encode(formattedSvgDOM), svgheight: svgHeight, svgwidth: svgWidth, transformto : "pdf", respaction : "showurl" } }); }, /** * Share the process image URL. */ shareProcessImage : function() { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.view.processCreatingImg, title : '' }); var svg = ORYX.EDITOR.getCanvas().getSVGRepresentation(true, true); var formattedSvgDOM = DataManager.serialize(svg); var svgHeight = svg.getAttributeNS(null, 'height'); var svgWidth = svg.getAttributeNS(null, 'width'); Ext.Ajax.request({ url: ORYX.PATH + "transformer", method: 'POST', success: function(request){ try { var dialogSize = ORYX.Utils.getDialogSize(250, 400); var cf = new Ext.form.TextArea({ id:"sharedImageArea", fieldLabel:ORYX.I18N.view.processImgUrl, width:dialogSize.width, height:dialogSize.height, value:request.responseText }); var win = new Ext.Window({ width:dialogSize.width, id:'sharedImageURL', height:dialogSize.height, layout: 'fit', autoScroll:true, title:ORYX.I18N.view.processImgUrl, items: [cf] }); win.show(); } catch(e) { ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.processImgFail+': ' + e, title : '' }); } }.createDelegate(this), failure: function(){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.processImgFail+'.', title : '' }); }, params: { profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)), fsvg : Base64.encode(formattedSvgDOM), transformto : "png", respaction : "showurl", svgheight: svgHeight, svgwidth: svgWidth } }); }, /** * Created and displays code for sharing the process. */ shareProcess : function() { alert('sharing process'); }, /** * Displays a diff (visual and text based) between two versions of the process. */ diffprocess : function() { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.View.viewDiffLoadingVersions, title : '' }); Ext.Ajax.request({ url: ORYX.PATH + "processdiff", method: 'POST', success: function(request){ try { this._showProcessDiffDialog(request.responseText); } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.versionsFail+':\n' + e, title : '' }); } }.createDelegate(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.versionsFail+'.', title : '' }); }, params: { action: 'versions', profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)) } }); }, _showProcessDiffDialog : function( jsonString ) { var jsonObj = jsonString.evalJSON(); var versionKeys = []; var count = 0; for (var key in jsonObj) { if (jsonObj.hasOwnProperty(key)) { versionKeys.push(parseInt(key)); count++; } } if(count == 0) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.versionsNotfound+'.', title : 'Diff' }); } else { versionKeys.sort(function(a,b){return a - b}); var displayVersionKeys = []; for (var i = 0; i < versionKeys.length; i++) { displayVersionKeys[i] = [versionKeys[i] + ""]; } var versionStore = new Ext.data.SimpleStore({ fields: ["name"], data : displayVersionKeys }); var versionCombo = new Ext.form.ComboBox({ fieldLabel: ORYX.I18N.view.versionsSelect, labelStyle: 'width:180px', hiddenName: 'version_name', emptyText: ORYX.I18N.view.versionsSelect+'...', store: versionStore, displayField: 'name', valueField: 'name', mode: 'local', typeAhead: true, //width: 168, triggerAction: 'all', listeners: { select: { fn:function(combo, value) { var processJSON = ORYX.EDITOR.getSerializedJSON(); Ext.Ajax.request({ url: ORYX.PATH + "uuidRepository", method: 'POST', success: function(request){ try { var canvasBPMN2 = request.responseText; Ext.Ajax.request({ url: ORYX.PATH + "processdiff", method: 'POST', success: function(request){ try { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.view.creatingDiff+'...', title : '' }); var versionBPMN2 = request.responseText; var dmp = new diff_match_patch(); dmp.Diff_Timeout = 0; var d = dmp.diff_main(versionBPMN2, canvasBPMN2); dmp.diff_cleanupSemantic(d); var ds = dmp.diff_prettyHtml(d); this.diffDialog.remove(this.diffEditor, true); this.diffEditor = new Ext.form.HtmlEditor({ id: 'diffeditor', value: ds, enableSourceEdit: false, enableAlignments:false, enableColors: false, enableFont: false, enableFontSize:false, enableFormat: false, enableLinks: false, enableLists:false, autoScroll: true, width: 520, height: 310 }); this.diffDialog.add(this.diffEditor); this.diffDialog.doLayout(); } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.failRetrieveVersionsSource+':' + e, title : '' }); } }.bind(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.failRetrieveVersionsSource+'.', title : '' }); }.bind(this), params: { action: 'getversion', version: combo.getValue(), profile: ORYX.PROFILE, uuid : window.btoa(encodeURI(ORYX.UUID)) } }); } catch(e){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+':' + e, title : '' }); } }.bind(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+'.', title : '' }); }, params: { action: 'toXML', pp: ORYX.PREPROCESSING, profile: ORYX.PROFILE, data: processJSON } }); }.bind(this) } } }); this.diffEditor = new Ext.form.HtmlEditor({ id: 'diffeditor', value: '', enableSourceEdit: false, enableAlignments:false, enableColors: false, enableFont: false, enableFontSize:false, enableFormat: false, enableLinks: false, enableLists:false, autoScroll: true, width: 520, height: 310 }); this.diffDialog = new Ext.Window({ autoCreate: true, autoScroll: false, plain: true, bodyStyle: 'padding:5px;', title: ORYX.I18N.view.compareBPMN2PReviousVersions, height: 410, width: 550, modal: true, fixedcenter:true, shadow: true, proxyDrag: true, resizable: true, items: [this.diffEditor], tbar: [versionCombo], buttons:[ { text : ORYX.I18N.Save.close, handler:function(){ this.diffDialog.hide(); }.bind(this) } ] }); this.diffDialog.show(); this.diffDialog.doLayout(); } }, /** * Loads JSON into the editor * */ _loadJSON: function( jsonString, mtype, checkExporter ){ if (jsonString) { Ext.MessageBox.confirm( 'Import', ORYX.I18N.view.replaceExistingModel, function(btn){ if (btn == 'yes') { this.facade.setSelection(this.facade.getCanvas().getChildShapes(true)); var currentJSON = ORYX.EDITOR.getSerializedJSON(); var selection = this.facade.getSelection(); var clipboard = new ORYX.Plugins.Edit.ClipBoard(); clipboard.refresh(selection, this.getAllShapesToConsider(selection, true)); var command = new ORYX.Plugins.Edit.DeleteCommand(clipboard , this.facade); this.facade.executeCommands([command]); try { this.facade.importJSON(jsonString); ORYX.PROCESS_SAVED = false; this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'success', msg : ORYX.I18N.view.importSuccess+' ' + mtype, title : '' }); if(typeof checkExporter !== 'undefined' && checkExporter === true) { var processJSON = ORYX.EDITOR.getSerializedJSON(); var processExporter = jsonPath(processJSON.evalJSON(), "$.properties.exporter"); if (processExporter && processExporter != "jBPM Designer") { this.facade.setSelection(this.facade.getCanvas().getChildShapes(true)); var exporterCurrentJSON = ORYX.EDITOR.getSerializedJSON(); var exporterSelection = this.facade.getSelection(); var exporterClipboard = new ORYX.Plugins.Edit.ClipBoard(); exporterClipboard.refresh(exporterSelection, this.getAllShapesToConsider(exporterSelection, true)); var exporterCommand = new ORYX.Plugins.Edit.DeleteCommand(exporterClipboard, this.facade); this.facade.executeCommands([exporterCommand]); this.facade.raiseEvent({ type: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype: 'info', msg: ORYX.I18N.view.exporterUpdate, title: '' }); // import updated json this.facade.importJSON(exporterCurrentJSON); // set as updated ORYX.JSON_UPDATED = true; // deselect nodes on canvas this.facade.setSelection([]); } } } catch(err) { this.facade.importJSON(currentJSON); this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.unableImportProvided+' ' + mtype, title : '' }); } } else { try { this.facade.importJSON(jsonString); this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'success', msg : ORYX.I18N.view.importSuccess+' ' + mtype, title : '' }); } catch(err) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.unableImportProvided+' ' + mtype, title : '' }); } } }.bind(this) ); } else { this._showErrorMessageBox(ORYX.I18N.Oryx.title, ORYX.I18N.jPDLSupport.impFailedJson); } }, getAllShapesToConsider: function(shapes, considerConnections){ var shapesToConsider = []; // only top-level shapes var childShapesToConsider = []; // all child shapes of top-level shapes shapes.each(function(shape){ //Throw away these shapes which have a parent in given shapes isChildShapeOfAnother = shapes.any(function(s2){ return s2.hasChildShape(shape); }); if(isChildShapeOfAnother) return; // This shape should be considered shapesToConsider.push(shape); // Consider attached nodes (e.g. intermediate events) if (shape instanceof ORYX.Core.Node) { var attached = shape.getOutgoingNodes(); attached = attached.findAll(function(a){ return !shapes.include(a) }); shapesToConsider = shapesToConsider.concat(attached); } childShapesToConsider = childShapesToConsider.concat(shape.getChildShapes(true)); if (considerConnections && !(shape instanceof ORYX.Core.Edge)){ //concat all incoming and outgoing shapes var connections = shape.getIncomingShapes().concat(shape.getOutgoingShapes()); connections.each(function(s) { //we don't want to delete sequence flows with //an existing 'conditionexpression' //console.log(s); if (s instanceof ORYX.Core.Edge && s.properties["oryx-conditionexpression"] && s.properties["oryx-conditionexpression"] != ""){ return; } shapesToConsider.push(s); }.bind(this)); } }.bind(this)); // All edges between considered child shapes should be considered // Look for these edges having incoming and outgoing in childShapesToConsider var edgesToConsider = this.facade.getCanvas().getChildEdges().select(function(edge){ // Ignore if already added if(shapesToConsider.include(edge)) return false; // Ignore if there are no docked shapes if(edge.getAllDockedShapes().size() === 0) return false; // True if all docked shapes are in considered child shapes return edge.getAllDockedShapes().all(function(shape){ // Remember: Edges can have other edges on outgoing, that is why edges must not be included in childShapesToConsider return shape instanceof ORYX.Core.Edge || childShapesToConsider.include(shape); }); }); shapesToConsider = shapesToConsider.concat(edgesToConsider); return shapesToConsider; }, _showErrorMessageBox: function(title, msg){ Ext.MessageBox.show({ title: title, msg: msg, buttons: Ext.MessageBox.OK, icon: Ext.MessageBox.ERROR }); }, showAsSVG : function() { var processJSON = ORYX.EDITOR.getSerializedJSON(); var formattedSvgDOM = DataManager.serialize(ORYX.EDITOR.getCanvas().getSVGRepresentation(true)); var processName = jsonPath(processJSON.evalJSON(), "$.properties.processn"); var processPackage = jsonPath(processJSON.evalJSON(), "$.properties.package"); var processVersion = jsonPath(processJSON.evalJSON(), "$.properties.version"); var fileName = ""; if(processPackage && processPackage != "") { fileName += processPackage; } if(processName && processName != "") { if(fileName != "") { fileName += "."; } fileName += processName; } if(processVersion && processVersion != "") { if(fileName != "") { fileName += "."; } fileName += "v" + processVersion; } if(fileName == "") { fileName = "processsvg"; } var method ="post"; var form = document.createElement("form"); form.setAttribute("name", "storetofileform"); form.setAttribute("method", method); form.setAttribute("action", ORYX.PATH + "filestore"); form.setAttribute("target", "_blank"); var fnameInput = document.createElement("input"); fnameInput.setAttribute("type", "hidden"); fnameInput.setAttribute("name", "fname"); fnameInput.setAttribute("value", fileName); form.appendChild(fnameInput); var fextInput = document.createElement("input"); fextInput.setAttribute("type", "hidden"); fextInput.setAttribute("name", "fext"); fextInput.setAttribute("value", "svg"); form.appendChild(fextInput); var fstoreInRepoInput = document.createElement("input"); fstoreInRepoInput.setAttribute("type", "hidden"); fstoreInRepoInput.setAttribute("name", "storeinrepo"); fstoreInRepoInput.setAttribute("value", "true"); form.appendChild(fstoreInRepoInput); var hfUUID = document.createElement("input"); hfUUID.setAttribute("type", "hidden"); hfUUID.setAttribute("name", "uuid"); hfUUID.setAttribute("value", ORYX.UUID); form.appendChild(hfUUID); var hfPROFILE = document.createElement("input"); hfPROFILE.setAttribute("type", "hidden"); hfPROFILE.setAttribute("name", "profile"); hfPROFILE.setAttribute("value", ORYX.PROFILE); form.appendChild(hfPROFILE); var processJSON = ORYX.EDITOR.getSerializedJSON(); var processId = jsonPath(processJSON.evalJSON(), "$.properties.id"); var hfPROCESSID = document.createElement("input"); hfPROCESSID.setAttribute("type", "hidden"); hfPROCESSID.setAttribute("name", "processid"); hfPROCESSID.setAttribute("value", processId); form.appendChild(hfPROCESSID); var fdataInput = document.createElement("input"); fdataInput.setAttribute("type", "hidden"); fdataInput.setAttribute("name", "data_encoded"); fdataInput.setAttribute("value", Base64.encode(formattedSvgDOM)); form.appendChild(fdataInput); document.body.appendChild(form); form.submit(); }, /** * Converts the process to pdf format. * */ showAsPDF : function() { var transformval = 'pdf'; var formattedSvgDOM = DataManager.serialize(ORYX.EDITOR.getCanvas().getSVGRepresentation(true, true)); var method ="post"; var form = document.createElement("form"); form.setAttribute("name", "transformerform"); form.setAttribute("method", method); form.setAttribute("action", ORYX.CONFIG.TRANSFORMER_URL()); form.setAttribute("target", "_blank"); var hfFSVG = document.createElement("input"); hfFSVG.setAttribute("type", "hidden"); hfFSVG.setAttribute("name", "fsvg"); hfFSVG.setAttribute("value", Base64.encode(formattedSvgDOM)); form.appendChild(hfFSVG); var hfUUID = document.createElement("input"); hfUUID.setAttribute("type", "hidden"); hfUUID.setAttribute("name", "uuid"); hfUUID.setAttribute("value", ORYX.UUID); form.appendChild(hfUUID); var hfPROFILE = document.createElement("input"); hfPROFILE.setAttribute("type", "hidden"); hfPROFILE.setAttribute("name", "profile"); hfPROFILE.setAttribute("value", ORYX.PROFILE); form.appendChild(hfPROFILE); var hfTRANSFORMTO = document.createElement("input"); hfTRANSFORMTO.setAttribute("type", "hidden"); hfTRANSFORMTO.setAttribute("name", "transformto"); hfTRANSFORMTO.setAttribute("value", transformval); form.appendChild(hfTRANSFORMTO); var processJSON = ORYX.EDITOR.getSerializedJSON(); var processId = jsonPath(processJSON.evalJSON(), "$.properties.id"); var hfPROCESSID = document.createElement("input"); hfPROCESSID.setAttribute("type", "hidden"); hfPROCESSID.setAttribute("name", "processid"); hfPROCESSID.setAttribute("value", processId); form.appendChild(hfPROCESSID); document.body.appendChild(form); form.submit(); }, /** * Displays the process SVG sources (formatted) */ showProcessSVG : function() { var formattedSvgDOM = DataManager.serialize(ORYX.EDITOR.getCanvas().getSVGRepresentation(true)); var cf = new Ext.form.TextArea({ id:"svgSourceTextArea", fieldLabel:ORYX.I18N.view.processSVGSource, value:formattedSvgDOM, autoScroll:true }); var win = new Ext.Window({ width:600, id:'processSVGSource', height:550, layout: 'fit', title:ORYX.I18N.view.processSVGSource, items: [cf], buttons:[{ text : ORYX.I18N.Save.close, handler:function(){ win.close(); win = null; cf = null; sourceEditor = null; }.bind(this) }] }); win.show(); this.foldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var sourceEditor = CodeMirror.fromTextArea(document.getElementById("svgSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.foldFunc }); }, showProcessERDF : function() { var processERDF = ORYX.EDITOR.getERDF(); var cf = new Ext.form.TextArea({ id:"erdfSourceTextArea", fieldLabel:ORYX.I18N.view.erdfSource, value:processERDF, autoScroll:true, height:'80%' }); var win = new Ext.Window({ width:600, id:'processERDFSource', height:550, layout: 'fit', title:ORYX.I18N.view.erdfSource, items: [cf], buttons:[{ text : ORYX.I18N.Save.close, handler:function(){ win.close(); win = null; cf = null; sourceEditor = null; }.bind(this) }] }); win.show(); this.foldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var sourceEditor = CodeMirror.fromTextArea(document.getElementById("erdfSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.foldFunc }); }, showProcessJSON : function() { var processJSON = ORYX.EDITOR.getSerializedJSON(); var cf = new Ext.form.TextArea({ id:"jsonSourceTextArea", fieldLabel:ORYX.I18N.view.jsonSource, value:processJSON, autoScroll:true }); var win = new Ext.Window({ width:600, id:'processJSONSource', height:550, layout: 'fit', title:ORYX.I18N.view.jsonSource, items: [cf], buttons:[{ text : ORYX.I18N.Save.close, handler:function(){ win.close(); win = null; cf = null; sourceEditor = null; }.bind(this) }] }); win.show(); this.foldFunc = CodeMirror.newFoldFunction(CodeMirror.braceRangeFinder); var sourceEditor = CodeMirror.fromTextArea(document.getElementById("jsonSourceTextArea"), { mode: "application/json", lineNumbers: true, lineWrapping: true, onGutterClick: this.foldFunc }); }, showProcessBPMN : function() { var processJSON = ORYX.EDITOR.getSerializedJSON(); Ext.Ajax.request({ url: ORYX.PATH + "uuidRepository", method: 'POST', success: function(request){ try{ var cf = new Ext.form.TextArea({ id:"bpmnSourceTextArea", fieldLabel:ORYX.I18N.view.bpmn2Source, value:request.responseText, autoScroll:true }); var win = new Ext.Window({ width:600, id:'processBPMNSource', height:550, layout: 'fit', title:ORYX.I18N.view.bpmn2Source, items: [cf], buttons : [{ text: ORYX.I18N.view.saveToFile, handler: function(){ var processJSON = ORYX.EDITOR.getSerializedJSON(); var processName = jsonPath(processJSON.evalJSON(), "$.properties.processn"); var processPackage = jsonPath(processJSON.evalJSON(), "$.properties.package"); var processVersion = jsonPath(processJSON.evalJSON(), "$.properties.version"); var fileName = ""; if(processPackage && processPackage != "") { fileName += processPackage; } if(processName && processName != "") { if(fileName != "") { fileName += "."; } fileName += processName; } if(processVersion && processVersion != "") { if(fileName != "") { fileName += "."; } fileName += "v" + processVersion; } if(fileName == "") { fileName = "processbpmn2"; } var toStoreValue = cf.getValue(); var method ="post"; var form = document.createElement("form"); form.setAttribute("name", "storetofileform"); form.setAttribute("method", method); form.setAttribute("action", ORYX.PATH + "filestore"); form.setAttribute("target", "_blank"); var fnameInput = document.createElement("input"); fnameInput.setAttribute("type", "hidden"); fnameInput.setAttribute("name", "fname"); fnameInput.setAttribute("value", fileName); form.appendChild(fnameInput); var fextInput = document.createElement("input"); fextInput.setAttribute("type", "hidden"); fextInput.setAttribute("name", "fext"); fextInput.setAttribute("value", "bpmn2"); form.appendChild(fextInput); var fdataInput = document.createElement("input"); fdataInput.setAttribute("type", "hidden"); fdataInput.setAttribute("name", "data"); fdataInput.setAttribute("value", toStoreValue); form.appendChild(fdataInput); document.body.appendChild(form); form.submit(); } },{ text : ORYX.I18N.Save.close, handler:function(){ win.close(); win = null; cf = null; sourceEditor = null; }.bind(this) }] }); win.show(); this.foldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var sourceEditor = CodeMirror.fromTextArea(document.getElementById("bpmnSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.foldFunc }); }catch(e){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+':' + e, title : '' }); } }.createDelegate(this), failure: function(){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+'.', title : '' }); }, params: { action: 'toXML', pp: ORYX.PREPROCESSING, profile: ORYX.PROFILE, data: processJSON } }); }, showProcessSources : function() { var processJSON = ORYX.EDITOR.getSerializedJSON(); var processERDF = ORYX.EDITOR.getERDF(); var formattedSvgDOM = DataManager.serialize(ORYX.EDITOR.getCanvas().getSVGRepresentation(true)); Ext.Ajax.request({ url: ORYX.PATH + "uuidRepository", method: 'POST', success: function(request){ try{ var bpmn2SourceArea = new Ext.form.TextArea({ id:"bpmnSourceTextArea", fieldLabel:"BPMN2", value:request.responseText, autoScroll:true }); var bpmn2SourceAreaPanel = new Ext.Panel({ title:"BPMN2", layout:'fit', border:false, items: [bpmn2SourceArea], style: 'padding-bottom:20px', listeners: { afterlayout: function(p) { this.bpmn2FoldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var bpmn2SourceEditor = CodeMirror.fromTextArea(document.getElementById("bpmnSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.bpmn2FoldFunc }); } } }); var jsonSourceArea = new Ext.form.TextArea({ id:"jsonSourceTextArea", fieldLabel:"JSON", value:processJSON, autoScroll:true }); var jsonSourceAreaPanel = new Ext.Panel({ title:"JSON", layout:'fit', border:false, items: [jsonSourceArea], style: 'padding-bottom:20px', listeners: { afterlayout: function(p) { this.jsonFoldFunc = CodeMirror.newFoldFunction(CodeMirror.braceRangeFinder); var jsonSourceEditor = CodeMirror.fromTextArea(document.getElementById("jsonSourceTextArea"), { mode: "application/json", lineNumbers: true, lineWrapping: true, onGutterClick: this.jsonFoldFunc }); } } }); var erdfSourceArea = new Ext.form.TextArea({ id:"erdfSourceTextArea", fieldLabel:"ERDF", value:processERDF, autoScroll:true }); var erdfSourceAreaPanel = new Ext.Panel({ title:"ERDF", layout:'fit', border:false, items: [erdfSourceArea], style: 'padding-bottom:20px', listeners: { afterlayout: function(p) { this.erdfFoldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var erdfSourceEditor = CodeMirror.fromTextArea(document.getElementById("erdfSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.erdfFoldFunc }); } } }); var svgSourceArea = new Ext.form.TextArea({ id:"svgSourceTextArea", fieldLabel:"SVG", value:formattedSvgDOM, autoScroll:true }); var svgSourceAreaPanel = new Ext.Panel({ title:"SVG", layout:'fit', border:false, items: [svgSourceArea], style: 'padding-bottom:10px', listeners: { afterlayout: function(p) { this.svgFoldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var svgSourceEditor = CodeMirror.fromTextArea(document.getElementById("svgSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.svgFoldFunc }); } } }); var sourcesPanel = new Ext.TabPanel({ activeTab: 0, border: false, width:'100%', height:'100%', tabPosition: 'top', layoutOnTabChange: true, deferredRender : false, defaults:{autoHeight: true, autoScroll: true}, items: [ bpmn2SourceAreaPanel, jsonSourceAreaPanel, svgSourceAreaPanel, erdfSourceAreaPanel ] }); var dlBPMN2Button = new Ext.Button({ text: ORYX.I18N.view.downloadBPMN2, handler: function(){ var processJSON = ORYX.EDITOR.getSerializedJSON(); var processName = jsonPath(processJSON.evalJSON(), "$.properties.processn"); var processPackage = jsonPath(processJSON.evalJSON(), "$.properties.package"); var processVersion = jsonPath(processJSON.evalJSON(), "$.properties.version"); var fileName = ""; if(processPackage && processPackage != "") { fileName += processPackage; } if(processName && processName != "") { if(fileName != "") { fileName += "."; } fileName += processName; } if(processVersion && processVersion != "") { if(fileName != "") { fileName += "."; } fileName += "v" + processVersion; } if(fileName == "") { fileName = "processbpmn2"; } var toStoreValue = request.responseText; var method ="post"; var form = document.createElement("form"); form.setAttribute("name", "storetofileform"); form.setAttribute("method", method); form.setAttribute("action", ORYX.PATH + "filestore"); form.setAttribute("target", "_blank"); var fnameInput = document.createElement("input"); fnameInput.setAttribute("type", "hidden"); fnameInput.setAttribute("name", "fname"); fnameInput.setAttribute("value", fileName); form.appendChild(fnameInput); var fextInput = document.createElement("input"); fextInput.setAttribute("type", "hidden"); fextInput.setAttribute("name", "fext"); fextInput.setAttribute("value", "bpmn2"); form.appendChild(fextInput); var fdataInput = document.createElement("input"); fdataInput.setAttribute("type", "hidden"); fdataInput.setAttribute("name", "data_encoded"); fdataInput.setAttribute("value", Base64.encode(toStoreValue)); form.appendChild(fdataInput); document.body.appendChild(form); form.submit(); } }); var dialogSize = ORYX.Utils.getDialogSize(550, 600); if(this.sourcewin != null && this.sourcewin !== undefined) { this.sourcewin.destroy(); } this.sourcewin = new Ext.Window({ id:'processSources', height:dialogSize.height, width:dialogSize.width, layout: 'fit', title: ORYX.I18N.view.processSources, items: [sourcesPanel], tbar: [ dlBPMN2Button ], listeners:{ hide: function(){ this.sourcewin.destroy(); }.bind(this) } }); this.sourcewin.show(); this.bpmn2FoldFunc = CodeMirror.newFoldFunction(CodeMirror.tagRangeFinder); var bpmn2SourceEditor = CodeMirror.fromTextArea(document.getElementById("bpmnSourceTextArea"), { mode: "application/xml", lineNumbers: true, lineWrapping: true, onGutterClick: this.bpmn2FoldFunc }); }catch(e){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+':' + e, title : '' }); } }.createDelegate(this), failure: function(){ ORYX.EDITOR._pluginFacade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.view.convertingToBPMN2Fail+'.', title : '' }); }, params: { action: 'toXML', pp: ORYX.PREPROCESSING, profile: ORYX.PROFILE, data: processJSON } }); }, /** * Converts the process to png format. * */ showAsPNG : function() { var transformval = 'png'; var formattedSvgDOM = DataManager.serialize(ORYX.EDITOR.getCanvas().getSVGRepresentation(true, true)); var method ="post"; var form = document.createElement("form"); form.setAttribute("name", "transformerform"); form.setAttribute("method", method); form.setAttribute("action", ORYX.CONFIG.TRANSFORMER_URL()); form.setAttribute("target", "_blank"); var hfFSVG = document.createElement("input"); hfFSVG.setAttribute("type", "hidden"); hfFSVG.setAttribute("name", "fsvg"); hfFSVG.setAttribute("value", Base64.encode(formattedSvgDOM)); form.appendChild(hfFSVG); var hfUUID = document.createElement("input"); hfUUID.setAttribute("type", "hidden"); hfUUID.setAttribute("name", "uuid"); hfUUID.setAttribute("value", ORYX.UUID); form.appendChild(hfUUID); var hfPROFILE = document.createElement("input"); hfPROFILE.setAttribute("type", "hidden"); hfPROFILE.setAttribute("name", "profile"); hfPROFILE.setAttribute("value", ORYX.PROFILE); form.appendChild(hfPROFILE); var hfTRANSFORMTO = document.createElement("input"); hfTRANSFORMTO.setAttribute("type", "hidden"); hfTRANSFORMTO.setAttribute("name", "transformto"); hfTRANSFORMTO.setAttribute("value", transformval); form.appendChild(hfTRANSFORMTO); var processJSON = ORYX.EDITOR.getSerializedJSON(); var processId = jsonPath(processJSON.evalJSON(), "$.properties.id"); var hfPROCESSID = document.createElement("input"); hfPROCESSID.setAttribute("type", "hidden"); hfPROCESSID.setAttribute("name", "processid"); hfPROCESSID.setAttribute("value", processId); form.appendChild(hfPROCESSID); document.body.appendChild(form); form.submit(); }, /** * It does the actual zooming. It changes the viewable size of the canvas * and all to its child elements. * * @param {Number} factor * the factor to adjust the zoom level */ zoom: function(factor) { // TODO: Zoomen auf allen Objekten im SVG-DOM this.zoomLevel *= factor; var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode; var canvas = this.facade.getCanvas(); var newWidth = canvas.bounds.width() * this.zoomLevel; var newHeight = canvas.bounds.height() * this.zoomLevel; /* Set new top offset */ var offsetTop = (canvas.node.parentNode.parentNode.parentNode.offsetHeight - newHeight) / 2.0; offsetTop = offsetTop > 20 ? offsetTop - 20 : 0; canvas.node.parentNode.parentNode.style.marginTop = offsetTop + "px"; offsetTop += 5; canvas.getHTMLContainer().style.top = offsetTop + "px"; /*readjust scrollbar*/ var newScrollTop= scrollNode.scrollTop - Math.round((canvas.getHTMLContainer().parentNode.getHeight()-newHeight) / 2)+this.diff; var newScrollLeft= scrollNode.scrollLeft - Math.round((canvas.getHTMLContainer().parentNode.getWidth()-newWidth) / 2)+this.diff; /* Set new Zoom-Level */ canvas.setSize({width: newWidth, height: newHeight}, true); /* Set Scale-Factor */ canvas.node.setAttributeNS(null, "transform", "scale(" +this.zoomLevel+ ")"); /* Refresh the Selection */ this.facade.updateSelection(); scrollNode.scrollTop=newScrollTop; scrollNode.scrollLeft=newScrollLeft; /* Update the zoom-level*/ canvas.zoomLevel = this.zoomLevel; }, /** * It calculates the zoom level to fit whole model into the visible area * of the canvas. Than the model gets zoomed and the position of the * scroll bars are adjusted. * */ zoomFitToModel: function() { /* Get the size of the visible area of the canvas */ var scrollNode = this.facade.getCanvas().getHTMLContainer().parentNode.parentNode; var visibleHeight = scrollNode.getHeight() - 30; var visibleWidth = scrollNode.getWidth() - 30; var nodes = this.facade.getCanvas().getChildShapes(); if(!nodes || nodes.length < 1) { return false; } /* Calculate size of canvas to fit the model */ var bounds = nodes[0].absoluteBounds().clone(); nodes.each(function(node) { bounds.include(node.absoluteBounds().clone()); }); /* Set new Zoom Level */ var scaleFactorWidth = visibleWidth / bounds.width(); var scaleFactorHeight = visibleHeight / bounds.height(); /* Choose the smaller zoom level to fit the whole model */ var zoomFactor = scaleFactorHeight < scaleFactorWidth ? scaleFactorHeight : scaleFactorWidth; /*Test if maximum zoom is reached*/ if(zoomFactor>this.maxFitToScreenLevel){zoomFactor=this.maxFitToScreenLevel} /* Do zooming */ this.setAFixZoomLevel(zoomFactor); /* Set scroll bar position */ scrollNode.scrollTop = Math.round(bounds.upperLeft().y * this.zoomLevel) - 5; scrollNode.scrollLeft = Math.round(bounds.upperLeft().x * this.zoomLevel) - 5; }, /** * It checks if the zoom level is less or equal to the level, which is required * to schow the whole canvas. * * @private */ _checkSize:function(){ var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode; var minForCanvas= Math.min((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight())); return 0.7 > minForCanvas; }, /** * It checks if the zoom level is included in the definined zoom * level range. * * @private */ _checkZoomLevelRange: function() { /*var canvasParent=this.facade.getCanvas().getHTMLContainer().parentNode; var maxForCanvas= Math.max((canvasParent.parentNode.getWidth()/canvasParent.getWidth()),(canvasParent.parentNode.getHeight()/canvasParent.getHeight())); if(this.zoomLevel > maxForCanvas) { this.zoomLevel = maxForCanvas; }*/ if(this.zoomLevel < this.minZoomLevel) { this.zoomLevel = this.minZoomLevel; } if(this.zoomLevel > this.maxZoomLevel) { this.zoomLevel = this.maxZoomLevel; } }, refreshCanvasForIE : function( options ) { if ( (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject) || (navigator.appVersion.indexOf("MSIE 10") !== -1) ) { // If there's no options.shape, set it with an invisid if(!options.shape) { var currentSelection = this.facade.getSelection(); if (currentSelection && currentSelection.length > 0 && currentSelection[0] instanceof ORYX.Core.Node) { var currentShape = currentSelection[0]; currentShape.properties["oryx-invisid"] = Math.random(); options.shape = currentShape; } } var currentJSON = ORYX.EDITOR.getSerializedJSON(); this.facade.setSelection(this.facade.getCanvas().getChildShapes(true)); var selection = this.facade.getSelection(); var clipboard = new ORYX.Plugins.Edit.ClipBoard(); clipboard.refresh(selection, this.getAllShapesToConsider(selection, true)); var command = new ORYX.Plugins.Edit.DeleteCommand(clipboard , this.facade); this.facade.executeCommands([command]); this.facade.importJSON(currentJSON); var foundShape = false; foundShape = this.findSelectedShape(options.shape, options); if(foundShape) { this.facade.setSelection([foundShape]); } else { this.facade.setSelection([]); } this.reapplyLockedNodesProperties(); } }, showDocElementInModel : function( options ) { this.shapeFromDoc = undefined; ORYX.EDITOR._canvas.getChildren().each((function(child) { this.findShapeWithId(child, options.eleid); }).bind(this)); if(this.shapeFromDoc !== undefined) { // set selection this.facade.setSelection([this.shapeFromDoc]); this.facade.getCanvas().update(); this.facade.updateSelection(); } }, findShapeWithId : function(shape, nodeid) { if(shape instanceof ORYX.Core.Node || shape instanceof ORYX.Core.Edge) { if(shape.resourceId == nodeid) { this.shapeFromDoc = shape; } } if(shape.getChildren().size() > 0) { for (var i = 0; i < shape.getChildren().size(); i++) { if(shape.getChildren()[i] instanceof ORYX.Core.Node || shape.getChildren()[i] instanceof ORYX.Core.Edge) { this.findShapeWithId(shape.getChildren()[i], nodeid); } } } }, findSelectedShape: function(shape, options) { var foundShape = false; if(options && options.shape) { ORYX.EDITOR._canvas.getChildren().each((function(child) { if(child instanceof ORYX.Core.Node || child instanceof ORYX.Core.Edge) { if(options.shape.properties["oryx-invisid"] == child.properties["oryx-invisid"]) { foundShape = child; } } // BZ1203382: This next part should work, but results in an 'Out of stack space' error when you add nodes in sub-process or swimlane // if(child.getChildren().size() > 0) { // for (var i = 0; i < child.getChildren().size(); i++) { // if(child.getChildren()[i] instanceof ORYX.Core.Node || child.getChildren()[i] instanceof ORYX.Core.Edge) { // this.findSelectedShape(child.getChildren()[i], options); // } // } // } }).bind(this)); } return foundShape; }, reapplyLockedNodesProperties: function() { ORYX.EDITOR._canvas.getChildren().each((function(child) { if(child instanceof ORYX.Core.Node || child instanceof ORYX.Core.Edge) { if(child.properties["oryx-isselectable"] !== undefined && child.properties["oryx-isselectable"] == "false") { child.setSelectable(false); child.setMovable(false); } } }).bind(this)); } }; ORYX.Plugins.View = Clazz.extend(ORYX.Plugins.View);




© 2015 - 2025 Weber Informatics LLC | Privacy Policy